Redirect Chains and Loops: Why They Hurt and How to Fix Them

No Comments
Redirect chains and loops: why they hurt and how to fix them
TL;DR

A redirect chain is a sequence of redirects that pass a request through one or more intermediate URLs before reaching the final page (A to B to C). A redirect loop is a chain that never ends because the URLs point back to each other (A to B to A). Chains waste crawl budget, add latency, and can shed a little link equity at each hop; Googlebot may also stop following after several hops. Loops are worse: the page never loads at all and browsers throw ERR_TOO_MANY_REDIRECTS. Find them with Screaming Frog, Sitebulb, curl -IL, or server logs, then flatten every redirect so each source URL points directly to its final destination in a single hop.

What redirect chains and loops are

A single redirect is straightforward: a browser or crawler requests one URL, the server replies with a 301 or 302 status code and a new location, and the client follows it to the destination. That is one hop, and it is normal and healthy.

A redirect chain is what happens when that destination is itself a redirect. Instead of one hop you get a series. URL A redirects to URL B, which redirects to URL C, which finally serves a 200 OK response. Every link, bookmark, and search result that still points at A now drags the visitor through B and C before anything renders. Chains often grow quietly over years as sites migrate from HTTP to HTTPS, switch domains, restructure URLs, or stack one rule on top of another.

A redirect loop is a chain with no exit. URL A redirects to URL B, and URL B redirects back to URL A. The request bounces between them indefinitely and never reaches a page that returns a 200. Loops can also involve more than two URLs (A to B to C to A), which makes them harder to spot by eye.

Why they hurt SEO and users

Chains and loops cause different problems, and it helps to keep them separate.

Why chains hurt

  • Wasted crawl budget. Each hop is a separate request a search engine has to make. On a large site, crawlers spend requests resolving redirects instead of discovering and refreshing real content.
  • Possible link-equity loss. Google has said it forwards ranking signals through redirects, but long chains add risk. A broken or misconfigured hop in the middle can sever the path entirely, and consolidating signals through a single hop is the safer design.
  • Added latency for users. Every hop is a round trip to the server before the page begins to load. On mobile connections, two or three extra redirects are delay a visitor can feel, and slower loads correlate with higher abandonment.
  • Crawlers may give up. Googlebot follows a limited number of redirect hops on a single request and may stop following after several. If the real destination sits past that limit, the final page can be missed during that crawl.

Why loops are worse

A loop is a hard failure, not a tax. The page never resolves, so no human and no crawler ever sees content. Browsers detect the cycle and stop with an error such as ERR_TOO_MANY_REDIRECTS in Chrome or "The page is not redirecting properly" in Firefox. For search engines the affected URLs simply cannot be indexed, and any pages that depend on them are effectively offline. A loop on a key template, such as the homepage or a category root, can take a large section of a site dark at once.

How to find them

You do not need to guess. Several tools surface chains and loops directly.

  • Screaming Frog SEO Spider. Crawl the site, then open Reports and the Redirect Chains export. It lists every chain, the number of hops, the status code at each step, and the final destination, so you can sort by hop count and fix the worst offenders first.
  • Sitebulb. Its crawl audit flags redirect chains and loops as dedicated hints, with the full hop path shown for each URL.
  • curl on the command line. Run curl -IL https://example.com/old-page to follow the redirects and print every status header in order. You will see each 301 or 302 and its Location, all the way to the final 200, which makes a single URL fast to diagnose.
  • Server log files. Logs show how often a redirecting URL is actually requested and whether crawlers are spending real budget on it, which helps you prioritize.

For background on which status code belongs where, see our guide on 301 vs 302 redirects.

How to fix them

The fix for a chain is to flatten it. Update every source so it points directly at the final destination in one hop, rather than at an intermediate URL that redirects again. If the destination ever moves, update the original rules instead of adding a new redirect on top.

Before: a three-hop chain

http://example.com/page (301) to
https://example.com/page (301) to
https://www.example.com/page (301) to
https://www.example.com/final (200)

Four requests to load one page, and any signals must survive three hops.

After: one hop

http://example.com/page (301) to
https://www.example.com/final (200)

The source points straight to the final URL. One request, no intermediate steps.

Loops usually come from rule order rather than from a single bad target. A common case is a canonical-host rule and a trailing-slash rule that each rewrite the URL in a way that re-triggers the other. The fix is to make each rule fire only when it is actually needed, using conditions so a request that already matches the desired form is left alone. The Apache example below forces HTTPS and the www host together in one pass, then handles a single redirect cleanly without bouncing.

RewriteEngine On

# Force HTTPS and www in a single redirect, not two stacked rules
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

# Redirect one specific old path straight to its final URL
RewriteRule ^old-page$ https://www.example.com/final [R=301,L]

The [L] flag stops further rule processing once a match fires, and the conditions ensure the HTTPS/www rule does not run when the request is already correct, which is what prevents the back-and-forth loop. On Nginx the same principle applies: keep a single canonical server block that handles the scheme and host redirect in one return 301, rather than chaining separate location blocks that each rewrite the request. After any change, re-test with curl -IL to confirm a single hop to a 200.

Common causes

  • Stacked canonicalization. An HTTP-to-HTTPS rule and a non-www-to-www rule that each fire separately turn one logical redirect into two or three hops. Combine them into one rule, as shown above.
  • Trailing-slash rules. A rule that adds a trailing slash next to one that removes it, or a rule that conflicts with how the application generates internal links, is a classic loop source.
  • Plugin redirects fighting server rules. On WordPress and similar platforms, a redirect plugin and a server-level .htaccess rule can each act on the same URL, producing a chain or a loop. Decide on one layer to own each redirect rather than letting both run.
  • Old migration rules left in place. Redirects from previous site moves accumulate. A URL pointing to a destination that has since been redirected again is how most chains form.

If misconfigured rules are returning errors instead of redirects, our guide on 5xx server errors and SEO covers diagnosis. To control which redirecting URLs crawlers reach in the first place, review the robots.txt complete reference.

FAQ

How many redirect hops are too many?

Aim for one hop from any source URL to its final destination. A single intermediate hop is tolerable in transition, but anything beyond that should be flattened. Google follows a limited number of hops per request, so do not rely on long chains resolving reliably.

Do redirect chains lose link equity?

Google states it passes ranking signals through redirects, so a clean chain should forward most of its value. The risk is practical: a broken or misconfigured hop in the middle can cut the path, and a single hop simply has fewer points of failure. Flattening is the conservative choice.

What does ERR_TOO_MANY_REDIRECTS mean?

It is the browser telling you the URL is caught in a redirect loop. The server keeps sending the request to a location that sends it right back, so the browser gives up after a set number of attempts. Check your server rule order and any redirect plugin for two rules that undo each other.

Should I use 301 or 302 when flattening a chain?

For a permanent move, use a 301 so search engines consolidate signals on the final URL. Reserve 302 for genuinely temporary redirects. Mixing the two inside one chain adds ambiguity, which is another reason to collapse the chain to a single, clearly permanent hop.

Untangle your redirects before they cost you traffic

We map every chain and loop on your site, flatten them to single hops, and verify the fix end to end.

Request an advanced SEO audit

Claude Vincent is a technical SEO consultant focused on crawlability, rendering, and AI-search visibility. He writes the field guides and case studies at SEO ProCheck, with a bias toward the durable, unglamorous work that decides whether search engines and AI answer engines can actually read and cite a site.

    About SEO ProCheck

    Technical SEO consulting and GEO strategy with 20 years of enterprise experience. Case studies, resources, and tools for search and AI visibility.

    Work With Me

    Technical SEO audits, GEO strategy, site migrations, and international SEO. Hourly consulting for teams who need hands-on support, not just reports.

    Subscribe to our newsletter!

    More from our blog