Cloudflare 是否在屏蔽 AI 爬虫?排查与修复方法

发布于

简短回答

即使 robots.txt 允许爬虫,Cloudflare 等防火墙仍可能对 AI 爬虫返回 403、429 或“Just a moment...”验证页面,而浏览器看到的是真实页面。用爬虫的 user agent 请求页面即可检查,然后在 AI Crawl Control 中或通过 WAF 跳过规则允许 AI 搜索爬虫。

机器人防护的作用是阻止抓取和滥用,而且它做得很好。问题在于,AI 搜索爬虫同样是机器人。多年前开启的安全设置、速率限制,或针对未知 user agent 的宽泛规则,都可能悄悄地把引用你的爬虫挡在门外,而你自己访问时一切正常。

本页内容
  1. 防火墙为什么会屏蔽 AI 爬虫?
  2. 如何区分是防火墙屏蔽还是 robots.txt 屏蔽?
  3. 如何在 Cloudflare 中允许 AI 搜索爬虫?
  4. Bot Fight Mode 怎么办?
  5. 应该放行哪些爬虫?
  6. AISeeWhy 如何检测防火墙屏蔽?

防火墙为什么会屏蔽 AI 爬虫?

防火墙会逐个判断每个请求。爬虫不会运行 JavaScript 验证,不像浏览器那样保存 cookie,而且常常连续请求许多页面,所以它看起来可能与机器人防护要拦截的流量一模一样。常见原因有:

如何区分是防火墙屏蔽还是 robots.txt 屏蔽?

robots.txt 屏蔽是一种礼貌的请求:爬虫读取你的规则,不去抓取页面。防火墙屏蔽则是一种响应:爬虫请求了页面,得到的却是别的东西。第二种可以直接观察到。用浏览器 user agent 和爬虫 user agent 各请求一次页面,然后比较。

for UA in "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" \
          "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36; compatible; OAI-SearchBot/1.4; +https://openai.com/searchbot"; do
  curl -s -o /dev/null -w "%{http_code} %{size_download}\n" -A "$UA" https://example.com/page
done

防火墙屏蔽的迹象包括:只有爬虫得到状态码 403、429 或 503;返回标题为 Just a moment... 或 Attention Required! | Cloudflare 的页面;响应体中包含 /cdn-cgi/challenge-platform;或者返回的 200 响应比浏览器的短得多。请注意,你的测试来自你自己的 IP,而不是爬虫经过验证的 IP 范围,所以它显示的是防火墙如何对待该 user agent,并不能展示它对真正爬虫的每个处理细节。

如何在 Cloudflare 中允许 AI 搜索爬虫?

Cloudflare 的 AI Crawl Control 适用于所有套餐,会列出访问你域名的 AI 爬虫,并让你为每个爬虫设置操作。在控制台中打开 AI Crawl Control,进入 Crawlers 列表,在每个爬虫的 Action 列中选择 Allow 或 Block。Cloudflare 表示,在这里屏蔽会在你的区域(zone)上创建或更新一条 WAF 自定义规则。

如果屏蔽爬虫的是 WAF 自定义规则、Super Bot Fight Mode 或速率限制,请添加一条自定义规则,针对已验证的机器人和该爬虫的标识跳过这些功能:

Security → WAF → Custom rules → Create rule
  Expression: (cf.client.bot) or (http.user_agent contains "OAI-SearchBot")
  Action: Skip → All remaining custom rules, Super Bot Fight Mode, Rate limiting
Also: AI Crawl Control → OAI-SearchBot → Allow

把这条规则放在最前面。请注意,按 user agent 匹配也会放行任何伪造该 user agent 的人。在可能的情况下,优先使用已验证机器人字段(cf.client.bot)或厂商公布的 IP 范围。

Bot Fight Mode 怎么办?

Cloudflare 的文档明确指出,Bot Fight Mode 无法通过 WAF 自定义规则或 Page Rules 绕过或跳过。如果对爬虫发起验证的正是这个功能,跳过规则不会有用。可选的办法是关闭 Bot Fight Mode,或在有此功能的套餐上使用 Super Bot Fight Mode,它运行在 Ruleset Engine 上,支持跳过规则。

应该放行哪些爬虫?

按爬虫的作用来区分。搜索爬虫和用户抓取爬虫决定 AI 回答能否找到并引用你。训练爬虫为模型收集数据,屏蔽它们是正当的选择,不会让你从 AI 搜索中消失。

Cloudflare 自己的策略设置也采用同样的 Search、Agent 和 Training 划分,所以你可以允许前两类,再单独决定第三类。如果你使用其他防火墙或 CDN,原则是相同的:把爬虫的标识加入白名单,并在有条件时用厂商公布的 IP 范围或反向 DNS 验证,让它得到与浏览器相同的响应。

AISeeWhy 如何检测防火墙屏蔽?

AISeeWhy 以 14 个爬虫和一个普通浏览器的身份请求你的页面,比较状态、大小和重定向,识别验证页面,并指出是哪个防火墙或 CDN 做出的响应。当 robots.txt 允许某个爬虫而服务器却屏蔽它时,报告会显示这一冲突,并给出用于修复的 Cloudflare 规则或白名单步骤。

常见问题

Cloudflare 默认会屏蔽 AI 爬虫吗?

这取决于你的账户、套餐以及区域中的设置,而且 Cloudflare 也曾多次调整这些选项。请检查 AI Crawl Control 和你的机器人设置,并用爬虫的 user agent 进行测试,而不要想当然。

为什么我的网站在浏览器中正常,对爬虫却不行?

防火墙会逐个判断每个请求。浏览器能通过 JavaScript 验证并保存 cookie;爬虫不能,因此它可能收到你从未见过的验证页面或 403。

通过 WAF 允许 AI 爬虫安全吗?

如果你用厂商公布的 IP 范围或 Cloudflare 的已验证机器人信号来验证,允许指名的爬虫风险较低。只信任 user agent 的规则也会放行任何复制它的人。

Cloudflare 的邮箱地址混淆功能会影响 AI 爬虫吗?

它会把电子邮箱地址替换为只有脚本才能解码的链接,因此爬虫看到的是占位符,而不是地址。如果你希望联系邮箱可被读取,请在 Scrape Shield 下关闭 Email Address Obfuscation,并以纯文本显示地址。

参考资料

更多文章