Redirect Chains: The Hidden Tax on SEO and Page Speed
When address A redirects to B and B redirects to C, the browser (and Googlebot) issues three separate requests. A three- or four-hop chain is common after years of migrations, and each hop costs a round trip of latency plus a dilution of ranking signals. Mobile networks feel this the most: three hops can add half a second before the real HTML even starts downloading.
301, 302, 307: picking the right code
- 301 (Moved Permanently): the change is forever. Search engines consolidate the ranking signals of the old URL into the new one. Use it for domain migrations, HTTP to HTTPS, and retired pages with replacements.
- 302 / 307 (temporary): the old URL stays indexed; signals are not consolidated. Use it for maintenance pages, seasonal takeovers and A/B tests. A long-lived 302 is almost always a mistake.
- 308: like 301 but the browser must preserve the request method and body — useful for APIs.
Two rules that prevent most damage: never redirect back down from HTTPS to HTTP (you create a bounce or a loop), and never point a URL at itself. A self-redirect produces the browser error ERR_TOO_MANY_REDIRECTS — usually the result of two conflicting rules, for example a WordPress setting forcing HTTPS while an nginx rule forces HTTP.
Flattening a chain
The fix is always the same shape: point every hop directly at the final destination. Instead of A → B → C, map A → C and B → C. With curl you can see the whole chain yourself:
curl -sI http://old.example.com HTTP/1.1 301 Moved Permanently Location: https://old.example.com/ HTTP/1.1 301 Moved Permanently Location: https://www.example.com/ HTTP/1.1 200 OK
That output shows two avoidable hops. After each migration, rewrite the old rules so the first response already lands on the canonical URL, and keep internal links pointing at the final address — links that start with a redirect waste crawl budget on every visit.
What else to watch
- Preserve the query string. A redirect from
/product?id=7to a new URL that drops the parameters breaks deep links and ad campaigns. Test one parameterised URL, not just the homepage. - Meta refresh and JavaScript redirects are not real redirects. They happen after the page loads, transfer almost no ranking signal, and are invisible to crawlers as redirects. If you find one doing a migration’s work, replace it with a server-level 301.
- Redirect depth adds up for crawlers too. Googlebot follows a limited number of hops per session; long chains mean some pages simply never get re-crawled and quietly drop out of the index.
- Case and trailing-slash variants multiply chains. Normalise once at the entry point instead of adding a rule per variant.
Apart from SEO, chains matter for security review: attackers have abused open redirects on trusted domains to launder phishing links. Auditing your own chains shows you exactly which URLs accept a destination parameter and where they send visitors. The WhoDNS redirect tool walks the full chain for any URL, showing the status code, the target and the headers set at every hop — precisely what you need to clean up after a migration or spot an open redirect.
🔗 Related tool: Trace the full redirect chain of any URL