A fake AI bot is a request that uses the name of a real crawler, such as GPTBot, ClaudeBot or Googlebot, but doesn’t come from that company. You catch it by checking the address: it isn’t in the company’s published IP list and fails reverse DNS. Block fakes by failed verification, never by name, or you will block the real bots too.
Why bots fake their name
Because it works. Many websites, firewalls and rate limits wave through anything that looks like a famous crawler. So scrapers copy content as “GPTBot”, and vulnerability scanners probe for weak spots as “ClaudeBot” or “Googlebot”. Some analytics tools then count these visits as AI interest, which inflates your numbers.
Signs of a fake
Any one of these is a hint; a failed address check is proof.
- The address isn’t the company’s. It’s not in the bot’s official IP list, and reverse DNS doesn’t lead to the company’s domain. This is the real test; see how to verify any AI crawler.
- It asks for things a crawler never would:
/.env,/wp-login.php,/.git/config,/phpmyadmin/, backup files. A real AI crawler reads your public pages. - Odd hosting. The address belongs to a cheap VPS provider or a residential network, not to Microsoft Azure, Google or another provider the company is known to use. (Treat this as a hint only; check the list.)
- The wrong bot for the address. A “ChatGPT-User” request from an address on OpenAI’s GPTBot list doesn’t add up, because each OpenAI bot has its own list.
- Strange behaviour. Hundreds of requests a minute, or an old version string that the company stopped using long ago.
Here is what a typical fake looks like in an access log:
45.148.10.12 - - [12/Oct/2026:03:14:07 +0000] "GET /.env HTTP/1.1" 404 153 "-" "Mozilla/5.0 (compatible; Claude-User/1.0; +Claude-User@anthropic.com)"
The name says Anthropic. The address isn’t in Anthropic’s list, and the path is a classic secrets probe. You can paste any line like this into the bot checker to see the verdict.
How not to block them
Don’t do this:
# Blocks the fakes AND the real GPTBot
if ($http_user_agent ~* "GPTBot") { return 403; }
If you want to keep the real crawler, the rule has to ask two questions: does it claim to be the bot, and is it not from the bot’s addresses?
Block fakes on Nginx
Build an allow-list from the official file, then block requests that claim the name but come from anywhere else. First, turn OpenAI’s GPTBot list into an Nginx file (run this daily from cron):
curl -s https://openai.com/gptbot.json \
| jq -r '.prefixes[] | (.ipv4Prefix // .ipv6Prefix) + " 1;"' \
> /etc/nginx/ai/openai-gptbot.conf
Then, in the http block:
geo $from_openai_gptbot {
default 0;
include /etc/nginx/ai/openai-gptbot.conf;
}
map $http_user_agent $claims_gptbot {
default 0;
"~*GPTBot" 1;
}
map "$claims_gptbot:$from_openai_gptbot" $fake_gptbot {
default 0;
"1:0" 1;
}
And in the server block:
if ($fake_gptbot) { return 403; }
Repeat the pattern for other bots with lists. If your site is behind a proxy or CDN, make sure Nginx sees the visitor’s real address (the real_ip module) before the geo check, or every request will look like it comes from the proxy.
Block fakes on Cloudflare
Cloudflare keeps its own list of verified bots. A custom WAF rule such as this blocks requests that use a bot’s name without being a known, verified bot:
(http.user_agent contains "GPTBot" and not cf.client.bot)
Set the action to Block, and add similar rules for ClaudeBot, PerplexityBot and Googlebot as needed. Test with the rule in log-only mode first, if your plan allows it.
Block fakes from your application
If you’d rather decide in code, call a verification service with the visitor’s user-agent and address. OZMAICO’s API returns "status": "fake" and "block_suggested": true for fakes:
curl -X POST https://your-aibot-detect/api/v1/check.php \
-H 'Authorization: Bearer sk_…' \
-d '{"ua":"Mozilla/5.0 (compatible; GPTBot/1.2)","ip":"45.148.10.12"}'
Cache the answer per address for a few hours so you don’t check every request.
What about bots that can’t be verified?
Some companies, such as Meta and ByteDance, publish no IP list and no DNS names. For their bots, a failed check proves nothing, so don’t block them as “fake”. If you don’t want them, block them by name in robots.txt (see robots.txt rules for AI bots) and, if they ignore it, by rate limit.
See how many fakes you get
Most sites are surprised. Create a free account to see real vs fake AI bots on your own site, which addresses the fakes come from, and which pages they probe.
Check your own website
See which AI bots really visit your site — real or fake, page by page — and how many people AI assistants send you. Free.