← 所有文章

Agents.txt不是访问控制机制

DreamHost现在在文档中说明:如果网站未提供自定义版本,Web Hosting方案会自动包含默认的robots.txtagents.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.txtagents.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.txtagents.txtllms.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.txtllms-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记录为用于训练和基础支撑偏好的产品令牌。45robots.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 Bomb 救了我们

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

1 分钟阅读

开源不是安全边界

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

1 分钟阅读

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

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

3 分钟阅读