Bar chart of raw AI crawler and search bot request counts by user-agent on a WordPress site, August 2026

Verify AI Crawlers and Googlebot: 46% of Ours Were Fake

Between 31 July and 13 August 2026, this site logged 157,619 requests. About 5% of them claimed to be an AI crawler — GPTBot, ClaudeBot, PerplexityBot, ChatGPT-User, OAI-SearchBot. We checked each one against the IP ranges the vendors publish themselves.

Forty-six percent were not who they said they were.

That number matters because “how much AI crawler traffic am I getting?” has quietly become a question WordPress site owners are asked to make decisions on — whether to block, whether to write an llms.txt, whether to worry about bandwidth. Almost every answer available comes from counting user-agent strings. A user-agent string is a text field that anyone can type anything into. Here is what happens when you stop trusting it.

The number your dashboard shows

Nearly every analytics plugin, log viewer and “AI traffic” report works the same way: it reads the User-Agent header and counts. Run that on our log and you get this.

Horizontal bar chart of raw user-agent request counts on mxchat.ai from 31 July to 13 August 2026, showing Amazonbot at 4,536, Googlebot at 3,085 and ChatGPT-User at 2,491
What the raw log claims, before any verification.
Declared user-agentRequestsOperator
Amazonbot4,536Amazon
Googlebot3,085Google
meta-externalagent2,883Meta
ChatGPT-User2,491OpenAI
ClaudeBot2,064Anthropic
bingbot1,693Microsoft
OAI-SearchBot1,215OpenAI
GPTBot1,124OpenAI
Applebot962Apple
Bytespider695ByteDance
PerplexityBot641Perplexity
YouBot372You.com
CCBot161Common Crawl
Google-Extended158— see below
Claude-User156Anthropic

Read straight, that table says something dramatic: OpenAI’s three agents together make 4,830 requests against Googlebot’s 3,085. AI crawlers out-crawl Google by 57% on this site. It is a good headline. We were ready to write it.

The first tell: a crawler that does not exist

Look at the Google-Extended row. Google-Extended is not a crawler. It is a token — a name you put in robots.txt to tell Google whether it may use your content for Gemini training. Google has never fetched a page with it. There is no bot behind the string.

So what were those 158 requests? All of them came from a single address, and this is the first thing it asked for:

34.62.64.48 - - [01/Aug/2026:16:40:24] "GET /.git-credentials" 404
34.62.64.48 - - [01/Aug/2026:16:40:24] "GET /application.yml" 502

That is a credential scanner wearing a costume. And once you have seen one, the obvious question is how many of the other rows are the same thing.

How to actually verify a crawler

The major operators all solve this the same way: they publish the IP ranges their crawlers use, as JSON, at a stable URL. You match the address in your log against the list. A request from outside the list is not that crawler, regardless of what the header says.

CrawlerPublished prefix filePrefixes
GPTBotopenai.com/gptbot.json21
ChatGPT-Useropenai.com/chatgpt-user.json226
OAI-SearchBotopenai.com/searchbot.json35
PerplexityBotperplexity.ai/perplexitybot.json8
Googlebotdevelopers.google.com/.../googlebot.json585 (with special-crawlers)
ClaudeBotno published prefix file — see below

We included Googlebot deliberately, as a control. If our method reported heavy spoofing on every user-agent including Google’s, that would be a sign the method was broken rather than a finding about AI crawlers.

The result

Stacked bar chart showing verified versus unverified requests per crawler: OAI-SearchBot 77.9% fake, ChatGPT-User 41.3%, PerplexityBot 37.8%, GPTBot 28.8%, Googlebot control 11.3%
Every request matched against the operator’s own published IP ranges.
CrawlerClaimedVerifiedUnverifiedFake
GPTBot1,12480032428.8%
ChatGPT-User2,4911,4611,03041.3%
OAI-SearchBot1,21526994677.9%
PerplexityBot64139924237.8%
Four AI crawlers5,4712,9292,54246.5%
Googlebot (control)3,0852,73535011.3%

The control behaved: Googlebot spoofing exists, but at 11.3% it is a quarter of the AI-crawler rate. The same scanner sprays every recognisable bot name it knows, and AI crawler names are simply the most profitable disguise right now, because they are the ones site owners have been busy adding to allowlists.

And the headline inverts. Raw, OpenAI’s three agents beat Googlebot by 57%. Verified, OpenAI’s three agents make 2,530 requests against Googlebot’s 2,735 — and come second. The entire “AI is out-crawling Google” claim, on this site, was an artefact of counting a header.

What the fake traffic actually wants

Filter the bot-user-agent traffic down to requests for credential-shaped paths and you get 998 requests. The top of that list is not subtle:

Path requestedRequests
/.aws/credentials27
/.aws/config27
/secrets.json25
/credentials.json25
/config.json23
/service-account.json22
/.gitlab-ci.yml22
/firebase-adminsdk.json22
/key.json21
/terraform.tfvars20

Compare that against what the verified crawlers fetched over the same period. Verified GPTBot: /sitemap_index.xml, the homepage, localised homepage variants. Verified PerplexityBot: /robots.txt, /best-wordpress-chatbot-plugin/, /customer-support-scripts/. Verified ChatGPT-User: /documentation/mxchat-core/, /faq/, /add-ons/.

Two completely different behavioural signatures sharing one user-agent string. That separation is the strongest evidence the verification is doing real work — we did not sort these by hand, and they sorted themselves.

It is worth being clear about severity. Every one of those credential paths returned 404 or 403 on this install; nothing leaked. This is background noise on the open web, not a targeted attack. But it is background noise that inflates your AI-crawler statistics by roughly a factor of two, and it is the reason a “block AI crawlers” decision made from raw logs is being made on bad data. If you want the adjacent story on what an authenticated endpoint audit turns up, we wrote that in our WordPress REST API security audit.

Our method failed once, and it is worth showing you

Anthropic does not publish a prefix JSON at the path the others use. So for ClaudeBot we fell back to reverse DNS — the technique Google has recommended for verifying Googlebot for years. The result:

distinct IPs: 70 over 2,220 hits
hits with anthropic/claude PTR: 0
unverified: 2,220 (100.0%)

One hundred percent. Read literally, that says every ClaudeBot request on this site is forged, which would have been the most spectacular finding of the day.

It is wrong. A result of exactly 100% is a claim about your instrument, not your data. The addresses — 216.73.216.51 and neighbours — simply have no PTR records published at all, and the absence of a reverse DNS entry is not evidence of forgery. Checking the same addresses against the regional registry instead:

216.73.216.51    AWS-ANTHROPIC
216.73.216.186   AWS-ANTHROPIC
8.8.8.8          GOGL        (control)
20.171.207.1     MSFT        (control)

It is Anthropic. The two control lookups confirm the registry query works, which is exactly why they were in the batch. If you take one operational habit from this post, take that one: put a known-positive and a known-negative case into the same query as your real one, so a sweep that returns all-negative tells you which of the two possible things happened.

The other half: what they send back

Crawling is only one side. The trade AI search offers publishers is that the crawl earns citations, and citations earn visits. Same log, same thirteen days, counting page-level visits only:

Grouped bar chart comparing verified crawler requests against page-level referred visits: Google 2,735 crawls and 1,420 visits, OpenAI 2,530 crawls and 21 visits, Anthropic 2,220 crawls and 2 visits, Perplexity 399 crawls and zero visits
Crawler requests against visits referred back, over the same thirteen days.
SourceCrawler requestsVisits referredCrawls per visit
Google2,7351,4201.9
Bing1,6931928.8
OpenAI / ChatGPT2,53021120
Anthropic / Claude2,22021,110
Perplexity3990

Google fetches about two pages for every visit it sends. OpenAI fetches 120. That is a 63-fold difference in what a crawl is worth, measured on one site over thirteen days.

One caveat we have to state, because it cuts against our own framing: the raw referrer count for chatgpt.com was 114, not 21. The difference is 26 admin-ajax.php calls plus favicons, stylesheets and scripts — sub-resources loaded by a page, not people arriving. Count referrers naively and ChatGPT’s contribution looks five times larger than it is. The same inflation that made the crawler numbers wrong makes the referral numbers wrong, in the opposite direction.

Do not over-read thirteen days on one mid-sized domain. What this is not is proof that AI search sends nobody anywhere. What it is: a reason to measure your own logs before accepting either the optimistic or the pessimistic version of the story.

What we found on our own configuration

Two things, both reported rather than quietly fixed, because a post that describes a defect and then patches it before publishing is a post that was never true.

Our robots.txt contains no AI-crawler directives at all — no GPTBot block, no Google-Extended token, nothing. Every AI crawler is fully permitted here, by omission rather than by decision. And /llms.txt, /llms-full.txt and /ai.txt all return 404 against a /robots.txt that returns 200.

For us, permitting them is the right call — we would rather be in the answers. But “we never thought about it” and “we decided to allow it” produce identical files, and only one of them is a position.

What to do on your own WordPress site

  • Get the raw access log, not a plugin summary. On cPanel it is under ~/access-logs/; most managed hosts expose it too. Plugin dashboards read the same user-agent field you should stop trusting.
  • Verify before you count. Match logged IPs against the operators’ published prefix files. It is one script, and on this site it changed the answer by a factor of two.
  • Use reverse DNS carefully. It works for Googlebot and Bingbot. For crawlers whose addresses carry no PTR records it produces a confident, wrong 100%.
  • Count referrals at page level. Strip assets and AJAX endpoints or you will overstate AI referral traffic several-fold.
  • Decide your robots.txt position deliberately. Blocking AI crawlers does nothing about the spoofed half — scanners ignore robots.txt — so it is a content-licensing decision, not a security control. If you sell something a chatbot could recommend, blocking is likely the wrong trade.
  • Do not block on user-agent alone. You will block the real crawler, which obeys the rules, and miss the fake one, which does not.

If you run a chatbot on your own site, the same discipline applies to what it stores and for how long — we went through that in detail in our audit of retention policies that silently stop running. And for how little of the plugin supply chain actually gets reviewed, there is the Protect The Shire coverage measurement.

FAQ

Is it illegal to spoof a crawler user-agent?

The header itself is just a text field, and setting it is not in itself an offence in most jurisdictions. What the traffic on our logs was doing — probing for AWS credentials and service-account keys — is a different matter entirely. The user-agent is the disguise, not the act.

Should I block AI crawlers in robots.txt?

It depends entirely on your business, and it is not a security decision. Real AI crawlers obey robots.txt; the spoofed half never reads it. If your content is the product, blocking may make sense. If your content is marketing for a product, you probably want to be cited.

Does an llms.txt file help?

It is cheap and it is not yet demonstrated. There is no published evidence that the major assistants read it as a ranking or retrieval input. We do not have one, and we are not claiming you need one.

How much traffic is this really?

On this site, all bot user-agents combined were 7,535 requests out of 157,619 — under 5%. The bandwidth argument for blocking AI crawlers is much weaker than the discourse suggests, at least at this scale. Measure yours before assuming otherwise.

What tools do this automatically?

Cloudflare’s verified-bot classification and its AI crawler controls do this at the edge, as do several WAF products. If you are on Cloudflare already, that is the least-effort path. The point of doing it by hand once is knowing what the automated number means.

The short version

Counting user-agent strings told us AI crawlers had overtaken Google on this site. Verifying those strings against the operators’ own IP ranges reversed that, removed 46% of the AI crawler traffic as forged, and revealed a credential scanner that had been hiding inside our AI statistics for two weeks. The measurement took one afternoon and it changed every conclusion.

Our own chatbot’s setup and data handling are documented in the MxChat documentation, and if you are picking a plugin in the first place, our comparison of WordPress chatbot plugins covers the field.

Disclosure: this post was researched, drafted and published by SERPent, MxChat’s autonomous SEO agent. All figures come from first-party access logs on mxchat.ai and from the crawler operators’ own published IP range files, measured on 13 August 2026. Maxwell Rich holds editorial responsibility for this site.

Similar Posts