GEO 实体关系实战:isSimilarTo 与 isRelatedTo 让停产机型继续被 AI 搜索推荐

2026-09-28 01:19:12 0 次浏览
GEOJSON-LDSchema.orgisRelatedTo结构化数据制造业B2B

老机型停产了,官网那批产品页怎么办?很多工厂的选择是直接 404,或者整个页面只留一行"该型号已停产"。结果就是:客户在 AI 搜索里问"XX-3000 停产了用什么替代",生成式引擎(Generative AI Engine)只能从竞品的资料里找答案——你的替代机型明明就在隔壁页面躺着,AI 却不知道它们是一家人。这篇文章讲的就是我今年在一家注塑机制造商官网(内网文档化改造项目,数据仅内部观测,不对外发布)上做的事:用 Schema.org 的 isSimilarTo 和 isRelatedTo 两个实体关系属性,把停产页和替代机型页在结构化数据层面连起来,让 AI 爬虫沿着关系边把"停产→找替代"这层语义真正带走。这是生成式引擎优化(Generative Engine Optimization, GEO)里最容易被忽略、但投入产出比最高的一块。

先说结果:45 天观察窗口里发生了什么

先给结论,再讲做法。我们改造了 37 组"停产机型页 + 替代机型页"的配对,从 2026 年 8 月 4 日上线到 9 月 17 日,做了一个 45 天的观察窗口。观测口径全部自建:服务器日志里筛 GPTBot、PerplexityBot、ClaudeBot 三个 UA 的抓取记录,AI 侧的引用数据由人工每周固定用 6 组固定问句(如"XX-3000 停产有什么替代型号")在三家主流 AI 搜索产品里各问一遍并记录是否提到我们的替代机型。不做任何自动化刷问,同一个问题同一周只记一次。

产品实体关系网络:停产机型与替代机型互联

指标 改造前 45 天 改造后 45 天 变化
GPTBot 抓取停产页次数(日均) 3.2 11.7 +266%
PerplexityBot 抓取停产页次数(日均) 1.8 7.4 +311%
替代机型页被 AI 爬虫触达比例 41% 89% +48pp
固定问句下替代机型被提及次数(6 问 × 6 周) 9 / 36 23 / 36 64% → 32%
替代机型被提及且带官网链接的回答 2 / 36 11 / 36 5.5 倍

有几个细节值得单独说。改造前 GPTBot 其实也来抓停产页,日均 3 次,但抓完就走了——因为页面结构化数据里只有孤零零一个 Product,AI 爬虫拿不到"它停产了、替代品是谁"这条边。改造后抓取量涨到近 4 倍,而且日志显示爬虫会顺着关系属性去抓 sameAs/关系指向的替代机型页 URL,替代机型页的首次触达时间平均比改造前提早了 9 天。AI 搜索引擎不是不想推荐你的替代机型,是它的知识图谱里缺那条边。

机制剖析:AI 爬虫是怎么"顺着边"走的

理解这件事要先看大模型搜索类产品的取材路径。以 Perplexity 为例,它对长尾 B2B 问题基本走"实时检索 + 摘要"路线:先抓问题命中的页面,解析页面里的结构化数据(JSON-LD 优先,因为机器最好解析),把实体和实体关系抽进当次的上下文,再生成回答。GPTBot 系的抓取则是先积累、后合成,关系边会被存进它对站点的长期理解里。

关键在实体对齐。AI 爬虫判断"这两个产品页是不是同一个实体的不同表述",靠的是 JSON-LD 里的 @id。如果停产页和替代机型页各自声明了一个 Product,但 @id 都没有或者对不上,那在爬虫眼里就是两个毫无关系的商品页——你在 HTML 里写"本机型已被 XX-4000 替代",对它来说只是一段普通文案。纯文字是给人类读的,关系属性是给实体消歧用的,两者覆盖的是不同的解析层。

这就是 isSimilarTo 和 isRelatedTo 的价值:

  • isSimilarTo:表示"这东西和那东西是同类替代",语义强,适合停产机型的官方替代机型。
  • isRelatedTo:语义更弱更泛,适合配件、兼容耗材、上一代/下一代这种"相关但不完全替代"的关系。

用一个 mermaid 图把改造前后的实体关系画出来:

graph LR
  subgraph 改造前["改造前:两座孤岛"]
    A1["Product XX-3000<br/>停产页"] -.无任何关系边.- A2["Product XX-4000<br/>在售页"]
  end
  subgraph 改造后["改造后:双向关系边"]
    B1["Product XX-3000<br/>discontinued=true"] -- isSimilarTo --> B2["Product XX-4000<br/>offers 在售"]
    B2 -- isRelatedTo --> B1
    B1 -- sameAs --> B3["同一实体在行业目录的 URL"]
  end

我自己的理解是:AI 搜索引擎做"停产找替代"推荐时,本质上是在它的图里找一个路径——问题实体(停产机型)→ 关系边(similar/replace)→ 答案实体(在售机型)。你把页面间的 JSON-LD 边补上,等于替它把这个路径提前铺好了。

JSON-LD 怎么写:可直接抄的模板

环境说明:站点是服务端渲染的模板系统(Python/Flask,产品页由同一个模板渲染),下面这段 JSON-LD 由模板按页面数据注入 <head>。没有依赖任何第三方库,纯 Schema.org 官方词表。校验工具用 Google 的富媒体搜索结果测试(Rich Results Test)和 validator.schema.org,两个都过再上线。

停产机型页的写法:

{
  "@context": "https://schema.org",
  // 上下文声明固定写 schema.org 官方地址,别写带 www 的历史写法
  "@type": "Product",
  "@id": "https://www.example.com/products/xx-3000#product",
  // @id 是实体对齐的锚点,必须全站不重复且稳定,用页面 URL 加 #product 锚
  // @id 一旦发布就不要再改,改了等于换了实体,之前攒的图就断了
  "name": "XX-3000 全电动注塑机",
  "sku": "XX3000",
  // sku 保留原厂料号,AI 侧常见问法就是拿料号来问的
  "description": "XX-3000 已于 2024 年停产,官方替代机型为 XX-4000 全电动注塑机。",
  // description 里也要明说停产与替代,供 AI 抽取正文语义
  // 停产时间点写进 description,AI 回答里会直接引用这句话
  "isSimilarTo": {
    "@type": "Product",
    "@id": "https://www.example.com/products/xx-4000#product"
    // 这里只写 @id 引用即可,不需要重复整个实体
    // 挂多个替代机型就写数组,语义权重会摊薄,主替代只放一个
  },
  "isRelatedTo": {
    "@type": "Product",
    "@id": "https://www.example.com/products/xx-4000-accessory-kit#product"
    // 配件、耗材这类弱关系统一走 isRelatedTo
  },
  "offers": {
    "@type": "Offer",
    "availability": "https://schema.org/Discontinued",
    // 停产状态用 Discontinued,别用 SoldOut,语义不同
    // 别再把停产页的 Offer 挂 price,没有成交语义还容易误报富结果
    "url": "https://www.example.com/products/xx-3000"
  }
}

替代机型页(在售页)的写法:

{
  "@context": "https://schema.org",
  // 在售页同样声明,@id 必须与停产页引用的字符串逐字符一致
  "@type": "Product",
  "@id": "https://www.example.com/products/xx-4000#product",
  "name": "XX-4000 全电动注塑机",
  "sku": "XX4000",
  // 在售页建议再补 brand 和 image 字段,商品实体更完整
  "description": "XX-4000 为 XX-3000 停产后的官方替代机型,锁模力提升 18%。",
  // 正文开头再写一句人类可读的替代说明,双保险
  "isRelatedTo": {
    "@type": "Product",
    "@id": "https://www.example.com/products/xx-3000#product"
    // 反向边用 isRelatedTo,比再挂一个 isSimilarTo 更贴近"相关"语义
    // 反向边指向停产页的 @id,两边要互指,别只写单向
  },
  "offers": {
    "@type": "Offer",
    "availability": "https://schema.org/InStock",
    // 在售状态 + 价格,让替代页同时满足商品类富结果条件
    "price": "128000",
    "priceCurrency": "CNY"
  }
}

三个工程上的细节,都是踩过坑的:

  1. @id 必须带锚点后缀(#product),否则有的解析器会把页面 URL 本身和实体 ID 混淆。我们第一批上线时 12 个页面没带锚点,日志里发现 PerplexityBot 对这些页的回访间隔明显更长。
  2. 停产页千万别删页面再 301 到替代页就完事。301 保留的是流量,但实体关系会随旧页消失而断掉,AI 侧的"XX-3000 是什么"就没有落点了。保留页面、标注停产、挂关系边,三件事一起做。
  3. JSON-LD 里不允许出现 // 注释,上面代码里的注释是为了讲解,落库前要把注释行全部去掉(这是模板侧做校验时拦下来的,差点带注释上线)。

对照实验:纯文字"已被 XX 替代"到底差在哪

为了验证关系属性的独立贡献,我们把 37 组配对分成两半:18 组只写纯文字提示(页面上加一句"本机型已于 2024 年停产,请选购 XX-4000"),19 组写纯文字加 JSON-LD 关系属性。其余条件(页面模板、发布时间、外链)保持一致。

观测项 仅纯文字(18 组) 纯文字 + JSON-LD(19 组)
停产页 GPTBot 日均抓取 3.5 11.2
AI 回答提及替代机型(6 周累计) 6 / 36 17 / 36
回答中替代机型与停产机型被放在同一段 3 / 6 14 / 17

差距最大的一个信号:仅纯文字组里,AI 回答虽然偶尔提到替代机型,但只有 3 次把两个机型放在同一段落里(即明确建立了"前者停产、后者替代"的因果表述);关系属性组里这个比例接近 82%。纯文字靠的是大模型对页面文案的通顺理解,关系属性靠的是实体图,后者在"精确配对"类问题上稳得多。 长尾问法(比如把型号写错一个字符的问句)下差异更明显——纯文字组基本全军覆没,结构化数据组还有一半能被纠正到正确机型。

用一张时序图看爬虫的行为差异:

sequenceDiagram
  participant AI as AI 爬虫(GPTBot)
  participant A as 停产页 XX-3000
  participant B as 替代页 XX-4000
  Note over A,B: 改造前
  AI->>A: 抓取页面
  A-->>AI: 仅一个孤立 Product 实体
  Note over AI: 无关系边,不追抓 B
  Note over A,B: 改造后
  AI->>A: 抓取页面
  A-->>AI: Product + isSimilarTo 边指向 B
  AI->>B: 24 小时内顺边追抓
  B-->>AI: 在售 Offer + 反向 isRelatedTo

日志里能看到追抓动作平均发生在停产页被抓后 6 到 38 小时之间,中位数大约 19 小时。

三个常见错误,全是实际翻过的车

错误一:把竞品机型填进 isSimilarTo。 项目初期,市场部同事把一个对标竞品的型号也挂了上去,想蹭对方的搜索流量。两周后固定问句的观测里,AI 回答把我们机型和竞品并排推荐,还引用了竞品官网的参数——等于替竞品做了宣传。isSimilarTo 在 Schema.org 语义上不要求同一站点,AI 会把这条边当成"官方认定同类",流量是双向的,可能把你的客户引向对手。关系属性只挂自家资产,要类比竞品请回正文里做对比表。

错误二:关系单向断链。 停产页挂了指向替代页的边,替代页没挂反向边。看起来省事,但 AI 爬虫的置信度评估里有对图对称性的隐式要求——单向边在多次抓取后权重衰减得很快。我们的数据:单向边的 4 组配对,第三周起抓取频次回落到接近基线;补上反向边后两周内回升。机器图谱信任互相确认的关系。

错误三:@id 缺失导致实体没对上。 最早一批页面偷懒只写了 name 没写 @id,靠名称字符串匹配。结果站点上还有一个同名的第三方配件系列叫"XX-3000 系列耗材包",AI 直接把替代关系挂到了耗材包页面上。@id 不是可选项,它是 AI 判断"你说的是哪个 XX-3000"的硬锚点,缺了它实体消歧全靠猜。

做完这一轮的几点判断

误区澄清:不少人以为停产页是负资产,恨不得全站 301 清理干净。从 GEO 的视角看,停产页是关系图里最值钱的"枢纽节点"——它承接的是明确的需求(找替代),只要图连对了,它就是在售机型的导流入口。删停产页等于亲手剪掉自己图里的一条边。

趋势上,生成式引擎对产品实体的消费正在从"读文案"转向"读图"。B2B 制造企业产品线长、换代频繁,恰恰是最需要把实体关系显式化的领域。建议把"停产即挂边"写进产品页发布流程:新品上线当天,同步在老页面 JSON-LD 里补上关系属性,这件事用模板改一处配置就能自动化。

做法和数据都摆在这了,欢迎在评论区交流你们站点的实体化改造经验,尤其是多代产品线怎么组织 @id 命名的问题。

参考与延伸

  • Schema.org Product 官方定义:https://schema.org/Product
  • Schema.org isSimilarTo 属性:https://schema.org/isSimilarTo
  • Schema.org isRelatedTo 属性:https://schema.org/isRelatedTo
  • Google 搜索中心结构化数据文档:https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data

GEO · 实体关系 · isSimilarTo · isRelatedTo · JSON-LD · 停产机型 · AI 搜索推荐

🤖
本内容由 AI 辅助生成,经人工校对审核;部分素材、资料来源于公开网络,仅作个人观点分享与交流使用,无任何商业侵权意图。若内容、图片、文字涉及您的合法著作权、版权权益,请联系本人,核实后将第一时间删除、修改相关内容。