ERR_TOO_MANY_REDIRECTS appears in Chrome, Edge and Brave as "This page isn't working. example.com redirected you too many times." Firefox says "The page isn't redirecting properly," and Safari reports that too many redirects occurred. The browser follows a chain of 301, 302, 307 or 308 responses, and when it reaches its limit (about 20 hops in Chrome and Firefox) it gives up, because the chain is almost certainly a loop.
A loop means two or more rules disagree about the correct URL. Each one sends the visitor to what it considers right, and each target sends them back. Finding the loop is mechanical once you can see every hop.
See the loop
curl -sIL --max-redirs 10 https://example.com/ | grep -i -E "^(HTTP|location)"
You will see a repeating pattern, for example:
HTTP/2 301
location: https://www.example.com/
HTTP/2 301
location: https://example.com/
HTTP/2 301
location: https://www.example.com/
The Redirect Checker draws the same chain, and the Redirect Debugger helps identify which hop and rule is responsible.
If you are a visitor
- Clear cookies for that site. Many redirect loops are caused by a stale login or session cookie. In Chrome, open the padlock or tune icon, choose Cookies and site data, and delete the site's entries. Then reload.
- Try a private window. If it works there, the problem is a cookie or extension.
- Clear the cache if the site recently changed redirects, since browsers cache 301 and 308 responses aggressively.
- Disable extensions that rewrite URLs: HTTPS-forcing, privacy and redirect-blocking tools.
- Correct the clock. Odd dates can break cookie lifetimes and trigger login redirect loops.
- Try another browser or device. If other devices load the page, the cause is local.
If it fails everywhere, it is a site configuration error. Report it to the owner with the URL.
If you own the site
1. HTTPS redirect behind a proxy or CDN
The most frequent loop: the origin redirects HTTP to HTTPS, but the CDN connects to the origin over HTTP, so the origin sees a plain request every time and redirects again. On Cloudflare, this is the "Flexible" SSL mode combined with an origin-side HTTPS redirect. Switch to Full or Full (Strict) with a valid origin certificate. Details: Cloudflare too many redirects fix and Cloudflare SSL modes.
If a proxy terminates TLS, make the origin trust the forwarded protocol header:
# Redirect only when the original request was HTTP
if ($http_x_forwarded_proto = "http") {
return 301 https://$host$request_uri;
}
2. www and non-www fight each other
One layer redirects to www, another redirects to the bare domain. Pick one canonical host and remove the other rule, including hosting-panel and CMS settings. Check WordPress's Site Address and WordPress Address (Settings, General, or siteurl and home in the database).
3. Conflicting rules in several layers
Search every place that issues redirects: .htaccess, vhost config, hosting control panel, CDN rules, CMS plugins and application code.
# Apache .htaccess: single, non-looping HTTPS redirect
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
If the app sits behind a proxy, %{HTTPS} may always be off. Test X-Forwarded-Proto instead.
4. Trailing slash and index redirects
A rule adding a trailing slash may fight a framework that removes it. Standardize one form. Also verify /index.php or /home redirects do not point back at each other.
5. WordPress and login loops
On WordPress, URL mismatches, a security plugin, or FORCE_SSL_ADMIN combined with a proxy cause loops, especially on /wp-admin. See the WordPress too many redirects fix.
6. Cookie-based loops
Authentication systems redirect unauthenticated users to a login page; if the session cookie cannot be set (wrong domain, Secure flag on an HTTP connection, or blocked SameSite), the visitor is sent back forever. Inspect the response with the Cookie Checker and read cookie flags explained.
7. HSTS and cached 301s can mask your fix
Browsers cache permanent redirects. After fixing the rule, test in a private window or with curl, not your regular tab. Also check HSTS with the HSTS Checker before moving a domain back to HTTP.
Confirm the fix
- Run the Redirect Checker. The chain should end in a 200 with at most one or two hops.
- Check the final response with the HTTP Status Checker and look at the headers with the HTTP Header Checker.
- Test all four variants:
http://andhttps://with and withoutwww. - Monitor the canonical URL with an uptime monitor.
Next steps
- Read HTTP redirects: 301 vs 302.
- If the site is on WordPress, follow the WordPress redirect fix.
- Check for related certificate trouble in Your connection is not private.
- Review Cloudflare errors 520-526 if a CDN is involved.
FAQ
How many redirects is too many?
Browsers allow about 20 before stopping. Good practice is one hop at most, and never a cycle.
Why does clearing cookies fix it?
Some redirects depend on session or preference cookies. A bad cookie can send a visitor round a loop that a fresh visitor never enters.
Can a loop hurt SEO?
Yes. Crawlers also abandon loops, so affected URLs cannot be indexed. Fix them promptly.
Why does the loop only appear for logged-in users?
Authentication redirects, per-role rules and cookie settings are often involved. Compare headers for logged-in and logged-out requests.
Get notified when this fix updates
Plus occasional practical tips on uptime and monitoring, nothing else. Unsubscribe anytime.
This page is general information written by our editorial team and updated when documentation changes. Servers and providers differ, so test changes safely first. See our editorial policy and disclaimer.