智能体可读的网站:llms.txt、Markdown 镜像,以及真正会坏在哪里

返回
Kevin Riedl

9 分钟 阅读 · 2026年8月18日
最近审核

下一篇
图片在你的设备上生成,不连接 Instagram。文章链接会复制到剪贴板,供链接贴纸使用。

让公开内容易于获取和理解,再验证你发布的附加格式。我们的实现使用 HTML、爬虫规则、Markdown 和 JSON-LD。保持这些表示一致,是可以通过测试解决的工程问题。

你正在读的这个网站就在跑这套东西:每个页面的 Markdown 镜像、每种语言一份 llms.txt、公开发布的 agent skills,以及一个只要其中任何一处坏掉就让生产构建失败的校验器。这篇文章列的是这个校验器实际抓到过的东西,比照着规范读出来的清单更有用。

想在投入修复之前先知道智能体能不能读懂你的网站?

 运行免费检查器

我们实现中的四种表示

这些表示服务于不同的消费者,并非 AI 可见性的四个通用条件。有用的 HTML 页面即使没有 Markdown 镜像或 JSON-LD,也可以被获取和引用。

接口它回答的问题失败时的样子
robots.txt适用哪一组爬虫规则?对应分组与路径中的限制
服务端 HTML不执行 JavaScript 时能读取什么?不渲染消费者看到的空壳
Markdown 镜像(可选)消费者能否使用忠实副本?该副本中的坏链接或内容丢失
JSON-LD(可选)公开事实是否一致?无效或相互冲突的结构化事实

Google 明确说明,其 AI 搜索功能不要求 llms.txt、Markdown 或特殊结构化数据。JavaScript 按常规 SEO 规则处理。索引资格、摘要资格及 Search Console 中生效的生成式 AI 纳入设置才是需要单独核实的条件。请与可选格式测试分开检查。 Google Search Central.

诚实地看 llms.txt

llms.txt 是一种约定,不是 Web 标准。没有引擎有义务读它,谁向你保证一定会被读取,那就是在夸大。它同时也很便宜,而且能给智能体一张干净的地图,而不是你渲染出来的导航,所以我们自己发布了一份,通常也会建议这么做。

如果你要发布,有三件事决定它有没有用:

  • 可移植的 URL。v2 约定接受 Markdown 链接,并不强制使用绝对 URL。只要消费者保留 llms.txt 的来源 URL 作为基准,相对链接就能解析;但文件复制到其他工具后可能丢失这层上下文。我们使用绝对 URL,让这张地图更易移植。
  • H1 下面那段引用块。H1 是唯一必需的部分,约定把后面的摘要描述为可选。即便如此,当一句话就能清楚说明网站身份时,仍应补上,避免让智能体自行推断。
  • 重要链接后的说明。链接后的说明是可选项,但能帮助预算有限的智能体决定先打开什么。标题含义不清时,应补充简短描述。

Markdown 镜像,以及怎么声明它

镜像就是与页面相同的内容,去掉外壳,以 Markdown 形式放在一个可预测的路径上,并从页面头部指向它:

<link rel="alternate" type="text/markdown" href="/services/ai-visibility.md">

生成镜像很简单。让它保持忠实才是需要机器的部分,因为镜像可以以数月都没人察觉的方式出现细微错误。生成器在站点构建之后运行,遍历渲染后的 HTML,随后由校验器比对两者。

值得知道的失败模式

这些是我们自己构建里的真实发现,不是假设。在这道关卡存在之前,每一种都至少上线过一次。

失败为什么会发生智能体看到什么
未解析的模板值生成器输出了它的空值占位符,或者一对模板分隔符没被渲染就留了下来,而没人看输出一个把你的模板语言原样念回给你的页面
未闭合的代码围栏有开始的围栏,没有结束的它之后的每个标题都不再是标题,文档因此失去结构
未解码的 HTML 实体转换过程中没有解码实体一个未解码的与号或撇号实体,被当成它的字面字符读取,而不是当成那个标点
相邻链接被粘连转换时丢掉了两个 anchor 之间的空白两个链接文字粘成了一个词组
署名粘在链接上作者链接前少了一个空格一个作者字段,其中链接前面的那个词和姓名黏在了一起
表格列数对不上表头行和分隔行对列数的说法不一致这个块不再被解析为表格,于是每个数字都失去了它的列
不止一个 H1外壳里的标题漏进了正文连这个页面到底讲什么都变得含糊
正文为空内容是客户端注入的,镜像没有东西可镜像只有 front matter 和沉默

我们最喜欢的一例比上面任何一种都更细微。给某个页面加了一个装饰性图形,结果把一个字面的双引号放进了 SVG 文本节点,这让 HTML 压缩器在外来内容里停了下来。那个页面剩下的部分未经压缩就上线了,它的 Markdown 镜像在三分之二处悄悄截断,把整个 FAQ 一起带走了。在浏览器里看不出任何异常。是这道关卡让构建失败、指名了那条路由,而修复只是一个字符。

robots.txt 的陷阱:检索不等于训练

这是整个话题里代价最高的误解,而它只是一行配置。

GPTBot 收集训练数据,OAI-SearchBot 用于搜索,ChatGPT-User 用于用户发起的访问。Anthropic 同样区分 ClaudeBot、Claude-SearchBot 和 Claude-User。规则限制针对该代理的已记录用途,并不能代表所有关于网站的回答:

User-agent: GPTBot
Disallow: /

User-agent: *
Disallow: /

第一组声明 GPTBot 的训练限制。只有没有更具体分组匹配时,通配符才生效。具体分组优先;路径规则采用最长匹配,长度相同时 Allow 优先。此示例限制遵守 robots 且没有专属分组的搜索爬虫,但不能证明所有助手都无法提及或引用网站。

将训练偏好、搜索和用户发起的访问分开处理。OpenAI 指出 robots 规则可能不适用于 ChatGPT-User。修改策略前,应核实各提供商文档与实际部署响应。 OpenAI; Anthropic.

为什么要用关卡,而不是清单

上面每一项都很容易修一次,也不可能靠意愿一直修着。内容每周在变,模板每月在变,而这些失败都不产生可见症状。季度审计只会晚一个季度才发现它们。

我们的生产校验器检查主动发布的镜像。智能体可读性检查器把选定的镜像规则移植到本地浏览器工具。它只检查一个粘贴文件并明确说明覆盖范围,不运行整站构建,也不访问链接目标。

相邻的问题另有去处:我们的Open Knowledge Format 指南讲如何把内部知识打包成可移植的 Markdown,AI 就绪的公司 wiki 指南讲如何把这些知识提供给你自己的智能体。这篇文章严格只谈公开接口:别人的智能体能读到什么。

常见问题

什么让一个网站对智能体可读?
起点是可访问、可理解的公开内容。核实目标消费者的访问与资格规则。Markdown、llms.txt 和 JSON-LD 是可选集成,不是获取或引用的通用前提。
llms.txt 是标准吗?
不是。它是一种约定,没有引擎有义务读它。它发布成本低,而且给智能体一张干净的地图而不是渲染出来的导航,所以我们自己维护了一份。但如果有人声称它一定会被读取,那正是你该怀疑他其余说法的理由。
llms.txt 里能用相对 URL 吗?
可以。v2 约定不要求绝对 URL,消费者可以相对于 llms.txt 的位置解析链接。如果文件会被复制到可能丢失来源 URL 的工具里,绝对 URL 仍然更稳妥。
我们该屏蔽 GPTBot 吗?
将 GPTBot 视为训练偏好、OAI-SearchBot 视为搜索访问、ChatGPT-User 视为用户发起的访问,分别核实其官方控制规则。允许或屏蔽其中一个,并不能证明所有助手的回答方式。
Markdown 镜像会不会造成搜索引擎的重复内容问题?
Markdown 镜像是替代表示。我们保留来源 URL,通过 rel=alternate 声明,并将其排除在 XML sitemap 之外。文本文件中的 canonical URL 记录来源,并不能证明搜索引擎会合并索引。应验证实际 HTTP 行为和索引状态。
上线之后怎么防止它退化?
把检查放进构建流程,而不是写进文档。内容和模板一直在变,而这些失败都没有可见症状,所以任何靠意愿维持的东西,一两个季度内就会退回去。

最终思考

先提供可读的公开内容与合适的访问规则。当消费者能从附加格式中受益时再发布,并在构建中验证完整性。

我们的检查器帮助你在本地检查一个文件。修复已证实的问题,再单独验证部署访问与搜索资格。

被机器读到,并被引用

答案引擎无法引用它取不到、解析不了、也归属不到你名下的东西。Wavect 会在你现有的技术栈里修好智能体访问、机器可读镜像、结构化数据和实体身份,然后让产品不只是可读,而是可被智能体使用。

相关服务路径:

只收重要内容

关注与你相关的内容

每当我们发布新文章,你会收到一封简短邮件。你可以关注整个博客,也可以只选感兴趣的主题。

你希望接收哪些内容?
选择主题

免费、双重确认、不使用跟踪像素。

返回
Kevin Riedl

9 分钟 阅读 · 2026年8月18日
最近审核

下一篇

获取下一篇关于AI 与智能体的一线笔记

有新文章时发送一封简短邮件,不使用跟踪像素,也不发送填充内容。

免费、双重确认、不使用跟踪像素。