生成式引擎优化(GEO)的一个常见事故是:活动页过期下线后,模型仍在引用旧内容。Stripe 的公开文档就发生过类似问题——关键事实只在 PDF 里,HTML 页面没有同步更新,导致生成式引擎抓不到正确信息。
事实原来藏在哪
Stripe 的开发者文档曾经把部分费率说明和活动条款放在 PDF 下载链接里。HTML 页面只写“点击下载查看详情”,正文没有实质内容。当活动结束后,运营团队删除了 PDF,但 HTML 页面没有更新,甚至因为 CMS 缓存原因,旧的活动页仍可访问。
生成式引擎在回答“Stripe 当前费率是多少”这类问题时,会优先抓取 HTML 文本。如果 HTML 里没有数字,模型就会去找其他来源。有些来源是过期的缓存,有些是第三方博客的旧截图。于是,模型给出的答案可能和 Stripe 官网当前政策不一致。
这类问题的根源在于:关键事实没有放在 HTML 的正文里,而是放在 PDF 附件中。生成式引擎的爬虫虽然能下载 PDF,但解析成本高,很多模型在训练或检索时直接忽略 PDF 内容。尤其是当 PDF 需要点击才能获取时,爬虫往往不会模拟点击。
Stripe 的文档团队后来发现,Google 搜索和 ChatGPT 的回答里,关于 Stripe 费率的答案经常引用一个早已停用的活动页面。那个页面的 HTML 里有一个旧费率表格,而新费率只存在于一个 PDF 链接里。模型无法把 PDF 里的数字和页面标题关联起来,于是继续使用旧表格。
迁到 HTML 之后
Stripe 的解决方案是把所有关键事实从 PDF 迁移到 HTML 正文。费率表用 HTML 表格呈现,活动条款用可折叠的 HTML 区块展示,不再要求用户下载 PDF。同时,过期的活动页不再直接删除,而是改为跳转到新的政策页,并保留 301 重定向。
迁移之后,生成式引擎开始引用新的 HTML 内容。Stripe 的文档团队观察到,ChatGPT 和 Perplexity 在回答关于 Stripe 费率的问题时,开始引用新的 HTML 页面,而不是旧的 PDF 链接。他们还在 HTML 里添加了 schema.org 的 Dataset 和 Table 结构化数据,帮助模型理解表格内容。
但迁移并不是一步到位的。有些旧的活动页因为 SEO 权重高,团队不敢直接删除。他们采取的策略是:在新 HTML 页面上添加一个明显的“本页信息已更新”的标注,同时用 canonical 标签指向最新的政策页。这样,生成式引擎和传统搜索引擎都会优先索引新页面。
另一个关键动作是:在 HTML 里嵌入版本号。Stripe 的文档页脚会显示“本文档适用于 2024 年 1 月 1 日之后创建账户的用户”。生成式引擎在抓取时,会把版本号当作时间信号,从而避免引用过期的活动页。
图片文字的问题
除了 PDF,图片文字也是生成式引擎的盲区。Stripe 的一些活动页曾经用图片展示费率表,因为设计上更好看。但模型无法读取图片里的文字,除非图片有替代文本(alt text)或者 OCR 识别。Stripe 的团队后来把所有图片文字都改成了 HTML 文本,或者提供了完整的 alt 文本描述。
一个典型例子是,Stripe 的“支付手续费计算器”页面曾经用一张图片展示不同支付方式的费率。当用户问“Stripe 的信用卡费率是多少”时,生成式引擎无法从图片中提取数字,只能回答“请参考 Stripe 官网”。而竞争对手的 HTML 表格则被模型引用,导致 Stripe 在答案中缺席。
解决方法是:把图片换成 HTML 表格,并为每个单元格添加 aria-label 或 data-label 属性,方便屏幕阅读器和爬虫理解。同时,Stripe 在页面顶部添加了一段 HTML 摘要,直接回答最常见的问题,比如“美国信用卡在线交易费率为 2.9% + 30¢”。这个摘要会被生成式引擎优先抓取。
怎样验收读得到
Stripe 的文档团队建立了一套验收流程。每次发布新页面或更新旧页面后,他们会用无头浏览器模拟生成式引擎爬虫,检查页面是否只包含 HTML 文本,没有依赖 PDF 或图片。他们还会用工具检测页面是否被 robots.txt 错误屏蔽,以及结构化数据是否有效。
另一个验收方法是:在 ChatGPT 或 Perplexity 里输入几个测试问题,看答案是否引用自己的页面。如果答案引用了过期页面,就说明旧页面仍然可访问,或者新页面没有被索引。Stripe 的团队每周会做一次这样的抽查,并记录引用来源。
他们还发现,生成式引擎对页面更新频率敏感。如果页面带有“最后更新日期”的标记,并且日期较新,模型更倾向于引用。因此,Stripe 在所有文档页的顶部添加了“Last updated”时间戳,并用 meta 标签声明 dateModified。
对于已经过期的活动页,Stripe 不再保留原 URL 的内容。他们会把旧 URL 301 重定向到新的政策页,或者在旧页面上放置一个“此活动已结束”的 HTML 提示,并链接到当前政策。这样,生成式引擎在抓取旧页面时,会看到明确的过期信号。
步骤
以下是 Stripe 团队从这次事故中总结的步骤,可供 SaaS 团队参考:
- 盘点所有关键事实所在的 PDF 和图片,列出需要迁移到 HTML 的清单。
- 将 PDF 中的文字内容复制到 HTML 正文,使用语义化标签(如
<table>、<ul>),不要用图片代替。 - 为每个页面添加结构化数据,如
Table、FAQPage、Dataset,帮助模型理解内容。 - 在页面顶部添加一段 50 字以内的摘要,直接回答最常见的问题。
- 添加“最后更新日期”和版本号,用
meta标签声明。 - 对过期页面进行 301 重定向或放置过期提示,不要直接删除。
- 每周用无头浏览器和生成式引擎测试问题,检查引用来源。
这些步骤的核心是:让关键事实以 HTML 文本的形式存在,并且让模型能够快速找到和验证。
还容易问的
以下是一些常见问题和解答,基于 Stripe 的实践和公开资料。
- 为什么生成式引擎不读 PDF? 因为 PDF 解析成本高,而且很多 PDF 需要点击才能获取,爬虫通常不会模拟点击。即使 PDF 被下载,模型也可能无法将 PDF 内容与页面标题关联起来。
- 图片文字真的完全无法被模型读取吗? 不一定。有些模型有 OCR 能力,但准确率不稳定。如果图片文字是唯一来源,模型很可能忽略。更好的做法是提供 HTML 文本和 alt 文本。
- 301 重定向会影响 SEO 吗? 会,但影响是正面的。301 重定向可以把旧页面的权重传递给新页面,同时告诉搜索引擎和生成式引擎旧页面已经失效。如果直接删除页面,会返回 404,生成式引擎可能继续使用缓存。
- 结构化数据对生成式引擎有用吗? 有用。结构化数据可以帮助模型理解表格、FAQ、数据集等内容的语义,从而在生成答案时更准确地引用。
- 如何知道生成式引擎是否引用了我的页面? 可以在 ChatGPT、Perplexity、Google AI Overview 里搜索相关关键词,看答案是否包含你的品牌或页面链接。也可以使用一些第三方工具监测引用来源。
Stripe 的这次事故说明,生成式引擎优化不是玄学,而是对内容可读性的工程化管理。关键事实必须放在 HTML 里,并且让模型能够验证。