报错是这么冒出来的。Cloudflare 开了 Rocket Loader,文章页的 application/ld+json 被抓成 type=text/rocketscript,富媒体测试工具提示未检测到结构化数据,清缓存、关插件都试过。
中间走过弯路,把「插件把 JSON-LD 输出在页脚,和合并脚本一起被延迟」当成主因,改完现象没变。
这类报错背后常见的原因有几处,逐个排除就行。Rocket Loader 会重写页面里所有 script 的 type 属性。另一种情况是JSON-LD 没加 data-cfasync=false,被当成普通脚本处理。
不容易想到的是,CSP 的 nonce 与 Rocket Loader 注入冲突,脚本直接不执行。
第一件事是抓页面确认 script 的 type 被改成什么
curl -s https://www.example.com/post-1/ | Select-String -Pattern "ld\+json|rocketscript"
再往下输出 JSON-LD 时给 script 标签加上 data-cfasync 属性
接着清理缓存后再抓一次页面源码
curl -s "https://www.example.com/post-1/?cb=1" | Select-String -Pattern "application/ld\+json"
剩下的就是用富媒体测试工具复验
https://search.google.com/test/rich-results?url=https://www.example.com/post-1/
怎么算真的好了,看的是同一批现象。页面源码里 ld+json 的 type 恢复为 application/ld+json,富媒体测试能识别 Article,GSC 的增强功能报告不再报缺失。
容易忽略的是,Rocket Loader 对结构化数据是纯副作用,最省事的做法是给 JSON-LD 单独加豁免属性,而不是整站关掉加速。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
