ERR_TOO_MANY_REDIRECTS: find and fix the redirect loop
“This page isn’t working. example.com redirected you too many times.” The browser gave up because URL A sends it to B and B sends it back (or the chain simply never ends). Trace the URL to see the loop, then match it to a cause below.
First, as a visitor: two quick checks
- Try a private window. If the page loads there, the loop depends on your cookies or a cached redirect. Clear cookies for that one site (Chrome: padlock icon → Cookies and site data), not your whole browser.
- Run the URL through the checker above. If our clean, cookie-free request also loops, the problem is on the server and only the site owner can fix it.
Browsers stop after about 20 redirects; Chrome reports ERR_TOO_MANY_REDIRECTS, Firefox says “The page isn’t redirecting properly” and Safari “too many redirects occurred”. Googlebot stops even earlier, at 10.
How a loop forms
Almost every loop is two rules that each look sensible, disagreeing about what the “right” URL is. Step through three of the most common ones, then flip the fix on.
Cloudflare (or another CDN) serves HTTPS to visitors but talks to your server over plain HTTP. Your server has a rule: "if the request is HTTP, redirect to HTTPS."
- Browser → CDNGET https://example.com/
- CDN → serverGET http://example.com/ (plain HTTP to the origin)
- ServerSees HTTP, replies 301 → https://example.com/
- Browser → CDNGET https://example.com/ … the same request as step 1
- CDN → serverStill plain HTTP, so the server redirects again
- BrowserAfter ~20 identical hops: ERR_TOO_MANY_REDIRECTS
Causes and fixes by platform
Cloudflare or another CDN
SSL/TLS mode set to Flexible while the origin forces HTTPS is the classic loop. Switch to Full (strict) with a valid certificate on the origin. Also check Page Rules or Redirect Rules that duplicate your server’s own www or HTTPS redirect, and “Always Use HTTPS” combined with an origin that redirects HTTPS back to HTTP.
WordPress
Make WordPress Address and Site Address (Settings → General) identical, including https and www. If you are locked out, set them in wp-config.php with define('WP_HOME', 'https://example.com'); and define('WP_SITEURL', 'https://example.com');. Behind a proxy or load balancer, WordPress may not know the request was HTTPS: add if ($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') $_SERVER['HTTPS'] = 'on'; near the top of wp-config.php. Then disable redirect or SSL plugins one at a time.
Apache .htaccess
A rewrite rule that matches its own target loops. RewriteRule ^(.*)$ https://example.com/$1 [R=301,L] without a RewriteCond %{HTTPS} off guard will redirect HTTPS requests to themselves. Behind a proxy, test %{HTTP:X-Forwarded-Proto} !https instead of %{HTTPS}. The redirect rule generator writes guarded rules for you.
Nginx
Put the HTTP→HTTPS redirect in the listen 80 server block only, never in the block that listens on 443. When Nginx sits behind a load balancer that terminates TLS, check $http_x_forwarded_proto rather than $scheme.
Vercel, Netlify and other hosts
A domain-level redirect in the dashboard (for example www → apex) plus the opposite rule in vercel.json, _redirects or your framework config produces a loop. Keep the host redirect in one place. Trailing-slash settings that disagree with your framework’s trailingSlash option cause a quieter version: /page → /page/ → /page.
Application logic
Language or geo redirects that send a visitor to /en/, where another rule sends them back to /; login middleware that protects its own login page; or a cookie that is never stored (wrong domain, Secure on HTTP, SameSite issues) all loop. Use the checker with the Googlebot user agent too: bot-specific rules loop surprisingly often.
After the fix
Browsers cache 301 and 308 responses aggressively, so your own browser may keep looping after the server is fixed. Test in a private window or with the checker. Then trace every variant of the homepage with the HTTP to HTTPS checker to make sure all four end at one URL in a single hop.
Questions
What does ERR_TOO_MANY_REDIRECTS mean?
The browser followed redirects about 20 times without reaching a page. Usually two URLs redirect to each other (a loop), sometimes a chain just never ends. It is a server configuration problem, although stale cookies can trigger it for a single visitor.
Will clearing cookies fix it?
Only if the loop depends on a cookie, such as a login or language preference. Try a private window first: if the page loads there, clear cookies for that site. If it still loops in a private window and in our checker, the site owner needs to fix the server.
Why does the loop happen only on HTTPS?
Most often a CDN or load balancer terminates HTTPS and forwards plain HTTP to your server, which then redirects to HTTPS again. Use end-to-end HTTPS (Cloudflare Full strict) or make the redirect rule check X-Forwarded-Proto.
Does a redirect loop hurt SEO?
Yes. Googlebot cannot reach the content, reports a redirect error in Search Console and eventually drops the URL from the index. Fix loops on important URLs as soon as you find them.
The checker shows no loop but my browser still errors. Why?
Your browser probably cached an old 301 or holds a cookie that triggers the loop. Test in a private window, clear site data, or wait for the cached redirect to expire.
Sources: Google Search Central, “Googlebot” (10-hop limit); Cloudflare docs, “ERR_TOO_MANY_REDIRECTS”; WordPress Developer Resources, wp-config.php; WHATWG Fetch Standard (browser redirect limit of 20).