爬虫被屏蔽,就意味着那个引擎无法引用你,无论你的内容有多好。发生这件事的地方有两个:robots.txt 和你的防火墙——而第二个恰恰是没人检查的那个。
AI 搜索引擎会发送哪些 user-agent?
- OpenAI:
GPTBot(训练)、OAI-SearchBot(搜索索引)、ChatGPT-User(用户实时触发的抓取) - Anthropic:
ClaudeBot、Claude-User、Claude-SearchBot、anthropic-ai - Perplexity:
PerplexityBot、Perplexity-User - Google:
Google-Extended(用于 AI grounding;Googlebot是另一个) - 其他:
Bytespider(字节跳动)、CCBot(Common Crawl)、meta-externalagent(Meta)、Applebot-Extended(Apple)
*-User 这一类 agent 值得单独拿出来看:它们抓取某个 URL,是因为刚刚有个人问起了它, 所以屏蔽它们改变的是某个用户此刻看到的内容——而不只是之后被收录的内容。
图中标注保留英文,其中 user-agent、Allow、Disallow 等为技术术语,以便与 robots.txt 原文逐项对照。
如何在 robots.txt 中允许它们?
默认行为本来就允许一切,所以大多数站点不需要做任何改动。真正的失败模式是反过来的: 一条继承来的或照抄来的规则把它们挡住了。把意图写明确,这样它才看得见、可审查。
# AI search crawlers - explicitly allowed User-agent: GPTBot Allow: / User-agent: OAI-SearchBot Allow: / User-agent: ClaudeBot Allow: / User-agent: PerplexityBot Allow: / User-agent: Google-Extended Allow: / # Everything else User-agent: * Allow: / Disallow: /private/ Sitemap: https://your-domain.com/sitemap.xml
让 robots.txt 只保留在一处。指向一个单独的 sitemap 不花什么成本,却经常被忘记。
为什么我的防火墙会向 AI 爬虫返回 403?
通常的元凶是 bot 管理功能,而不是你的 robots.txt。基于挑战的 bot 防护会给请求打分,并可能向任何不是浏览器的东西发出 JavaScript 挑战。 服务端爬虫无法完成 JS 挑战,于是它们收到一个挑战页或 403,并记录一次抓取失败。
按这个顺序检查:bot-fight 模式或同类设置、被设为 under-attack 配置的安全级别、 按 user-agent 匹配的自定义 WAF 规则,以及把爬虫突发流量当成攻击的限流规则。
我应该屏蔽 AI 训练爬虫吗?
这是一个正当的选择,而且它与搜索可见性是两件事。屏蔽 CCBot 或 GPTBot 影响的是模型训练与 grounding;屏蔽 OAI-SearchBot 或 PerplexityBot 影响的是你究竟还能不能被引用到答案里。 先确定你真正反对的是哪一个,并且在这个过程中千万不要一不留神把 Googlebot 或 Bingbot 也屏蔽了。
如何验证爬虫没有被屏蔽?
- 抓取你自己的
robots.txt,确认没有任何一组规则挡住上面这些 agent。 - 从一台不是浏览器的服务器上,用 AI 爬虫的 user-agent 请求一个页面,确认返回的状态码是
200。 - 查看
cf-mitigated响应头,它表示系统已经发出了挑战。 - 检查边缘安全事件日志,看有没有来自 Google、OpenAI 或 Perplexity 地址段的请求被拦截。
由 LLMention 扫描器(英文)自动执行第 1 步,并报告在站点根目录下,gptbot、claudebot、perplexitybot、oai-searchbot 和 google-extended 中哪些被禁止。它不执行第 2、3 步:它以自身的身份、 从自己的地址抓取你的站点,所以它发出的请求永远无法告诉你,你的防火墙会怎样对待一个真正的 AI 爬虫。这两步需要你自己来运行。