A redirect loop means two rules keep bouncing the browser back and forth — A sends you to B, B sends you back to A. It's almost always an SSL/Cloudflare or WordPress URL mismatch. Here is the fix.
Quick answer
ERR_TOO_MANY_REDIRECTS is a redirect loop. The classic cause is Cloudflare's SSL mode set to Flexible while the server also forces HTTPS — switch Cloudflare to Full (strict). Otherwise check that WordPress's Site URL and Home URL match, remove duplicate HTTPS/www redirect rules, and clear cookies.
Cause 1: Cloudflare SSL mode
The classic loop: Cloudflare's SSL is set to Flexible while your server also forces HTTPS. Cloudflare talks http to your server, your server redirects to https, forever. Set Cloudflare SSL to Full (strict) when your server has a valid certificate.
Cause 2: WordPress URL mismatch
If the WordPress and Site URLs disagree (http vs https, www vs non-www), it loops. Set both consistently in wp-config.php:
define('WP_HOME','https://example.com');
define('WP_SITEURL','https://example.com');Cause 3: conflicting .htaccess redirects
Two rules — one forcing www, another forcing non-www (or http↔https) — fight each other. Keep one canonical redirect direction and remove the duplicate.
Your browser caches redirects, so test in a private window after each change — otherwise you'll keep seeing the old loop even once it's fixed.
A loop = two rules disagreeing. Fix Cloudflare SSL to Full, match WordPress URLs, and keep one canonical redirect.
Cause 4: a security/redirect plugin fighting the server
A "force SSL" or caching plugin can add its own redirect on top of one already forced by the server or .htaccess. Two independent layers each redirecting for the same reason is the most common way loops reappear after everything looks fixed. Disable one side — usually the plugin — and let the other handle it.
Cause 5: a stale CDN or browser cache
Even after the underlying cause is fixed, a cached redirect response (or a cached page from before the fix) keeps looping. Purge the CDN/Cloudflare cache and test in a fresh private/incognito window.
How to prevent redirect loops
- Pick ONE canonical URL (https, with or without www) and enforce it in exactly one place.
- When using Cloudflare, keep SSL mode at Full (strict) once your origin has a valid certificate.
- Avoid stacking a "force SSL" plugin on top of a server-level HTTPS redirect.
- Test any SSL/URL change in a private window before assuming it's still broken.
Related errors
If the loop started right after installing or renewing SSL, see SSL / Let's Encrypt renewal. If Cloudflare can't reach your origin at all rather than looping, that's error 521. If the domain itself doesn't resolve, see DNS_PROBE_FINISHED_NXDOMAIN.