SITEDOCTOR
Technical SEO · Redirects

Redirect chains: how to find and fix them before they hurt your SEO

SITEDOCTOR Blog · 2026-11-02 · ~7 min read

Every mature site accumulates redirect chains the way a ship accumulates barnacles. You migrate to HTTPS, then change a slug, then restructure a folder — and three years later /old-page hops through four URLs before a visitor (or Googlebot) sees any content. Each hop costs latency, leaks link equity, and burns crawl budget. The fix is mechanical once you can see the chains. Here's how.

1What a redirect chain actually costs you

A single 301 from an old URL to its replacement is fine. The damage starts at hop two:

CostWhy it matters
LatencyEach hop is a full round trip — on mobile, 100–300ms each. Three hops can add a second to page load.
Link equity dilutionEvery redirect passes slightly less authority than the one before. Long chains measurably weaken the ranking signal from your backlinks.
Crawl budget wasteGooglebot follows a limited number of hops (roughly five) before giving up — and every hop spent on chains is a hop not spent indexing real pages.
FragilityIf any middle URL breaks (an expired domain, a deleted rule), the entire chain 404s and every backlink pointing at the start of it dies with it.

2See the chain with one command

You don't need a crawler to diagnose a single URL. curl shows every hop and its status code:

curl -sIL -o /dev/null -w '%{url_effective} -> %{http_code}\n' \
  --max-redirs 10 https://example.com/old-page/

# or print each hop explicitly:
curl -sIL https://example.com/old-page/ | grep -iE '^(HTTP|location)'

The output tells you everything: how many hops, which status codes (301 vs 302 vs 307), and where the chain lands. If it ends in a 404 or loops back on itself, you've found a bug, not just an inefficiency.

Watch for: ERR_TOO_MANY_REDIRECTS — the classic loop, usually caused by an HTTP→HTTPS rule fighting a www↔non-www rule, or by WordPress's WP_HOME disagreeing with an .htaccess rewrite.

3Know your status codes — 301 vs 302 vs 307

CodeMeaningSEO behavior
301Moved permanentlyPasses link equity to the target; Google consolidates signals. The default choice for migrations.
302 / 307TemporaryGoogle keeps the original URL indexed. Fine for A/B tests or short-term moves — harmful if left in place for months.
Meta refresh / JS redirectClient-sideSlow, unreliable for equity passing, and a common hiding place for chains you didn't know you had.
Red flag: a chain that mixes 301s and 302s, or any "temporary" redirect older than a few months. If it's permanent in practice, make it a 301 in config.

4Map the chains across the whole site

Single-URL checks find known problems; a crawl finds the ones you forgot. Feed your full URL list — sitemap URLs plus every backlink target from Search Console or your backlink tool — through a crawler (Screaming Frog's "Redirect Chains" report, or a script looping curl) and export every URL where the hop count is 2 or more. Prioritize by backlink equity: a 3-hop chain on a page with 200 referring domains matters far more than one on an orphan page.

5Fix them: collapse every chain to one hop

The rule is simple — every redirect should point directly at the final destination. If A→B→C→D, rewrite the rules so A→D, B→D, and C→D. Practical cleanup workflow:

Don't forget: fix the chain at the first hop, not just the last. Deleting a middle rule without updating the first one turns a slow chain into a hard 404.

The honest limits

Collapsing chains won't transform rankings overnight — it removes friction, it doesn't add authority. But it's one of the few technical SEO fixes that is unambiguous: every hop you remove is latency returned to users and crawl budget returned to Googlebot. Re-audit after every migration, slug change, or HTTPS tweak, because chains are created by exactly those events.

SITEDOCTOR crawls your site and flags redirect chains, loops, stray 302s and mixed-content hops automatically — alongside SSL, security headers, broken links and Core Web Vitals. Free instant scan, no signup.

Get a free scan →