robots.txt 怎么放 AI 爬虫进来:GPTBot、ClaudeBot、Bytespider 逐个说
很多站点在做 GEO 时直接卡在第一步:AI 爬虫根本进不来。原因多半就一行 robots.txt。 先看清楚现在有哪些 AI 爬虫 UA 名称归属用途 GPTBotOpenAI抓取用于模型训练 ChatGPT-UserOpenAI用户提问
很多站点在做 GEO 时直接卡在第一步:AI 爬虫根本进不来。原因多半就一行 robots.txt。
先看清楚现在有哪些 AI 爬虫
| UA 名称 | 归属 | 用途 |
|---|---|---|
| GPTBot | OpenAI | 抓取用于模型训练 |
| ChatGPT-User | OpenAI | 用户提问时实时访问 |
| OAI-SearchBot | OpenAI | 为搜索功能抓取 |
| ClaudeBot | Anthropic | 抓取训练语料 |
| Claude-User | Anthropic | 用户请求时实时读取 |
| Google-Extended | 控制内容是否用于 Gemini 训练 | |
| PerplexityBot | Perplexity | 为答案引擎抓取 |
| Bytespider | 字节跳动 | 豆包等产品使用 |
| CCBot | Common 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: / 稀里糊涂被挡在门外。