301 vs. 302 Redirects: Which One Protects Your SEO?
· 3 min read
A redirect answers a simple question from the browser — "this URL moved; where to?" — but the status code you answer with tells search engines something more consequential: whether the move is forever. Get it right and rankings follow the content to its new address. Get it wrong and you can keep a dead URL in the index for months.
The four codes that matter
| Code | Meaning | Method preserved? | Search engines... |
|---|---|---|---|
| 301 | Moved permanently | No (may become GET) | transfer signals to the new URL |
| 302 | Found (temporary) | No (may become GET) | keep indexing the old URL |
| 308 | Moved permanently | Yes | treat like 301 |
| 307 | Temporary | Yes | treat like 302 |
The 30x pairs differ on one technical axis: 307/308 forbid the browser from changing the HTTP method on the redirected request (a POST stays a POST), while the older 301/302 allow it. For ordinary page navigation this distinction is invisible — links are GETs — so 301 remains the standard choice for moved content, with 308 as its API-safe sibling.
What "permanent" buys you
A 301 tells search engines three things: stop indexing the old URL, index the new one, and transfer accumulated signals — the links, the history, the rankings — to the new address. This transfer is why redirect discipline matters. Google has stated for years that permanent redirects pass full PageRank; the old belief that "redirects leak 15%" describes a policy retired around 2016. What genuinely loses value is redirect chains: A→B→C→D wastes crawl budget, adds latency for every visitor, and raises the odds that some hop breaks later. After any migration, update internal links to point directly at the final URL — the chain you tolerate today is the outage you debug next year.
What a 302 actually says
A temporary redirect says "the content will return to this URL — keep it indexed." Legitimate uses are genuinely temporary states:
- A/B test variants and holiday landing pages
- Geo or language routing (send
/pricingto/de/pricingwhile/pricingremains the canonical entry) - Content briefly parked during maintenance
The classic mistake is shipping a permanent migration behind 302s because the framework's redirect helper defaults to temporary. Google often eventually treats a long-lived 302 as permanent, but "eventually" can be a long time to have your old URLs competing against your new ones.
Redirects and slug changes
Every slug change is a URL death and a URL birth, which makes redirects the tax on renaming a page. Three rules keep the tax low:
- Redirect old → new with a 301, one hop, no chains.
- Preserve the query string. A visitor arriving at the old URL with
?utm_campaign=...attached should land on the new URL with those parameters intact, or your campaign attribution silently dies at the redirect boundary. Verify with a URL parser that parameters survive the hop. - Keep redirects alive for years, not weeks. Links in old emails, PDFs, and other people's sites never get updated. A redirect map is permanent infrastructure.
Debugging what a URL really returns
Browsers hide redirects so well that the only honest test is looking at the raw response. curl -I https://old-url shows the status and Location header directly; follow the hops one at a time and you'll find the 302 that should be a 301, or the four-hop chain that should be one. Your rankings live and die on details exactly this boring.