GEO
返回博客
技术 AEO 实施落地

为 AI 提供 Markdown 版内容:/md 端点与纯文本兜底方案

AI 引擎读取 HTML 时,会先剥离页面布局与噪声,这个过程经常导致段落提取错误。本文讲解如何为每个页面提供 Markdown AI 内容端点和纯文本兜底,包括 /md 路由、内容协商、llms.txt 分层,以及如何用 curl 验证 AI 爬虫能否真正读取内容。

Tenten GEO 团队发布于 2026-06-185 分钟阅读
一份发光的文档分成两股数据流:一边是杂乱的 HTML,另一边是干净的 Markdown,共同流向远处的 AI 光环。

AI 引擎读取网页时,第一步通常是拆解 HTML:去掉导航栏、侧边栏、Cookie 提示和跟踪脚本,只留下它判断为正文的文字。这个拆解过程可能出错,而你往往看不到错误发生在哪里。与其不断完善 HTML 语义标记,再押注模型每次都能猜对页面结构,不如直接提供一份整理好的 Markdown。相同内容去掉布局噪声后,模型无需猜测,引用内容的提取准确性也会更加稳定。

为什么 AI 更愿意读取 Markdown,而不是你的 HTML

关键在于噪声占比。一个常见的 SaaS 产品页面,其 HTML 源码可能包含六七千个 token,真正的内容却只占很小一部分,其余都是类名、内嵌样式、SVG 路径和分析脚本。模型读入页面后,必须先过滤这些噪声,才能找到可用于回答问题的句子。换成 Markdown,同一段内容的体积可以缩减到原来的几分之一。标题就是标题,列表就是列表,重点也清晰可见。结构本身已经传递语义,模型需要猜测的空间大幅减少。

这对答案引擎尤其重要。ChatGPT、Perplexity 和 Google AI Overviews 生成答案时,会从候选页面中提取可引用的段落。页面越干净,段落越能独立表达完整意思,被完整引用的概率就越高。我们曾协助客户处理一种常见问题:文章本身写得很好,却被层层 div 和客户端渲染组件包裹,模型最终只能抓到半句话。改用 Markdown 端点后,同一段内容可以被完整访问,引用也不会再莫名其妙地断在句子中间。

/md 端点:为每个页面提供机器可读的副本

具体做法是为每个公开页面提供对应的 Markdown 版本,并采用可预测的 URL 规则。常见方案有两种:在原 URL 后添加 .md,例如 /blog/aeo-basics 对应 /blog/aeo-basics.md;或在路径后添加 /md。两种方式都可以,重点是规则必须统一且容易推断。使用 Next.js App Router 时,可以通过 Route Handler 实现:新建路由文件,读取与 HTML 页面相同的内容数据,并将输出的 Content-Type 设置为 text/markdown。

  1. 保持单一数据源:HTML 页面和 Markdown 端点应读取同一份内容,例如 MDX、数据库或内容对象。不要分别维护两份,否则迟早会出现内容不同步。
  2. 在 HTML 的 head 中加入 link rel=alternate type=text/markdown,明确告诉爬虫机器可读版本位于何处。
  3. Markdown 只保留正文内容,包括标题、段落、列表、表格、代码块和链接;导航、页脚、相关文章及营销横幅都应删除。
  4. 保留必要的来源信息:在文件开头使用 front matter,或通过首行 H1 标明标题、原始 URL 和更新日期,方便模型识别并标注来源。
  5. 返回正确的缓存响应头,让 CDN 可以直接提供该端点的内容,无需每次都回源。

通过内容协商自动切换格式

除了使用固定 URL,还可以根据请求方的身份,让同一 URL 返回不同格式。判断依据主要有两个:Accept 请求头和 User-Agent。当请求携带 Accept: text/markdown,或 User-Agent 属于已知的 AI 爬虫(GPTBot、ClaudeBot、PerplexityBot、Google-Extended 等)时,在中间件层将请求重写到 Markdown 路由;普通浏览器仍然获得 HTML。用户看到完整网页,模型得到干净文本,整个过程中 URL 保持不变。

示意图:请求方是浏览器或 AI 爬虫时,同一 URL 分别返回 HTML 和干净的 Markdown。
同一份内容,两种格式:浏览器读取 HTML,AI 爬虫读取干净的 Markdown。

纯文本兜底:当 Markdown 仍然过于复杂

有些智能体或爬虫不解析 Markdown 语法,只接受纯文本;在另一些场景中,例如语音助手生成来源摘要,只需要最精简的内容。这时,提供纯文本兜底就很有必要。实现方式与 Markdown 端点相同,区别是输出 text/plain:标题与段落用换行分隔,链接则将 URL 放在文字后的括号中。采用分层兜底后,无论对方的解析能力处于哪个层级,都能拿到可读版本。

  • llms.txt:在网站根目录放置 /llms.txt,用 Markdown 列出重要页面及简短说明,相当于为模型提供一张内容导航图。
  • llms-full.txt:将全部核心内容合并到一个文件中,方便模型一次性读取,无需逐页抓取。
  • 单页 .md 端点:为每篇文章、每个产品页面提供机器可读的副本。
  • 纯文本兜底:提供最精简的 text/plain,供无法解析 Markdown 的工具使用。

如何确认 AI 确实能够读取

上线后务必验证,不要默认它会自动生效。最快的方法是用 curl 模拟爬虫请求:携带 Accept: text/markdown,或将 User-Agent 设置为 AI 爬虫,检查返回的 Markdown 是否干净、状态码是否为 200、缓存响应头是否正确。随后查看服务器日志,确认 GPTBot、ClaudeBot 等爬虫确实访问了 Markdown 端点,而不是继续抓取充满噪声的 HTML。isitagentready 等工具也可以帮助你快速检查页面对智能体是否易于读取。

内容能否被 AI 引用,首先取决于 AI 能否干净、完整地读取它。提供一份 Markdown 副本,相当于从整个流程中彻底去掉“猜测页面布局”这一步。Tenten GEO

先从一个页面开始,不必一次改造整个网站

先选择流量最高、也最希望被 AI 引用的页面,为它们增加 .md 端点和纯文本兜底。持续观察 AI 爬虫两到四周的抓取行为,再决定是否推广到整个网站。这样既能控制风险,也能用真实日志推动团队形成共识。如果你想先了解自己的页面对 AI 是否易读、问题出在哪里,Tenten GEO 的 30 天 GEO 审计会逐页盘点这些机器可读性问题。如果希望进一步讨论你的具体情况,可以前往 /contact,预约一次 30 分钟的 GEO 诊断。

常见问题

什么是 /md 端点?为什么要向 AI 提供 Markdown 版内容?
/md 端点是为每个页面提供的机器可读副本,输出干净的 Markdown。AI 引擎读取 HTML 时,必须先过滤导航、脚本等噪声,很容易提取错段落。直接提供 Markdown 可以去掉布局干扰,让内容得到更完整、准确的引用。
通过 User-Agent 向 AI 爬虫返回不同内容,会被 Google 视为隐藏真实内容吗?
只要内容相同、仅格式不同,也就是 HTML 版与 Markdown 版包含相同文字,就不属于隐藏差异。隐藏真实内容(cloaking)是指向爬虫和用户返回实质不同的内容,这违反 Google 的规则。可以切换格式,但不能更换内容。
如何确认 AI 爬虫确实读取了我的 Markdown 端点?
使用 curl 携带 Accept: text/markdown,或设置 AI 爬虫的 User-Agent,确认响应内容是干净的 Markdown,且状态码为 200;随后检查服务器日志,查看 GPTBot、ClaudeBot 等爬虫是否真正访问了该端点,而不是仍在抓取 HTML。

准备好了吗

你的品牌在 AI 答案中有多高的可见度?

通过 30 分钟 GEO 诊断,了解品牌在主要 AI 引擎中的可见度缺口,以及应该优先解决的问题。

预约 30 分钟诊断