先看现象。批量给老文章补结构化数据时脚本把类型写成了小写 article,测试工具提示未找到支持的格式,页面源码里明明有 JSON-LD。

真正麻烦的地方在于,几个原因的现象几乎一样。Schema.org 的类型名区分大小写,小写形式不在词表内。少数情况下是生成脚本用了 str.lower() 统一处理,把类型名一起改掉了。

少数情况下是测试工具只对已知类型做解析,未知类型会静默跳过。

不容易想到的是,同一页面还有另一段类型正确的标记,冲突后整页被判无效。

从页面里抽出所有 @type 值核对

curl -s https://www.example.com/post/1 | grep -o '"@type"[^,]*' | sort | uniq -c

然后在生成脚本里固定类型白名单

types = {'Article', 'BreadcrumbList', 'FAQPage'}

修正后重跑一次并抽出 JSON 校验

python fix_schema.py --dry-run && curl -s https://www.example.com/post/1 | python -m json.tool > /dev/null

恢复的判定其实很直接。类型名改回首字母大写后,报告当天就能识别出 Article,有效项数量恢复到此前的水平。

补一句。这类错误多半来自批量脚本,改完记得全量扫一遍 @type 取值,避免只修了抽样看到的那几篇。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189