指南

怎么确认 AI 爬虫真的抓到了你的网站

用 curl 冒充爬虫名字测一下,说明不了多少:CDN 是按 IP、反向 DNS 或签名认真爬虫的。应该看线上实际返回的 robots.txt、CDN 的拦截设置和数据、拿各家公布的 IP 段核对服务器日志,再看谷歌 Search Console 和 Bing 站长工具。

更新于 · 来源核对于 · 作者

为什么冒充爬虫名字测不出什么

大家最先想到的是 curl -A "GPTBot" https://你的网站/。它能说明的比看上去少:

下面几步看的都是真爬虫留下的证据,从你自己的设置往外,一直查到搜索引擎后台。

1. 看线上实际返回的 robots.txt

用浏览器打开 https://你的网站/robots.txt,不要看代码里或服务器上的那份文件。访客拿到的可能不一样:

看有没有点名 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,所有套餐都有:

免费套餐有两个限制:只按 User-agent 认爬虫,所以冒充的 GPTBot 也算 GPTBot;数据只有过去 24 小时。Cloudflare 的文档说付费套餐的识别更全。

4. 看服务器日志

Nginx 和 Apache 常用的 combined 日志格式会记下客户端 IP 和 User-agent。先处理两件事:

日志在常见位置的话,先这样粗看一遍:

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 一起核对
Google 反向 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

7. Bing 站长工具

每一步能说明什么

步骤 说明什么
1. 线上的 robots.txt 你要求爬虫做什么
2. CDN 和托管平台设置 你的基础设施设成了拦什么
3. CDN 的 AI 爬虫数据 哪些爬虫到了 CDN、有没有被放行
4. 服务器日志 哪些请求到了你的服务器、服务器怎么回应
5. 核对 IP 这些请求是不是真的来自那家公司
6–7. Search Console 和 Bing 谷歌和 Bing 实际抓到了什么,AI 功能有没有展示或引用你

Citeloop 的免费 GEO 体检即将开放,会从外部查第 1 步、认出第 2 步用的是哪家 CDN,并告诉你其余几步哪些需要你开权限才能查。

来源

  1. Cloudflare:Verified bots
  2. Cloudflare:Fake bot managed rules
  3. Cloudflare:Analyze AI traffic(AI Crawl Control)
  4. Cloudflare:Manage AI crawlers(AI Crawl Control)
  5. Cloudflare:Bot Fight Mode
  6. Cloudflare:恢复访客的真实 IP
  7. Cloudflare 博客:Declaring your AIndependence(bot score 与 User-agent,2024-07-03)
  8. OpenAI:Overview of OpenAI crawlers
  9. Anthropic:Does Anthropic crawl data from the web, and how can site owners block the crawler?
  10. Perplexity:Perplexity crawlers
  11. Google:验证 Googlebot 和其他 Google 爬虫
  12. Search Console 帮助:网址检查工具
  13. Search Console 帮助:抓取统计信息报告
  14. Search Console 帮助:生成式 AI 效果报告
  15. Search Console 帮助:Search generative AI 设置
  16. Bing:How to verify Bingbot
  17. Bing:Which crawlers does Bing use?
  18. Bing:AI Performance 报告
  19. Vercel:Bot management
  20. Hostinger:Hostinger CDN, search engine crawlers and SEO
  21. Squarespace:Request that AI models exclude your site
  22. nginx:ngx_http_log_module

更多指南