How to Check Redirect Chains (301/302) & Fix Them
A redirect chain is what happens when a URL does not jump straight to its destination but through intermediate URLs first: http://example.com/page 301s to https://example.com/page, which 301s to https://www.example.com/page, which returns a 200. Each extra hop adds an HTTP round trip, and every hop is another rule that can break or mislabel the move. This guide covers why chains hurt SEO, how to read one hop by hop with a free redirect chain checker, and how to flatten any chain to one redirect.
What Is a Redirect Chain?
A redirect — specifically a 301, 302, 303, 307 or 308 response, not just any 3xx — says “the page you asked for now lives here” via a Location header. A chain is two or more stacked in a row:
GET http://example.com/old-page
301 → https://example.com/old-page
301 → https://www.example.com/old-page
301 → https://www.example.com/new-page
200 ← final page
The client must request each URL in turn. A redirect loop, by contrast, circles back on itself (A → B → A) and never resolves — browsers show ERR_TOO_MANY_REDIRECTS. Chains rarely appear on purpose: migrations stack — HTTPS on an old www-consolidation, then a replatform — with nobody cleaning up earlier rules.
Why Redirect Chains Hurt SEO
Latency compounds. Every hop costs at least one HTTP round trip — multiply hops by your visitors’ round-trip time. A hop crossing hosts adds DNS plus a fresh TCP/TLS handshake; a same-host hop can reuse the connection. Google’s site-move guide warns that “chaining redirects adds latency for users, and not all user agents and browsers support long redirect chains” — and page speed feeds the Core Web Vitals signals used in ranking.
Crawl budget is wasted on URLs that no longer exist. Every crawl spent following intermediate variants is a crawl not spent on real pages. Do not try to solve chains with robots.txt either: disallowing an intermediate URL hides the redirect itself from Googlebot, which then sees a block instead of a hop. Keep robots.txt limited to genuine crawl directives.
Chains are fragile. If any middle hop breaks, everything upstream dead-ends — including backlinks pointing at the original URL.
Mixed status codes send mixed signals. Google’s redirects documentation is explicit: for a 301, “the indexing pipeline uses the redirect as a signal that the redirect target should be canonical”; for a 302 it “doesn’t use the redirect as a signal”, and the source page stays in results. A 302 anywhere in a chain can delay or prevent consolidation. Google has also said long-standing 302s eventually get treated as permanent — just slower. The hop itself loses nothing: “301 and other permanent redirects don’t cause a loss in PageRank”, per Google’s site-move guide.
301 vs 302 vs 307 vs 308: Pick One and Mean It
- 301 (Moved Permanently) — moved forever. The default for migrations, URL rewrites, http-to-https, and www consolidation.
- 302 (Found) — temporary; the old URL stays canonical. For A/B tests, short promotions, geotargeting.
- 307 / 308 — stricter temporary and permanent codes: the same method and body must be replayed.
Problems start when combined: you 301’d /old-lp to /spring-campaign years ago; this year marketing pointed /spring-campaign at a new page with a 302 because “it’s just the campaign”. That 301 → 302 chain half-asserts permanence. Decide once: permanent — every hop a 301; temporary — one 302 from the original URL.
How to Check a Redirect Chain Step by Step
The free Redirect Chain Checker follows the chain as a crawler sees it: every hop is a fresh HTTP GET — no cache, no cookies, no JavaScript, no HSTS upgrade — sent as user agent GeoToolsBot/1.0.
Step 1: Collect the URLs worth testing
Sources, not guesses: current and archived sitemaps, server access logs, Search Console’s Links report for externally linked pages — the same sources Google’s site-move guide recommends — plus http:// and non-www variants of top pages and backlink exports.
Step 2: Run the check
Paste a URL into the redirect chain checker and press Check redirects. The tool requests the URL with redirects disabled, reads Location, resolves it, repeats — up to six hops, with loop detection at every step. You get every hop with its status badge, URL and target, plus the final landing page and content type. A healthy reference we tested, http://github.com: one 301, then a 200.
Step 3: Read the issue list
The checker also flags what hurts: chains longer than three hops — matching Google’s advice to keep chains “ideally no more than 3 and fewer than 5”; hops still on plain http:// after the first hop, meaning delayed HTTPS upgrade; mixed permanent and temporary codes; cross-domain hops — leaving your registrable domain (the part you register: example.com, not shop.example.com), which Google treats as a site move with its own checklist including the Change of Address tool; non-HTML finals like a PDF; and 4xx/5xx finals. Circling URLs return a loop error instead of a chain.
Step 4: The engineer’s route for spot checks
curl -sI http://github.com # first hop only
# HTTP/1.1 301 Moved Permanently
# Location: https://github.com/
curl -sIL http://www.apache.org # headers for EVERY hop
# HTTP/1.1 301 Moved Permanently
# Location: https://www.apache.org/
# HTTP/2 200
curl -s -o /dev/null -w 'status=%{http_code} redirects=%{num_redirects} final=%{url_effective}n' -L http://github.com
# status=200 redirects=1 final=https://github.com/
Two cautions from our runs: -I sends a HEAD, and some servers treat HEAD differently — github.com hung on ours while the GET sailed through. And a 403 final is not always broken: at the time of writing, stackoverflow.com gave a clean 301, then a 403 for the bot. Re-check “broken” finals in a browser first.
How to Flatten a Chain to a Single Hop
The goal: any URL that redirects points directly at the final destination. No middlemen.
- Map the chain first. Write down the exact hops and status codes before touching anything.
- Rewrite the first hop. In nginx, put
return 301 https://www.example.com/new-page;in theserverblock listening on port 80 (or the old host’s block). In Apache,Redirect 301 /old-page https://www.example.com/new-pageneeds mod_alias and lives in the vhost or.htaccess; it matches whole path segments, so/old-pagealso catches/old-page/sub— exact:RedirectMatch 301 ^/old-page$ https://…/new-page. In WordPress, the Redirection plugin manages the map in the database. - Retire or repoint middle hops. Before deleting a rule, verify nothing real points there: check your backlink export and grep the access log. External links still landing on the middle URL? Repoint it too.
- Fix internal links. Redirects are for URLs you cannot change — other people’s backlinks. Point your own links at the final URL; internal links are often the single largest source of chains.
- Re-check and update your sitemap. Confirm one hop with the right status in the chain checker. Then regenerate the sitemap so it lists only final URLs and submit it in Search Console’s Sitemaps report; the free XML sitemap generator handles generation.
Consolidating http and www? One hop, not two rules each doing half the job — http://example.com gets forced through https://example.com before https://www.…, and mis-ordered force-TLS/force-www rules are the classic loop cause:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://www.example.com$request_uri;
}
One more trap: some rules silently drop query strings. Apache’s mod_alias Redirect passes GET parameters through, but a RewriteRule whose target contains its own ? discards the original query string unless you add [QSA] ([QSD] discards on purpose). A stripped campaign URL like /?utm_source=newsletter breaks analytics — build links with a UTM builder and verify the parameters survive.
Common Mistakes to Avoid
- Stacking migrations. http→https, then www, then a replatform — each layering redirects on the last.
- Using 302 for permanent moves because it was the CMS default.
- Trusting the browser as the test. Browsers cache 301s aggressively, and HSTS upgrades
httptohttpsbefore the first request — your browser can show fewer hops than exist. - Fixing only the first hop. Middle hops still receive link equity from old backlinks.
- Blocking intermediate URLs in robots.txt to “save crawl budget” — Googlebot never sees the redirect.
- Redirecting to whatever was handy instead of an equivalent page — not fixed, just shorter.
Frequently Asked Questions
How many redirects in a chain is too many?
Google’s site-move guide: Googlebot follows up to 10 hops, but advises going straight to the destination, keeping chains “ideally no more than 3 and fewer than 5”. The checker aligns — flags over three hops, stops after six.
Do 301 redirects lose PageRank?
No — Google’s site-move documentation states that “301 and other permanent redirects don’t cause a loss in PageRank”, and Gary Illyes of Google said the same in a 2016 tweet. Chains still cost you latency, crawl budget, fragile rules, and temporary codes that delay consolidation.
What is the difference between a redirect chain and a redirect loop?
A chain eventually reaches a real page: A → B → C → 200. A loop circles back on itself — A → B → A — and never resolves; browsers show ERR_TOO_MANY_REDIRECTS. The fix differs: loops need the conflicting rules found and broken, not one hop repointed.
Why does my browser show a different chain than the checker?
Two mechanisms. Browsers cache redirects, 301s hardest — Chrome keeps honoring a cached redirect long after the rule changed. And HSTS: having seen the Strict-Transport-Security header (or via the preload list), a browser upgrades http to https before the first request, hiding that hop. The checker requests each URL fresh with no HSTS list.
How do I fix a redirect chain in WordPress?
Most come from layering plugin redirects, .htaccess/nginx rules, and HTTPS/www rewrites. Inventory every source — the Redirection plugin’s redirect list and its Logs screen, your server config, any SEO plugin’s redirects — then rewrite each entry so the original URL hits the final destination in one 301. Update internal links and re-verify with the checker.
How long does Google take to pick up fixed redirects?
Recrawling happens per URL at Googlebot’s pace — typically a few weeks for small-to-medium sites, longer for large ones. Speed it up by requesting indexing via Search Console’s URL Inspection tool and submitting the updated sitemap. Fluctuations during reprocessing are normal.
How long should I keep old 301 rules?
Google recommends keeping redirects at least a year — ideally longer — so signals transfer and external sites update links. Before removing any, confirm no remaining backlinks (check your link export) and no real traffic in your access logs.
Can I check redirect chains in bulk?
The free checker handles one URL per run. For a full-site audit, crawl with a desktop crawler such as Screaming Frog — which Google’s migration guide suggests — export every 3xx response, and funnel the worst offenders through the checker before rewriting rules.