Redirect Loops
What redirect loops are, why they take a site down for users and crawlers, common causes (HTTPS/SSL-mode mismatches, www vs non-www conflicts, plugin vs server rules, trailing-slash bugs), and how to diagnose and fix them by cause.
1 evidence signal on this page
- Related live toolRedirect Chain Mapper
A redirect loop is a chain of redirects that circles back on itself — A → B → A, or a longer cycle — so no page ever returns a 200. Browsers surface it as ERR_TOO_MANY_REDIRECTS; in Google Search Console it's one of four documented causes of the 'Redirect error' status. It's a site-outage problem first (real visitors are locked out) and an SEO problem second (Google can't index what it can't reach), and Patrick's framing is that it harms three parties: users, crawlers, and your own server. A well-documented cause is an HTTPS/SSL-mode mismatch between a CDN and the origin (e.g. Cloudflare on 'Flexible' while the origin forces HTTPS); other common causes are www/non-www rules pointing at each other, a plugin rule fighting a server rule, and trailing-slash bugs — no single cause is the universal or most common one across every site. A loop is not a hop-count problem — raising the redirect limit never fixes it. The fix is always specific to the cause: break the cycle, get the final URL to return the correct non-redirect response, and update internal links.
TL;DR — A redirect loopA redirect loop is a chain of redirects that circles back on itself instead of ever reaching a live page — URL A redirects to B and B redirects back to A (or a longer cycle). No page ever returns a 200, so browsers show ERR_TOO_MANY_REDIRECTS and crawlers can't index anything. is when your redirectsA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. run in a circle: page A sends you to page B, and page B sends you right back to A. Nothing ever loads, so the browser gives up and shows “too many redirects.” It means your site is down for real visitors — fix it before you worry about anything else.
What a redirect loop is
A redirect loop is a cycle in which redirect targets eventually return to an earlier URL instead of reaching a final resource. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: RFC 9110: Redirection Google lists loops as a redirect errorA Google Search Console Page Indexing status meaning Googlebot couldn't follow a redirect — a chain too long, a loop, a URL over the max length, or a bad/empty URL in the chain. It's a broken redirect to fix, not the normal \"Page with redirect.\" that prevents successful processing. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: Google: Page indexing report Seeing the same URL come back around is a strong sign of a loop, but it’s not automatic proof — things like being logged in, a locale/consent choice, or a cookie can occasionally make the same URL resolve differently the next time you hit it. If you’re not sure, retest the exact same URL the exact same way (same login state, same cookies, same locale) before concluding it’s a real loop.
A redirect is a rule that sends a visitor from one address to another. Normally that’s fine — you move a page and redirect the old URL to the new one.
A redirect loop is when those rules point at each other and never reach an actual page. The simplest version is two pages that redirect to each other:
- You visit A, which redirects you to B.
- B redirects you back to A.
- A redirects you to B again… forever.
The page never loads. Your browser follows a bunch of redirects, notices it’s
going in circles, and stops with an error. In Chrome that error is
ERR_TOO_MANY_REDIRECTS. Firefox, Safari, and Edge show their own version of the
same “the page isn’t redirecting properly / too many redirects” message.
Why this is urgent
Lead with this, because it’s the part people underestimate: a redirect loop means your page is completely inaccessible to real visitors. It’s not a slow page or a minor SEO issue — it’s an outage for whoever hits the looping URL. If it’s your whole site (very common when it’s caused by an SSL setting), your entire site is down until you fix it.
Search engines are affected too — Google can’t reach a page that never loads, so it can’t indexStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. it — but the visitor outage is the emergency.
The quick things to check first
Some loops are quick to fix, some aren’t. Start here:
- Try it in a private/incognito window. If the loop only happens in your normal browser but works in incognito, it’s a stale cache or cookie on your machine — clear your browser cache and cookies for that site. (If it loops in incognito too, it’s on the server side and no amount of cache-clearing will help.)
- Did you just change something? New SSL certificateAn SSL/TLS certificate is the file a server presents during the TLS handshake to prove who controls the domain (to a level that depends on the validation type) and to supply the public key that encrypts the connection. It's what makes https:// possible — but Google's ranking signal only checks the URL scheme, not which certificate issued it., a security/CDN service
like Cloudflare, a new WordPress plugin, an
.htaccessedit? That change is almost certainly the cause. Undoing it is often the fastest fix. - Is it just HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.'? If
http://loads buthttps://loops (or vice versa), the cause is almost always an HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.' setting fighting with itself — see the Advanced tab for the exact fix. This is one of the best-documented causes, especially when a CDN sits in front of your site.
The real fix depends on what’s causing the loop — there’s no single “check your redirects” answer. Switch to the Advanced tab for causes, command-line diagnosis, and platform-specific fixes, or open the Decision Trees tab to click through “what’s causing my loop?” step by step.
TL;DR — A redirect loopA redirect loop is a chain of redirects that circles back on itself instead of ever reaching a live page — URL A redirects to B and B redirects back to A (or a longer cycle). No page ever returns a 200, so browsers show ERR_TOO_MANY_REDIRECTS and crawlers can't index anything. is a cycle of redirectsA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. (A → B → A, or longer) that never returns a
200, so it never resolves. It’s categorically different from a long chain — a chain is slow, a loop is broken — which is why raising a hop limit never fixes one. It surfaces asERR_TOO_MANY_REDIRECTSin the browser and as one of four documented causes of the “Redirect errorA Google Search Console Page Indexing status meaning Googlebot couldn't follow a redirect — a chain too long, a loop, a URL over the max length, or a bad/empty URL in the chain. It's a broken redirect to fix, not the normal \"Page with redirect.\"” status in Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results.. It harms three parties: users (locked out), crawlersA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. (trapped, wasted crawl budget, nothing indexedStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed.), and your server (wasted resources, and — depending on traffic, whether the requesting clients back off, and your capacity/rate limits — potentially serious load). A well-documented cause is an HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.'/SSL-mode mismatch between a CDN/proxy and the origin; others include www/non-www rules pointing at each other, a plugin rule fighting a server rule, and trailing-slash logic bugs — no single cause is universally “the most common” across every site. The fix is always specific to the cause.
A loop is a cycle, not a long chain
The defining property is cyclic routing, not a particular number of hops. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: RFC 9110: Redirection Search ConsoleGoogle's free tool for monitoring crawling, indexing, and search performance.’s label reports the failed redirect path, not the configuration layer that created it. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: Google: Page indexing report Treat a repeated URL as a strong trace heuristic, not automatic proof: request state — auth, consent, locale, cookies, or headers — can differ between visits, and a URL that looked like it was cycling can resolve once that state changes. Confirm a true loop by reproducing the cyclic transition under materially equivalent request state (same session, same cookies, same locale) before you call it a loop and go fix a rule.
This is the distinction that makes everything else make sense. Here’s how I define it in my Ahrefs guide to redirects: redirect loops are infinite loops of redirects that occur when a URL redirectsA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. to itself, or when a URL in a redirect chainA → B → C instead of A → C. Each hop loses link equity and adds latency. redirects back to a URL earlier in the chain.
A redirect chain (A → B → C → D → final) is a path — it’s just longer than it
should be. It eventually reaches a page that returns 200. It’s slow and it’s
worth collapsing, but it resolves.
A redirect loop is a circle. A → B → A. It never reaches a 200, no matter how
long you follow it. That’s why “just increase the redirect limit” — a reasonable
instinct if you’re thinking about chains — is not a valid fix for a loop. A loop
doesn’t fail because a browser ran out of patience; it fails because there is no
destination to reach. You have to break the cycle, not follow more hops.
How a loop shows up
In the browser. Chrome shows ERR_TOO_MANY_REDIRECTS. Firefox says “The page
isn’t redirecting properly.” Safari says “too many redirects occurred.” Edge shows
its own “too many redirects” message. Same root cause, different wording.
In Google Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results.. A loop is one of four documented causes of the “Redirect errorA Google Search Console Page Indexing status meaning Googlebot couldn't follow a redirect — a chain too long, a loop, a URL over the max length, or a bad/empty URL in the chain. It's a broken redirect to fix, not the normal \"Page with redirect.\"” status in the Page Indexing reportThe Google Search Console report (formerly Index Coverage) showing how many of your URLs are indexed vs. not indexed, and grouping the not-indexed ones by reason. — the others being a redirect chainA → B → C instead of A → C. Each hop loses link equity and adds latency. that was too long, a redirect URL that exceeded the max URL length, and a bad or empty URL in the chain. If you’re seeing “Redirect error” pile up in that report, a loop is one of the four things it could be. That report reflects what Google saw on its last crawl of the URL, not a live, permanently-current verdict — re-check with URL Inspection after you fix the cycle rather than assuming the report updates instantly. (The redirect error status has its own deep dive on this site that covers all four; this article is the one specifically about the loop.)
To crawlersA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. and in your logs. A crawler that hits a loop keeps requesting URLs that keep redirecting. Well-behaved bots detect it and stop; less well-behaved ones don’t, which is where the server-load problem comes from (below).
Why loops matter — three parties get hurt
I frame redirect loops as a three-way problem, because they don’t just cost you rankings — they hit users, bots, and your own infrastructure:
- For users. They cut off access to the intended resource and trigger a “too many redirects” error in the browser. The page is simply unreachable. This is the headline: it’s a site-outage problem first.
- For bots and search engines. They trap crawlers and waste crawl budgetThe number of URLs an engine will crawl in a timeframe.. A crawler can’t follow a loop to anything indexable, and Google’s own documentation reports this as a “Redirect error” — there’s nothing on the far side of the cycle to crawl through, so there’s nothing to index or rank. It’s not a penalty; the page just functionally can’t be reached. (None of Google’s normal redirect logic — like signals consolidating to a destination over time — applies, because there’s no destination Google ever reaches.)
- For your server. Loops waste your resources. Some bots detect the loop and back off; others don’t, and a client that keeps re-requesting a looping URL without backing off adds sustained, wasted load. Whether that rises to a serious outage — potentially a self-inflicted DDoS-like event — depends on how much traffic is hitting the loop, whether the responses are cacheable, and your server’s capacity and rate limiting; it isn’t an inherent property of every loop, but it’s a real risk on high-traffic or heavily-crawled sites with no rate limiting in front of them, and it’s an angle most write-ups miss.
Common causes
There’s no single universal cause — every real-world loop traces back to conflicting canonicalizationHow search engines pick one canonical URL among duplicates and consolidate signals onto it. rules across layers that don’t share state. Two different systems each “know” what the correct URL should be, and they disagree, so they bounce the request back and forth. Here are the specific patterns worth checking; which one applies depends on your stack, not a fixed frequency ranking.
HTTP/HTTPS conflict between a CDN and the origin
If you put a proxy/CDN like Cloudflare in front of your site, the connection has two legs: browser → CDN, and CDN → origin. If those two legs disagree about HTTP vs HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.', you get a loop entirely at that boundary. Cloudflare’s own troubleshooting doc names this family of causes directly: a misconfigured SSL/TLS Encryption mode, conflicting settings on the Edge Certificates page, or a misconfigured redirect rule — common within Cloudflare’s own product, not necessarily the single most common cause of loops everywhere. A few concrete branches:
- Flexible mode + origin forces HTTPS. In Flexible SSL mode, Cloudflare
talks to your origin over plain HTTP — even though the visitor is on HTTPS.
If your origin is also configured to force HTTP → HTTPS (via
.htaccess, nginx config, or a plugin): Cloudflare sends HTTP to the origin, the origin says “you must use HTTPS” and redirects, Cloudflare (still Flexible) sends HTTP again, and it repeats forever. Fix: switch Cloudflare to Full or Full (strict) SSL/TLS mode so the CDN→origin leg is also HTTPS (Full strict needs a valid cert on the origin). - Full/Full (strict) mode + origin redirects HTTPS → HTTP. Less common, but if the origin has a leftover rule that redirects HTTPS back to HTTP (e.g. from before you enabled Full/strict), the CDN keeps re-requesting over HTTPS and the origin keeps bouncing it to HTTP. Fix: remove the origin-side HTTPS→HTTP rule — the origin should serve HTTPS directly once the CDN is set to Full/strict.
- “Always Use HTTPS” at the edge plus an origin-level HTTPS redirect. Double-forcing HTTPS at both the edge and the origin (or an HSTSHSTS (HTTP Strict Transport Security) is a response header that tells browsers to always connect to your site over HTTPS — even when a user types or clicks an http:// link — closing the insecure-first-request gap that a plain 301 redirect leaves open. rule fighting a redirect rule) can build the same kind of loop. Fix: pick one place to force HTTPS, not two.
- A misconfigured redirect rule (a Cloudflare Page Rule, Bulk Redirect, or Transform Rule that sends a URL back toward a form it’s already redirecting away from). Fix: audit edge-level redirect rules for one that contradicts the origin’s own canonicalization.
www / non-www rules that redirect into each other
You want one canonical host — either www.example.com or example.com. A loop
happens when one rule sends example.com → www.example.com and another rule
(often in a different place — a plugin, a CDN redirect rule, a WordPress “Site
Address” setting) sends www.example.com → example.com. Each fires, the other
undoes it, forever. Fix: decide on one canonical host, and make sure only one
rule (in one place) enforces it, redirecting the other way.
A plugin/CDN rule conflicting with a server/origin rule
The theme running through the causes above is that the loop lives between layers.
A WordPress SSL-forcing plugin (or the “WordPress Address” / “Site Address” fields
in Settings → General) can disagree with a .htaccess rewrite or a CDN edge rule.
Each layer is individually “correct” but they don’t share state, so they fight.
“My .htaccess looks fine” doesn’t rule out a loop — the conflicting rule may live
at the edge or in a plugin you forgot was there. Fix: find the two rules doing
the same job in different places and remove one.
Trailing-slash vs no-trailing-slash logic bugs
A rule that adds a trailing slashA trailing slash is the forward slash (/) at the end of a URL — example.com/page/ versus example.com/page. Except at the bare root domain, the two versions are different URLs to search engines, so you pick one format and enforce it. (/page → /page/) can collide with a rule that
strips it (/page/ → /page), producing a loop on that URL. This is usually a
single misconfigured rewrite where the condition and the target don’t line up.
Fix: decide slash or no-slash, and make the rule only redirect the wrong form
to the right one (never redirect a URL to a form that then redirects back).
Leftover, stacked rules from a past migration
Migrations are a common real-world source of loops. HTTP → HTTPS moves, www consolidation, domain changes, and CMSA content management system (CMS) is software that lets users create, manage, and publish digital content — like blog posts and pages — without writing raw code. WordPress, Drupal, and Joomla are the most common open-source CMS platforms. replatforms all involve adding redirect rules — and when you stack a new layer on top of old rules nobody cleaned up, two of them can end up pointing at each other. If a loop appeared “out of nowhere,” check whether a migration left redirect rules behind.
How to diagnose a loop
You want to see the loop, not guess at it.
Trace it from the command line with an actual GET request — not a HEAD-only
trace. Send the same kind of request a real visitor or crawler would, and record
each status code and Location header without letting curl auto-follow first, so
you can see every hop instead of just the final outcome:
# GET is curl's default method (no -I); -L follows redirects; --max-redirs caps how far
curl -sL --max-redirs 10 -D - -o /dev/null https://www.example.com/ | grep -i -E '^(HTTP/|location:)'
# A loop shows the same two (or few) URLs alternating and never a 200 —
# curl stops with "Maximum (10) redirects followed".To see the effective URL at each stop:
curl -sL --max-redirs 10 -o /dev/null -w '%{http_code} %{url_effective}\n' https://www.example.com/Then compare against a HEAD-only trace (curl -sIL --max-redirs 10 ...) as a
secondary check, not your primary evidence — HEAD and GET are different
request methods, and application logic can occasionally handle them differently,
so a HEAD-only trace can miss redirect behavior that only shows up on the real
request. Never replay unsafe methods (like a form’s POST) just to trace a loop.
If the same host/scheme pair repeats and you never see a 200, that’s the loop —
and the two URLs that keep alternating tell you exactly which canonicalization rule
is fighting (scheme = HTTP/HTTPS mismatch; host = www/non-www; trailing slash = the
slash bug). From there, map each hop to the layer that produced it — browser/HSTS,
edge/TLS (CDN), reverse proxy, origin server, application/CMS, or session/auth
logic — because a loop happens when two of those layers don’t share state and each
insists it’s right.
Other ways in:
- Browser DevTools → Network tab. Watch the redirect requests stack up before
the error, with each
Locationheader visible. - Test with and without the CDN. If you can hit the origin directly (bypassing Cloudflare) and it doesn’t loop, the conflict is between the CDN and origin — that points you straight at the SSL-mode cause.
- Google Search Console. URL Inspection on an affected URL, and the “Redirect error” bucket in the Page Indexing reportThe Google Search Console report (formerly Index Coverage) showing how many of your URLs are indexed vs. not indexed, and grouping the not-indexed ones by reason., tell you which URLs Google is choking on. Google’s Inspection Tools documentation states that Inspection Tools do not follow redirects — so read a URL Inspection result as a report on the exact URL you tested, not as confirmation of what’s on the other side of the loop.
- A site-wide crawler — Ahrefs’ Site Audit or Screaming Frog — catches loops you don’t know about. In Ahrefs Site Audit: crawl the site (free with an Ahrefs Webmaster Tools account) → Redirects report → Issues tab → look for the “Redirect loop” error, then “View affected URLs” to see the full chain.
A redirect loop has no final destination. The useful evidence is the repeated URL and the rule owner responsible for each hop.
Expose the full cycle with my free Redirect Checker Free
- Test the failing public URL without relying on a cached browser session.
- Find the first repeated URL and map every hop to its edge, server, application, or CMS owner.
- Remove the conflicting rule, point the source directly to the final destination, and rerun the trace.
The result labels the redirect broken and fix now. It shows 301 from URL A to URL B, 302 from B back toward A, and 301 to A, with no final URL. It states that the chain revisits a URL and never resolves.
How to fix a loop
Once you know the cause, the structural fix is the same decision every time. The best way to fix a loop depends on whether the last URL in the chain — the one right before the loop closes — is the intended final destination:
- If it is the intended destination: remove the redirect from that final URL,
and make sure the resource is actually accessible and returns the correct
non-redirect response for that endpoint — usually
200, though the right status depends on the resource (a removed page, for instance, should return its own correct status, not a fake200). - If it isn’t: change the looping redirect to point at the intended final destination instead.
In both cases, also swap out any internal linksAn internal link is a hyperlink from one page on a website to another page on the same website. Internal links help search engines discover your pages and pass ranking signals (PageRank and anchor-text context) between them. that point at a redirecting URL for direct links to the final URL — don’t keep feeding the machine URLs that redirect.
Platform-specific fixes:
- Cloudflare (by SSL mode): move from Flexible to Full or Full (strict) so the CDN→origin leg matches the browser→CDN leg, and don’t force HTTPS at both the edge (“Always Use HTTPS”) and the origin. Full (strict) needs a valid certificate on the origin.
- WordPress: check Settings → General — “WordPress Address (URL)” and “Site
Address (URL)” should match your real canonical scheme/host. Then look for an
SSL-forcing plugin (or a
FORCE_SSL_ADMIN/ redirect snippet inwp-config.phpor the theme) that duplicates whatever your server or CDN is already doing, and remove the duplicate. A corrupted.htaccesscan also loop — regenerating it from Settings → Permalinks is a common reset. - Apache (
.htaccess): make sure your HTTPS-forcing and www-forcingRewriteRules have conditions that exclude the already-correct form, so they only redirect the wrong version once. - nginx: the same principle — a
return 301for HTTPS or host canonicalization must not fire on requests that are already in the canonical form.
A note on hop limits (the myth to avoid)
Because a loop can look like “too many redirects,” people reach for hop-count
solutions — raising max-redirs, bumping a redirect limit in a plugin. That never
fixes a true loop. A loop is not a “how many hops is too many” problem the way a
long chain is; it fails on the first pass regardless of any hop tolerance, because
the cycle never terminates. The only fix is to break the cycle.
A note on Bing
Google formally names “redirect loop” as one of four “Redirect error” causes in its Page IndexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. documentation. Bing’s public guidance is more general: use 301s for permanent moves and avoid unnecessary redirect chains. This research didn’t surface a Bing page specifically named “redirect loop” — but that’s a gap in what was checked, not confirmation that Bing has no such guidance anywhere, so treat the four-cause framework above as Google-specific rather than assuming Bing documents loops the same way.
Related concepts
A redirect chain is the sibling problem — a chain that’s too long is a different one of the four “Redirect error” causes, and unlike a loop it does eventually resolve. A 301 redirectA 301 redirect is the HTTP status code for a permanent move: it tells browsers and search engines a URL has moved for good, and it's the strongest signal for consolidating a page's ranking signals onto the new URL. Google says permanent redirects don't cause a loss in PageRank. is the permanent redirect you’ll usually collapse a loop down to; a 302 redirectA 302 (\"Found\") is a temporary redirect: it forwards users to a new URL while telling search engines the original URL should stay in the index. It's a weak canonicalization signal, not the zero-equity dead end of SEO folklore. is its temporary counterpart. And the redirect error status in Search Console is the GSC report where a loop most often surfaces for SEO purposes.
AI summary
A condensed take on the Advanced version:
- A redirect loopA redirect loop is a chain of redirects that circles back on itself instead of ever reaching a live page — URL A redirects to B and B redirects back to A (or a longer cycle). No page ever returns a 200, so browsers show ERR_TOO_MANY_REDIRECTS and crawlers can't index anything. is a cycle, not a long chain. A → B → A (or longer) that
never returns a
200. A chain is slow but resolves; a loop never resolves — which is why raising a hop limit never fixes one. You must break the cycle. - It surfaces two ways:
ERR_TOO_MANY_REDIRECTSin the browser (equivalents in Firefox/Safari/Edge), and as one of four documented causes of the “RedirectA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. error” status in Google Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. (the others: chain too long, over-max URL length, bad/empty URL). - Three-way harm (Patrick’s framing): users (locked out — a site outage first, SEO second), crawlersA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. (trapped, wasted crawl budgetThe number of URLs an engine will crawl in a timeframe., nothing gets indexedStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. on the far side of the cycle), and your server (wasted resources; whether that becomes serious load or a self-inflicted DDoS depends on traffic volume, client backoff behavior, and your capacity/rate limiting429 Too Many Requests is an HTTP client-error status code that means a client sent too many requests in a given time window — a mechanism called rate limiting. Unlike other 4xx codes, Google treats 429 as a server-overload signal and slows crawling instead of removing content., not the loop itself).
- A well-documented cause: an HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.'/SSL-mode mismatch between a CDN and the origin — e.g. Cloudflare on Flexible (HTTP to origin) while the origin forces HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.'. Others: www/non-www rules pointing at each other, a plugin rule fighting a server rule, and trailing-slash bugs. No single cause is universal; migrations are a common source too.
- Diagnose with a
GET-based trace (record status + Location per hop without auto-following; compare HEAD only as a secondary check), watching for the same URLs alternating and never a 200, plus DevTools Network, testing with/without the CDN, GSC URL InspectionA Google Search Console feature that reports how Google sees one specific URL on a property you own. By default it shows the last-indexed snapshot; a separate \"Test live URL\" mode fetches the current version. (which doesn’t follow redirects itself), and a crawlerA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. (Ahrefs Site Audit / Screaming Frog) for scale. - Fix by cause, then by Patrick’s rule: is the last pre-loop URL the intended destination? If yes → drop its redirect and make it return the correct non-redirect response; if no → repoint the looping redirect at the real final URL. Either way, fix internal linksAn internal link is a hyperlink from one page on a website to another page on the same website. Internal links help search engines discover your pages and pass ranking signals (PageRank and anchor-text context) between them..
- Cloudflare fix: move Flexible → Full/Full (strict), and don’t force HTTPS at both the edge and the origin. WordPress fix: align Site/WordPress Address settings and remove the duplicate SSL-forcing plugin/rule.
- Bing’s guidance on redirects is more general than Google’s four-cause framework; no dedicated Bing loop page turned up in this research, which isn’t the same as confirming one doesn’t exist.
Official documentation
Primary-source documentation from search engines and infrastructure providers.
- Page indexing report — names a redirectA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. loop as one of the four causes of the “Redirect errorA Google Search Console Page Indexing status meaning Googlebot couldn't follow a redirect — a chain too long, a loop, a URL over the max length, or a bad/empty URL in the chain. It's a broken redirect to fix, not the normal \"Page with redirect.\"” status, and suggests using a debugging tool like LighthouseLighthouse is Google's free, open-source tool that audits a page under simulated lab conditions and scores it 0–100 across Performance, Accessibility, Best Practices, and SEO. It's lab data — useful for debugging, not a ranking signal. for detail.
- Redirects and Google Search — Google’s main redirect doc; recommends a permanent server-side redirect where possible. (Note: it does not use the word “loop” — the loop-as-a-named-concept lives only in the Page IndexingThe Google Search Console report (formerly Index Coverage) showing how many of your URLs are indexed vs. not indexed, and grouping the not-indexed ones by reason. doc above.)
- Site moves with URL changes — the chain guidance (“GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. can follow up to 10 hops… ideally no more than 3 and fewer than 5”; verified live 2026-07-18). This is about chains, not loops — a loop never resolves within any hop count.
- Crawling infrastructure / HTTP status codes — states Google’s crawlersA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. follow up to 10 redirect hops by default (specific product crawlersA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. may differ) and that Google’s Inspection Tools do not follow redirects (verified live 2026-07-18). This directly resolves whether URL InspectionA Google Search Console feature that reports how Google sees one specific URL on a property you own. By default it shows the last-indexed snapshot; a separate \"Test live URL\" mode fetches the current version. exposes the full redirect path: it doesn’t — it reports on the exact URL you gave it.
Cloudflare (a clear primary source on a well-documented cause)
- ERR_TOO_MANY_REDIRECTS / Too many redirects — Cloudflare’s own troubleshooting doc, scoped to causes common within its product: a misconfigured SSL/TLS Encryption mode (Flexible vs Full/Full (strict)), Edge Certificates settings (“Always Use HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.'”), and misconfigured redirect rules, each with a diagram and fix.
Bing / Microsoft
- Bing Webmaster Guidelines — general redirect guidance (301s for permanent moves, avoid chains). No Bing page specifically named “redirect loopA redirect loop is a chain of redirects that circles back on itself instead of ever reaching a live page — URL A redirects to B and B redirects back to A (or a longer cycle). No page ever returns a 200, so browsers show ERR_TOO_MANY_REDIRECTS and crawlers can't index anything.” turned up in this research — treat that as a research gap, not confirmation Bing has no such guidance.
Quotes from the source
On-the-record statements. Each source link is a deep link to the passage where available.
Patrick Stox — what a redirect loopA redirect loop is a chain of redirects that circles back on itself instead of ever reaching a live page — URL A redirects to B and B redirects back to A (or a longer cycle). No page ever returns a 200, so browsers show ERR_TOO_MANY_REDIRECTS and crawlers can't index anything. is (Ahrefs)
- “RedirectA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. loops are infinite loops of redirects that occur when a URL redirectsA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. to itself or when a URL in a redirect chainA → B → C instead of A → C. Each hop loses link equity and adds latency. redirects back to a URL earlier in the chain.” — Patrick Stox, 11 Types Of Redirects & Their SEO Impact, Ahrefs Blog. Jump to quote
Patrick Stox — the three-way harm (Ahrefs)
- “They’re problematic for three reasons: For users – They cut off access to an intended resource and trigger a “too many redirects” error in the browser. For botsA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. and search engines – They “trap” crawlersA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. and waste the crawl budgetThe number of URLs an engine will crawl in a timeframe.. For servers - they waste your resources. Some bots will handle this well, others will not. They could potentially take down your server with a constant DDoS attack.” — Patrick Stox, 11 Types Of Redirects & Their SEO Impact, Ahrefs Blog. Jump to quote
Patrick Stox — how to fix a loop (Ahrefs)
- “The best way to fix a redirect loop depends on whether the last URL in the chain (before the loop) is the intended final destination. If it is, remove the redirect from the final URL. Then make sure the resource is accessible and returns a 200 status codeHTTP 200 OK is the standard 2xx success status code, meaning the server received, understood, and fulfilled the request and is returning the resource. It's the code every page you want indexed should return — but a 200 alone doesn't guarantee Google will index the page.. If it isn’t, change the looping redirect to the intended final destination.” — Patrick Stox, 11 Types Of Redirects & Their SEO Impact, Ahrefs Blog. Jump to quote
Google — redirect loop as a “Redirect errorA Google Search Console Page Indexing status meaning Googlebot couldn't follow a redirect — a chain too long, a loop, a URL over the max length, or a bad/empty URL in the chain. It's a broken redirect to fix, not the normal \"Page with redirect.\"” cause
- “Google experienced one of the following redirect errorsA Google Search Console Page Indexing status meaning Googlebot couldn't follow a redirect — a chain too long, a loop, a URL over the max length, or a bad/empty URL in the chain. It's a broken redirect to fix, not the normal \"Page with redirect.\": A redirect chainA → B → C instead of A → C. Each hop loses link equity and adds latency. that was too long. A redirect loop. A redirect URL that eventually exceeded the max URL length. A bad or empty URL in the redirect chain.” — Google, Page indexing reportThe Google Search Console report (formerly Index Coverage) showing how many of your URLs are indexed vs. not indexed, and grouping the not-indexed ones by reason. Help doc. Jump to quote
What’s causing my redirect loop?
A loop is always some rule fighting another rule — the trick is finding which two.
Click through it. (Start by opening the URL in an incognito window and, if you
can, tracing it with a GET-based request — curl -sL --max-redirs 10 -D - -o /dev/null — so you can see which URLs keep alternating.)
Diagnosing a redirect loop by cause
Which fix do I apply once I’ve found the loop?
Fixing the loop once you've located it
Runbook: “The page loops — ERR_TOO_MANY_REDIRECTS — what do I do?”
A no-panic order of operations for a live loop. Do these in sequence; stop when you’ve foundA 302 (\"Found\") is a temporary redirect: it forwards users to a new URL while telling search engines the original URL should stay in the index. It's a weak canonicalization signal, not the zero-equity dead end of SEO folklore. and fixed the cause. Remember the framing: this is a site outage for real visitors, so restore access first, perfect the SEO second.
0. Scope it (2 minutes). Is it one URL, one section, or the whole site? A whole-site loop that appeared right after an SSL or CDN change is the emergency pattern — jump straight to step 3. A single-URL loop is usually a specific rule (host, slash) — steps 2 and 4.
1. Rule out your own browser. Open the URL in an incognito window. If it loads there, it’s a stale local cache/cookie — clear cache and cookies for the site and you’re done. If it loops in incognito too, it’s server-side; continue.
2. Trace every hop with a GET-based request (not HEAD-only).
curl -sL --max-redirs 10 -o /dev/null -w '%{http_code} %{url_effective}\n' https://www.example.com/Read which URLs keep alternating. The thing that flips tells you the cause:
scheme (http ⇄ https) → an HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.'/SSL issue (step 3); host (www ⇄ non-www) →
step 4; trailing slashA trailing slash is the forward slash (/) at the end of a URL — example.com/page/ versus example.com/page. Except at the bare root domain, the two versions are different URLs to search engines, so you pick one format and enforce it. → step 4. If you never see a 200 and the same pair repeats,
you’ve confirmed a true loop (not a long chain). If your app behaves differently
for HEAD than GET, a HEAD-only trace (curl -sIL) can miss part of the picture —
use it only as a secondary check.
3. If the scheme is flipping, check the SSL layer first (a well-documented
cause when a CDN is in front).
Is the site behind Cloudflare or another CDN? If yes: this is almost certainly an
SSL-mode mismatch. In Cloudflare, if SSL/TLS is set to Flexible, switch it to
Full or Full (strict) — Flexible sends HTTP to your origin while the origin
forces HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.', which is the loop. Also confirm you’re not forcing HTTPS in two
places (edge “Always Use HTTPS” and an origin/.htaccess/plugin rule) — remove
one. If there’s no CDN, you have two HTTPS-forcing rules on the origin fighting;
keep one.
4. If the host or slash is flipping, find the two rules doing the same job.
The loop is between layers that don’t share state — a plugin vs .htaccess, a CDN
redirectA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. rule vs the CMSA content management system (CMS) is software that lets users create, manage, and publish digital content — like blog posts and pages — without writing raw code. WordPress, Drupal, and Joomla are the most common open-source CMS platforms.’s Site Address setting. In WordPress, check Settings →
General (WordPress/Site Address) and any SSL-forcing plugin. Find the two rules
enforcing host or slash, and delete one so only a single rule redirects the wrong
form → the right form, once.
5. Apply the structural fix.
Identify the last URL before the loop closes. If it’s the intended
destination, remove the redirect from it and make it return 200. If it isn’t,
repoint the looping redirect at the real final URL. Either way, then update
internal linksAn internal link is a hyperlink from one page on a website to another page on the same website. Internal links help search engines discover your pages and pass ranking signals (PageRank and anchor-text context) between them. so nothing points at a redirecting URL.
6. Re-test and confirm clean.
Re-run the curl trace. You want either a single 301 → 200 or a direct 200 — no
alternating URLs. Test both http:// and https://, and both www and non-www,
so you don’t fix one direction and leave the other looping.
7. Clear caches and re-validate for search. Purge the CDN/page cache so old redirect responses aren’t served. Then, if the loop was showing in Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results.’s Page Indexing reportThe Google Search Console report (formerly Index Coverage) showing how many of your URLs are indexed vs. not indexed, and grouping the not-indexed ones by reason. as a “Redirect errorA Google Search Console Page Indexing status meaning Googlebot couldn't follow a redirect — a chain too long, a loop, a URL over the max length, or a bad/empty URL in the chain. It's a broken redirect to fix, not the normal \"Page with redirect.\",” use URL InspectionA Google Search Console feature that reports how Google sees one specific URL on a property you own. By default it shows the last-indexed snapshot; a separate \"Test live URL\" mode fetches the current version. and Validate Fix — knowing that re-crawlingCrawling is how search engines use automated bots (like Googlebot and Bingbot) to discover URLs and download pages. A page has to be crawlable to be indexed, but crawling on its own isn't a ranking factor. takes days to weeks; the visitor-facing fix is already done once step 6 is clean.
8. Prevent the next one. Keep a single source of truth for your canonical scheme/host/slash rules, and after any SSL, CDN, plugin, or migration change, re-run the curl trace on your key URLs before you walk away.
The cycle, owner, and invariant framework
I fix redirect loopsA redirect loop is a chain of redirects that circles back on itself instead of ever reaching a live page — URL A redirects to B and B redirects back to A (or a longer cycle). No page ever returns a 200, so browsers show ERR_TOO_MANY_REDIRECTS and crawlers can't index anything. by documenting three things before editing rules:
- Cycle: write the exact repeating sequence, including protocol, hostname, path, query, and slash state. A loop is proven only when a URL repeats.
- Owner: identify which layer produced each hop: browser/HSTSHSTS (HTTP Strict Transport Security) is a response header that tells browsers to always connect to your site over HTTPS — even when a user types or clicks an http:// link — closing the insecure-first-request gap that a plain 301 redirect leaves open., CDN, load balancer, web server, application, or plugin. Response headers and configuration boundaries matter more than guessing from the final browser error.
- Invariant: choose the one canonical state every layer must agree on—normally a single protocol, host, and path format. Each noncanonical variant may redirectA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. toward it; the canonical URLHow search engines pick one canonical URL among duplicates and consolidate signals onto it. must return a non-redirect response.
The safe fix removes or changes the first conflicting rule, then re-traces every entry variant. Raising a hop limit only delays the same cycle.
Patrick's relevant free tools
- CMS & Tech Detector — Inspect a public page's visible HTML and selected response headers for CMS, framework, CDN, and analytics fingerprints.
- Website Down Checker — Check whether one URL or a small sample is reachable right now from one Cloudflare location, with response timing, redirects, DNS fallback evidence, and connection-status details.
Tools for exposing redirect cycles
- Redirect Chain Mapper: trace each hop and see exactly where a protocol, host, slash, domain, or path changes and repeats.
- Redirect Checker: run fast checks across the HTTP, HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.', www, and non-www entry variants after the fix.
- Bulk HTTP Status Code Checker: validate a wider URL sample and export remaining loops or multi-hop chains.
- HTTP Header Checker: inspect CDN/edge fingerprints and headers that help assign each hop to its issuing layer.
- curl:
curl -sSL --max-redirs 12 -D - -o /dev/null URLgives a raw GET-based trace outside the browser’s cookie state; use a HEAD-only trace (-I) only as a secondary check, since HEAD and GET can behave differently on some apps. Test a fresh session too when authentication or locale cookies can participate in the loop. - CDN, server, and application configuration: compare all redirectA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. owners against the chosen canonical protocol/host/path invariant before changing any one rule.
Resources worth your time
My related writing
- 11 Types Of Redirects & Their SEO Impact — my full redirectsA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. guide, with the dedicated “Avoid redirect loopsA redirect loop is a chain of redirects that circles back on itself instead of ever reaching a live page — URL A redirects to B and B redirects back to A (or a longer cycle). No page ever returns a 200, so browsers show ERR_TOO_MANY_REDIRECTS and crawlers can't index anything.” section: the three-way-harm framing (users, crawlersA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index., servers — including the DDoS risk), how to find loops with Site Audit, and the two-branch fix rule this article is built on.
- 301 vs. 302 Redirects for SEO — which redirect type to collapse a loop down to for a permanent vs temporary move.
- A Website Migration Takes More Than A Checklist — migrations are a common real-world source of loops; how to plan the redirects so you don’t stack rules that fight.
From around the industry
- Too many redirects (ERR_TOO_MANY_REDIRECTS) — Cloudflare’s official troubleshooting doc, and the clearest primary source on a well-documented cause (SSL-mode mismatch): Flexible vs Full/Full (strict), “Always Use HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.',” and edge-cert causes, each with a diagram and fix.
- Page indexing report (Google Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. Help) — where a loop is named as one of the four “Redirect errorA Google Search Console Page Indexing status meaning Googlebot couldn't follow a redirect — a chain too long, a loop, a URL over the max length, or a bad/empty URL in the chain. It's a broken redirect to fix, not the normal \"Page with redirect.\"” causes.
- Google Search Ignores Redirect Loops (Search Engine Roundtable, 2019) — a secondary report on a 2019 John Mueller tweet framing a loop as similar to a broken link; the original tweet and exact wording weren’t independently reverified this pass, so treat this as background context rather than a confirmed quote.
- Too many redirects: How to fix loop errors and protect SEO (Search Engine Land) — a broad causes-and-fixes guide covering the WordPress and protocol-misconfiguration angles.
Stats and facts worth citing
- A loop harms three parties, not one. From my Ahrefs redirectsA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. guide: loops cut off access for users (the “too many redirects” browser error), trap crawlersA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. and waste crawl budgetThe number of URLs an engine will crawl in a timeframe., and waste server resources — with the worst case (depending on traffic and rate limiting429 Too Many Requests is an HTTP client-error status code that means a client sent too many requests in a given time window — a mechanism called rate limiting. Unlike other 4xx codes, Google treats 429 as a server-overload signal and slows crawling instead of removing content.) being bots that don’t back off adding DDoS-level load to your own server. Source
- A loop is one of four documented “Redirect errorA Google Search Console Page Indexing status meaning Googlebot couldn't follow a redirect — a chain too long, a loop, a URL over the max length, or a bad/empty URL in the chain. It's a broken redirect to fix, not the normal \"Page with redirect.\"” causes in Google Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. — alongside a chain that’s too long, a URL over the max length, and a bad/empty URL in the chain. Source
- A well-documented cause is an SSL-mode mismatch. Cloudflare’s own troubleshooting doc lays out how Flexible SSL mode (HTTP to origin) plus an origin that forces HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.' produces an infinite loop entirely at the CDN/origin boundary — one of several families Cloudflare names as common within its own product, not a claim about the single most common cause everywhere. Source
Test yourself: Redirect Loops
Five quick questions on what redirect loopsA redirect loop is a chain of redirects that circles back on itself instead of ever reaching a live page — URL A redirects to B and B redirects back to A (or a longer cycle). No page ever returns a 200, so browsers show ERR_TOO_MANY_REDIRECTS and crawlers can't index anything. are and how to fix them. Pick an answer for each, then check.
Redirect loop
A redirect loop is a chain of redirects that circles back on itself instead of ever reaching a live page — URL A redirects to B and B redirects back to A (or a longer cycle). No page ever returns a 200, so browsers show ERR_TOO_MANY_REDIRECTS and crawlers can't index anything.
Related: Redirect chain, Redirect error
Redirect loop
A redirect loopA redirect loop is a chain of redirects that circles back on itself instead of ever reaching a live page — URL A redirects to B and B redirects back to A (or a longer cycle). No page ever returns a 200, so browsers show ERR_TOO_MANY_REDIRECTS and crawlers can't index anything. happens when redirectsA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. form a cycle rather than a path to a destination. The simplest case is a URL that redirects to itself; the more common case is A → B → A, where two rules point at each other. Longer cycles (A → B → C → A) work the same way. The defining property is that no URL in the chain ever returns a 200 — the request just bounces forever until something gives up.
Browsers give up quickly and surface the classic ERR_TOO_MANY_REDIRECTS error in Chrome (with equivalents in Firefox, Safari, and Edge). CrawlersA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. can’t follow a loop to any indexable page, so in Google Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. a loop is one of the four documented causes of the “Redirect errorA Google Search Console Page Indexing status meaning Googlebot couldn't follow a redirect — a chain too long, a loop, a URL over the max length, or a bad/empty URL in the chain. It's a broken redirect to fix, not the normal \"Page with redirect.\"” status in the Page Indexing reportThe Google Search Console report (formerly Index Coverage) showing how many of your URLs are indexed vs. not indexed, and grouping the not-indexed ones by reason., alongside a chain that’s too long, a URL that exceeds the max length, and a bad or empty URL in the chain.
A loop is categorically different from a redirect chainA → B → C instead of A → C. Each hop loses link equity and adds latency. that’s merely long. A long chain eventually resolves — it’s just slow. A loop never resolves, no matter how patient the browser or crawlerA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. is, so raising a hop limit never fixes one. The fix is always to break the cycle, and it’s specific to the cause: most real-world loops come from conflicting canonicalizationHow search engines pick one canonical URL among duplicates and consolidate signals onto it. rules across layers that don’t share state — an HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.'/SSL-mode mismatch between a CDN and the origin, www/non-www rules pointing at each other, a plugin rule fighting a server rule, or a trailing-slash bug.
Related: Redirect chain, Redirect error
Build-time retrieval analysis plus live signals for this exact article. The automatic chunk report includes a deterministic readiness score and is ready without a model download.
Search Console
sampleGA4 traffic (28d)
sampleCloudflare traffic (7d)
sampledCrUX field data (28d, phone)
sampleGoogle NLP entities
localChangelog
Updated Jul 18, 2026.
Editorial summary and recorded change details.Summary
Reviewed against the refreshed research packet (13 claim decisions, 5 gap findings, 8 source-verify checks). Removed unverified claims — the Bing documentation-absence statement, the unrecovered 2019 Mueller quote, and the 'single most common cause' framing for CDN/SSL-mode mismatches — and requalified the DDoS-risk and hop-limit language to depend on stated conditions instead of reading as universal. Switched the diagnosis workflow from a HEAD-only curl trace to a GET-based trace (HEAD kept only as a secondary check), and added the request-state caveat for confirming a true cycle.
Change details
-
Removed the Bing 'no dedicated redirect-loop doc' absence claim and the unverified 2019 John Mueller quote/paraphrase; reframed the Cloudflare SSL-mode cause and the DDoS/server-load risk as well-documented but not universal or guaranteed.
-
Rewrote the diagnosis section, Playbooks runbook, decision-tree copy, and Tools lens to trace with a GET-based curl command instead of HEAD-only (-IL), keeping HEAD only as a secondary comparison check, and added a hop-owner mapping (browser/HSTS, edge/TLS, proxy, origin, app/CMS, auth/session) plus a caveat that URL Inspection does not follow redirects.
-
Rewrote quiz question 2 (previously testing the removed 'single most common cause' claim) to test the GET-vs-HEAD tracing rationale instead.
Full comparison unavailable — no prior snapshot was archived for this revision.