I Tested 30 Major Websites: 1 in 5 Does Not Serve the AI Crawlers It Officially Allows

robots.txt says yes, the server says 403

Figma blocks GPTBot in robots.txt and serves it anyway. WordPress.com allows four crawlers and rate-limits all of them. Here is the data, and how to check your own site in a minute.


Everyone treats robots.txt as the answer to “can ChatGPT read my site?”

It is not an answer. It is a statement of intent. The actual decision happens somewhere else entirely: at Cloudflare, at a WAF, in a bot-fight rule, in a rate limiter keyed on User-Agent. Nobody reconciles the two. Your robots.txt can say welcome while your edge says 403, and nothing in your stack will ever tell you.

So I measured it. I sent live requests as 12 real AI crawlers to 30 major websites and compared what each site declares with what it actually serves.

The method, stated plainly

For each site: fetch robots.txt, parse the rules for each crawler, then make a real HTTP request using that crawler’s exact User-Agent and record the status code.

Want the same numbers for your own site?

I run the identical test on request — twelve AI crawlers, live requests, compared against what your robots.txt declares. You get one email with what I found. No list, no follow-up sequence.

Check my site →

One control matters more than everything else: before comparing bots, I fetch the site with an ordinary Chrome User-Agent. If that fails too, the site is blocking my network, not AI crawlers, and reporting “12 crawlers blocked” would be a lie. Those sites are excluded, not counted as findings.

That control disqualified 7 of 30 sites. Canva, GoDaddy, Namecheap, Etsy, Udemy, Medium and Substack all return 403 to everything from a datacenter IP, browser included. Which is its own finding. Nearly a quarter of major sites treat datacenter traffic as hostile by default, and any tool that skips the control fetch will happily report them as “blocking AI”.

That leaves 23 sites where a fair comparison is possible.

Result: 5 of 23 disagree with their own robots.txt

21%. Roughly one in five.

Two different failure modes, and the second one is the interesting half.

Mode 1: allows in writing, refuses in practice

Notion. Its robots.txt welcomes Bingbot. The edge returns 403 with a bot challenge page. Bing powers Copilot, so this is a live channel quietly closed.

Slack. Google-Extended and Bingbot both get 429. Not a block, a rate limit. To a crawler, the difference is academic: it did not get the page.

WordPress.com has the widest gap in the set. Google-Extended, Amazonbot, CCBot and meta-externalagent all receive 429, while Chrome from the same network gets 200. Four crawlers, all permitted on paper, all turned away.

I verified this one by hand outside my own tooling:

Google-Extended  ->  HTTP 429
Amazonbot        ->  HTTP 429
CCBot            ->  HTTP 429
Chrome           ->  HTTP 200

Mode 2: forbids in writing, serves anyway

This is the one nobody checks, because nobody thinks to.

Figma‘s robots.txt contains, explicitly:

User-Agent: GPTBot
Disallow: /

And the server’s actual response to GPTBot:

GPTBot  ->  HTTP 200, 1,593,059 bytes
Chrome  ->  HTTP 200, 1,593,059 bytes

Byte for byte identical. The same is true for Google-Extended and CCBot, which are also disallowed in the file.

To be precise about what this means: robots.txt is voluntary. A well-behaved crawler reads it and leaves. Figma has not failed at anything technically — they simply have no enforcement behind the declaration, and are trusting the honour system. Which is fine, right up until someone assumes the file is doing work it is not doing.

Coursera shows the same pattern with meta-externalagent.

30 major sites tested against 12 AI crawlers: results
Full results: 30 sites, 12 crawlers, measured 27 July 2026.

Which crawlers get caught most

Crawler Sites where declaration ≠ reality
Google-Extended 3
Bingbot 2
CCBot 2
meta-externalagent 2
GPTBot 1
Amazonbot 1

Google-Extended leading is not an accident. It governs whether your content trains and feeds Google’s AI surfaces, and it gets caught in generic rate limits more than any other, because nobody thinks of it as a “search” bot when writing the allow-list.

One more number

18 of 23 sites (78%) now serve an llms.txt. A year ago that file barely existed. Whatever you think of the format, the market has decided it is table stakes. If you do not have one, you are now in the minority.

Why this is worth your five minutes

If your content stopped showing up in ChatGPT, Perplexity or AI Overviews, the first instinct is to blame the content. The data says: check the plumbing first.

Nothing in your analytics will surface this. Crawlers do not file complaints. A 403 to GPTBot looks exactly like nobody asking.

And it usually is not a decision anyone made. It is the accidental result of turning on bot protection, tightening a rate limit, or inheriting a robots.txt written for a different internet.

Check your own site

I packaged this as a tool. It sends the same live requests as 12 crawlers, includes the control fetch so a datacenter block is never reported as an AI policy, and additionally checks extractability — whether structured data, author attribution and dates are present, because being fetched and being cited are different problems.

AI Crawler Reality Check. One URL, about 20 seconds.

Check the exact page you care about, not just the homepage. Protection rules routinely differ per path, and the article you want cited is rarely the front page.

If the tool finds a gap

The test tells you the plumbing is broken. It does not tell you what it is costing you.

That is the AI Visibility Audit: 40 real buyer prompts run against ChatGPT, Perplexity, Gemini and Google AI Overviews, the crawler-access matrix above run across your whole site, competitor citation share, and a ranked list of technical fixes — implemented, not just listed. Report and priority fixes typically ship within a week of the prompt list being confirmed. $1,500. White-label available for agencies.

No one can guarantee a model cites you. I remove the reasons it does not, and measure the change 30 days later with the same method both times.

See the audit →
or start with the free snapshot — 5 prompts, no email gate

Limits, honestly

  • This runs from a datacenter IP. Residential traffic is sometimes treated differently, which is exactly what the control fetch exposes rather than hides.
  • It measures whether a crawler is served, not whether a model chose to cite you. No public API exposes citation data. Anyone selling you that number is estimating.
  • A 429 is a rate limit, not a permanent block. Repeated over time it has the same effect, but it is a different fix.
  • Sites change. This snapshot is 27 July 2026.

I build and repair multi-agent systems in Python. This started because I wanted to know why my own articles were invisible to AI search, and found the answer was not in my content.

Andrii Klymenko. Avionics engineer turned solo builder. I write about what actually breaks in production systems, with the logs attached.

📦 The AI Automation Playbook

Get 51 ready-to-use AI automation workflows


Learn More — $29 →

📚 Related Articles

Get the free AI Automation Starter Kit

Ready-to-use workflows and prompts I actually run in a live, 24/7 AI-automated business — no fluff, instant access.

Grab it free →

🚀 Level Up Your AI Game

Get weekly AI tools, prompts & automation strategies — free, every week.

No spam. Unsubscribe anytime.

Stay in the Loop

Get notified about new tools, templates, and automation tips. No spam, ever.

Follow us across the web

@

All hubs · andriiklymenko.carrd.co