GEO 实体关系实战:isSimilarTo 与 isRelatedTo 让停产机型继续被 AI 搜索推荐
老机型停产了,官网那批产品页怎么办?很多工厂的选择是直接 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"
}
}
三个工程上的细节,都是踩过坑的:
@id必须带锚点后缀(#product),否则有的解析器会把页面 URL 本身和实体 ID 混淆。我们第一批上线时 12 个页面没带锚点,日志里发现 PerplexityBot 对这些页的回访间隔明显更长。- 停产页千万别删页面再 301 到替代页就完事。301 保留的是流量,但实体关系会随旧页消失而断掉,AI 侧的"XX-3000 是什么"就没有落点了。保留页面、标注停产、挂关系边,三件事一起做。
- 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 搜索推荐