Redirects: 301, 302 and Redirect Chains Explained
A redirect tells the browser and the search engine: “this URL has moved, use that one instead.” It sounds trivial, yet it is where rankings quietly leak on almost every relaunch. This guide covers every status code that matters, when each one is correct, how much link equity is lost in transit, and the five mistakes that cost the most traffic.
1. What a redirect actually is
A server-side redirect is an HTTP response with a status code from the 3xx family and a
Location header pointing at the destination. The browser follows it automatically and loads
the target. Google follows up to ten hops in a chain before it gives up.
What matters is where the redirect happens: server-side (the server answers immediately with
3xx), in the HTML (<meta http-equiv="refresh">) or in JavaScript
(window.location). Only the first is fully search-safe, because it is seen before any content
loads at all.
2. The status codes compared
| Code | Meaning | Method kept? | SEO behaviour |
|---|---|---|---|
| 301 | Moved permanently | May change to GET | Signals pass to the target; target replaces the source in the index |
| 308 | Permanent, method preserved | Yes | Like 301, but POST stays POST – matters for APIs and forms |
| 302 | Found, temporary | May change to GET | Source stays in the index; wrong as a permanent move |
| 307 | Temporary, method preserved | Yes | Like 302 with the method kept; also forced by HSTS |
| meta refresh | Client redirect in the HTML | – | Processed, but weaker and slower; avoid |
| JS redirect | location via script |
– | Only seen after rendering; unreliable |
For 99% of SEO cases the answer is 301: a page has moved for good, and the old address should be replaced by the new one. 302 and 307 are strictly for genuinely short-lived states – a maintenance page or a geo-based interstitial.
The most expensive mix-up: a 302 instead of a 301 on a permanent move. Google keeps the old URL in the index because it treats the move as temporary. Rankings stay stuck on a URL whose content no longer exists. After any move, check the code that is actually sent – not what the CMS claims to do.
3. 301 or canonical? The crucial difference
Both consolidate signals onto one target URL, but they do fundamentally different things:
- A 301 removes the old URL. Users and bots are forced onto the target; the source is no longer reachable.
- A canonical is only a hint. Both URLs stay reachable and serveable; Google may prefer the canonical, but need not.
Rule of thumb: if the old page should disappear, use a 301. If both pages should exist for a good reason (print view, parameter variant, the same product in two categories), use a canonical. Applying both to the same URL is contradictory and a common trigger of duplicate-content confusion.
4. How much link equity a redirect costs
The old rule said a 301 loses roughly 15% of link equity, mirroring the PageRank damping factor. Google later said that a 301 to a topically relevant target loses essentially no PageRank. Both can be reconciled:
| Situation | Effective signal transfer |
|---|---|
| 301 to a closely related target | Near complete |
| 301 to a broadly irrelevant target | Often treated as a soft 404 – signals lapse |
| 301 chain across several hops | Each hop is a loss risk and delays crawling |
| Redirecting all old URLs to the homepage | Mass signal loss; treated as a soft 404 |
The practical takeaway is clear: redirect each old URL to its specific counterpart, not wholesale to the homepage. Where no counterpart exists, a clean 404 or 410 is the more honest answer and better for index hygiene.
5. Chains and loops
A redirect chain is a redirect to a redirect: A → B → C. Every extra hop costs load time, burns crawl budget and raises the chance that signals leak on the way. It gets critical past five hops, and Google gives up at ten.
A redirect loop is the special case where the chain points back at itself: A → B →
A. The browser reports ERR_TOO_MANY_REDIRECTS and the page is reachable for no one. Typical
causes are conflicting rules for HTTP/HTTPS, slash/no-slash or www/non-www.
Rule: always collapse chains, never extend them. If A points to B and B points to C, change A’s rule to go straight to C. After a relaunch the longest chain usually comes from old, never-cleaned redirects of earlier moves stacking onto the new ones.
6. The four standard normalisations
Four redirects every site should enforce server-side and consistently, so each resource is reachable under exactly one URL:
- HTTP → HTTPS. Everything unencrypted onto the secure variant.
- www → non-www (or the reverse) – pick one variant, redirect the other.
- Trailing slash. Consistently with or without the trailing slash, never both.
- Letter case.
/Pageand/pageshould not be two addresses.
Without this normalisation you can end up with 24 reachable variants of the same page – a textbook case of URL problems and bloated crawling.
7. Decision table: which code when
| Situation | Correct answer |
|---|---|
| Page moved permanently, counterpart exists | 301 |
| Domain move or relaunch | 301 per URL to its counterpart |
| Form/POST endpoint moved permanently | 308 |
| Short-lived maintenance or campaign page | 302 or 307 |
| Page removed, will return | 404 (do not redirect) |
| Page removed for good | 410 |
| Out-of-stock product, category exists | 301 to the category – only if closely related |
8. The five most expensive mistakes
- Redirecting everything to the homepage. The relaunch classic. Google reads it as a soft 404 and the old pages’ signals lapse.
- 302 instead of 301 on a permanent move. The old URL stays indexed and the new one never climbs.
- Pointing internal links at redirects. Every internal link should go straight to the final target – see internal linking.
- Stacking chains. Not rewriting old redirects to the new final target after the next move.
- Redirecting hreflang or canonical targets. An hreflang
or canonical reference should point at a
200URL, never at a redirect.
9. Testing redirects
Never trust what the browser finally shows you – it swallows the intermediate steps. Check the actual response chain:
- Command line:
curl -sIL https://example.com/oldshows every hop with its status code andLocationheader. - Search Console: URL Inspection reports which URL Google chose as canonical and whether a redirect is in the way.
- Your own crawl: lists internal links pointing at
3xxtargets and surfaces chains site-wide.
Pro tip: Rank-O-Saur shows the status code for every link on the page – internal
links to 301/302 and chains stand out as you browse, without pushing each URL
through a separate tool.
10. Checklist
- Permanent moves send
301(or308for POST). - Each old URL points to its specific counterpart, not the homepage.
- No chain longer than one hop; existing chains collapsed.
- No loops (
ERR_TOO_MANY_REDIRECTS). - HTTP→HTTPS, www, trailing slash and letter case normalised server-side.
- Internal links point straight at the final target.
- Canonical and hreflang targets return
200, not a redirect. - No
302for permanent moves. - Pages with no replacement honestly return
404/410instead of a forced redirect.
11. Frequently Asked Questions
What is the difference between a 301 and a 302?
A 301 signals a permanent move: the old URL is replaced by the new one and signals pass across. A 302 signals a temporary state: the old URL stays in the index. For a real move a 301 is correct; a 302 would be a mistake.
Do I lose rankings with a 301?
A redirect to a closely related target loses essentially no PageRank. Ranking drops usually come not from the 301 itself but from irrelevant targets, bulk redirects to the homepage or long chains.
How long must I keep a redirect in place?
At least a year, ideally forever. Google needs time to fully adopt the new URL. Remove the 301 too early and every old reference and remaining bot hits a dead end.
Should I redirect out-of-stock products?
Only if a closely related target exists – the successor product or the matching category. If there is none, a 404 or 410 is correct. Redirecting all products wholesale to the homepage is read by Google as a soft 404.
Is a meta refresh redirect bad for SEO?
It is the weakest option. Google does process it, but more slowly and less reliably than a server-side 301. For permanent moves always use the HTTP 301, never a meta refresh.
What is a 308 and when do I need it?
A 308 is permanent like a 301 but preserves the HTTP method. On a GET request it behaves exactly like a 301. It matters when a POST endpoint – a form or an API – moves permanently and the method must be preserved.
How do I find redirect chains on my site?
A full crawl lists every internal URL with its response chain. Additionally check suspects with
curl -sIL. The goal is that every redirect reaches a 200 URL in a single hop.