Guides

How to verify that AI crawlers actually reach your site

Faking a crawler's user agent with curl proves little, because CDNs recognise real crawlers by IP, reverse DNS or signature. Check the robots.txt your site actually serves, your CDN's bot settings and logs, your server logs against each company's published IP ranges, then Search Console and Bing Webmaster Tools.

Updated · Sources checked · By

Why a faked user agent proves little

The quick test everyone tries is curl -A "GPTBot" https://yoursite.com/. It tells you less than it seems:

The steps below use evidence the real crawlers leave behind, from your own settings outward to the search engines.

1. Read the robots.txt your site actually serves

Open https://yoursite.com/robots.txt in a browser, not the file in your code or on your server. What visitors get can differ:

Look for Disallow lines that name GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot, PerplexityBot, Googlebot or bingbot, and for Content-Signal lines. Remember that robots.txt is a request: it shows what you asked for, not who actually came. See AI crawlers: the list, and how to allow or block them for what each rule means.

2. Check your CDN and hosting bot settings

These can block crawlers no matter what robots.txt says:

Where What to check
Cloudflare The AI crawler settings for Search, Training and Agent; each crawler’s Allow or Block in AI Crawl Control (Block creates a WAF custom rule); your other WAF custom rules; Bot Fight Mode, which WAF rules cannot skip
Vercel Whether the AI bots managed ruleset is set to Deny (it is off by default)
Hostinger CDN Bots you blocked explicitly (they get 403 even when verified), and whether Under Attack mode is on, which challenges every visitor

If you use another CDN, firewall or security plugin, look for the same things: bot or AI crawler rules, challenge pages, and rate limits.

3. Look at your CDN’s AI crawler data

On Cloudflare, open AI Crawl Control, available on all plans:

Two limits on the Free plan: crawlers are identified by user agent only, so a fake GPTBot counts as GPTBot, and metrics cover only the past 24 hours. Cloudflare’s docs describe fuller detection on paid plans.

4. Read your server logs

Nginx and Apache’s standard “combined” log format records the client IP and the user agent. Two things to fix first:

A first look, with the log in the usual place:

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

This counts requests by IP and status code. Status 200 is what you want; 403, 429 and 503 mean something turned the crawler away.

5. Verify the IPs

A user agent alone is not evidence. Check each IP from step 4 against the company’s own list:

Company How to verify
OpenAI A separate IP list for each crawler: searchbot.json, gptbot.json, chatgpt-user.json
Anthropic One list for ClaudeBot, Claude-SearchBot and Claude-User: bots.json
Perplexity perplexitybot.json and perplexity-user.json; Perplexity recommends checking user agent and IP together
Google Reverse DNS must end in googlebot.com, google.com or googleusercontent.com, and a forward lookup must return the same IP; or check Google’s IP lists such as common-crawlers.json
Bing Reverse DNS must end in search.msn.com, with a matching forward lookup; or use the Verify Bingbot tool, or bingbot.json, which Bing asks you to refresh daily

Reverse DNS, then forward DNS, for an IP from your log:

host 66.249.66.1
host crawl-66-249-66-1.googlebot.com

The first command should return a googlebot.com name, and the second should return the IP you started with.

To check an IP against one of the JSON lists, a few lines of Python are enough. These files list ranges under prefixes, as ipv4Prefix or 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")

Save it as check_ip.py, download the list, and run python3 check_ip.py gptbot.json 203.0.113.7. A request that says GPTBot from an IP that is not listed should be treated as someone else using its name.

You will never see Google-Extended in your logs: it is a robots.txt token, not a separate crawler.

6. Google Search Console

7. Bing Webmaster Tools

What each step proves

Step What it tells you
1. Live robots.txt What you asked crawlers to do
2. CDN and hosting settings What your infrastructure is set to block
3. CDN AI crawler data Which crawlers reached the CDN and whether they got through
4. Server logs Which requests reached your server and what it answered
5. IP verification Whether those requests really came from that company
6–7. Search Console and Bing What Google and Bing actually fetched, and whether their AI features show or cite you

Citeloop’s free GEO audit, opening soon, will check step 1 and spot the CDN in step 2 from the outside, and tell you which of the remaining checks need your access.

Sources

  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: Restoring original visitor IPs
  7. Cloudflare blog: Declaring your AIndependence (bot score and user agents, 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: Verifying Googlebot and other Google crawlers
  12. Search Console Help: URL Inspection tool
  13. Search Console Help: Crawl Stats report
  14. Search Console Help: Search generative AI performance reports
  15. Search Console Help: Search generative AI control
  16. Bing: How to verify Bingbot
  17. Bing: Which crawlers does Bing use?
  18. Bing: AI Performance report
  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

More guides