为了复用作者信息,文章页的 author 写成了 {"@id": "/author/7"},作者实体放在另一个页面,测试工具报作者信息缺失。

一开始怀疑是「@id 用了相对路径,解析器拼出来的地址和实际不一致」,查了一圈,方向不对。

把日志和配置对完,能解释这个现象的基本就这几处。JSON-LD 是按页解析的,跨页面的 @id 引用不会被自动拼接。少数情况下是作者页没有单独输出 Person 实体,引用目标本身就是空的。

另外,同一页里既写 @id 又写 name,解析器优先选了空的那个。

动手时先抽出 author 节点查看实际结构

curl -s https://www.example.com/post/1 | grep -o '"author".\{0,160\}'

接着在文章页直接内联作者信息

$author = array('@type' => 'Person', 'name' => $name, 'url' => $url);

给作者页补上 Person 实体

curl -s https://www.example.com/author/7 | grep -c 'Person'

别只看报错消失,验证要多做一步。作者信息改成页面内内联后,Article 的校验一次通过,作者名也开始在搜索结果里出现。

结构化数据尽量自包含,靠 @id 跨页面引用在单一 URL 的解析场景里几乎一定丢字段。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189