为什么冒充爬虫名字测不出什么
大家最先想到的是 curl -A "GPTBot" https://你的网站/。它能说明的比看上去少:
- CDN 会核对来的到底是谁。 Cloudflare 认“已验证的爬虫”靠的是加密签名、公布的 IP 清单或反向 DNS;它的 bot 评分不看 User-agent;Pro 及以上套餐的“假爬虫”规则会标出自称 Googlebot、Bingbot 却验证不过的请求。Hostinger 的 CDN 和 Vercel 也按 IP 或反向 DNS 认爬虫。
- 所以两边结果可能对不上。 你冒充的 GPTBot 可能被拦,真 GPTBot 却进得来。反过来,按“已验证爬虫类别”写的拦截规则匹配不到你冒充的请求,你看到 200,真爬虫拿到的却可能是 403。
- 日志也一样能造假。 User-agent 是客户端自己报的。Bing 直接说 User-agent 很容易伪造。
下面几步看的都是真爬虫留下的证据,从你自己的设置往外,一直查到搜索引擎后台。
1. 看线上实际返回的 robots.txt
用浏览器打开 https://你的网站/robots.txt,不要看代码里或服务器上的那份文件。访客拿到的可能不一样:
- Cloudflare 可能在你的文件前面插入它自己的规则(Managed robots.txt,现在由 Bot Preference Sync 取代)。
- 有些建站平台会改写它。比如在 Squarespace 里勾选“Block known artificial intelligence crawlers”,就会在 robots.txt 里加上一串 AI 爬虫,包括 GPTBot、ClaudeBot 和 Google-Extended。这个选项默认不勾。
看有没有点名 GPTBot、OAI-SearchBot、ClaudeBot、Claude-SearchBot、PerplexityBot、Googlebot 或 bingbot 的 Disallow,有没有 Content-Signal 行。记住 robots.txt 只是请求:它说明你要求了什么,不说明谁真的来过。每条规则的含义见AI 爬虫一览:怎么放行、怎么屏蔽。
2. 看 CDN 和托管平台的拦截设置
不管 robots.txt 怎么写,这些设置都可能把爬虫拦在外面:
| 在哪里 | 看什么 |
|---|---|
| Cloudflare | Search、Training、Agent 三项 AI 爬虫设置;AI Crawl Control 里每个爬虫是 Allow 还是 Block(点 Block 会生成一条 WAF 自定义规则);其他 WAF 自定义规则;Bot Fight Mode(WAF 规则跳不过它) |
| Vercel | AI bots 托管规则集是不是设成了 Deny(默认关闭) |
| Hostinger CDN | 你明确拦掉的 bot(验证过的也会拿到 403);有没有开 Under Attack 模式,它会给所有访客出验证页 |
用别的 CDN、防火墙或安全插件的,找同样的东西:针对 bot 或 AI 爬虫的规则、验证页、限速。
3. 看 CDN 的 AI 爬虫数据
用 Cloudflare 的,打开 AI Crawl Control,所有套餐都有:
- Crawlers 列出每个 AI 爬虫的请求数,以及你设的 Allow 或 Block。
- Metrics 把 “All requests”(含被拦和出错的)和 “Allowed requests”(拿到 2xx 的)分开。两者差得多,说明有东西在拦。
- 状态码里 403 是被拦,402 是要求付费。
- Directives 列出请求了 robots.txt 禁止路径的 AI 爬虫。
免费套餐有两个限制:只按 User-agent 认爬虫,所以冒充的 GPTBot 也算 GPTBot;数据只有过去 24 小时。Cloudflare 的文档说付费套餐的识别更全。
4. 看服务器日志
Nginx 和 Apache 常用的 combined 日志格式会记下客户端 IP 和 User-agent。先处理两件事:
- 经过 Cloudflare 时,日志里记的是 Cloudflare 的 IP,不是爬虫的。真实 IP 在
CF-Connecting-IP请求头里。按 Cloudflare 的说明,用 nginx 的 realip 模块(set_real_ip_from加real_ip_header CF-Connecting-IP)或 Apache 的 mod_remoteip 恢复。 - 命中缓存的请求到不了你的服务器。 如果 CDN 缓存了 HTML,从缓存返回的爬虫访问不会出现在这份日志里。
日志在常见位置的话,先这样粗看一遍:
grep -E 'GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-SearchBot|Claude-User|PerplexityBot|Perplexity-User|Googlebot|bingbot' /var/log/nginx/access.log \
| awk '{print $1, $9}' | sort | uniq -c | sort -rn | head -20
它按 IP 和状态码统计请求次数。200 是想要的;403、429、503 说明爬虫被挡了回去。
5. 核对 IP
只有 User-agent 不算证据。把第 4 步拿到的 IP 拿去和各家自己公布的清单核对:
| 公司 | 怎么核对 |
|---|---|
| OpenAI | 每个爬虫一份 IP 清单:searchbot.json、gptbot.json、chatgpt-user.json |
| Anthropic | ClaudeBot、Claude-SearchBot、Claude-User 共用一份:bots.json |
| Perplexity | perplexitybot.json 和 perplexity-user.json;Perplexity 建议 User-agent 和 IP 一起核对 |
反向 DNS 要以 googlebot.com、google.com 或 googleusercontent.com 结尾,再正向解析回同一个 IP;或者对照 Google 的 IP 清单,比如 common-crawlers.json |
|
| Bing | 反向 DNS 要以 search.msn.com 结尾,正向解析也要对得上;或者用 Verify Bingbot 工具,或对照 bingbot.json,Bing 要求每天重新取一次 |
对日志里的一个 IP 先做反向解析,再做正向解析:
host 66.249.66.1
host crawl-66-249-66-1.googlebot.com
第一条应该返回一个 googlebot.com 结尾的名字,第二条应该返回你一开始的那个 IP。
拿 IP 对照 JSON 清单,几行 Python 就够了。这些文件都把网段列在 prefixes 里,写成 ipv4Prefix 或 ipv6Prefix:
import ipaddress, json, sys
ranges = json.load(open(sys.argv[1]))["prefixes"]
ip = ipaddress.ip_address(sys.argv[2])
nets = [ipaddress.ip_network(r.get("ipv4Prefix") or r.get("ipv6Prefix")) for r in ranges]
print("listed" if any(ip in n for n in nets) else "NOT listed")
存成 check_ip.py,下载清单,运行 python3 check_ip.py gptbot.json 203.0.113.7。自称 GPTBot、IP 却不在清单里的请求,应当看作别人冒用了它的名字。
日志里永远不会出现 Google-Extended:它只是 robots.txt 里的一个名称,不是单独的爬虫。
6. 谷歌 Search Console
- 网址检查会显示最近一次抓取的时间、robots.txt 是否允许(“Crawl allowed?”)、是否真的抓到了页面(“Page fetch”),以及谷歌拿到的 HTML。有个坑:页面被 robots.txt 拦住时,“Indexing allowed?”照样显示 Yes,因为谷歌没抓到页面,看不到里面的
noindex。实时测试用的是另一个爬虫 Google-InspectionTool,测试通过不代表 Googlebot 一定进得来。 - 抓取统计信息(在“设置”里)按响应码列出 Googlebot 的请求,以及抓 robots.txt、连服务器时出过的问题。只有根级资源能用。
- 设置 > Search generative AI 要处于“包含”状态,网站才会出现在 AI 摘要和 AI 模式里。
- 生成式 AI 效果报告从 2026 年 8 月 31 日起对所有网站开放,显示网站在谷歌 AI 功能里的展示次数,不显示点击。
7. Bing 站长工具
- URL Inspection 显示 Bing 何时发现、抓取、收录了某个页面;其中的 Live URL 能看到 Bingbot 下载页面时看到的内容。
- AI Performance 显示你的页面在 Microsoft Copilot 和 Bing 的 AI 摘要里被引用了多少次,以及背后的“grounding queries”(AI 检索时用的查询)。这是抽样数据,不是完整记录,被引用也不等于被点击。可以导出 CSV 或 Excel。
每一步能说明什么
| 步骤 | 说明什么 |
|---|---|
| 1. 线上的 robots.txt | 你要求爬虫做什么 |
| 2. CDN 和托管平台设置 | 你的基础设施设成了拦什么 |
| 3. CDN 的 AI 爬虫数据 | 哪些爬虫到了 CDN、有没有被放行 |
| 4. 服务器日志 | 哪些请求到了你的服务器、服务器怎么回应 |
| 5. 核对 IP | 这些请求是不是真的来自那家公司 |
| 6–7. Search Console 和 Bing | 谷歌和 Bing 实际抓到了什么,AI 功能有没有展示或引用你 |
Citeloop 的免费 GEO 体检即将开放,会从外部查第 1 步、认出第 2 步用的是哪家 CDN,并告诉你其余几步哪些需要你开权限才能查。