Agents.txt不是访问控制机制
DreamHost现在在文档中说明:如果网站未提供自定义版本,Web Hosting方案会自动包含默认的robots.txt和agents.txt文件。1
这个小小的托管细节,指向了一个更大的变化。现在,网站至少要同时面向3类受众:搜索爬虫、AI爬虫,以及在推理时寻找清晰上下文的助手。文件名让这种变化看起来井井有条:robots.txt说明自动化客户端可以抓取什么;llms.txt为LLM提供精选地图;agents.txt则提示面向代理的策略。但这些文件都不应让运营者误以为自己已经受到保护。
Agents.txt不是访问控制机制。应将爬虫文件视为公开的策略提示和发现辅助。真正的控制仍然来自服务器端授权、机器人身份验证、速率限制、日志、缓存行为,以及能够证明相关爬虫确实读取了当前文件的证据。
TL;DR
Robots Exclusion Protocol标准明确指出,爬虫规则“不是一种访问授权”。2Google也提醒,即使某个URL在robots.txt中被禁止,如果其他页面链接到它,该URL仍可能出现在Search中。3DreamHost自己的机器人控制文章也说明,robots文件只是给合规搜索引擎的建议,恶意机器人可能忽略该文件,或使用误导性的用户代理。1
AI爬虫带来了更多策略维度。OpenAI将用于ChatGPT搜索的OAI-SearchBot与用于训练相关抓取的GPTBot区分开来,并说明ChatGPT-User代表用户触发的操作,此时robots.txt可能并不适用。4Google表示,Google-Extended没有单独的HTTP用户代理字符串,它是用于训练和基础支撑偏好的robots.txt产品令牌,而不是用于控制Google Search收录。5如今的爬虫控制文件需要按用途制定策略,而不是一个简单的允许或阻止开关。
如果您的主机、平台或代理生态期望使用agents.txt,可以使用它。如果希望推理时工具理解您最重要的页面,可以使用llms.txt。继续保持robots.txt准确,因为主要爬虫仍会使用它。随后,在服务器边缘验证请求并阅读日志。文本文件可以表达意图,但无法阻止不可信客户端。
关键要点
给网站所有者:
- 发布robots.txt用于爬取策略,发布llms.txt用于AI可读上下文,只有在需要面向代理的提示时才使用agents.txt。
- 不要在任何公开爬虫文件中放入私有路由、秘密文件名、内部提示词或敏感路径。
- 变更后检查日志。策略文件只有在正确的爬虫读取并改变行为后才真正有意义。
给SEO和AIO团队:
- 将搜索可见性、训练权限和用户触发抓取分开处理。
- 对希望放行的机器人明确列出允许项,例如搜索爬虫和AI答案界面。
- 将爬虫文件与sitemap、canonical、schema和llms.txt验证配套使用。
给安全团队: - 将用户代理字符串视为声明,而不是身份。 - 如果运营方支持,请通过反向DNS或公开IP范围验证爬虫。 - 对敏感资源使用身份认证、WAF规则、应用策略和速率限制,而不是依赖爬虫礼仪。
Agents.txt带来了什么变化?
robots.txt已经存在了几十年。RFC定义了一个由服务所有者提供的robots.txt文件,供爬虫判断哪些URI可以访问。2其基本文件形式并不陌生:
User-agent: *
Disallow: /private-draft/
Sitemap: https://example.com/sitemap.xml
agents.txt出现于另一个时间点。如今,Web接收的不再只是搜索引擎爬虫。它还会接收训练爬虫、答案引擎爬虫、广告安全爬虫、浏览器助手抓取、用户触发的LLM抓取、归档爬虫、SEO工具,以及借用合法爬虫名称的垃圾机器人。
DreamHost的文档之所以重要,是因为它把agents.txt从一个小众想法推向了至少一家主流主机的默认托管行为。文章称,DreamHost会为Web Hosting方案自动包含默认robots.txt和agents.txt文件,并允许网站所有者在站点根目录放置自定义文件来覆盖任一文件。1这并不会让agents.txt成为具备强制语义的标准,但确实会让这个文件名更常见。
安全的理解应当保持克制:
| 文件 | 最适合的角色 | 错误假设 |
|---|---|---|
robots.txt |
面向合规爬虫的爬取偏好。 | “被阻止就等于私密。” |
llms.txt |
面向推理时使用的精选LLM可读地图。 | “列入就等于会排名或被引用。” |
agents.txt |
在有平台读取时,作为面向代理的策略提示。 | “机器人必须遵守它。” |
| Sitemap | 为可索引公开页面提供完整URL发现。 | “提交就等于收录。” |
| 服务器日志 | 证明实际发生了什么。 | “没有可见referrer就说明没有爬虫使用该页面。” |
这些文件名不应彼此竞争。它们应共同组成一个策略包:爬虫可以请求什么,AI系统应该阅读什么,代理应该知道什么,以及服务器实际观察到了什么。
Robots.txt仍然重要,但它不能保护内容
当团队把爬虫文件当作安全边界时,它们就会失效。
RFC清楚划定了边界。该协议要求自动化客户端在访问URI时遵守规则,但它并不授权访问。2Google在运营层面也表达了同样的观点:如果另一个页面链接到被禁止的URL,即使Google不抓取被阻止页面的内容,也仍可能发现并索引该URL地址以及其他公开链接信息。3DreamHost也提醒,robots规则只是给合规搜索引擎的建议,恶意机器人可能忽略该文件,或使用虚假用户代理。1
由此得到一条简单规则:不要把任何一旦被复制到搜索结果、抓入数据集或被LLM展示就会造成损害的内容,放进robots.txt、agents.txt或llms.txt。
糟糕的爬虫文件暴露得比保护得更多:
User-agent: *
Disallow: /internal-product-roadmap/
Disallow: /legal-private/
Disallow: /prompt-drafts/
Disallow: /customers/acme-renewal-risk/
上面的文件会告诉每一位访问者,敏感材料可能在哪里。合规爬虫也许会避开这些路径,但攻击者会得到一张目录地图。
更安全的文件会说明公开爬取策略,而不点名敏感资产:
User-agent: *
Allow: /
Disallow: /*.md$
Sitemap: https://example.com/sitemap.xml
这个版本表达了真实偏好,却没有泄露私有结构。如果/prompt-drafts/确实存在,服务器应通过身份认证保护它,并在适当位置使用noindex标头。爬虫文件不应承担这项责任。
AI爬虫需要按用途制定策略
过去,搜索爬虫策略看起来接近二元:允许Googlebot,阻止嘈杂的SEO工具,用服务器控制保护私有页面。
AI爬虫策略增加了“用途”这一层。网站所有者可能希望某个页面出现在ChatGPT搜索结果中,同时又不希望同一个页面用于模型训练。OpenAI的爬虫文档明确区分了这两者。文档说明,OAI-SearchBot支持ChatGPT搜索功能,而GPTBot会抓取可能用于训练OpenAI生成式AI基础模型的内容。4OpenAI还说明,这些设置彼此独立:站长可以允许OAI-SearchBot,同时禁止GPTBot。4
Google以另一种方式划出了类似边界。Google爬虫文档说明,Google-Extended没有单独的HTTP请求用户代理字符串;抓取由现有Google用户代理执行,而Google-Extended作为robots.txt产品令牌生效。5Google称,该令牌控制已抓取的网站内容是否可支持未来Gemini模型训练和基础支撑,并且不会影响Google Search收录或排名。5
这两个例子说明,平铺式阻止列表并不能抓住重点。真正的策略矩阵要问的是:
| 用途 | 示例信号 | 运营者问题 |
|---|---|---|
| 搜索发现 | Googlebot、Bingbot、OAI-SearchBot | 我希望这个页面出现在搜索或答案结果中吗? |
| 训练偏好 | GPTBot、Google-Extended | 我希望这个页面用于模型训练或模型基础支撑工作流吗? |
| 用户触发抓取 | ChatGPT-User、浏览器助手 | 是否有人请求助手检索该页面? |
| 站点理解 | llms.txt、schema、RSS |
我是否向AI系统清楚解释了公开内容? |
| 滥用流量 | 伪造用户代理、抓取工具 | 该请求是否证明了身份,并且行为符合策略? |
策略文件应匹配用途。不要一边禁止所有AI用户代理,一边疑惑AI搜索界面为什么忽略网站。也不要允许所有AI爬虫,然后抱怨训练爬虫消耗了您原本只打算用于面向用户搜索的页面。应区分用途,说明偏好,并验证行为。
Llms.txt解决的是另一个问题
llms.txt不会取代robots.txt。Jeremy Howard的提案将/llms.txt描述为一种信息提供方式,用于帮助LLM在推理时使用网站。6同一提案还说明,llms.txt可以与现有Web标准共存:sitemap为搜索引擎列出页面,而llms.txt为LLM提供精选概览,并可用上下文补充robots.txt中允许的内容。6
这种区分对AIO工作很重要。
robots.txt回答的是:“这个爬虫可以请求这个路径吗?”
llms.txt回答的是:“如果助手阅读我的网站,它应该先理解什么?”
agents.txt可能回答的是:“具备代理能力的客户端应当知道哪些期望行为?”
这些问题彼此相邻,但不应合并到一个文件中。严肃的网站应把AI发现当作一个对外发布面来处理:
- 发布具有清晰标题和描述的canonical页面。
- 添加与可见页面一致的结构化数据。
- 保持sitemap和RSS输出为最新状态。
- 发布
llms.txt和llms-full.txt,提供精选AI上下文。 - 发布带有明确爬虫策略的
robots.txt。 - 只有在平台或代理生态为
agents.txt提供具体读取方时,才添加该文件。 - 检查日志,确认爬虫请求了变更后的文件。
跳过最后一步,会把AIO变成一种许愿仪式。爬虫文件存在,路由返回200,但没有证据证明目标客户端看到了它。
验证应在边缘完成
用户代理字符串不能证明身份。任意脚本都可以发送User-Agent: Googlebot。抓取器也可以发送User-Agent: GPTBot。只信任该标头的策略,会把最宽松的待遇给到最容易伪造的对象。
Google为声称来自Google的请求记录了两种验证路径:用于一次性检查的反向DNS加正向DNS,以及用于较大系统的公开IP范围匹配。7OpenAI在其爬虫文档中发布了OAI-SearchBot、GPTBot和ChatGPT-User的IP地址JSON文件。4这些机制并不能覆盖每一种爬虫,但它们确立了正确的形态:身份需要字符串之外的证据。
最低限度的边缘策略应记录:
| 证据 | 重要性 |
|---|---|
| 用户代理 | 显示客户端的声明。 |
| 源IP和ASN | 帮助区分云端抓取器与已验证爬虫范围。 |
| 反向DNS或IP范围结果 | 在运营方支持验证时证明身份。 |
| 请求路径 | 显示客户端实际触达了哪些内容。 |
robots.txt抓取时间 |
显示客户端是否在抓取前检查了策略。 |
| 状态码和缓存结果 | 显示爬虫实际收到了什么。 |
| 速率和路径模式 | 即使是具名机器人,也可暴露滥用行为。 |
这组日志信息会把爬虫策略从观点变为证据。如果GPTBot持续请求被禁止路径,您可以证明这一点。如果一个伪造Googlebot从住宅代理大量访问疑似私有URL,您可以阻止它,而不影响真正的Googlebot。如果OAI-SearchBot从未请求变更后的文章,您也就知道为什么该页面没有出现在ChatGPT搜索中。
实用的AI爬虫策略包
不要从文件开始。应从结果开始。
| 结果 | 所需控制 |
|---|---|
| 搜索引擎应索引公开页面。 | Sitemap、canonical标签、schema、快速200响应,以及允许的搜索爬虫。 |
| AI答案引擎应理解网站。 | 清晰文章、schema、RSS、llms.txt,以及带有明确摘要的来源页面。 |
| 训练爬虫应避开特定内容。 | 按用途划分的robots.txt分组,以及在策略或法律要求时进行服务器强制执行。 |
| 私有内容必须保持私有。 | 身份认证、授权、无公开链接、无爬虫文件披露、无缓存泄漏。 |
| 恶意机器人不应耗尽资源。 | 速率限制、WAF规则、已验证机器人的例外,以及滥用日志。 |
| 策略变更应可审计。 | 路由检查、爬虫抓取日志、部署时间戳和简短审查包。 |
这个策略包让每一层各司其职。robots.txt传达偏好。llms.txt传达上下文。agents.txt在存在读取方时传达面向代理的意图。服务器负责强制执行。日志负责证明。
在我自己的网站上,爬虫工作也遵循这种划分。公开策略文件欢迎合法爬虫,并阻止爬虫从代码块示例中推断出的原始Markdown路径。AI上下文文件为助手提供进入公开写作的精选路径。夜间爬取统计会告诉我,爬虫是否遇到了错误、陈旧缓存、缺失路由,或现在应返回410的旧URL。策略文件给出意图,日志判断意图是否奏效。
Agents.txt中应该写什么
在生态稳定之前,让agents.txt保持朴素和公开。
适合写入的内容:
- 站点联系人和策略URL。
- 指向
robots.txt、sitemap、llms.txt和RSS的链接。 - 对公开内容首选使用方式的说明。
- 提醒私有或需认证路由需要授权。
- 用于爬取问题的支持邮箱。
不适合写入的内容:
- 秘密路径。
- 内部提示词规则。
- 非公开API路由。
- 客户名称。
- 安全例外。
- 一旦被恶意客户端复制就会伤害网站的指令。
衡量agents.txt的正确标准不是“优秀代理会喜欢这份文件吗?”而是“如果恶意代理、搜索结果和随机用户都读到这份文件,我是否仍然放心?”
更好的心智模型
爬虫文件就像公共道路上的标识。
标识可以写“送货入口”“禁止进入”或“从这里开始”。守规矩的司机会遵守标识,鲁莽的司机会忽略它。标识仍然有用,因为大多数合法流量都希望获得清晰指引。但如果把标识当作上锁的门,它就会失效。
AI爬虫让这些标识同时变得更重要,也更不充分。更重要,是因为AI系统需要清晰的公开上下文、按用途划分的策略和路由地图。更不充分,是因为用户代理不断增加,训练和搜索彼此分离,恶意客户端也可以冒充良性客户端。
答案不是放弃爬虫文件。答案是把它们的权威降到合适的位置。发布清晰的公开策略。验证谁请求了这些文件。观察它们抓取了什么。在服务器端强制执行私有边界。凡是关于“AI可见性”的主张,在日志和实时路由支撑之前,都应视为未经证明。
这就是AIO表演和真实爬虫运营之间的区别。
FAQ
什么是agents.txt?
agents.txt是一种正在出现的面向代理的文本文件,一些主机或工具可能会在站点根目录提供它。DreamHost为Web Hosting方案记录了默认agents.txt文件,但该文档并不会让这个文件成为访问控制标准。在具体代理平台明确记录如何读取并应用该文件之前,请将它视为公开提示。1
robots.txt会阻止AI爬虫吗?
合规爬虫可能会遵守robots.txt,主要运营方也会为其爬虫记录特定令牌。OpenAI记录了OAI-SearchBot和GPTBot控制方式,Google则将Google-Extended记录为用于训练和基础支撑偏好的产品令牌。45但robots.txt仍然不能认证客户端、隐藏内容,或阻止选择忽略该文件的机器人。23
我应该发布llms.txt吗?
如果希望AI助手找到您公开内容的精选地图,就应发布llms.txt。该提案将llms.txt定位为推理时上下文,而不是sitemap或robots.txt的替代品。6有用的文件会指向您真正希望代理理解的页面。
被禁止的URL仍可能出现在搜索中吗?
可以。Google表示,即使某个URL被robots.txt阻止,如果其他页面链接到它,该URL仍可能出现,尽管Google不会抓取或索引被阻止页面的内容。3对于必须避开公开结果的页面,应使用身份认证;在允许抓取访问的情况下使用noindex;并通过服务器端策略控制。
如何区分真实爬虫和伪造爬虫?
不要只依赖用户代理字符串。Google记录了反向DNS加正向DNS检查,以及公开IP范围匹配。7OpenAI为其记录在案的机器人发布IP地址JSON文件。4如果某个爬虫运营方不发布验证数据,应将该请求归类为一项声明,并根据其行为进行速率限制或验证挑战。
公开网站最安全的爬虫文件设置是什么?
使用robots.txt制定爬虫策略,使用sitemap进行URL发现,使用llms.txt提供精选AI上下文,只将agents.txt用于公开的面向代理指导。不要在任何公开文件中放入敏感路径。随后,在声称设置有效之前,验证实时路由、缓存状态、爬虫抓取和服务器日志。
参考资料
-
DreamHost, “Control bots, spiders, and crawlers,” DreamHost Knowledge Base. Accessed May 18, 2026. ↩↩↩↩↩
-
Koster, M., Illyes, G., Zeller, H., and Sassman, L., “RFC 9309: Robots Exclusion Protocol,” IETF, September 2022. ↩↩↩↩
-
Google Search Central, “Introduction to robots.txt,” Google for Developers. ↩↩↩↩
-
OpenAI, “Overview of OpenAI Crawlers,” OpenAI API Documentation. ↩↩↩↩↩↩
-
Google Crawling Infrastructure, “Google’s common crawlers,” Google for Developers. ↩↩↩↩
-
Jeremy Howard, “The /llms.txt file,” llms-txt proposal, September 3, 2024. ↩↩↩
-
Google Crawling Infrastructure, “Verify requests from Google crawlers and fetchers,” Google for Developers, last updated March 20, 2026. ↩↩