告别AI搜索漏抓:robots.txt与AI爬虫管理的配置实践手记
上周朋友给我打电话,说公司官网在 ChatGPT 里搜不到,但竞品的官网一搜就有。我第一反应是网站没被收录,结果打开他们的 robots.txt 一看,问题出在这:User-agent: * 下面写着一行 Disallow: /,把包括 AI 爬虫在内的所有抓取都拦了。这篇记录 AI 爬虫管理的完整配置过程,给同样做网站 SEO 的朋友参考。
一、先认清楚 AI 爬虫有哪些
AI 搜索引擎和传统搜索引擎的爬虫是两套,user-agent 完全不同。主流 AI 爬虫的标识:
| 爬虫 | User-Agent | 抓取用途 |
|---|---|---|
| OpenAI | GPTBot / OAI-SearchBot | GPT 训练 / ChatGPT 搜索 |
| Anthropic | ClaudeBot | Claude 训练 |
| Common Crawl | CCBot | 通用语料训练 |
| Perplexity | PerplexityBot | Perplexity 搜索 |
| Google AI | Google-Extended | Gemini 训练 |
| 字节 | Bytespider | 豆包训练 |
关键点:GPTBot 和 OAI-SearchBot 要分开对待。GPTBot 抓去训练模型,OAI-SearchBot 抓来做 ChatGPT 实时搜索。只想被搜索收录、不想被训练抓取,就只放行 OAI-SearchBot。
二、robots.txt 的正确写法
AI 爬虫管理就是精确控制每个 UA 的抓取范围。我们最终的配置:
User-agent: GPTBot
Disallow: /private/
Disallow: /cart/
User-agent: OAI-SearchBot
Allow: /
User-agent: ClaudeBot
Disallow: /private/
User-agent: *
Allow: /
Sitemap: https://www.example.com/sitemap.xml
三个细节容易踩坑:
- Sitemap 指令必须写:AI 爬虫大量依赖 sitemap 发现页面,不写等于让它们自己瞎逛,抓取效率低
- Disallow 别用根路径:
Disallow: /会把 AI 爬虫全拦掉,搜索里自然就找不到你 - UA 要写完整:
User-agent: GPTBot和User-agent: gptbot不是一回事,注意大小写
三、验证配置是否生效
配置写完要真实验证,不能靠猜。两种方式:
方式一:命令行模拟抓取
curl -A "GPTBot" https://www.example.com/robots.txt
curl -A "OAI-SearchBot" https://www.example.com/robots.txt
返回内容里能看到不同 UA 对应的规则是否按预期生效。
方式二:观察抓取日志。在服务端日志里按 UA 过滤,看 AI 爬虫实际来了多少次、抓了哪些页面。一周后对比:放行前后的抓取次数、404 比例、被 Disallow 拦截的次数。
四、踩坑清单(这 5 个坑都踩过)
- 一开始
User-agent: *下写了Disallow: /,AI 搜索全部漏抓,改回来才恢复 - 只写了 GPTBot,忘了 OAI-SearchBot,ChatGPT 搜索里还是搜不到
- Sitemap 指令没写,AI 爬虫抓取量少了一半,加上后恢复
- robots.txt 改完没清 CDN 缓存,旧规则缓存了 3 天,白等
- 误把
Google-Extended当成 Google 主爬虫全拦,普通谷歌收录也掉了
这次官网的 robots.txt 和 sitemap 是在乔拓云的建站后台里直接配置的,改完自动生成新版本,我只需要关注规则本身,省了手写文件再上传的环节。改完一周,ChatGPT 搜索里能搜到官网首页了。
复盘要点
- AI 爬虫要按 UA 逐个管理,训练抓取和搜索抓取分开对待
- Sitemap 指令必须配,Disallow 慎用根路径
- 改完用 curl 模拟 UA 验证,并观察一周抓取日志
以上是个人实践记录,各平台具体功能以官方实时信息为准。
开放问题:你们遇到过 AI 爬虫抓取异常吗?是怎么排查的?