Your 'are you a bot' screen can deindex your real page, and you'll never see it happen
Source: Search Off the Record ep. 112 (Google Search Central), 2026-07-16.
The short version
- Google's John Mueller confirmed that CDN bot-challenge screens served to Googlebot with a 200 status get indexed, and deduplication can hand your real page's canonical slot to an unrelated site's copy of the same screen.
- Cloudflare and Akamai's own default challenge mechanisms return error codes, not 200, so a 200-status challenge page reaching Googlebot is a misconfiguration rather than a vendor default.
- The failure is invisible to normal QA because a real, browser-verified visitor passes the challenge and never sees it; only Googlebot's raw, unrendered fetch does.
- Check for it with a plain HTTP fetch of your own page plus Search Console's Page Indexing report and URL Inspection, looking for a 'Duplicate, Google chose different canonical' status.
Google’s John Mueller confirmed, on the July 16 episode of Search Off the Record, that a bot-challenge screen, the “are you a bot or not” page a CDN or security layer shows to unfamiliar traffic, can get indexed in place of your real page when it is served with a 200 HTTP status code.1 Because the same generic challenge template runs on many unrelated sites behind the same security vendor, Google’s deduplication system can then pick a different site’s copy of that screen as the canonical version of your URL, and your real page effectively disappears from that ranking slot. A normal visitor never sees this happen: the challenge only reaches crawlers and unfamiliar clients, so nothing in a manual QA pass, a Rich Results Test, or a routine site check will surface it. If your CDN’s bot-verification screen is misconfigured to return 200 instead of an error code, you can lose ranking real estate to a stranger’s page and have no visible symptom pointing back at the cause.
200: the one HTTP status code that turns a bot-challenge screen into your new canonical in Google’s index.
What did Google actually say about ‘are you a bot’ screens dropping real pages?
John Mueller confirmed it directly on Search Off the Record episode 112, aired July 16, 2026: when a hosting provider or CDN shows an interstitial like “Are you a bot or not?” and serves it with a 200 response code, Google will “try to index that.” Because the same screen template runs across many unrelated sites, Google can end up picking a different site’s copy of that error page as the canonical for your URL.
Martin Splitt framed the question, asking how a security layer could interfere with what a crawler receives. Mueller supplied the mechanism, in his own words, per the episode transcript: “when the hosting provider shows something like an interstitial … ‘Are you a bot or not?’ and it serves that with a 200 response code … we’ll try to index that … because this page is shared across a lot of other pages … and maybe other pages across other websites, it can happen that we pick a canonical of someone else who has the same error page.”1
Mueller added the detail that explains why this goes unnoticed: “as a user, you might not see that interstitial at all.”1 The challenge logic branches on signals a browsing session emits that a raw crawler request does not, so the failure sits outside the reach of a human QA process by design.
Search Engine Journal reported on the episode in paraphrase form, ahead of a transcript being available.2 This piece works from Mueller’s own words rather than a summary of them, and asks the question that initial coverage did not: which CDN configurations actually produce that 200 in practice, given that the two largest platforms do not ship it by default.
Why can a bot-challenge screen outrank your own real page for its own URL?
A bot-challenge screen can outrank your real page because Google’s deduplication system does not check whether a 200-status page is genuine content before clustering it against near-identical pages elsewhere. Google’s own canonicalization documentation states that a rel=canonical signal is “a hint, not a rule,” and that when it finds pages carrying the same primary content, it clusters them and selects the one it judges objectively the most complete and useful.3
A generic bot-verification template running across many sites behind the same security vendor reads, to that clustering system, as a set of duplicate pages. Your real content is not one of the candidates being compared: it never got past the challenge to be seen in the first place. The cluster does not know your challenge page is blocking real content while a competitor’s identical-looking page is doing the same thing. It only sees repeated boilerplate. Whichever instance of that boilerplate looks most complete by whatever internal signal set Google is weighing, age, authority, links to that specific URL, wins the canonical designation, and every other copy gets folded into that winner as a duplicate. Your real page can still exist and still serve real content to browsers, yet not be the page Google shows for its own URL.
Google’s guidance on HTTP and network errors describes a related but distinct failure: a page that returns 200 but reads, in its actual body, like an empty or broken result gets flagged as a soft 404 rather than indexed normally.4 Mueller does not use that term for the challenge-screen case, and Google has not stated in writing that the two are the same underlying system. My read: they are functionally the same trust model applied to two different symptoms. Google is checking what is actually in the response body against what the status code claims, and in both cases the body decides whether a page counts as real, not the header. I am tagging this connection as my own synthesis, not a confirmed Google statement, because I found nowhere Google says the two mechanisms are literally shared.
Which CDN misconfigurations actually produce a 200-status challenge page, when Cloudflare and Akamai’s own defaults don’t?
Cloudflare and Akamai’s own challenge mechanisms do not return 200 by default, so a 200-status bot screen reaching Googlebot is a misconfiguration, not the vendor’s out-of-the-box behavior. Cloudflare’s own troubleshooting documentation lists a WAF custom rule set to the challenge or block action as a cause of its 403 responses5, and its community changelog confirms the JavaScript challenge and “I’m Under Attack Mode” moved from 503 to 403 in 2023.
That changelog states plainly: “On March 1, 2023, the HTTP status code associated with the JavaScript challenge and I’m Under Attack Mode” changed from 503 to 403.6 Either code tells a crawler the same thing: this is not the page requested, do not index it. A 200 only shows up when something downstream overrides that default.
The most common override is Cloudflare’s own verified-bot allowlist working correctly, and then a custom rule undoing it. Cloudflare verifies known good crawlers, including Googlebot, through IP-range and reverse-DNS verification7, and documents letting site owners write custom WAF rules that explicitly challenge or allow traffic based on that verified-bot signal.8 Google’s own documentation describes the matching half of that handshake: verify Googlebot by running a reverse DNS lookup on the requesting IP, or by matching the IP against Google’s published crawler ranges.11 When both sides of that handshake agree, the crawler-identification step is not the problem. If a custom rule is scoped too broadly, ordered ahead of the managed verified-bot rule, or keyed to a header or cookie condition a legitimate Googlebot request also happens to match, Googlebot gets challenged like any unknown visitor, and whatever that challenge page returns, 200 if the application layer built its own “verify you’re human” page rather than using Cloudflare’s native challenge action, is what Google fetches.
Akamai’s Bot Manager takes a different default posture: it tiers suspected-bot traffic into a solvable challenge rather than a hard block, converting what would otherwise be a block into a crypto-based proof-of-work puzzle.9 Akamai’s own materials describe that behavior but do not spell out the status code the challenge itself returns. Third-party researchers who have reverse-engineered the flow document it as a 428 response, Precondition Required, sometimes 403, tied to the sec_cpt challenge cookie.10 Neither number is 200. As with Cloudflare, a 200-status Akamai-fronted challenge screen would mean a custom application-layer page sitting in front of Bot Manager’s own challenge action, not Bot Manager behaving as documented.
The pattern across both platforms is the same: the vendor default is built to fail loudly, 403, 428, 503, and a 200 only appears when something else sits in the path and does not carry that discipline forward. That something could be a site’s own application-layer verification page, a misconfigured custom rule, or a third-party bot-management vendor, PerimeterX, HUMAN, DataDome, Imperva, and others I did not verify directly for this piece, whose default challenge template handles status codes differently.
How do you check whether this is happening to your site right now?
Check by fetching your own page with a plain HTTP request that skips JavaScript, the type of request Googlebot’s initial crawl makes, and read the status code and body it returns. If a challenge screen doesn’t show up there, check Search Console’s Page Indexing report for a “Duplicate, Google chose different canonical than user” status, then use URL Inspection to see which URL Google actually selected.
The plain-fetch check comes first because it rules the whole failure mode in or out fastest. A curl request or any HTTP client that skips JavaScript execution shows you the literal bytes and status code a non-browser request receives from your domain. A clean 200 with your real page and no challenge means this is not happening to you. A challenge screen means the status code is the next thing to read: 403, 428, or 503 says the vendor default is intact and behaving as documented; 200 is the misconfiguration signature described above.
If a challenge screen turns up in that fetch, Search Console’s Page Indexing report is the next stop. A “Duplicate, Google chose different canonical than user” status, or a related duplicate-content flag, on a page you know is real and unique is the symptom this article describes.3 URL Inspection on that same URL shows the Google-selected canonical, which, in the failure mode Mueller described, can point at a domain you do not control and have likely never seen. That is the confirmation: a challenge screen, not a competitor’s real page, has taken your canonical slot.
I did not have a live example of this from a Search Console account to screenshot for this piece. The procedure above is the verification path Google’s own documentation and Mueller’s description point to, drawn from public sources rather than a personal audit. If you run this check and find your own canonical redirected to a stranger’s challenge page, that is exactly the pattern being described here.
Is this the same blind spot as Google Shopping’s crawler-rendering split, just worse?
A Challenge-Screen Canonical Collision is the same blind spot as Google Shopping’s crawler-rendering split, structurally, and my read is that it is worse in consequence. Both failures come from the same underlying gap between what a real browser or testing tool sees and what Googlebot’s raw request actually receives, and the Shopping crawler-rendering split costs you a stale field value while a Challenge-Screen Canonical Collision can cost you the URL itself.
I made this point in the piece on Google’s crawler-rendering split: Google Shopping’s Storebot-Google crawler reads only the server-delivered HTML, so a Rich Results Test that renders JavaScript can pass clean while the crawler that actually verifies price and availability reads a stale or missing value from the raw response. The Rich Results Test tests a different crawler than the one that matters for compliance. The challenge-screen problem is the same blind spot pushed further. Googlebot’s raw fetch never reaches your markup at all here. It hits a challenge page in front of it, and Google indexes that stand-in as if it were the page.
Call this pattern a Challenge-Screen Canonical Collision: a CDN or security layer serves Googlebot a bot-verification interstitial with a 200 status, Google indexes the interstitial, and because the same generic template appears across many unrelated sites, deduplication can select a different site’s copy as canonical, replacing the real page’s canonical slot entirely. The Shopping-crawler split loses you a price or availability field. A Challenge-Screen Canonical Collision loses you the ranking position itself, handed to a domain you have never interacted with, and every symptom of it reads like an ordinary duplicate-content problem rather than a security-layer misconfiguration, so most teams never trace it back to the actual cause.
What should you actually fix, and why is 200 the specific number to hunt down?
Fix the status code your challenge or interstitial page returns to anything that isn’t a passed, browser-verified session. It should be 403, 428, or another explicit error code, never 200, because 200 is the one signal telling Google’s indexing pipeline this is real content to evaluate as a candidate page, rather than a gate to skip past.
Three checks cover the misconfiguration classes described above:
- If you built your own “verify you’re human” page at the application layer instead of using your CDN’s native challenge action, check what status code your own code returns. This is the most common place a 200 slips in, because a custom page is easy to build as a plain 200 response and easy to forget to change.
- If you run custom WAF rules on top of Cloudflare or a similar platform, confirm the verified-bot bypass still evaluates before your custom rule rather than being overridden by it, and re-test with a Googlebot-identifying request after any rule change.
- If you use a third-party bot-management vendor, do not assume its default challenge template matches Cloudflare or Akamai’s discipline on status codes. Test it directly with the plain-HTTP-fetch method described above.
Every one of these checks reduces to the same instruction: find every response your site can serve labeled 200 and confirm the content behind that 200 is a page you actually want indexed, not a gate you built to keep bots out. Google has said, on the record, that it trusts what is in the response body more than what a status code promises. Building a security layer on the assumption that Google will simply respect the honor system is the misconfiguration this whole piece describes.
Terms defined here
- Challenge-Screen Canonical Collision. A CDN or security layer serves Googlebot a bot-verification interstitial with a 200 status. Google indexes the interstitial, and because the same generic template appears across many unrelated sites, deduplication can select a different site's copy as canonical, replacing the real page's canonical slot entirely.
Sources
- Search Off the Record episode 112 transcript, Google Search Central
- Search Engine Journal: coverage of Search Off the Record episode 112
- Google Search Central: Consolidate duplicate URLs
- Google Search Central: HTTP and network errors
- Cloudflare: Troubleshooting 403 errors
- Cloudflare Community: JavaScript challenge status code change, 503 to 403
- Cloudflare: Verified bots
- Cloudflare: Allow traffic from verified bots
- Akamai: Bot Manager
- Hyper Solutions: Handling the 428 status code, Sec-CPT
- Google Search Central: Verifying Googlebot
Recent developments
Related reading
This piece elsewhere