AI 爬虫的 robots.txt 写法
各家 AI 公司的爬虫遵守 robots.txt 的范围各不相同,要让它起作用,就得知道每家公司的爬虫名称并分别写上。只拦训练用抓取、保留搜索展示、放慢抓取速度、拦下所有已公开名称的爬虫:点击卡片即可复制要贴进 robots.txt 的几行。每张卡片都附了一句,说明该公司的文档写明自家爬虫遵守什么。卡片顶部的色带每格代表一个 User-agent 组,红色是拦截的组,绿色是放行的组,黄色是只放慢速度的组。
只拦训练用抓取(GPTBot)
OpenAI 把训练用抓取交给 GPTBot。这条规则管不到负责 ChatGPT 搜索展示的 OAI-SearchBot。
User-agent: GPTBot
Disallow: /拦训练,保留 ChatGPT 搜索展示
OpenAI 的文档写明,这两个名称可以在 robots.txt 里分别放行或拦截。搜索那边的改动大约 24 小时后生效。
User-agent: GPTBot
Disallow: /
User-agent: OAI-SearchBot
Allow: /关闭 ChatGPT 搜索展示(OAI-SearchBot)
只拦负责 ChatGPT 搜索展示的 OAI-SearchBot。按 OpenAI 文档的说法,改完后大约 24 小时生效。
User-agent: OAI-SearchBot
Disallow: /放慢抓取速度(ClaudeBot)
Anthropic 表示 ClaudeBot 支持非标准的 Crawl-delay 扩展,并以这个值(1)作为示例。
User-agent: ClaudeBot
Crawl-delay: 1拦训练 + 放行搜索 + 放慢速度
Crawl-delay 是非标准扩展,所以只放在已表明支持的 ClaudeBot 组里。另外两组是 OpenAI 写明可以分别处理的名称。
User-agent: GPTBot
Disallow: /
User-agent: OAI-SearchBot
Allow: /
User-agent: ClaudeBot
Crawl-delay: 1拦截 ClaudeBot
Anthropic 表示 ClaudeBot 遵守 robots.txt。
User-agent: ClaudeBot
Disallow: /拦截用户发起的访问(ChatGPT-User)
这是 ChatGPT 用户提问后打开页面的访问。OpenAI 的文档写明,由于这类操作由用户发起,robots.txt 规则可能不适用。
User-agent: ChatGPT-User
Disallow: /拦截所有已公开名称的 AI 爬虫
四个名称中,ChatGPT-User 可能不受规则约束。与其说是拦截,不如说是公开表明网站的立场。
User-agent: GPTBot
Disallow: /
User-agent: OAI-SearchBot
Disallow: /
User-agent: ChatGPT-User
Disallow: /
User-agent: ClaudeBot
Disallow: /常见问题
- 在 robots.txt 里拦了,抓取就会停吗?
- 规定这个文件规则的标准(RFC 9309,2022 年 9 月)写得很明确:robots.txt 只是请求爬虫遵守的规则,不是决定访问权限的机制。即使是遵守规则的公司,适用范围也各不相同。
- User-Agent 写着 GPTBot,就一定是 OpenAI 吗?
- 名称(User-Agent)谁都能冒用。OpenAI 以 JSON 文件公开了 GPTBot、OAI-SearchBot、ChatGPT-User 各自的 IP 段。把访问来源地址和这份列表对照,就能找出只是借用名称的请求。
- 怎么确认是 Google 的代理?
- Google 会在自家代理的部分请求上附加 Web Bot Auth 方式的签名,并公布公钥列表的地址。在服务器或 CDN 上校验这个签名,就能分辨是不是真正的 Google 代理。Google 也注明,并不是每个请求都带签名。
- robots.txt 拦不住的访问怎么办?
- 代理按人的指示来访时,单靠 robots.txt 无法过滤。IP 段比对和请求签名,也只对已经表明身份的公司有效。所以要在搜索、筛选组合、大文件下载这类一次请求就让服务器做大量工作的地方设置请求次数上限。如果不记录 User-Agent、访问来源地址和请求路径,出了问题也无从追查是谁做了什么。