为了不影响页面渲染,把 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 里就好。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
