2026 年 9 月 19 日,我们用 AI 爬虫的身份打开自己的一个网站。它的 robots.txt 写着欢迎所有爬虫。Googlebot、Bingbot、OAI-SearchBot、PerplexityBot 都拿到了页面;GPTBot、ClaudeBot、CCBot 拿到的却是 Cloudflare 回的 25 个字节纯文字:「Your request was blocked.」
9 月 30 日,我们在这个网站 nicasiadigital.com 上又发现一个更不起眼的缺口:每个爬虫都打得开页面,但页面上的邮箱,到了它们手里变成「[email protected]」。
这两个设定都不是我们打开的,都是 Cloudflare 自带的。用浏览器看网站,两个都看不出来:浏览器拿得到页面,也会执行那段把邮箱还原的脚本。
每个爬虫各做什么
做 AI 助手的公司,每家都不只一个爬虫,每个爬虫喂的东西不一样。挡掉一个,可能损失很大,也可能毫无影响,要看挡的是哪一个。下表整理自各家公司自己的说明文件(2026 年 9 月)。
| 爬虫 | 公司 | 读你的网站做什么 |
|---|---|---|
| OAI-SearchBot | OpenAI | 让你的页面出现在 ChatGPT 搜索的回答里 |
| GPTBot | OpenAI | 训练以后的模型 |
| ChatGPT-User | OpenAI | 用户叫 ChatGPT 打开某一页时,由它去打开 |
| Claude-SearchBot | Anthropic | 改进 Claude 的搜索结果 |
| ClaudeBot | Anthropic | 训练以后的模型 |
| Claude-User | Anthropic | 用户叫 Claude 打开某一页时,由它去打开 |
| PerplexityBot | Perplexity | 在 Perplexity 的回答里列出并链接网站;Perplexity 说它不拿这些来训练 |
| Perplexity-User | Perplexity | 回答问题途中打开页面;它一般不理会 robots.txt |
| Google-Extended | 只是 robots.txt 里的一个名字,背后没有爬虫:它决定 Gemini 能不能拿你的页面来训练、来支撑回答 | |
| CCBot | Common Crawl | 一个公开的网页档案库,AI 公司拿它训练过模型 |
说明文件里最要紧的是两点。OpenAI 写明:挡掉 OAI-SearchBot 的网站,不会出现在 ChatGPT 搜索的回答里;挡掉 GPTBot,只是让页面不进训练。Google 写明:Google-Extended 不影响 Google 搜索。
所以 9 月那个网站,ChatGPT 搜索其实还读得到,因为 OAI-SearchBot 进得来。我们损失的是训练这一块:下一代模型对这个网站会知道得更少。
在自己的电脑上测
下面这段命令用每个爬虫的名字去打开你的首页,印出状态码。Mac 的终端机和 Linux 都能直接跑;Windows 用 Git Bash。把网址换成你的。
for b in Googlebot bingbot GPTBot \
OAI-SearchBot ChatGPT-User ClaudeBot \
Claude-SearchBot Claude-User \
PerplexityBot CCBot; do
echo "$b $(curl -s -o /dev/null \
-w '%{http_code}' -A \
"Mozilla/5.0 (compatible; $b/1.0)" \
https://www.example.com/)"
done
9 月 30 日马来西亚时间 11:05,nicasiadigital.com 对这十个名字全部回 200。200 表示爬虫拿到了页面;403 或 503 表示网站前面有东西把它挡了,不管 robots.txt 怎么写。不想开终端机的话,我们的免费爬虫检测在网页上就能跑同样的测试,连同这篇文章后面几项检查。
这个测法有一个局限:名字是从你的电脑送出去的,有些防火墙还会查请求从哪里来,所以真正的爬虫可能被另外对待。看到 200,算是好消息;看到 403,一定要追:我们 9 月那次的 403,对应的正是一个连真爬虫也会挡掉的设定。
Cloudflare 的开关在哪里
从 2025 年 7 月 1 日起,每个新加入 Cloudflare 的域名,注册时都会被问要不要让 AI 爬虫进来,而且默认是挡。我们那个域名是 2026 年 9 月 2 日搬进 Cloudflare 的,17 天后训练用的爬虫还在被挡。
在后台打开那个域名,依次点 Security、Settings,找到 Bot traffic 那一组。「Configure AI bot policies」里有三行:Search、Agent、Training。我们的是 Allow、Allow、Disallow,回 403 给 GPTBot、ClaudeBot、CCBot 的就是 Training 那一行。9 月 19 日 15:10 我们把它改成 Allow,再跑一次上面的命令,当天测的九个名字全部 200。
同一个面板最下面有个「Enable Bot Preference Sync」,开了之后 Cloudflare 会往你的 robots.txt 里写它自己的规则。我们让它关着:网站本来就有自己的 robots.txt,两套规则迟早会打架。
爬虫读不到的邮箱
这个域名的 Cloudflare「Email Address Obfuscation」(邮箱加密)是开着的,我们没开过它。它把页面上每个邮箱换成一个指向 /cdn-cgi/l/email-protection 的链接,外加「[email protected]」几个字,再用一段小脚本在访客的浏览器里把真邮箱放回去,所以人完全看不出来。
爬虫如果只读 HTML、读完就走,拿到的就是「[email protected]」。Vercel 和 MERJ 在 2024 年 12 月的研究发现,GPTBot、ClaudeBot、PerplexityBot 抓页面时都不执行 JavaScript,所以对它们来说,这个邮箱等于不存在。
我们没关这个设定,改的是页面。Cloudflare 会跳过 <!--email_off--> 和 <!--/email_off--> 之间的内容,所以现在建站时每个邮箱都包在这两个注释里。直接把整个域名的这项功能关掉也行。<script> 标签里和 <head> 里的邮箱本来就不会被改,所以我们结构化资料里的邮箱一直读得到。
要查你的网站,就用爬虫的方式打开联系页,数一数 Cloudflare 的加密标记:
curl -s https://www.example.com/contact \
-A "Mozilla/5.0 (compatible; GPTBot/1.0)" \
| grep -c "email-protection"
只要大于 0,这一页就至少有一个邮箱是爬虫读不到的。我们的联系页现在印出来的是 0。
爬虫还会漏掉什么
同一份研究发现,Gemini(通过 Googlebot)和 AppleBot 会执行 JavaScript;它测到的 OpenAI、Anthropic、Perplexity 的爬虫都不会。所以凡是网站在脚本跑完之后才加上去的东西,这三家都看不到:用脚本载入的价格、在浏览器里才生成的菜单、小工具带进来的评价,有时甚至是整个页面。想知道它们看到什么,就用 curl 抓页面,在输出里找你在意的那几个字。
我们每次上线后都查的清单
- robots.txt 允许你想要的爬虫。
User-agent: *底下写着Allow: /的话,没点名的爬虫也算允许。 - 上面那段命令里每个名字都回 200。
- 用 Cloudflare 的话,AI bot policies 跟 robots.txt 说的是同一件事。
- 主要的文字、价格、联系方式,在脚本执行之前就已经在 HTML 里。
- 用
curl查得到你的邮箱。 - sitemap 列出每一页,日期只在那一页的文字真的改了才变。
nicasiadigital.com 每次上线后我们都跑一遍这些检查,没过的项目脚本会列出来。想让我们在你的网站上也跑一遍,私人诊断 就包括在内。
资料来源
- OpenAI,Overview of OpenAI crawlers
- Anthropic,Does Anthropic crawl data from the web, and how can site owners block the crawler?
- Perplexity,Perplexity crawlers
- Google,Google's common crawlers
- Cloudflare,2025 年 7 月 1 日新闻稿
- Cloudflare,Email Address Obfuscation
- Vercel 与 MERJ,The rise of the AI crawler,2024 年 12 月 17 日
Nicasia Digital Solutions