ERR_TOO_MANY_REDIRECTS in WordPress means your site is stuck in a redirect loop. Two or more rules keep sending the browser back and forth between URLs, so the page never loads. It usually starts right after an SSL certificate install, an HTTP to HTTPS switch, a CDN setup or a site migration. WPOptimizers fixes it by finding which rule loops, not by guessing.
Most guides give you a list of things to try. This one starts by showing you where the loop is. Once you know which two URLs are bouncing, the fix is usually one setting.
How Do You Fix ERR_TOO_MANY_REDIRECTS in WordPress?
To fix ERR_TOO_MANY_REDIRECTS in WordPress, first trace the redirect chain in a private window to see which URLs are looping. Then correct the WordPress Address and Site Address, change Cloudflare’s SSL mode from Flexible to Full (strict), fix your HTTPS redirect rules, and turn off conflicting redirect plugins. WPOptimizers works through these steps in this order.
Here are the 7 fixes:
- Trace the redirect chain and rule out your browser
- Correct the WordPress Address and Site Address
- Fix Cloudflare’s Flexible SSL setting
- Tell WordPress it’s behind a proxy
- Remove duplicate HTTPS and www rules in .htaccess or Nginx
- Turn off redirect and SSL plugins
- Update old HTTP links in the database
Back up wp-config.php and .htaccess before you edit them. A wrong line in either file can take the whole site down. If something goes wrong, here’s how to restore WordPress from backup.
What Does ERR_TOO_MANY_REDIRECTS Mean?
ERR_TOO_MANY_REDIRECTS is the browser’s way of saying it gave up. Every redirect tells the browser “this page moved, go here instead.” When the new address redirects back to the old one, the browser follows the loop about 20 times, then stops. WPOptimizers treats it as a configuration conflict, not a server crash.
Each browser words it differently:
| Browser | What You See |
| Google Chrome | “This page isn’t working. example.com redirected you too many times.” with the code ERR_TOO_MANY_REDIRECTS |
| Microsoft Edge | The same message as Chrome, since both run on Chromium |
| Mozilla Firefox | “The page isn’t redirecting properly” |
| Safari | “Safari Can’t Open the Page” because there were too many redirects |
Your content, posts and database are fine. Nothing is deleted. WordPress simply can’t agree with your server, CDN or plugin about what the correct URL is.
Why Does WordPress Get Stuck in a Redirect Loop?
A redirect loop happens when two systems disagree about the “right” URL. One side sends visitors to HTTPS while another sends them back to HTTP, or one forces www while another removes it. The most common triggers are SSL setup, Cloudflare’s Flexible mode, a wrong Site Address, and stacked redirect rules. WPOptimizers sees HTTPS changes cause most cases.
| What Changed Recently | What Loops |
| Installed an SSL certificate or switched to HTTPS | Server forces HTTPS, WordPress settings still say HTTP |
| Turned on Cloudflare | Flexible SSL sends HTTP to your server, which redirects to HTTPS, forever |
| Moved to a load balancer, proxy or new host | WordPress can’t tell the visitor is on HTTPS |
| Changed www to non-www (or the reverse) | WordPress wants one version, the host or CDN forces the other |
| Added an SSL or redirect plugin | The plugin’s rule clashes with the server’s rule |
| Migrated the site to a new domain | Site Address still points to the old domain |
| Set FORCE_SSL_ADMIN in wp-config.php | wp-admin forces HTTPS before HTTPS actually works |
Fix 1: Trace the Redirect Chain and Rule Out Your Browser
Tracing the redirect chain shows exactly which URLs are bouncing, so you fix the cause instead of trying everything. Use curl in a terminal, or your browser’s DevTools Network tab in a private window. Each hop shows a status code and a Location. If the private window loads fine, only your cookies are stuck. WPOptimizers runs this check first.
With curl (Mac, Linux or Windows Terminal):
curl -sIL --max-redirs 10 https://example.com | grep -iE "^HTTP|^location|^server"
You’ll see a repeating pattern. Read it like this:
| Pattern You See | Most Likely Cause | Go To |
https:// → http:// → https:// | WordPress settings or a proxy that hides HTTPS | Fix 2 or Fix 4 |
Same https:// URL redirects to itself, server: cloudflare | Cloudflare Flexible SSL | Fix 3 |
www. → no www → www. | WordPress and host/CDN disagree on www | Fix 2 and Fix 5 |
| One specific page loops, the rest of the site works | A redirect rule in a plugin | Fix 6 |
Only /wp-admin/ or /wp-login.php loops | FORCE_SSL_ADMIN or a login cookie issue | Fix 4 and the FAQ |
With Chrome DevTools:
- Open a private window, press F12 and open the Network tab.
- Tick “Preserve log” and “Disable cache.”
- Load your site and click each 301 or 302 row. The Location header is where it sent you next.
The server: header matters too. If the redirect comes from Cloudflare, WordPress isn’t the problem.
Rule out your browser. Browsers save 301 redirects and cookies, so a loop you already fixed can keep showing. If the site loads in a private window or through curl, delete cookies and cached data for your domain only. In Chrome, click the icon left of the address bar, open “Cookies and site data,” and delete the data for your domain. In Firefox, use Settings → Privacy & Security → Cookies and Site Data → Manage Data. If the private window also shows the error, the loop is real and on the server side. Keep going.
Fix 2: Correct the WordPress Address and Site Address
WordPress stores two URLs: WordPress Address (siteurl) and Site Address (home). If either uses HTTP while your server forces HTTPS, or uses www while your host removes it, WordPress redirects against your server. Set both to the exact URL your visitors should use, protocol and www included. WPOptimizers checks these two values first after any SSL change.
If you can reach the dashboard: go to Settings → General and set both fields to the same version, for example https://example.com. Save.
If you’re locked out, add these lines to wp-config.php, above the line that says “That’s all, stop editing”:
define( 'WP_HOME', 'https://example.com' );
define( 'WP_SITEURL', 'https://example.com' );
These override the database values. Once the site works, update the values in Settings → General and remove the two lines so you only manage the URL in one place.
With WP-CLI over SSH:
wp option get home
wp option get siteurl
wp option update home 'https://example.com'
wp option update siteurl 'https://example.com'
Only make these match if WordPress lives in the root folder. If you installed WordPress in its own subdirectory on purpose, siteurl includes that folder.
Fix 3: Fix Cloudflare’s Flexible SSL Setting
Cloudflare’s Flexible SSL encrypts traffic between visitors and Cloudflare, but connects to your server over plain HTTP. Your server or WordPress then redirects that request to HTTPS, Cloudflare sends HTTP again, and the loop never ends. Switch the SSL/TLS mode to Full (strict). WPOptimizers fixes this setting more often than any other.
- Log in to Cloudflare and open your domain.
- Go to SSL/TLS → Overview.
- Change the encryption mode from Flexible to Full (strict).
- Make sure your server has a valid certificate. A free certificate from your host, or a Cloudflare Origin Certificate, both work.
- Purge everything under Caching → Configuration, then test in a private window.
Use Full (strict) rather than plain Full when you can. Plain Full accepts any certificate on your server, even an expired one, so it hides problems instead of protecting you.
Also check Rules → Redirect Rules (and older Page Rules) for any rule that sends your domain to itself, or forces www while WordPress uses non-www.
Fix 4: Tell WordPress It’s Behind a Proxy
Behind a load balancer, reverse proxy or some CDNs, the visitor uses HTTPS but the request reaches WordPress as HTTP. WordPress thinks the connection isn’t secure and redirects to HTTPS again, forever. A few lines in wp-config.php tell WordPress to trust the proxy’s HTTPS header. WPOptimizers checks for this whenever a site moves to new hosting.
Most guides skip this cause, yet it’s common on containers, managed cloud platforms and custom VPS setups. Add this to wp-config.php, above “That’s all, stop editing”:
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] )
&& strpos( $_SERVER['HTTP_X_FORWARDED_PROTO'], 'https' ) !== false ) {
$_SERVER['HTTPS'] = 'on';
}
Ask your host which header their proxy sends before you add it. Most use X-Forwarded-Proto, but not all.
Check FORCE_SSL_ADMIN too. If wp-config.php contains define( 'FORCE_SSL_ADMIN', true ); and HTTPS isn’t working fully yet, wp-admin will loop. Comment the line out until your SSL certificate works on the whole site, then put it back.
If your certificate itself is the problem, follow our guide on how to install an SSL certificate on WordPress and test it before turning any HTTPS redirect back on.
Fix 5: Remove Duplicate HTTPS and www Rules in .htaccess or Nginx
One HTTPS redirect is enough. Problems start when the host, an SSL plugin and your .htaccess each add their own rule, and they disagree on www or trailing slashes. Keep a single rule that matches your Site Address and delete the rest. WPOptimizers keeps one redirect per job: one for HTTPS, one for www.
On Apache or LiteSpeed (.htaccess):
- Connect with File Manager, SFTP or SSH and open the root folder (usually public_html).
- Download a copy of .htaccess, then rename the original to
.htaccess-old. - Reload the site. If the loop is gone, a rule in the old file caused it.
- Create a fresh .htaccess with the default WordPress rules shown below.
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Add back one HTTPS rule, above the WordPress block, only if your host doesn’t already force HTTPS:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
The X-Forwarded-Proto line stops this rule from looping behind Cloudflare or a proxy.
On Nginx: there’s no .htaccess. Redirects sit in the server block. Ask your host to confirm there’s one HTTPS redirect and that its www setting matches WordPress.
In your hosting panel: look for a “Force HTTPS” toggle. If it’s on, you don’t need an HTTPS rule in .htaccess or in a plugin.
Fix 6: Turn Off Redirect and SSL Plugins
SSL plugins, redirect managers, SEO plugins with redirect modules, caching plugins and security plugins can all add redirects. If one clashes with your server, you get a loop. Disable them all by renaming the plugins folder, then bring them back one at a time. WPOptimizers also checks redirect lists for a URL that points to itself.
- Open wp-content with File Manager or SFTP.
- Rename
pluginstoplugins-off. All plugins deactivate. - Load the site. If it works, rename the folder back to
plugins. - In wp-admin, go to Plugins → Installed Plugins and reactivate them one by one, reloading the site each time.
With WP-CLI, you can test without touching folders:
wp plugin list --status=active
wp plugin deactivate --all
When you find the plugin, open its redirect list. Look for entries where the source and target are the same URL, or two entries that point at each other. If an SSL plugin is the cause and your host already forces HTTPS, you may not need that plugin at all.
If a plugin change leaves you with a blank page, follow the steps for the WordPress white screen of death. If it shows a server error, see our guide to the 500 internal server error in WordPress.
Can’t Find Which Rule Is Looping?
WPOptimizers WordPress developers can trace the redirect chain, fix the SSL, CDN and server settings, and check your site loads cleanly for every visitor.
Fix 7: Update Old HTTP Links in the Database
After switching to HTTPS, old HTTP links stay in posts, menus, widgets and plugin settings. Each one sends visitors through an extra redirect, and some trigger loops inside page builders or menus. Run a search and replace from http:// to https:// on your own domain. WPOptimizers always runs a dry run first.
wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guid --dry-run
wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guid
The dry run shows how many rows will change without changing anything. Skip the guid column, which WordPress uses as a permanent ID and should stay as it is. WP-CLI handles serialized data safely. Never run a plain find-and-replace on an exported SQL file, because it breaks serialized values.
No SSH? A search-and-replace plugin with a dry-run option does the same job. Back up the database first.
Does ERR_TOO_MANY_REDIRECTS Hurt SEO?
A loop that lasts a few hours rarely causes lasting damage, but a long one does. Search engines can’t reach pages stuck in a loop, so they stop crawling them and may drop them from the index. Fix the loop quickly, then check Search Console. WPOptimizers checks the Page indexing report after every redirect fix.
After the fix:
- Open Search Console → Pages and look for “Redirect error.”
- Use URL Inspection on your homepage and a few key pages, then request indexing.
- Make sure your sitemap lists only final HTTPS URLs, with no redirects.
- Check that your canonical tags use the same version as your Site Address.
How Do You Stop Redirect Loops From Coming Back?
Prevent redirect loops by deciding one final URL format, HTTPS with or without www, and making every layer agree with it. Keep one HTTPS redirect, use Full (strict) on Cloudflare, and test changes on staging first. WPOptimizers documents every redirect so the next change doesn’t create a conflict.
A prevention checklist:
- Pick one canonical version (for example
https://example.com) and use it everywhere - Install and test your SSL certificate before forcing HTTPS
- Force HTTPS in one place only: host panel, server config or a plugin, not all three
- Set Cloudflare to Full (strict), never Flexible, when your server has a certificate
- Test SSL, CDN and migration changes on a staging site first
- Back up wp-config.php and .htaccess before editing them
- Run the curl check from Fix 1 after every DNS, SSL or hosting change
Or let our WordPress maintenance team watch your SSL, redirects and updates for you.
Frequently Asked Questions About ERR_TOO_MANY_REDIRECTS
These answers cover what site owners ask most about ERR_TOO_MANY_REDIRECTS in WordPress, including wp-admin loops, browser issues, SSL certificates, single-page loops and data safety, based on how WPOptimizers fixes client websites.
Why Does ERR_TOO_MANY_REDIRECTS Only Happen on wp-admin?
Usually FORCE_SSL_ADMIN is on before HTTPS works fully, or WordPress can’t detect HTTPS behind a proxy. Fix 4 covers both. If the login page reloads without an error, it’s a cookie issue: clear cookies and check that your Site Address matches the domain you log in on.
Is ERR_TOO_MANY_REDIRECTS My Browser’s Fault?
Rarely. A cached 301 or a bad cookie can keep the error showing after it’s fixed, but the loop itself almost always comes from site, server or CDN settings. Test in a private window to tell the difference.
Can an SSL Certificate Cause a Redirect Loop?
The certificate alone usually causes a security warning, not a loop. Loops come from the redirect setup around it: forcing HTTPS before the certificate works, Cloudflare Flexible mode, or WordPress still set to HTTP.
Why Does Only One Page Show Too Many Redirects?
A redirect rule exists for that one URL. Check your redirect plugin, SEO plugin redirects and .htaccess for an entry where that page redirects to itself or to a page that redirects back.
Will Fixing the Redirect Loop Delete My Content?
No. Redirect settings only control which URL loads. Your posts, pages and media stay where they are. Just back up wp-config.php and .htaccess before editing, in case you need to undo a change.
Do I Need an SSL Plugin to Use HTTPS on WordPress?
Not usually. If your host forces HTTPS and your Site Address uses https://, WordPress works without one. Running a plugin on top of host-level HTTPS adds a second redirect layer, which is one more thing that can conflict.
Let Us Handle Your WordPress Site
WPOptimizers WordPress maintenance plans start at $49 per month, with tested updates, daily backups and uptime monitoring, so problems like redirect loops get caught early.