← 所有文章

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发现当作一个对外发布面来处理:

  1. 发布具有清晰标题和描述的canonical页面。
  2. 添加与可见页面一致的结构化数据。
  3. 保持sitemap和RSS输出为最新状态。
  4. 发布llms.txt和llms-full.txt,提供精选AI上下文。
  5. 发布带有明确爬虫策略的robots.txt。
  6. 只有在平台或代理生态为agents.txt提供具体读取方时,才添加该文件。
  7. 检查日志,确认爬虫请求了变更后的文件。

跳过最后一步,会把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用于公开的面向代理指导。不要在任何公开文件中放入敏感路径。随后,在声称设置有效之前,验证实时路由、缓存状态、爬虫抓取和服务器日志。

参考资料


  1. DreamHost, “Control bots, spiders, and crawlers,” DreamHost Knowledge Base. Accessed May 18, 2026. ↩↩↩↩↩

  2. Koster, M., Illyes, G., Zeller, H., and Sassman, L., “RFC 9309: Robots Exclusion Protocol,” IETF, September 2022. ↩↩↩↩

  3. Google Search Central, “Introduction to robots.txt,” Google for Developers. ↩↩↩↩

  4. OpenAI, “Overview of OpenAI Crawlers,” OpenAI API Documentation. ↩↩↩↩↩↩

  5. Google Crawling Infrastructure, “Google’s common crawlers,” Google for Developers. ↩↩↩↩

  6. Jeremy Howard, “The /llms.txt file,” llms-txt proposal, September 3, 2024. ↩↩↩

  7. Google Crawling Infrastructure, “Verify requests from Google crawlers and fetchers,” Google for Developers, last updated March 20, 2026. ↩↩

相关文章

Fork 炸弹救了我们

LiteLLM 的攻击者只犯了一个实现上的错误。正是这个错误,让 47,000 次安装在 46 分钟内被发现。

7 分钟阅读

开源不是安全边界

GDS关于AI漏洞发现的指南准确把握了开源安全的关键:默认少隐藏、更快修复,并用证据明确说明例外情况。

11 分钟阅读

Ralph循环:我如何在夜间运行自主AI代理

我构建了一个使用停止钩子、生成预算和文件系统记忆的自主代理系统。以下是失败经验以及真正能交付代码的方法。

8 分钟阅读