公司动态
llms.txt 为何无人问津?AI 爬虫发现机制与配置排查全解析
1. 先搞懂 llms.txt 到底是什么以及它在解决什么问题如果你最近在关注 AI 搜索、大模型抓取或者网站内容被 AI 引用这件事大概率会刷到 llms.txt 这个词。这个标题的表述很直白就是“没人抓取我的 llms.txt”说白了你的网站已经按照规范写好了 llms.txt 文件也放在了根目录但 AI 搜索爬虫或者说大模型的内容抓取流程根本没有读取它。这个现象看起来简单背后涉及的内容抓取机制、格式规范、爬虫白名单、内容发现路径比你想象中要复杂不少。我先把结论放在前面llms.txt 是一个希望让大模型、AI 搜索工具、RAG 应用更好地理解网站结构的文本文件规范。它的核心思路是在网站根目录下放一个结构化的 Markdown 链接文件告诉 AI 你的网站里哪些页面最重要、哪些内容是核心、哪些页面不需要被抓取。它本身不是爬虫协议也不是搜索引擎排名规则更不是官方强制标准而是一种社区推动、逐步被不同工具采纳的内容描述规范。为什么需要它因为传统爬虫看的是 robots.txt 和 sitemap.xml这些东西主要告诉爬虫“哪里能访问、哪里不能访问、页面长什么样”。但对大模型来说它们不关心页面渲染效果它们更关心页面里有多少高质量的文本、关键信息是否集中、页面之间的关系是否清晰。你想想一个网页可能有一半是导航栏、广告位、推荐阅读和弹窗真正有价值的正文就几百字。llms.txt 就是想把这些噪音过滤掉直接把最核心的内容结构和链接交给 AI 系统。所以如果你写了 llms.txt 却没人抓取先别急着怪工具大概率是你的文件没有满足别人“发现它”和“理解它”的前提条件。本文就把这个问题拆开讲从文件规范、机器人文件配置、爬虫抓取逻辑、内容质量、测试方法这些角度把整个链路梳理清楚。无论你是个人站长、内容创作者还是做搜索优化、AI 应用开发的人这篇文章都能帮你定位问题出在哪一环。2. 为什么“放在根目录”还不够发现机制远比你想的复杂很多人最大的误解就是把 llms.txt 当成 sitemap.xml 或者 robots.txt 的同类。实际上它和这些传统文件在“被发现”的方式上完全不同。2.1 爬虫是怎么发现你的 llms.txt 的传统搜索引擎爬虫比如 Googlebot、Bingbot它们有一套成熟的调度系统会按照固定策略访问网站。先看 robots.txt再爬首页再沿着链接往下走也会主动读取 sitemap.xml 来了解网站结构。这套逻辑已经运行了二十多年非常稳定。但 llms.txt 目前的“发现机制”还远远没有统一。有的 AI 搜索工具会主动请求https://你的域名/llms.txt有的根本不会有的只会把它当作众多可抓取文件之一并不会特殊优先处理还有一些工具必须先在后台提交你的域名或者网站地址之后才会去尝试读取。这就是问题所在你以为“放在根目录就会被发现”但实际上很多 AI 爬虫根本没有内置“先请求 llms.txt 再抓取页面”的逻辑。它们的流程更像这样从某个种子 URL 开始抓取。抓取首页 HTML。从 HTML 里提取链接继续抓取。碰到带有 Markdown 格式的链接或者总结性文档才可能进一步处理。有些爬虫会在抓取完核心页面之后才尝试获取 llms.txt。换句话说你的文件在那里但爬虫的“眼睛”可能就没往那个方向看。这个问题在博客里有个很典型的比喻你把一封信放在自家门前的邮箱里但邮递员根本没有你这个地址的投递记录他连邮箱都不会看一眼。你要做的不是把信再写一遍而是让邮递员知道这个地址值得跑一趟。2.2 llms.txt 不是 robots.txt也不是 sitemap.xml很多站长会混淆这几个文件的作用我用一个表格来对比文件主要作用是否影响抓取边界是否影响内容优先级当前爬虫支持程度robots.txt告诉爬虫哪些路径不能访问是否几乎所有爬虫都会读取sitemap.xml告诉搜索引擎你的网站有哪些 URL否更多是建议否主流搜索引擎支持llms.txt给大模型提供网站内容结构和推荐链接否它更像内容摘要与链接索引是可以控制优先级和分类只有部分 AI 爬虫支持搞清楚这个区别你才知道自己卡在哪一步。如果你的 llms.txt 一直没被抓取你要确认的不是“文件内容写得好不好”而是“对方从哪个入口才能感知到你的文件”。我再补充一个容易踩的坑有些工具会同时读取 robots.txt 和 llms.txt如果你在 robots.txt 里屏蔽了某个 AI 爬虫那它自然也不会去读你的 llms.txt。这两者不是替代关系而是递进关系。先用 robots.txt 决定“能不能来”再用 llms.txt 决定“来了以后看什么、优先看什么”。3. 从零写好一份合格可用的 llms.txt别再以为 Markdown 就行先讲一个基础事实llms.txt 有官方推荐的格式草案但它本质上就是一个文本文件后缀名是.txt放在网站根目录下。它内部使用 Markdown 语法推荐结构包含几个部分文件说明、H1 标题、网站简介段落、区块标题、链接列表、可选的文件列表。很多人以为随便写几个链接就是 llms.txt结果文件里既没有说明也没有分类更没有正文区的索引爬虫抓到以后无法判断页面优先级自然也不会优先处理。3.1 一份基础可用的 llms.txt 长什么样我建议你先看一个最简结构再逐步扩展# 网站名称 一段简洁的网站介绍说明这个网站是做什么的适合 AI 系统快速了解站点内容。 ## 核心页面 - [首页](https://example.com/) - [关于我们](https://example.com/about) - [产品介绍](https://example.com/products) ## 文档与教程 - [快速开始](https://example.com/docs/quickstart) - [API 参考](https://example.com/docs/api) ## 博客文章 - [2025 年技术趋势总结](https://example.com/blog/trends-2025) - [如何配置本地开发环境](https://example.com/blog/dev-env-setup)这个结构看起来简单但它已经包含了几层信息站点级摘要让 AI 知道网站是做什么的。分类区块告诉 AI 网站内容分哪几块。链接列表优先级由最前面的链接决定。区块标题方便 AI 按主题抓取。如果你把网站几十个页面全部塞进去而不是分层分类那 AI 系统会很难判断哪些才是真正的核心页面。这也是爬虫不抓取、不重视文件的常见原因之一你的文件本身没有提供足够清晰的导航价值。3.2 文件里不要出现什么内容这里我提醒几个常见错误很多人就是栽在这些细节上不要放 robots.txt 的 meta 标签、不要放 HTML 标签、不要放 JavaScript 代码。这是纯文本 Markdown不是网页。不要塞入重复链接不要为了凑数量把同一个页面的不同 URL 都放进去。不要把动态 URL 和带参数链接当成核心页面比如?id123这种爬虫很少优先抓取。不要忽略链接锚文本锚文本就是链接显示出来的文字最好是描述性文字不要写“点击这里”。不要把全部内容都放在一个层级里至少要有分类层级。这里再加一个容易被忽略的问题文件编码。llms.txt 建议使用 UTF-8 编码不要用 GBK 或者带 BOM 的 UTF-8。某些爬虫解析器对编码很敏感一旦遇到乱码整个文件都可能被丢弃。我自己测试过的一个例子第一次写 llms.txt 时内容全对但文件是从 Windows 记事本保存的自动带了 BOM 头有些解析器会把这个符号当成内容的一部分后续链接解析就错位了。后来换成无 BOM 的 UTF-8问题马上消失。所以在发布之前用 VSCode 或者命令行检查一下文件编码这是最便宜、最有效的排查手段。4. 写入 robots.txt 和 sitemap 只是基础操作关键在于“给谁看”4.1 当前主流 AI 爬虫与 llms.txt 的支持情况你可能会问现在到底有哪些爬虫会读取 llms.txt这里我只能说一个大概范围因为工具迭代太快而且不同团队对 llms.txt 的重视程度不一样。从公开信息和社区反馈来看以下几类工具会尝试读取部分 AI 搜索工具比如一些以答案生成、信息聚合为核心的产品。部分大模型训练数据抓取流程会在内部抓取阶段试探根目录文件。部分 RAG 类应用尤其是个人开发的、基于知识库的应用会把 llms.txt 作为首选入口。一些开源爬虫框架可能内置了支持 llms.txt 的抓取逻辑。反过来说也有不少工具根本不关心这个文件。常见的 AI 爬虫比如 GPTBot、ClaudeBot、PerplexityBot、Google-Extended 等它们的标准抓取流程是读取 robots.txt再直接抓取页面 HTML并不会因为根目录存在 llms.txt 就改变路径。那 llms.txt 到底有什么用它的价值更多体现在当某个 AI 系统真的想理解你的网站时这个文件可以大幅提高抓取效率和质量。它不是万能的但它是一个准确且廉价的内容结构和推荐索引。4.2 如何在 robots.txt 中正确处理这些爬虫这里有一个很关键的实操点你如果想要某些 AI 爬虫读取你的网站并进一步读取 llms.txt那 robots.txt 不能被一刀切屏蔽。很多人的 robots.txt 是沿用别人的模板结果里面写了User-agent: * Disallow: /或者更夸张User-agent: * Disallow: /wp-admin/这种写法对某些 AI 爬虫来说就等于整个网站都不给访问。这时候别说 llms.txt连首页都不会被抓取。更合理的做法是在 robots.txt 里允许 AI 爬虫访问网站根目录和核心内容路径同时对不必要的目录做精细控制User-agent: GPTBot Allow: / Disallow: /private/ User-agent: ClaudeBot Allow: / Disallow: /private/ User-agent: PerplexityBot Allow: / Disallow: /private/ User-agent: * Allow: / Disallow: /private/同时还要在 sitemap.xml 当前已有的链接基础上把 llms.txt 对应的链接关系通过网站首页和核心页面暴露出来而不是指望爬虫直接猜根目录文件名。比如在首页的 HTML 中加一个指向 llms.txt 的link标签或者在页面正文中给出该文件链接都能提高被发现的概率。link relalternate typetext/markdown hrefhttps://example.com/llms.txt这个操作很简单但很多人没做。它的原理是爬虫从首页 HTML 里发现这个链接后有可能把它当作一个可抓取的页面存到待抓取队列里。尤其是一些通用爬虫不会专门猜测 llms.txt但它会老老实实跟随页面里的链接。4.3 为什么 sitemap.xml 也要更新sitemap.xml 是给搜索引擎爬虫看的但它同样可能被部分 AI 工具读取。如果 sitemap 里没有包含核心页面那 AI 爬虫只能通过 HTML 链接慢慢爬发现速度会慢很多。建议在生成 sitemap 时确保核心内容页面都在其中并且页面之间有清晰的内部链接关系。如果你的 llms.txt 中列出的页面和 sitemap 中的页面不一致会对爬虫造成困扰——它会想到底哪个才是网站的核心内容5. 排除检查链路为什么你的 llms.txt 可能“没被抓取”5.1 先看日志再下结论很多人说“没被抓取”但实际根本没查过服务器访问日志。我自己遇到过一个案例用户说 llms.txt 没人读取结果一查服务器日志发现 ClaudeBot 每天访问了好几次只是用户一直在看流量统计里有没有明显标注没注意这个爬虫的请求记录。所以第一步不要凭感觉先看 Nginx 或者 Apache 的访问日志搜索这些关键词grep llms.txt /var/log/nginx/access.log grep GPTBot /var/log/nginx/access.log grep ClaudeBot /var/log/nginx/access.log如果日志里完全没有任何记录说明爬虫根本没找到你的文件链接或者根本没有访问你的网站。如果日志里有记录但返回 404那就是文件路径或者权限问题。如果返回 200说明文件其实已经被下载过只是后续没有被解析或使用。这段日志分析非常关键能帮你直接判断问题停留在哪一层。5.2 检查文件是否真的能公开访问这里建议用浏览器无痕模式或者 curl 命令测试curl -I https://example.com/llms.txt正常响应应该是 200并且返回Content-Type: text/plain。如果你看到 403、404、301 跳转那就说明文件并没有被正常暴露。301 跳转也要注意如果你的网站强制 http 跳 https或者加了 www 跳转那 llms.txt 的最终地址可能和你配置的不一致。建议请求最终的 https 地址并且保持站内所有的 llms.txt 链接为同一个最终 URL。5.3 检查文件是否被 robots.txt 拦截即使你的 llms.txt 文件本身可以访问如果 robots.txt 里对应爬虫的规则不允许访问根目录爬虫就不会去抓取。这类问题排查步骤打开你的 robots.txt看看有哪些User-agent规则。用curl -A GPTBot https://example.com/robots.txt模拟 AI 爬虫访问。确认 Allow 和 Disallow 的优先级是否按预期生效。在 robots.txt 的标准里最具体的匹配规则优先级更高但不同爬虫可能有自己的实现差异。最稳妥的做法是直接允许根目录和内容目录访问不要用过于复杂的规则避免误伤。5.4 检查 CDN 缓存和 WAF 规则如果你使用了 Cloudflare、阿里云 CDN 之类的服务问题可能出在中间层。比如CDN 对 txt 文件的缓存时间太长导致你明明更新了内容爬虫看到的还是旧版本。或者 WAF 防火墙规则把你的文件请求当作异常流量拦截了。这类情况很难在本地复现因为直接请求源站 IP 可能没问题但通过 CDN 访问就异常。建议在测试时既测试域名访问也测试源站直连对比一下结果。5.5 检查 HTML 内容入口这个点最容易忽略。你可以问自己一个问题AI 爬虫从你的首页出发能否在有限的跳数内找到 llms.txt很多网站的首页是一个纯运营落地页没有任何内容链接也没有指向 llms.txt 的入口。那爬虫抓完首页以后发现既没有链接线索也没有 sitemap 引导它就跳到下一个 URL 去了。你的 llms.txt 即使写得再好也相当于放在一个没有门牌号的地方。解决办法很直接在网站首页的head或footer区域加入 llms.txt 的链接至少让爬虫有一次机会看到它。5.6 检查 llms.txt 内容是否被解析器接受有时候文件可以被下载但内容结构不符合解析器预期导致解析器把它当成普通文件丢在一边。比如标题层级混乱解析器无法识别主标题。链接格式错误比如使用了 HTTP 而不是 HTTPS。文件过短只有一两个链接没有给 AI 足够的导航价值。文件过大塞入了成百上千个链接解析超时或被截断。判断标准很简单如果你的 llms.txt 不能让自己在五分钟内理解网站结构并且知道优先级那它对 AI 来说也差不多。6. 优化 llms.txt 的实用技巧让 AI 更愿意使用它6.1 用“摘要式简介”代替口号式文案很多人的 llms.txt 开头是“欢迎来到我的网站这是一个优秀的博客”这种描述对 AI 来说没有信息量。更好的写法# 我的技术博客 面向后端开发者的技术博客内容涵盖 Go、Docker、Kubernetes 和云原生架构提供可运行的示例代码和部署实践。这段简介直接告诉 AI网站是谁给谁看的、提供什么类型的干货、读者可以从这里获得什么。LLM 解析时这段描述很容易被提取为网站的核心标签。6.2 把最重要的内容放在最前面这个文件不同于普通页面阅读者很可能是一个自动化系统它不一定会完整读完。前三个区块应该放你真正希望被 AI 引用的核心内容比如产品文档、API 参考、核心教程、高质量长文。不要把自己觉得“意义重大”但实际没人看的页面放前面。前面放“关于我们”“公司介绍”这种页面对 AI 的吸引力不大因为它并不能帮助 AI 回答用户问题。核心页面放前面会直接提升这些页面的被引用概率。6.3 按照用途分区而不是按发布时间常见的 llms.txt 分区思路产品文档区API 参考区博客文章区开源项目区FAQ 区分区的核心逻辑是让用户和 AI 都能快速定位内容。如果你只是按年份把文章堆在一起这个文件的导航价值就大打折扣。6.4 保持文件更新频率合理如果你的网站每周都发新内容llms.txt 也建议每周或每两周更新一次。不要写完之后就再也不管。AI 系统抓取时可能会比较文件的最后修改时间。长期不更新的 llms.txt在爬虫眼中的优先级会逐步降低。你可以写一个小脚本在发布文章后自动更新 llms.txt把最新文章追加到对应分类。这样能保证文件始终反映网站当前状态而不是一个过期快照。7. 不同部署环境下的 llms.txt 配置参考7.1 静态站点如果你用的是 Hugo、VitePress、Astro、Hexo 这类静态站点生成器最简单的方式是把 llms.txt 放在static或public目录发布后会自动出现在网站根目录。注意一点如果你的站点有 basePath比如部署在 GitHub Pages 的子目录下那么 llms.txt 的实际 URL 会变成https://用户名.github.io/项目名/llms.txt。这仍然是根路径只不过“根”是子路径的根。这种情况要在 sitemap 和首页链接里都使用这个完整路径。7.2 Nginx 服务在 Nginx 中你只需要确保根目录配置正确server { listen 80; server_name example.com; root /var/www/example.com; location /llms.txt { default_type text/plain; } }之所以专门加一个location是为了确保Content-Type是text/plain而不是被默认解析成application/octet-stream。7.3 WordPress 网站如果你用 WordPress不需要修改主题源码直接使用 FTP 或者文件管理器把 llms.txt 上传到网站根目录即可。每次更新时如果不想手动改可以写一个简单的 PHP 页面模板但通常情况下直接传文件就够了。需要注意WordPress 的固定链接规则可能会影响静态文件访问但根目录下的.txt文件一般不会受影响因为它不是通过 WordPress 路由处理的。7.4 存在鉴权或内网环境如果你的网站需要登录才能访问那么 llms.txt 也必须允许匿名访问。否则AI 爬虫会收到登录跳转页面而不是文本内容。这类场景下如果确实要开放内容给 AI需要通过中间层生成一份公开版本的 llms.txt而不是直接暴露内网文件。8. 实测建议先做最小闭环验证再谈扩大曝光8.1 不急着“每个 AI 工具都提交”先把内容抓取路径通起来很多人一股脑地往各种 AI 搜索平台提交站点结果文件问题没解决提交再多也没用。我建议按这个顺序走本地验证文件结构用浏览器打开 llms.txt确认渲染正常链接可点击。命令行验证响应用 curl 抓取确认状态码、Content-Type、内容长度。验证 robots.txt 放行模拟主流 AI 爬虫的 User-Agent确认可以访问。验证首页入口通过无痕模式查看首页源码确认 llms.txt 的链接存在。等几天再看日志观察日志中是否有 llms.txt 的请求记录对比提交前后变化。用第三方工具测试有些工具会提供 AI 可读性检测可以用它检查文件解析结果但要注意结果仅供参考不同工具判断标准不一样。8.2 如果依然没有人抓取怎么办如果上面六步全部通过但还是没有看到实际抓取记录那就接受一个现实你控制的只是你网站自己的文件和配置你控制不了别人的爬虫策略。这种情况下可以尝试持续更新 llms.txt让它保持活跃。把 llms.txt 的链接放在更多公开页面里比如首页、关于页、Sitemap 页面。看博客或者社区里关于具体 AI 搜索工具的支持说明确认它们是否公开支持 llms.txt。多关注那些使用开源爬虫框架的 AI 应用它们采用新规范的速度通常更快。保持标准、简洁、稳定的输出。今天的 llms.txt 可能不被某几个大型工具认可但未来这个格式一旦被更多工具采纳你的文件已经准备好了这本身就是一种优势。9. 常见误区与边界认知9.1 llms.txt 不是搜索结果排名工具很多人把 llms.txt 当成 SEO 工具指望写完之后 AI 搜索排名提升。但 llms.txt 的作用是“给 AI 理解网站的入口和结构”不是“告诉 AI 必须回答你的内容”。即使 AI 抓取了 llms.txt也不代表它一定会引用你。最终的答案来自模型对多个来源的综合判断。9.2 llms.txt 不是网站所有权的证明有观点认为“网站有 llms.txt 就代表站主愿意被 AI 抓取”但这只是社区层面的共识不是法律依据。不同平台有自己的判断标准。目前更常见的做法仍然是通过 robots.txt 来声明抓取边界。9.3 llms.txt 更新频率不等于抓取频率文件更新后爬虫不一定马上重新抓取。它有自己的周期和调度策略可能是一周一次也可能是一个月一次。所以不要因为当天改完没看到抓取日志就断定文件有问题。9.4 “支持 llms.txt”不等于“必须使用 llms.txt”不少 AI 工具会在官网说支持 llms.txt意思是它们的爬虫会尝试请求这个文件。但如果请求失败、内容为空、解析异常它们会直接回退到普通 HTML 抓取流程。所以即使你的 llms.txt 没被抓取AI 依然可能通过其他页面抓取你的网站只是抓取效率可能没那么高。10. 从“没人抓取”到“稳定被读取”最值得盯住的三件事写到这里我把自己踩过的坑和排查经验再浓缩一下。第一先确认文件本身真的是可访问、可解析的不要用猜测代替日志验证。第二保证 robots.txt、sitemap、首页链接在 llms.txt 这个路径上形成闭环让爬虫至少有一个自然的入口发现文件。第三不要指望 llms.txt 单独完成所有曝光工作它只是帮助 AI 理解网站的众多机制之一。一个成熟的做法是把 llms.txt 和 robots.txt、sitemap.xml、页面结构化数据当成一套组合策略而不是各管各的文件。先让 AI 爬虫能进来再让它看清内容结构最后才轮得到“内容被引用”这件事。返回最开始的问题Nobody Fetched My Llms.txt。大多数情况下不是因为你的内容糟糕而是因为你的文件缺少被发现路径或者网站整体的抓取配置存在断点。把这些断点补上再给爬虫一点时间结果会比你现在看到的更接近预期。