llms.txt 这个文件,最近因为一个实验结果又回到了我的视线里。83 个网站部署了 llms.txt 之后,12 周内 OpenAI 的爬虫读取了 7 次。这个数字乍一看不算高,但它真正想说明的是:OpenAI 爬虫确实会识别并反复读取这个文件,不是放上去就完全没用。
如果你还不清楚 llms.txt 是什么,也没有关系。它可以理解为一个专门给大语言模型爬虫看的站点索引清单,用 Markdown 写,放在网站根目录,让 GPTBot 这类爬虫不用在整个站点里转来转去,就能知道你的网站有哪些主要内容、入口在哪里。下面我拆一下这个实验结果怎么理解,以及在自己的网站上部署 llms.txt 时要注意什么。
1. llms.txt 到底是什么,为什么大模型爬虫需要它
1.1 从一个最简单的例子理解 llms.txt
传统搜索引擎爬虫抓取网页时,会从 HTML 里提取正文、标题、链接。这个过程对普通网站来说基本够用,因为页面里即使有导航、侧边栏、广告位,搜索引擎也能靠权重算法去筛出核心内容。
大模型爬虫面对的情况不太一样。它不仅要“发现”页面,还要快速“理解”这个站点是什么、哪些页面值得进入、内容之间的关系是什么。如果让 GPTBot 从首页 HTML 开始一层一层往里抓,成本高,而且很容易被大量重复导航干扰。
llms.txt 就是给这个场景准备的。它通常放在站点根目录下,文件格式类似 Markdown,里面写清楚站点名称、一句话简介、主要栏目和核心链接。爬虫访问/llms.txt之后,可以直接拿到一个精简版的站点地图,省去解析 HTML 的步骤。
举个例子,一个技术文档站点可以在 llms.txt 里写:
# 示例公司文档中心 > 我们提供 SDK、API 文档、快速开始和常见问题。 ## 文档入口 - [快速开始](https://docs.example.com/start) - [API 参考](https://docs.example.com/api) - [SDK 下载](https://docs.example.com/sdk) - [常见问题](https://docs.example.com/faq)这个文件的作用不是替代页面本身,而是给大模型爬虫一个“先看哪里”的提示。
1.2 llms.txt 与 robots.txt、sitemap 的分工
很多站长第一次听说 llms.txt 时,会问它和 robots.txt、sitemap 有什么区别。三者确实都放在站点根目录附近,但分工完全不同。
| 文件 | 目标读者 | 格式 | 主要用途 | 能否控制访问 |
|---|---|---|---|---|
| robots.txt | 所有爬虫 | 纯文本规则 | 声明哪些路径允许或禁止抓取 | 能 |
| sitemap.xml | 搜索引擎爬虫 | XML | 列出站点需要收录的 URL | 不直接控制,只做推荐 |
| llms.txt | 大模型爬虫 | Markdown/纯文本 | 给出生意式站点摘要和核心入口 | 不控制,只做引导 |
robots.txt 是“允许或者不允许”,sitemap 是“告诉爬虫有哪些地址”,llms.txt 是“告诉大模型爬虫这里主要有什么、按什么顺序看”。
三者的关系不是互斥,而是可以同时存在。一个常见的做法是:在 robots.txt 里允许 GPTBot 访问/llms.txt,同时在 llms.txt 里放最核心的文档入口,再结合 sitemap 把所有可收录页面交给普通搜索引擎。
1.3 谁在支持 llms.txt,OpenAI 爬虫为什么值得关注
llms.txt 最早由 Jeremy Howard 等人提出,目前并不是 W3C 官方的标准,更像是一个逐渐被接受的社区约定。已经有不少文档站、博客、技术站点开始配置,比较积极的爬虫包括 OpenAI 的 GPTBot、Anthropic 的 ClaudeBot,以及一些 AI 搜索产品。
这里最值得关注的是 OpenAI 的爬虫,因为 ChatGPT 和 OpenAI 搜索产品覆盖面广,如果站点内容能被它的爬虫识别并纳入索引,就有机会出现在 AI 问答或搜索引用里。
OpenAI 爬虫常见的 User-Agent 有以下两类:
- GPTBot:官方描述是用于抓取网页内容,以改进和训练模型。
- OAI-SearchBot:主要用于 OpenAI 的搜索产品,帮助回答实时问题。
两类爬虫都可能访问/llms.txt。所以判断实验里的“OpenAI 爬虫读取 7 次”,需要在日志里把这两个 UA 都算进去,不能只查一个。
2. 83 个网站、12 周、7 次读取,这个结果怎么看
2.1 实验的基本背景推测
项目标题写得很简洁:有 83 个网站,放了 llms.txt,12 周内 OpenAI 爬虫读取了 7 次。虽然原始材料没有提供网站类型、流量、更新频率、是否配置了 robots.txt 等细节,但我倾向于把这里说的“读取”理解为 OpenAI 爬虫对/llms.txt这个路径发起了 HTTP 请求,并且大概率返回了 200。
为什么是 83 个网站?这个样本量不算大,但已经能看出一些趋势。12 周约等于 84 天,7 次请求总量相当于平均每 12 天左右有一次读取。这个频率放在单站点上看非常低,但如果原本站点完全没有 GPTBot 访问记录,那这个变化就很有意义。
这里需要强调:这只是基于标题的合理推断,不是原始实验的完整结论。真实实验中,83 个网站的流量分布、内容更新频率、域名权重都不一样,7 次请求可能集中在少数几个站点上。
2.2 7 次读取意味着什么
首先要避免两个极端理解。
一种极端是“太好了,OpenAI 收录了我的站点”。实际上读取次数和最终是否被大模型使用之间隔着好几层。爬虫读取 llms.txt,只代表它知道了这个文件存在并尝试理解,不代表内容进入了训练集。
另一种极端是“才 7 次,完全没用”。这个判断也过于粗暴。对于普通中小站点来说,OpenAI 爬虫的抓取频率本身就不是高频行为,很多站点一个月都未必有一次 GPTBot 访问。如果 83 个网站在 12 周里出现 7 次读取,说明 llms.txt 至少能引起爬虫兴趣。
一个更合理的判断是:
- llms.txt 是有效的“被发现的入口”;
- 它不会让站点突然获得大量 AI 流量;
- 它更适合作为长期基础配置,而不是短期引流手段。
2.3 对照线:没有 llms.txt 时的情况
要判断 7 次这个数字有没有价值,最好先想清楚“没有 llms.txt 会怎样”。
没有 llms.txt 时,GPTBot 如果想了解一个站点,只能从首页或其他页面开始抓取。它会先请求 HTML,然后解析内链,再决定访问哪些子页面。对内容层级很深、入口很散的站点来说,这个过程会慢很多,也可能遗漏重要文档。
加了 llms.txt 之后,相当于把“站点导航”直接放到爬虫面前。它不需要靠首页猜你的栏目结构,也不用把整个菜单全部爬一遍。所以即使读取次数不高,每一次读取的信息密度却比普通 HTML 抓取更高。
如果站点原本就有其他外部链接或 sitemap 被 GPTBot 多次抓取,那 llms.txt 的增量价值会被稀释。反过来,如果站点几乎没有 AI 爬虫访问记录,那第一次读取就是很好的信号。
2.4 对这个数据应该保持什么预期
我的建议是把目光放在更长周期上。12 周的测试其实只够验证“爬虫会不会读”,还不够验证“读了会不会有长期价值”。
通常可以分成三个阶段观察:
- 第 1 到 2 周:确认文件是否能访问,robots 是否放行。
- 第 4 到 6 周:观察访问日志,看是否有 GPTBot 或 OAI-SearchBot 请求。
- 第 8 到 12 周:看读取频率是否上升,是否出现对正文页面的抓取。
如果 12 周里只有 1 到 2 次读取,也不一定代表失败,可能只是爬虫回访周期较长。更关键的是观察“首次读取后的后续动作”,比如爬虫是否继续访问 llms.txt 里列出的链接。
3. 在自己站点上部署 llms.txt 的完整流程
3.1 准备文件内容
部署第一步不是找个位置上传文件,而是先把内容定义清楚。llms.txt 最忌讳的是把整个 sitemap 复制进来,那样就失去了“提炼入口”的意义。
我建议按以下顺序组织:
- 第一行是站点名称,用
#标题。 - 接着用
>写一两句话,说清楚这个站点或文档中心是干什么的。 - 然后用
##分栏目,每个栏目下列出 3 到 10 个核心链接。 - 所有链接必须是完整 URL,包含协议头,例如
https://example.com/docs。
一个博客站点的示例:
# 张三的博客 > 主要记录分布式系统、Go 语言和云原生相关实践经验。 ## 优先阅读 - [关于本站](https://blog.example.com/about) - [全部文章索引](https://blog.example.com/archives) - [分布式系统入门系列](https://blog.example.com/series/distributed-systems) ## 精选文章 - [使用 etcd 实现分布式锁的几种姿势](https://blog.example.com/posts/etcd-lock) - [Go 程序性能排查常用手段](https://blog.example.com/posts/go-perf) - [Kubernetes 控制器开发避坑记录](https://blog.example.com/posts/controller-dev)如果站点是一个企业官网,可以把“产品介绍”“解决方案”“帮助中心”“联系方式”放进去。不需要把每一篇文章都写上去,只放最有代表性的入口。
3.2 放置和校验
文件需要放到网站根目录,也就是https://example.com/llms.txt能直接访问到的位置。注意路径大小写,不要写成LLMS.txt或放在子目录里。
放上去之后,先用浏览器直接访问确认 200。如果需要快速验证响应头,可以用 curl:
curl -i https://example.com/llms.txt正常返回会包含Content-Type: text/markdown或text/plain,状态码 200。如果出现 404,说明文件路径不对;如果出现 403,说明 Web 服务器禁止了该类型文件访问;如果出现重定向,要确认最终访问到的路径没有变。
这里有个容易被忽略的问题:如果站点使用了 CDN,CDN 缓存可能会导致旧内容持续一段时间。更新 llms.txt 后,最好手动刷新 CDN 缓存,再用带Cache-Control: no-cache的请求验证。
3.3 检查 robots.txt 放行策略
文件放对了,还要确保 OpenAI 爬虫有权限读取。很多站点默认允许所有爬虫,但如果你已经配置过比较严格的 robots.txt,就需要专门检查。
一个相对宽松的配置可以这样写:
User-agent: GPTBot Allow: /llms.txt Allow: / Disallow: /private/如果你只希望开放文档中心,不想让爬虫抓取博客正文,也可以调整成:
User-agent: GPTBot Allow: /llms.txt Allow: /docs/ Disallow: /blog/这里的关键是:Allow: /llms.txt要优先于全局规则。robots.txt 的匹配规则对多数现代爬虫都比较标准,但 OpenAI 爬虫也遵循 robots.txt 约定。
放好 robots.txt 后,用 curl 模拟确认:
curl -A "GPTBot/1.0" https://example.com/llms.txt -o /dev/null -w "%{http_code}\n"返回 200 表示至少这个 UA 能访问文件。
3.4 配套的 sitemap 和页面更新
llms.txt 不应该替代 sitemap。普通搜索引擎仍然依赖 sitemap 来发现和更新页面,大模型爬虫也可能同时参考 sitemap。
如果你已经有 sitemap.xml,建议在 llms.txt 的某个栏目里放一个指向 sitemap 的链接。这样爬虫读取 llms.txt 后,可以继续提取完整 URL 列表。
还要注意联动更新。每当你发布重要文章或新增文档时,不建议每次手动改 llms.txt。更好的方式是用脚本从内容数据库或配置中心自动生成,比如在 CI/CD 流程里加一步生成 llms.txt。这样既不会忘记,也不会因为内容长期不更新而让文件失效。
4. 用访问日志验证 OpenAI 爬虫是否读取
4.1 先确认用户代理特征
要判断 OpenAI 爬虫有没有读取 llms.txt,最直接的方法是看服务器访问日志。日志里每条请求都会记录 User-Agent,而 GPTBot 的 UA 通常长这样:
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.0; +https://openai.com/gptbotOAI-SearchBot 的 UA 类似:
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; OAI-SearchBot/1.0; +https://openai.com/oai-searchbot如果站点使用 CDN 或 WAF,可能部分字段会被改写,但 UA 里的GPTBot或OAI-SearchBot一般还会保留。建议在日志分析时同时搜这两个关键词。
4.2 用命令行统计访问
对于普通 Nginx 或 Apache 日志,可以先用 grep 统计 llms.txt 的请求总数:
grep -i "llms.txt" access.log | grep -iE "GPTBot|OAI-SearchBot" | wc -l如果想看请求时间和状态码:
grep -iE "GPTBot|OAI-SearchBot" access.log | grep "llms.txt" | awk '{print $4, $9, $7}'输出里会有类似这样的记录:
[30/Oct/2025:02:14:32 +0000] 200 /llms.txt [12/Nov/2025:10:05:18 +0000] 200 /llms.txt通过时间戳可以看到回访周期。如果 12 周里只有 7 次请求,每次之间可能隔了一到两周,这属于正常现象。不要因为频率低就认为是失败。
4.3 日志字段与请求状态
日志里最需要关注的字段包括:IP 地址、请求时间、请求路径、状态码、User-Agent。
| 状态码 | 含义 | 处理方式 |
|---|---|---|
| 200 | 请求成功,文件可读 | 正常 |
| 301/302 | 文件被重定向 | 检查是否跳到错误路径,尽量使用直接 200 |
| 403 | 被访问控制或 robots 规则禁止 | 检查 robots.txt 和 Web 服务器权限 |
| 404 | 文件不存在 | 确认根目录路径是否正确 |
| 500 | 服务器异常 | 检查生成脚本和静态文件服务 |
如果看到 403,优先看 robots.txt 是不是把 GPTBot 拦掉了。看到 404,先不要怀疑爬虫,直接用浏览器访问一遍。
4.4 常见错误场景与排查顺序
很多站长看到“没有读取记录”时,第一反应是找 OpenAI 的官方加速入口,或者反复修改 llms.txt 内容。其实更合理的顺序是:
- 先用 curl 访问
https://你的域名/llms.txt,确认能返回 200。 - 检查 robots.txt 中是否有
User-agent: GPTBot的Disallow。 - 搜索完整访问日志,不只看最近 7 天,要看 3 个月数据。
- 确认 CDN 日志是否完整,有些 CDN 不会把全部请求转发给源站。
- 如果仍然没有,考虑是否站点本身很少被任何搜索引擎爬虫发现。
注意:不要一上来就开全站抓取,也不要为了“吸引爬虫”去刷请求。先确保文件可访问、robots 放行,再看日志。
5. 容易踩的坑和边界条件
5.1 文件放对不等于一定被抓取
llms.txt 最大的作用是降低爬虫理解站点的成本,但它不能决定爬虫是否回来。爬虫是否抓取,还取决于站点本身的内容质量、更新频率、外部链接、页面加载速度等。
如果你的站点长期没有更新,也没有其他外部入口,即使 llms.txt 写了很全的链接,爬虫也可能只来一次就不再来。不要把它当成 SEO 外链的替代品,它只是基础配置之一。
5.2 不能把 llms.txt 当成隐私保护工具
llms.txt 是公开文件,任何人都可以通过浏览器访问。因此里面不要出现以下内容:
- 内网地址或私有 IP
- 登录后才能访问的链接
- 未发布的文章或产品信息
- API Token、密钥、内部系统标识符
- 临时分享链接
如果你担心某些页面被抓取,正确的做法是在 robots.txt 里Disallow,而不是指望不把链接写进 llms.txt。
5.3 格式与路径的细节
llms.txt 的格式约束不复杂,但细节决定能否被解析。
- 文件编码使用 UTF-8,避免中文乱码。
- 链接用完整 URL,不要写相对路径。
- 不要在里面插入 HTML 标签,保持 Markdown 或纯文本。
- 文件不要过大,建议控制在几十 KB 以内。
- 不要使用 JavaScript 动态渲染 llms.txt,爬虫可能不会执行脚本。
- 不要用重定向链跳转到其他域名。
如果生成工具输出的是 HTML 页面,也要检查是否暴露了多余内容。最好直接用静态文本文件。
5.4 小站点和大站点的策略差异
不同规模的站点,llms.txt 的写法不太一样。
小型个人博客内容有限,可以把精选文章全部列出来,每栏 5 到 10 个链接,维护成本很低。中大型文档站内容很多,如果把所有文章都放在 llms.txt 里,文件会非常长,反而不利于爬虫定位核心页面。大站点更适合放栏目页、标签页、文档首页,以及少量权重最高的文章。
大站点还要考虑更新频率。如果一个文档系统每天发布几十个版本,建议用自动化脚本生成 llms.txt,并在每次发布后同步更新。手动维护必然跟不上。
6. 从读取次数到 AI 搜索优化:下一步怎么做
6.1 llms.txt 与内容结构的关系
就算爬虫读取了 llms.txt,也不代表它能直接引用你的内容。大模型或搜索产品在生成回答前,通常还会进一步抓取页面正文,从正文里提炼答案。
所以 llms.txt 只是入口,真正决定“会不会被引用”的是页面本身。建议重点优化这类页面:
- 标题要直接,不要起过于抽象的标题。
- 开头段落里就要出现核心关键词,并给出结论。
- 使用列表、表格、小标题,方便爬虫理解结构。
- FAQ 页面很适合被大模型引用,因为问题答案对应关系清晰。
6.2 针对大模型爬虫的常见内容优化
如果你的目标是被 OpenAI 或其他 AI 搜索引用,可以做一些常规内容调整:
- 给每个重要页面写一个 2 到 3 行的摘要,放在正文开头。
- 把操作步骤拆成有序列表。
- 对技术文章,提供代码块和参数说明。
- 在页面底部放“相关内容”链接,但要保证这些链接有效。
- 保持 URL 稳定,不要频繁变更路径。
这些优化对人类读者同样友好,并不需要额外牺牲体验。
6.3 持续观测的指标和调整方法
部署完成后,建议每两周看一次以下指标:
/llms.txt请求次数。- GPTBot 和 OAI-SearchBot 的整体请求次数。
- 哪些链接被爬虫继续访问。
- 页面是否出现在 ChatGPT 或 OpenAI 搜索产品的引用里。
如果连续一个月没有读取记录,优先检查日志和 robots,再考虑调整 llms.txt 里的链接结构。如果读取次数在增加,但引用率没有变化,问题可能出在正文内容质量或页面对爬虫的可读性上。
我个人更建议先跑 4 周,积累一点数据后再改。不要因为看到几次读取就急着把全部文章塞进 llms.txt,也不要因为读数低就删掉文件。这个文件的价值是长期且累积的。
最后说一个我自己的习惯:不会因为某个站点把 llms.txt 放上去就认为它一定获得 AI 流量。我会先看三件事——文件能不能被公开访问,robots 是否放行,访问日志里有没有对应 UA。这三件事都确认后,再把 llms.txt 纳入日常内容更新里。
大模型爬虫读 7 次还是 70 次,本质上取决于你的站点有没有持续提供新的、结构清晰的内容。想清楚这一点,就不会被最初那几个数字带偏。