尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

llms.txt实战:提升AI爬虫内容发现效率的网站优化指南

llms.txt实战:提升AI爬虫内容发现效率的网站优化指南 1. 从一场关于 llms.txt 的真实实验说起之前在关注网站与 AI 爬虫交互这个话题时看到一个很有意思的社区实验有人把llms.txt文件部署到了 83 个网站上然后连续观察 12 周的访问日志最后统计下来OpenAI 的爬虫只读取了它 7 次。这个数据乍一看非常刺眼。很多刚接触llms.txt的开发者可能会下意识问既然 AI 爬虫根本不怎么读它那我还有必要部署吗这个规范是不是已经被主流厂商放弃了答案并没有那么简单。要理解这个实验数据必须先弄清楚llms.txt到底解决什么问题以及它当前在 AI 生态里处于什么位置。llms.txt是由 Jeremy Howard 等人在 2024 年提出的一个开放建议核心思想非常朴素为每个网站提供一份纯文本格式的站点说明文件让大语言模型LLM在抓取网页之前能以极低的成本、极高的效率了解这个网站有哪些重要页面、每个页面的用途是什么、网站整体在讲什么。你可以把它理解成“给 LLM 看的产品说明书”也可以理解成“AI 时代的标准化导航页”。它不替代 HTML不替代 sitemap它的目标读者非常明确是各类 AI 爬虫、知识库构建工具和语言模型应用。本文将围绕llms.txt展开完整讲解内容包括它和robots.txt、sitemap.xml的区别文件规范怎么写如何部署到网站如何监控 AI 爬虫的读取情况以及前面那个“83 个网站 12 周只被读取 7 次”的实验数据应该怎么理性看待。这既是一份规范教程也是一份实战笔记适合个人站长、内容平台开发者、SEO 工程师以及任何关心“我的网站如何被 AI 更好地理解”的开发者阅读。2. llms.txt、robots.txt、sitemap.xml 的定位区别很多刚接触llms.txt的人第一反应是问它和robots.txt有什么区别是不是重复了先说结论三者解决的问题完全不同它们应该共存而不是互相替代。2.1 robots.txt给爬虫立规矩robots.txt是一个历史悠久的标准它的核心作用是“权限控制”。你想告诉搜索引擎爬虫哪些路径可以抓、哪些路径不能抓就写在里面。它的本质是一个“准入规则”而不是“内容说明”。比如你不想让爬虫访问/admin/目录可以在robots.txt里写User-agent: * Disallow: /admin/这个文件主要负责控制“能不能抓”它不关心抓下来的内容是什么更不会告诉爬虫“这个网站哪个页面最重要”。2.2 sitemap.xml给爬虫列清单sitemap.xml的核心作用是“URL 清单”。它把网站的所有重要链接列出来方便搜索引擎更快发现和索引新页面。?xml version1.0 encodingUTF-8? urlset xmlnshttp://www.sitemaps.org/schemas/sitemap/0.9 url lochttps://example.com/docs/llms-txt/loc lastmod2025-01-01/lastmod /url /urlset但它有一个问题它只告诉爬虫“这里有哪些 URL”没有告诉爬虫“这个页面里的核心内容是什么”。对于传统搜索引擎来说这已经够用了因为搜索引擎爬虫会把整个 HTML 页面拿回去做全面分析。2.3 llms.txt给 LLM 抄近路LLM 抓取网页的方式和传统搜索引擎不同。传统爬虫关心的是网页里的所有 HTML 标签、正文、链接权重而 LLM 应用往往需要的是“快速、聚焦、结构化的内容摘要”。一个页面可能包含导航栏、侧边栏、广告、相关推荐等大量与核心内容无关的信息。LLM 要从中提取有效信息既浪费 token又容易受干扰。llms.txt的思路是网站主动提供一份 Markdown 格式的精简内容清单让 LLM 不用解析整个 HTML直接读这个文本文件就能知道这个网站是做什么的最重要的几个页面是哪些各个页面之间是什么层级关系文件核心作用面向对象格式robots.txt控制抓取权限所有网络爬虫纯文本规则sitemap.xml提供 URL 清单搜索引擎爬虫XMLllms.txt提供内容摘要与导航LLM 应用与 AI 爬虫Markdown三者可以同时存在互相补充。用一句话概括robots.txt管“能不能来”sitemap.xml管“来哪些地方”llms.txt管“来了以后怎么快速理解这里”。3. llms.txt 文件规范详解了解概念之后我们来看llms.txt的具体格式。这个规范目前仍在迭代中但核心结构已经比较稳定。3.1 文件存放位置按照建议llms.txt应该放在网站的根目录下类似robots.txt和sitemap.xmlhttps://yourdomain.com/llms.txt这样可以保证任何 AI 爬虫都能用最直接的方式找到它不需要猜测路径。3.2 文件格式llms.txt的内容实际上是一个 Markdown 格式的纯文本文件包含三部分核心信息一级标题以#开头写明网站域名。网站描述以开头的引用块一句话概括网站主题。链接列表按 Markdown 链接格式列出重要页面可以分组。最小示例# example.com Example.com 是一个提供 Python 开发教程的技术博客。 [首页](https://example.com) [Python 入门教程](https://example.com/python-basics) [Flask 实战项目](https://example.com/flask-project)3.3 更完整的示例对于内容较多的网站建议按板块分组方便 LLM 按语义查找# docs.example.com docs.example.com 是 Example 公司产品的官方技术文档站包含快速入门、API 参考、部署指南和常见问题。 ## 快速入门 [安装指南](https://docs.example.com/getting-started/installation) [第一个应用](https://docs.example.com/getting-started/first-app) ## API 参考 [身份认证 API](https://docs.example.com/api/auth) [用户管理 API](https://docs.example.com/api/users) [订单接口 API](https://docs.example.com/api/orders) ## 部署运维 [服务器部署](https://docs.example.com/deploy/server) [容器化部署](https://docs.example.com/deploy/docker) [日志与监控](https://docs.example.com/deploy/monitoring)3.4 关于 llms-full.txt 的建议除了llms.txt社区还提出了llms-full.txt的概念。区别在于llms.txt提供的是“目录 摘要”核心页面数量有限体积小方便快速浏览。llms-full.txt提供的是“全部内容”把整个网站的文本内容拼接成一个巨大的 Markdown 文件适合需要完整知识库的场景。如果你的网站内容量很大建议同时维护两份文件一份轻量级导航一份完整内容备份。如果内容不多llms.txt一个文件就足够了。3.5 在 HTML 中声明关联为了让爬虫和浏览器开发者工具更容易建立关联还可以在 HTML 头部加入link标签link relllms hrefhttps://example.com/llms.txt这样当有人访问你的网页时工具可以自动发现对应站点的llms.txt文件。!-- 文件路径模板中的 head 区域 -- link relllms href/llms.txt titlellms.txt这里需要注意link relllms目前不是强制要求但加上它不会有什么负面作用反而能让关联关系更明确。4. 实验数据拆解83 个网站、12 周、7 次读取意味着什么回到文章开头的实验。项目标题的意思是实验者在 83 个网站上部署了llms.txt文件经过 12 周监控发现 OpenAI 的爬虫总共读取了这个文件 7 次。这个实验结果应该如何解读先不要急着下“llms.txt 没用”的结论我们从几个维度来拆解。4.1 实验可能的统计口径通常这类实验会在服务器访问日志中配置监控筛选关键用户代理User-Agent例如 OpenAI 当前对外公布的爬虫 UAGPTBot用于抓取网页内容可能用于模型训练或知识增强。OAI-SearchBot用于 ChatGPT 联网搜索和摘要。ChatGPT-User用于用户主动触发 ChatGPT 浏览网页时的抓取。当访问日志中出现这些 UA 请求/llms.txt时计数器加一。83 个网站、12 周、7 次说明平均每个网站每 10 周左右才会被 OpenAI 爬虫读取一次llms.txt。4.2 7 次读取是多还是少如果按照“网站部署了规范文件就希望所有 AI 爬虫立刻来读取”这个预期7 次确实很少。但我们需要理解爬虫的工作原理大部分爬虫不会因为一个网站新增了一个文本文件就立即调整自己的抓取策略。爬虫通常有自己的调度周期。一个普通权重的中小网站可能一个月才被完整爬取一次。爬虫对llms.txt的访问往往发生在它准备深度抓取站点内容时才发生而不是第一次遇到网站时就触发。所以7 次读取并不代表llms.txt被 OpenAI 忽略了更可能的解释是被监控的 83 个网站在当前状态下触发“深度抓取”的机会本来就不多。4.3 为什么读取率不高常见原因分析原因一发现机制仍在完善llms.txt是一项相对较新的规范主流 AI 爬虫对它的支持策略并不总是第一时间更新。有的爬虫可能优先读取robots.txt再根据网页里的链接关系去爬取 HTMLllms.txt并不在默认抓取路径中。原因二网站本身的抓取优先级不高对于 OpenAI 这类公司的爬虫来说爬取策略会综合考虑网站权重、内容质量、更新频率等因素。如果一个网站本身很少被爬取那它的llms.txt被读取的次数自然也会很低。原因三12 周时间窗口仍然偏短爬虫索引体系和内容调度系统都有缓存和队列一个文件的首次被发现到被规范化使用中间可能存在明显滞后。12 周对于人工运营来说已经不算短但对分布式爬虫系统来说可能只是几个调度周期。4.4 这个实验对我们有什么参考价值这个实验给我们的真正启示不是“llms.txt 没用”而是部署llms.txt不应该抱着“立刻被 AI 爬虫大量读取”的功利心态。llms.txt当前更像是一种“基础设施投资”和“内容可发现性优化”它的价值体现在长期和增量上。规范的效果不仅取决于爬虫是否读取还取决于文件内容是否高质量、是否持续更新。如果你所在行业或业务非常依赖 AI 搜索导流比如内容站点、文档平台、知识库产品那么提前部署llms.txt仍然值得做——因为当 OpenAI、Anthropic、Google 等厂商全面支持这个规范时先行者的内容会更容易被优先索引和引用。5. 在网站上部署 llms.txt 的完整实战接下来进入实操环节。我会从创建文件开始逐步演示如何把一个llms.txt部署到常见服务器环境并验证它是否可以被正常访问。5.1 创建 llms.txt 文件假设我们运营一个名为“云原生技术栈”的博客站点域名是cloudnative.example.com。在项目根目录或服务器网站根目录下创建llms.txt文件# cloudnative.example.com 云原生技术栈是一个专注于 Kubernetes、Docker、Istio、可观测性和 DevOps 实践的中文技术社区提供教程、案例和工具评测。 ## 容器基础 [Docker 入门实战](https://cloudnative.example.com/docker-basics) [Docker Compose 编排详解](https://cloudnative.example.com/docker-compose) ## 编排调度 [Kubernetes 核心概念](https://cloudnative.example.com/kubernetes-core) [Kubernetes 存储与网络](https://cloudnative.example.com/kubernetes-storage-network) [Helm 包管理实践](https://cloudnative.example.com/helm-guide) ## 服务网格 [Istio 流量管理](https://cloudnative.example.com/istio-traffic) [Istio 可观测性集成](https://cloudnative.example.com/istio-observability) ## 可观测性 [Prometheus 监控体系](https://cloudnative.example.com/prometheus) [Grafana 可视化面板](https://cloudnative.example.com/grafana) [OpenTelemetry 统一采集](https://cloudnative.example.com/opentelemetry)在编写llms.txt时有几个细节需要注意标题中的域名应该与站点实际域名一致。描述尽量精简最好控制在两三句话以内保证 LLM 能快速获取网站定位。链接要使用完整 URL包括https://前缀避免爬虫解析相对路径出差错。分组标题要语义清晰方便 LLM 按照主题定位内容。5.2 部署到 Nginx如果你的网站使用 Nginx只需要把llms.txt文件放到 Nginx 的站点根目录即可。默认情况下Nginx 会直接返回根目录下的静态文件。实际配置中你只需确认站点根目录配置正确server { listen 80; server_name cloudnative.example.com; root /var/www/cloudnative; index index.html; location / { try_files $uri $uri/ 404; } }把llms.txt上传到/var/www/cloudnative/llms.txt# 将本地文件上传到服务器目录 scp llms.txt rootyour-server-ip:/var/www/cloudnative/然后测试访问curl -I https://cloudnative.example.com/llms.txt预期响应头中应包含200 OK和Content-Type: text/plain。5.3 部署到 ApacheApache 环境下也是类似操作把文件放到DocumentRoot目录VirtualHost *:80 ServerName cloudnative.example.com DocumentRoot /var/www/html/cloudnative /VirtualHost上传文件后重新加载配置sudo systemctl reload apache25.4 部署到静态托管平台如果你使用 GitHub Pages、Vercel、Netlify 或 Cloudflare Pages 部署静态站点最简单的方式是把llms.txt文件直接放到构建目录的根目录。以 Netlify 为例如果你的发布目录是public那么文件路径就是public/llms.txt构建部署后访问https://your-domain.netlify.app/llms.txt如果你绑定了自定义域名就使用自定义域名访问。5.5 验证文件可访问除了手动用浏览器访问建议用命令行验证返回内容和类型# 查看文件内容 curl -s https://cloudnative.example.com/llms.txt # 查看响应头 curl -sI https://cloudnative.example.com/llms.txt重点关注两个响应头HTTP/1.1 200 OK表示文件存在且可访问。Content-Type: text/plain表示返回的是纯文本适合 LLM 解析。如果Content-Type不对可能是服务器没有正确识别.txt后缀通常会在 Nginx 的mime.types配置中已经默认支持一般不需要额外处理。5.6 通过访问日志监控爬虫读取情况部署完之后我们需要验证 AI 爬虫是否真的访问过这个文件。方法很简单分析 Web 服务器访问日志。Nginx 默认日志路径通常在/var/log/nginx/access.log。通过grep过滤出访问llms.txt的记录grep llms.txt /var/log/nginx/access.log如果要具体查看 OpenAI 爬虫的访问情况可以从用户代理User-Agent中过滤。比如grep llms.txt /var/log/nginx/access.log | grep -i GPTBot\|OAI-SearchBot\|ChatGPT-User日志输出大致如下203.0.113.10 - - [26/Jan/2025:14:23:11 0800] GET /llms.txt HTTP/1.1 200 1123 - Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.0; https://openai.com/gptbot看到类似记录说明 OpenAI 的爬虫确实访问了你的llms.txt文件并且服务器返回了200状态码。如果不想手动查日志也可以写一个简单的定时脚本每天统计访问次数并输出摘要#!/bin/bash # 文件路径monitor_llms_crawler.sh LOG_FILE/var/log/nginx/access.log echo llms.txt 访问统计 grep llms.txt $LOG_FILE | awk {print $7} | sort | uniq -c echo OpenAI 爬虫访问记录 grep llms.txt $LOG_FILE | grep -iE GPTBot|OAI-SearchBot | wc -l将脚本加入 crontab 即可实现定期监控0 9 * * * /bin/bash /opt/scripts/monitor_llms_crawler.sh6. 常见问题与排查思路在部署和运维llms.txt的过程中你可能会遇到一些典型问题。下面整理成表格并针对每个问题给出详细处理思路。问题现象常见原因解决思路访问 llms.txt 返回 404文件未部署到正确目录检查网站根目录和文件名大小写能访问但 Content-Type 不正确服务器 MIME 类型配置异常检查 Nginx/Apache 的 mime 配置日志中没有任何爬虫访问记录爬虫调度周期长或站点权重低持续观察同时用搜索引擎手动触发抓取部署后 robots.txt 被错误拦截robots.txt 中 Disallow 误伤检查 robots.txt 规则文件内容被爬虫读取但乱码编码不是 UTF-8统一保存为 UTF-8 无 BOM 格式不确定 OpenAI 爬虫 UA官方 UA 策略会更新以 OpenAI 官方文档为准避免硬编码6.1 404 问题排查出现 404 时首先确认访问的 URL 是否完全匹配文件名。Linux 服务器文件名大小写敏感LLMS.TXT和llms.txt是两个不同的文件。# 查看网站根目录下是否有该文件 ls -la /var/www/cloudnative/llms.txt如果文件不存在重新上传如果文件存在但 404检查 Nginx 配置中的root路径是否指向正确目录。6.2 如何确认 OpenAI 爬虫的身份OpenAI 官方目前公布了多个爬虫 UA常见的有GPTBot用于内容索引与模型训练相关抓取。OAI-SearchBot用于 ChatGPT 搜索功能。ChatGPT-User用于用户与 ChatGPT 交互时触发网页浏览。要验证请求来源是否真的是 OpenAI建议不要只看 UA 字符串还要做反向 DNS 解析和 IP 段核对。这样可以避免伪造 UA 的脚本干扰统计。在分析日志时可以输出来源 IP 做初步判断grep llms.txt /var/log/nginx/access.log | grep -i GPTBot | awk {print $1} | sort | uniq然后通过whois命令查询 IP 归属确认是否为 OpenAI 官方网段。6.3 llms.txt 会与 robots.txt 冲突吗llms.txt不会自动改变robots.txt的语义。如果你的robots.txt中设置了Disallow: /llms.txt那么遵循该规则的爬虫就不会访问它。如果你希望 AI 爬虫能顺利读取llms.txt请确保robots.txt中没有拦截根目录下的这个文件。同时需要注意llms.txt是建议性规范不是所有爬虫都会严格遵守部署时不要把它当成“抓取许可”来使用。6.4 部署很久仍没有爬虫访问怎么办这通常不是配置问题而是爬虫调度问题。传统的搜索引擎爬虫对中小站点的抓取频率本来就不高AI 爬虫同样会受到站点权重、内容更新频率等因素影响。可以尝试以下方式加快发现在sitemap.xml中把llms.txt相关的关键页面列为高优先级。主动在对应平台的站长工具中提交网址。保持网站内容稳定更新提高整体抓取频率。持续观察 2 到 3 个月不要因为一两周没有记录就判定失败。7. 最佳实践与工程建议部署llms.txt并不难难点在于持续维护和与站点整体策略配合。下面给出一些工程层面的建议。7.1 内容质量优先llms.txt的目标读者是 LLM而不是普通用户。这意味着内容应该简洁、结构化、信息密度高避免营销话术和模糊描述。描述要回答三个问题网站是什么、服务于谁、能提供什么。一个存在明显问题的写法# example.com 这是一个非常棒的网站涵盖大量优质内容欢迎访问这个描述对 LLM 几乎没有信息量。更好的写法是直接说明网站主题和内容范围# example.com example.com 提供 Java 后端开发、Spring Boot 实战、微服务架构与数据库调优的中文技术文档。7.2 与 robots.txt 和 sitemap.xml 联动部署llms.txt时不要把它和已有文件割裂开。一套完整的配置应该是robots.txt允许 AI 爬虫访问站点特别是允许访问llms.txt。sitemap.xml列出所有重要页面帮助爬虫发现新内容。llms.txt提供内容摘要和页面分类降低 LLM 理解成本。以 OpenAI 爬虫为例可以在robots.txt中显式允许抓取llms.txtUser-agent: GPTBot Allow: /llms.txt Allow: / Disallow: /private/这样既保证了内容可发现性又保留了敏感目录的访问控制。7.3 注意版权与隐私边界llms.txt不应该包含非公开信息也不应该包含个人敏感数据。它在设计上就是要被爬虫公开读取的所以发布前必须做一次“信息公开审查”。如果你有部分页面不希望被 AI 索引就不要把它们写进llms.txt同时也要在robots.txt中做好限制。两者叠加才是完整策略。7.4 监控与更新机制网站内容发生变化时要注意同步更新llms.txt。比如新增了重要文档、改版后移除了旧页面都应该及时调整文件中的链接列表。建议在 CI/CD 流水线中加入一步检查命令确保llms.txt中的链接没有大面积失效# 检查 llms.txt 中的链接是否返回 200 for url in $(grep -oE https?://[^)] llms.txt); do status$(curl -o /dev/null -s -w %{http_code} $url) echo $status $url done这段脚本会把文件中所有链接提取出来逐个请求并输出状态码。大量404时说明文件已经过期需要更新。7.5 安全与性能考量由于llms.txt是一个静态文件通常不会带来明显性能压力。但在以下场景要注意不要把这个文件交给动态接口动态拼接避免每次请求都触发数据库查询。如果站点规模很大建议在 CDN 层缓存该文件并设置较长的缓存有效期。不要因为加入了一个新文件就放松对访问日志的攻击监控llms.txt同样可能被扫描工具探测。另外对于生产环境变更无论是修改 Nginx 配置、上传文件还是调整robots.txt都建议先在测试环境验证确认无误后再上线并保留回滚方案。8. 总结与下一步学习方向llms.txt是一个还在成长中的规范当前主流 AI 爬虫对它的读取率确实不算高。但把它放到整个 AI 内容生态里看它代表了一种重要的趋势网站开始主动为 LLM 优化内容呈现方式而不是被动等待爬虫来解析 HTML。本文从核心概念讲起梳理了llms.txt与robots.txt、sitemap.xml的区别给出了完整的文件格式规范并通过一个“83 个网站 12 周只被读取 7 次”的实验数据分析了当前 AI 爬虫对该规范的采用现状。随后我们完成了从创建、部署到日志监控的完整实战也整理了常见的排错思路和工程建议。如果你准备在自己的站点上部署llms.txt我的建议是不要因为短期读取量低而放弃把它当作内容基础设施的一部分持续维护。你可以先从轻量级导航文件开始配合robots.txt开放访问权限再通过访问日志建立监控基线。随着主流 AI 厂商对相关规范的支持逐步完善早期做好结构化内容沉淀的网站会更容易在 AI 搜索结果和知识图谱中被引用和推荐。接下来可以继续探索的方向包括llms-full.txt的完整内容生成方案、如何用脚本自动同步文档站内容到llms.txt、以及如何通过结构化数据进一步提升网站在 AI 应用中的可理解性。动手在自己熟悉的一个站点上操作一轮会比读十篇文章收获更大。
返回列表