robots.txt 怎么放 AI 爬虫进来:GPTBot、ClaudeBot、Bytespider 逐个说

· 资讯 · 阅读 6
摘要

很多站点在做 GEO 时直接卡在第一步:AI 爬虫根本进不来。原因多半就一行 robots.txt。 先看清楚现在有哪些 AI 爬虫 UA 名称归属用途 GPTBotOpenAI抓取用于模型训练 ChatGPT-UserOpenAI用户提问

很多站点在做 GEO 时直接卡在第一步:AI 爬虫根本进不来。原因多半就一行 robots.txt。

先看清楚现在有哪些 AI 爬虫

UA 名称归属用途
GPTBotOpenAI抓取用于模型训练
ChatGPT-UserOpenAI用户提问时实时访问
OAI-SearchBotOpenAI为搜索功能抓取
ClaudeBotAnthropic抓取训练语料
Claude-UserAnthropic用户请求时实时读取
Google-ExtendedGoogle控制内容是否用于 Gemini 训练
PerplexityBotPerplexity为答案引擎抓取
Bytespider字节跳动豆包等产品使用
CCBotCommon Crawl公共语料库,很多模型间接用它

这张表值得存下来。做 GEO 排查时,绝大多数问题都能从这里面找到答案。

最常见的三个错误

错误一:全站 Disallow

有些站为了防采集,直接写:

User-agent: *
Disallow: /

这一行等于告诉所有爬虫「别来」。搜索引擎可能因为历史权重还会来一些,但 AI 爬虫大多会老实遵守。你后面做多少内容优化都是白做。

错误二:只放行了百度谷歌

老站常见的写法是逐个点名放行:

User-agent: Baiduspider
Allow: /

User-agent: Googlebot
Allow: /

这种写法下,User-agent: * 的规则仍然对 GPTBot 生效。如果后面还跟着一条 Disallow: /,AI 爬虫就被挡死了。

错误三:CDN 和防火墙层面拦截

robots.txt 写对了,但 Cloudflare、宝塔防火墙、安全狗之类的在更前面就把请求挡了,返回 403。这种问题在日志里能看到——UA 是 GPTBot,状态码是 403 而不是 200。

正确写法

如果希望 AI 能抓,最省事的做法是:

User-agent: *
Allow: /

Sitemap: https://example.com/sitemap.xml

全放行,不点名。简单、不容易写错、以后新增爬虫也不用改。

如果只想放行一部分(比如允许实时访问、不允许训练),再按需点名:

User-agent: GPTBot
Disallow: /

User-agent: ChatGPT-User
Allow: /

User-agent: *
Allow: /

注意规则的匹配优先级:越具体的 UA 越优先,同 UA 下 Allow 和 Disallow 冲突时,路径更长的那条生效。

怎么验证

服务器上跑一条命令,看返回内容:

curl -A "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot)" https://example.com/robots.txt

更直接的方式是看访问日志,等一两天,统计各个 AI UA 的状态码分布:

grep -i "GPTBot\|ClaudeBot\|Bytespider" access.log | awk '{print $9}' | sort | uniq -c

如果 200 占多数,说明放行了;如果全是 403 或 404,问题不在 robots.txt,在更前面那一层。

一个取舍

放不放 AI 爬虫,本质是「内容被引用」和「内容被白嫖」之间的取舍。做内容站的,一般倾向于放行——被引用能带来品牌曝光和回访;做付费内容或数据库的,倾向于拦。这个没有标准答案,但至少要知道自己做了什么选择,而不是因为一句 Disallow: / 稀里糊涂被挡在门外。