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.txtOpenAI 爬虫为什么值得关注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.txt12 周内 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。如果需要快速验证响应头可以用 curlcurl -i https://example.com/llms.txt正常返回会包含Content-Type: text/markdown或text/plain状态码 200。如果出现 404说明文件路径不对如果出现 403说明 Web 服务器禁止了该类型文件访问如果出现重定向要确认最终访问到的路径没有变。这里有个容易被忽略的问题如果站点使用了 CDNCDN 缓存可能会导致旧内容持续一段时间。更新 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文件被重定向检查是否跳到错误路径尽量使用直接 200403被访问控制或 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 次本质上取决于你的站点有没有持续提供新的、结构清晰的内容。想清楚这一点就不会被最初那几个数字带偏。