TL;DR
In Vercel’s December 2024 analysis, GPTBot and ClaudeBot each hit 404s on roughly 34% of fetches—four times Googlebot’s 8.22% rate. Cloudflare’s June 2025 data shows Anthropic’s crawler pulled 73,000 pages for every one referral click sent back, compared to Google’s 14:1 ratio. A single 404 or rate-limit block on an AI crawler visit is often permanent because these bots rarely retry and generate negligible traffic to offset losses.
The article’s bottom-line verdict: treat AI crawlers as fragile, hard-to-recover visitors—maintain clean sitemaps, avoid client-side rendering that returns empty 200s, and block by IP/ASN rather than just user-agent, since Perplexity has been caught spoofing identity to bypass robots.txt.
An HTTP status code is a three-digit number a server sends back with every response, telling the requester whether the request succeeded, was redirected, or failed. For a human visitor, a wrong code is a bad afternoon. For an AI crawler like GPTBot, ClaudeBot, or PerplexityBot, a wrong code is the difference between your page existing in a model's or answer engine's world and it not existing at all — because unlike a human, the crawler never scrolls past the error and tries the nav menu instead.
This guide covers what each status code class means specifically when the requester is an AI crawler rather than a browser or a traditional search bot, where AI crawlers systematically behave worse than Googlebot, and a concrete QA process for catching failures before they quietly erase you from AI-search answers.
Why status codes carry different weight for AI crawlers
Search engines have spent two decades tuning their crawlers against real link graphs, sitemaps, and canonicalization signals. AI crawlers are newer, and the data shows it. In a December 2024 analysis of AI crawler traffic, Vercel found that ChatGPT's crawler spent 34.82% of its fetches on 404 pages and another 14.36% following redirects, with Claude's crawler landing on 404s at a nearly identical 34.16% rate — compared with Googlebot's 8.22% 404 rate and 1.49% redirect rate over the same window. That's roughly a fourfold gap in wasted fetches between the AI crawlers and the search engine crawler they're often compared to.
Volume compounds the problem. The same Vercel analysis logged 569 million requests from GPTBot and 370 million from Claude's crawler in a single month, against Googlebot's 4.5 billion — meaning AI crawlers are making far fewer total requests per site, so a bad status code on a page they do reach is proportionally more costly than the same error would be to a search engine that revisits constantly.
The traffic doesn't come back the way search traffic does, either. Using its Radar data from June 2025, Cloudflare reported crawl-to-referral ratios of roughly 14:1 for Google, 1,700:1 for OpenAI, and 73,000:1 for Anthropic — meaning Anthropic's crawler pulled tens of thousands of pages for every one click sent back to a source site. If a crawler visits once, hits a 404 or a rate-limit block, and doesn't come back, there is effectively no second chance and no referral traffic to offset the loss.
The crawlers you're actually being tested against
Direct answer: "AI crawler" isn't one bot. The major labs run separate, independently-controllable agents for different purposes:
- OpenAI operates three distinct crawlers — GPTBot (model training), OAI-SearchBot (ChatGPT search), and ChatGPT-User (live, user-triggered fetches) — each independently addressable in robots.txt, so you can allow search visibility while blocking training, or vice versa.
- Anthropic runs ClaudeBot for crawling, with separate Claude-User and Claude-SearchBot paths for live query fetches.
- Perplexity runs PerplexityBot and Perplexity-User — and its compliance record is contested. In August 2025, Cloudflare delisted Perplexity from its Verified Bots program after finding it rotated IP addresses, switched ASNs, and spoofed a Chrome-on-macOS user-agent string to keep crawling sites that had explicitly blocked its declared bots via robots.txt.
That last point matters for a QA guide specifically: status codes only tell you the truth if the requester is honest about who it is. A 403 in your logs against a spoofed user-agent tells you nothing about whether the real crawler got through.
Status code reference table for AI crawler QA
| Code | What it signals to an AI crawler | Common misconfiguration |
|---|---|---|
| 200 OK | Content was fetched successfully and is eligible for training data, retrieval, or citation. Does not guarantee the content was parsed, chunked, or deemed citation-worthy. | Serving 200 with a client-side-rendered empty shell — most AI crawlers don't execute JavaScript, so a 200 with no server-rendered content is functionally a soft 404. |
| 301 Moved Permanently | Google's own crawling documentation treats a 301 as a strong signal that the redirect target is canonical — most AI crawlers follow the redirect chain similarly, attributing the content to the destination URL. | Redirect chains longer than 2-3 hops; AI crawlers are less tolerant of chained redirects than Googlebot, which will follow up to 10 hops before giving up. |
| 302 Found | Treated as a weak canonicalization signal — the crawler may still index or cite the original URL rather than the target. | Using 302s for permanent moves (a common CMS default), which leaves stale URLs cited in AI answers long after the content has moved. |
| 403 Forbidden | Explicit, deliberate access denial — often from a WAF rule, Cloudflare's managed AI-blocking toggle, or an IP/ASN block. | Blocking by user-agent string only. Since user-agents can be spoofed (as Perplexity's incident demonstrated), a 403 based on UA matching alone can be bypassed by a crawler willing to disguise itself. |
| 404 Not Found | The single biggest measured failure mode for AI crawlers — roughly 1 in 3 fetches from GPTBot and ClaudeBot hit one, per Vercel's data. Each 404 is a page the crawler expected to exist (often from an outdated sitemap or internal link) and didn't. | Stale sitemaps, orphaned internal links, and deleted blog posts with no redirect — silently compounding over time as crawlers keep retrying URLs they've seen referenced elsewhere. |
| 429 Too Many Requests | A rate-limit response. Google's guidance is that sites under load can return 429 or 503 to Googlebot temporarily, and Googlebot will retry for about two days before backing off — but AI crawlers don't publish equivalent, documented retry-and-backoff behavior, so a 429 storm may simply mean the crawler stops trying. | Aggressive global rate limits that don't distinguish AI crawler IP ranges from scraper/bot traffic, throttling legitimate GPTBot or ClaudeBot fetches during traffic spikes. |
| 5xx Server Error | Signals the server failed, not that content doesn't exist. Google treats 5xx and network/DNS timeouts identically for indexing purposes; the same logic reasonably applies to AI crawlers, which have no way to distinguish "temporarily down" from "gone." | Origin timeouts during traffic spikes or deploys, with no cached fallback — a page that's normally healthy can register as fully broken during exactly the window an AI crawler happens to visit. |
The MDN status code reference remains the authoritative definition of what each code means at the protocol level; the column above is about what that definition implies once the client is a model-feeding crawler instead of a browser.
Reading the patterns, not just the codes
Direct answer: A single 404 is noise. A pattern is signal. Three patterns are worth specifically watching for:
A high 404 rate concentrated on recently-published or recently-restructured content usually means your sitemap or internal linking hasn't caught up with a site migration — the crawler is still working off stale URL references it found elsewhere (a cached index, a backlink, an old sitemap entry).
A 403 rate that spikes only for AI-crawler user-agents while human and search-engine traffic is unaffected is often intentional (a Cloudflare AI-blocking toggle or WAF rule) — but confirm it's intentional. Cloudflare's managed AI-crawling controls now default to blocking Training and Agent crawler categories on pages that carry ads, while leaving Search crawlers allowed by default, which means a site owner who never touched the setting can still end up silently invisible to training crawlers while remaining visible to AI search crawlers, or vice versa depending on when the domain was created.
429s or 5xx errors clustered in short bursts typically mean rate-limiting or infrastructure, not a content or access decision — and because AI crawlers don't publish the same documented backoff-and-retry behavior Google does, a burst that would be a two-day non-event for Googlebot may cause an AI crawler to deprioritize or drop the page from its next crawl pass entirely.
Step-by-step QA process
- Pull raw server logs, not just analytics dashboards. Analytics tools built for human traffic frequently filter out bot requests by default; you need the unfiltered access log or your CDN's raw request log.
- Isolate requests by declared AI-crawler user-agent — GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-User, PerplexityBot, Perplexity-User — and tag each by category (training, search, live-fetch).
- Cross-check user-agent claims against verified IP ranges or bot-verification headers where your CDN provides them (e.g., Cloudflare's
cf.verified_bot_category). A user-agent string alone is not proof of identity, per the Perplexity spoofing findings. - Bucket every request by status code and calculate the distribution per crawler, not in aggregate — GPTBot and ClaudeBot behave differently enough that a blended number hides which crawler has the worse access problem.
- Flag any 404 or 5xx rate materially above Googlebot's baseline on the same site (8.22% and effectively near-zero, respectively, per Vercel's measurement) as worth investigating rather than accepting as "normal for AI bots."
- Trace every 404 back to its referring source — sitemap, internal link, or external backlink — so you're fixing the cause (a broken link) and not just the symptom (one dead URL).
- Audit 301 vs. 302 usage on anything that moved permanently. A 302 on a permanent move leaves ambiguity about which URL should be treated as canonical and citable.
- Confirm your rate limits have a carve-out for verified AI-crawler ranges, distinct from your general bot/scraper throttling, so a traffic spike doesn't collapse a training or search crawler's access into a wall of 429s.
- Re-run the whole pass after any migration, replatform, or CDN/WAF rule change — these are the events most likely to silently introduce new 403s, 404s, or redirect chains that won't show up until the next crawl.
What this doesn't guarantee
Direct answer: Clean status codes are necessary, not sufficient. Fixing every 404 and eliminating 403s for legitimate crawlers does not guarantee your content gets cited, summarized, or trained on — a 200 response only confirms the content was fetched successfully, not that it was parsed usefully, chunked in a way that preserves meaning, or judged worth citing over a competitor's page.
This QA process also can't fully solve the trust problem. Because user-agents are trivially spoofable, and because at least one major crawler has been documented evading declared blocks, a clean log for "PerplexityBot" doesn't guarantee the real Perplexity crawler behaved that way — only that the requests claiming to be it did. And because AI crawlers don't publish documented retry/backoff behavior the way Google does for 429/503 handling, you're often inferring crawler intent from patterns rather than confirmed policy — treat the QA process as risk reduction, not certainty.
Finally, status codes say nothing about crawl frequency or recency. A page can return a perfect 200 every time and still be crawled so rarely that its content is stale in whatever index or training snapshot an AI system is drawing from.
Where nqzai fits
Direct answer: nqzai's AI-search visibility tooling is built around exactly this gap between "the crawler got a 200" and "the content is actually usable, current, and cited." Rather than stopping at a status-code check, it monitors how AI crawlers and AI-search answer engines actually treat a site's pages over time — surfacing access failures, structural issues that suppress citation likelihood, and the freshness gaps that a clean HTTP log can hide — and turns those findings into prioritized, specific fixes rather than a generic health score.
FAQ
Direct answer: Does a 200 status code guarantee my page will be used by an AI model or cited in an AI-search answer?
No. A 200 only confirms the crawler successfully fetched the response. It says nothing about whether the crawler could parse the content (JavaScript-rendered pages are a common failure point, since most AI crawlers don't execute scripts), whether the content was chunked usefully, or whether it was judged worth citing.
Why do AI crawlers hit so many more 404s than Googlebot?
Vercel's traffic analysis found ChatGPT's and Claude's crawlers hitting 404s roughly four times as often as Googlebot (around 34% versus 8.22%). The likely cause is less mature URL discovery and validation — these crawlers appear to rely more on external references (links, citations, older indexes) than on continuously refreshed sitemaps, so they more often request URLs that no longer exist.
Should I block AI crawlers with a 403, or use robots.txt?
They serve different purposes and neither is airtight alone. Robots.txt is a request-level convention that well-behaved crawlers (OpenAI's, by Cloudflare's own account) honor; a 403 is a server-enforced denial. Given that at least one major crawler has been documented ignoring robots.txt and evading IP-based blocks, sites that need reliable enforcement should combine both with verified bot-category checks rather than relying on user-agent matching alone.
What should I do if I see a burst of 429 errors from a legitimate AI crawler?
Check whether your rate-limiting rules apply uniformly to all bot traffic or exempt verified AI-crawler IP ranges. Google's own guidance allows sites to serve 429/503 temporarily under load and expect Googlebot to retry for about two days — but since AI crawlers haven't published equivalent guarantees, treat sustained 429s to a legitimate crawler as a real risk to visibility, not a safe throttle.
Is a 302 redirect actually bad for AI crawler visibility?
Not inherently — but it's the wrong tool for a permanent move. A 302 signals the move might be temporary, so a crawler may keep treating the original URL as the canonical, citable one. If a page has moved for good, a 301 gives a stronger, unambiguous signal about which URL should be treated as authoritative.



