为了不影响页面渲染,把 JSON-LD 放进了 noscript,浏览器里查看源码能看到,富媒体测试却提示页面上没有任何结构化数据。

真正麻烦的地方在于,几个原因的现象几乎一样。部分解析器只读取 body 内直接存在的 script 标签;noscript 内的内容在启用 JS 的环境里被忽略;模板把 noscript 输出到了 head 之外,位置也不对;标签被 CDN 的 HTML 压缩规则改写过。

先确认 script 的父节点

curl -s https://www.example.com/a/1.html | grep -B2 -A2 'application/ld+json'

随后看渲染后的 DOM 里是否还有这段

curl -s https://www.example.com/a/1.html | grep -c 'noscript'

再往下把 JSON-LD 移回 body 末尾

<script type="application/ld+json">{...}</script>

末了关闭压缩后复测一次

curl -s -H 'Accept-Encoding: identity' https://www.example.com/a/1.html | grep -c 'ld+json'

这类问题以前遇到过,但这次的触发条件和上次不一样。

这类改动我都写进变更记录,过两周再出问题时能对上号。

别只看报错消失,验证要多做一步。测试工具能抓取到结构化数据,富媒体状态从无数据变为有效。

这里还有个坑。noscript 是给关闭 JS 的用户看的,不是放元数据的容器,JSON-LD 直接写在 body 里就好。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189