我在每一份 commerce 诊断里都会找到的 10 个 JSON-LD bug(以及它们要您多少钱)
在 4 万 5 千页以上的 PDP 目录里悄悄失败的字段级 JSON-LD bug。每一个都映射到它干掉的富媒体结果、把您从中踢出的 AI 引擎,以及我为客户建模的美元成本。
今年我审过的 commerce 站点足够多,看到了同样的 10 个 JSON-LD bug 一再出现。Schema 校验器全绿。Rich Results Test 说有资格。然而 Product 富媒体结果从来没在 Google Shopping 出现,本应是品牌赢的查询里 ChatGPT 引用的是对手,团队也说不清哪个修复才挪动了指针。
这是那份目录。每一个 bug 都包含失效模式、它破坏的引擎,以及在一个 4.5 万页 PDP、客单价 $80、基线转化率 2.1% 的目录上我推算的大致营收带。数字是示意性的,不是承诺。重点是数学,不是数字。
1. Organization @id 每页都漂
最常见的 bug。CMS 在每个模板上都发出一个 Organization JSON-LD 块,但 @id 每次都设成页面 URL。校验器通过,因为每个块内部一致。AI 引擎看到的是五万个名字相同的不同组织。品牌实体合并失败。引用崩塌。
修法:把 Organization 钉在一个稳定的单一 @id 上,例如 https://yoursite.com/#organization。所有地方都引用它。
营收带:高。在解决之前,五个引擎全线的 AI 引用份额下降 30 到 60%。(每个引擎对 @id 的处理差异参见 AI 答案引擎到底是怎么解析您的 @graph。)
2. Product 实体用嵌套对象而不是 @id 引用品牌
{
"@type": "Product",
"name": "Acme Widget",
"brand": { "@type": "Brand", "name": "Acme" }
}
看起来没问题。也通过校验。ChatGPT 的解析器把每个 PDP 上的每个 Product 当作属于一个碰巧同名的不同 Brand 实体。在 4.5 万的目录上您会得到 4.5 万个 Brand 实体。知识图谱碎掉。
修法:在 @graph 里把 Brand 提到顶层实体,带稳定 @id,然后从每个 Product 引用它:
{ "@type": "Brand", "@id": "https://yoursite.com/#brand", "name": "Acme" }
{ "@type": "Product", "name": "Acme Widget", "brand": { "@id": "https://yoursite.com/#brand" } }
营收带:中高。影响您本应是显然答案的长尾「品牌+商品」查询。
3. 缺少 offers.priceValidUntil
Google 会让过期的 Offer 富媒体结果失效。没有 priceValidUntil,即使价格从未变过,90 天后富媒体结果也会从 Shopping 里悄悄消失。大多数团队以为 Google 还在渲染。
修法:发出 priceValidUntil 为一年后的日期,在每次页面渲染时刷新。实施便宜,效果立竿见影。
营收带:中。在富媒体结果是差异点的品类查询上,纯粹的点击率损失。
4. AggregateRating 的 reviewCount 是 0 或 1
Google 要求至少 3 条评论才会渲染星级。低于此不仅是被压制,而且是会影响页面更广泛信任信号的富媒体结果资格违规。带 reviewCount: 1 的 AggregateRating 的站点,明确比什么都不发的站点更糟。
修法:在服务端检查 reviewCount >= 3 之后再输出 AggregateRating。
营收带:单条低,合计高。带 1-2 条评论的 PDP 长尾在目录上悄悄失去富媒体结果。
5. 图片 URL 404 或者重定向
Google 会去抓 JSON-LD 的图片。如果它 404、重定向或返回非图片内容,整个 Product 富媒体结果会被压制。常见原因:Schema 生成器从一个被废弃的 CDN 路径取图、图片被删但 JSON-LD 没重新生成。
修法:在 Schema 发出时校验图片 URL。RankLabs 把这个标为模板级硬错误而不是页面级,这样报告指向生成器函数,而不是 12,000 个独立 PDP。
营收带:在被影响的模板上很高。一旦命中,经常击中目录的 20 到 40%。
6. SKU 与 gtin13 在变体之间缺失或重复
Google 的 Merchant Center 用 gtin13 去重。如果您的变体不小心共享了 GTIN,只有一个变体被索引。如果 GTIN 完全缺失,AI 购物引擎(ChatGPT 插件、Perplexity Shopping)无法把您的库存与价格比较结果匹配上。
修法:在数据库层面强制 GTIN 唯一性,只在设置时发出。sku 作为变体级稳定识别符发出。
营收带:在多变体目录上很高。服装、美妆、家居受打击最严重。
7. BreadcrumbList 项目引用不一致的 URL
一半面包屑用 https://yoursite.com/category,另一半用 https://yoursite.com/category/。Google 的面包屑合并失败。即使一切都通过校验,搜索结果里那条蓝色的导航面包屑也消失。
修法:只发出规范 URL。尾斜杠政策在 @id 构造器上强制。
营收带:单条低,但面包屑跨整棵品类树消失,会累积成可衡量的 CTR 损失。
8. JSON-LD 在 hydration 之后由客户端注入
Schema 只存在于渲染后的 DOM,不在初始 HTML 响应里。大多数 AI 引擎抓取器(ChatGPT 的、ClaudeBot、PerplexityBot)不执行 JavaScript。它们看不到任何 Schema。校验器跑在渲染后的 DOM,所以团队以为没问题。
修法:在初始 HTML 响应里以服务端方式发出 JSON-LD。标签管理器模板和仅 React 的 Schema 组件是常见嫌疑犯。
营收带:灾难性。在修复之前 AI 引擎引用您的页面是零。每三次合作里大约一次会找到这个。一份架构良好的 Schema 在没有监控的情况下半衰期是 60 到 90 天,这就是 CI 校验门不可商量的原因。(Schema 会衰减。这是我测出来的半衰期。)
9. Review 实体没有 itemReviewed 的 @id 引用
每个 Review 块的 itemReviewed 设成了嵌套的 Product 对象,而不是回指页面 graph 里规范 Product 实体的 @id 引用。结果:评论信号没有按 Google 期望的方式聚合到 Product 上,AggregateRating 是从错误的样本上构建的。
修法:每个 Review 的 itemReviewed 是 { "@id": "/products/123#product" },绝不嵌套对象。
营收带:中。影响有强评论项目的 PDP 上的富媒体结果资格。
10. 品类页 ItemList 没有 position
品类页发出 ItemList,每个 ListItem 上没有 position 编号。Google 没办法构造轮播富媒体结果。每条修复就是一行,但因为大多数 ORM 支撑的 Schema 生成器都忘了设置 position,这个 bug 到处都是。
修法:把项目用 1-索引的 position 枚举出来。
营收带:中。ItemList 轮播越来越多地是 Google AI Overviews 浮出品类级答案的方式。
这份清单怎么用
如果您运营一个 commerce 站点,把一个 Schema 抓取器对准您的前十大模板,逐一检查这十个 bug。大多数团队至少会发现四个。每个 bug 的修复都很小。复合成本不小。
如果您想让我替您做,Audit 就是这个合作。RankLabs 跑这十项检查,加上跨 Schema 图谱、面包屑链、AI 引擎仿真、可抓取性层的另外四十项,然后我建模逐项修复的营收影响,交付 90 天优先级路线图。Sprint 是带着 CI 校验门执行这份路线图、让修复维持上线状态的那一阶段。