我在每一份 commerce 诊断里都会找到的 10 个 JSON-LD bug(以及它们要您多少钱)

在 4 万 5 千页以上的 PDP 目录里悄悄失败的字段级 JSON-LD bug。每一个都映射到它干掉的富媒体结果、把您从中踢出的 AI 引擎,以及我为客户建模的美元成本。

2026-05-02

今年我审过的 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 校验门执行这份路线图、让修复维持上线状态的那一阶段。

05contact

Stop pouring budget into a broken foundation.

If your SEO retainer hasn’t compounded, your AI citations have stalled, or your last technical audit ended in a deck nobody read, that’s not a content problem. It’s an engineering problem. The same engineer who diagnoses ships the fix.

Book a 30-min call30-min call · no deck · engineer to engineer
or write me directly
每一条消息我都会读。24 小时内回复。// 正当利益 (GDPR Art. 6(1)(f)) —— 您主动发起了联络。 隐私政策