← Back to blog
Technical SEO

301 vs. 302 Redirects: Which One Actually Protects Your Rankings

Permanent versus temporary is a one-word difference that decides whether Google transfers a URL's ranking signals to its new destination, or keeps treating the old URL as the real page.

By Rajhussain Kanani5 min read

The one-word difference that changes everything

A 301 says Moved Permanently. A 302 says Found (historically "Moved Temporarily"). That single word — permanent versus temporary — is the entire difference in meaning, and it's also exactly what tells a search engine whether to transfer the old URL's ranking signals to the new one or to keep treating the old URL as the real, authoritative page. Get the choice backwards and the redirect still works perfectly for a human visitor — they land on the right page either way — while quietly doing the wrong thing for search engines watching in the background.

What each one actually tells a crawler to do

HTTP/1.1 301 Moved Permanently
Location: https://example.com/new-page

A 301 tells Google: this move is permanent, stop indexing the old URL, and transfer its accumulated ranking signals — backlinks, historical rankings, everything — to the new destination. This is what you want for a genuine, permanent change: a page renamed, a site migrated to a new domain, a URL structure redesigned for good.

HTTP/1.1 302 Found
Location: https://example.com/checkout-maintenance

A 302 tells Google the opposite: this is temporary, keep the original URL indexed as the real page, and don't transfer ranking signals to the destination — because the expectation is that the redirect will be removed and the original URL will serve directly again soon. This is correct for genuinely short-lived situations: a page down for maintenance, an A/B test sending some traffic to a variant, a country-based redirect that shouldn't override the canonical page for everyone.

Paste a URL into CheckSEO's Redirect Chain Checker to trace its full redirect path, hop by hop, and see exactly which status code each step uses — no signup.

Open the Redirect Chain Checker

Where this actually goes wrong

1

Using 302 for a permanent move

The single most common and most damaging mistake — a site migration or URL restructure implemented with 302s, either by developer habit or because it's the default in some frameworks and CMS redirect plugins. Google keeps the old URL as canonical, and ranking signals never transfer to the new one. Fix: audit every redirect from a recent migration and confirm each genuinely-permanent move uses a 301.

2

Leaving a 302 in place long after it should have resolved

A redirect set up as genuinely temporary — a maintenance page, an A/B test — that never gets removed eventually starts behaving like a permanent one in practice, but still tells Google "temporary," confusing which URL should actually be indexed. Fix: set a reminder to remove or convert any 302 that outlives its original temporary reason.

3

Redirect chains mixing both types

A URL that 301s to a second URL, which then 302s to a third, sends a genuinely mixed signal — Google has to interpret a chain where part of the path is marked permanent and part temporary. Fix: eliminate chains entirely where possible; redirect directly to the final destination with one, correctly-typed hop.

4

Framework or CMS defaults nobody checked

Many frameworks and CMS redirect plugins default to 302 because it's the "safer" choice from a pure HTTP-semantics standpoint (undoing a mistaken redirect is easier when nothing was marked permanent) — but that default quietly undermines every genuinely permanent redirect set up through it. Fix: check your specific tool's default and override it explicitly for permanent moves.

5

Confusing 302 with 307

A related but distinct code — 307 (Temporary Redirect) — behaves like 302 but explicitly forbids changing the request method (a POST stays a POST), which matters for form submissions and API calls in ways plain 302 doesn't guarantee. Fix: use 307 specifically when a redirected request must preserve its original method.

The 308, less commonly needed but worth knowing

There's a fourth code worth a mention: 308 (Permanent Redirect) is to 301 what 307 is to 302 — the same permanent meaning, but with the same strict method-preservation guarantee 307 adds. For a typical page-to-page redirect after a URL change, 301 is fine and far more widely supported by older tooling. 308 matters mainly for API endpoints and form-handling redirects where preserving the exact request method through the redirect is a real requirement, not just a nice-to-have.

How to actually check which one a redirect is using

The status code isn't visible in a normal browser — by the time a page finishes loading, you're just looking at the final destination with no indication of what happened along the way. Checking requires either your browser's network tab (look at the specific redirect request's status, not the final page's), a command-line tool like curl -I, or a dedicated redirect checker that shows the full chain and each hop's status code without you needing to dig through developer tools manually.

A migration example, done right

Say a site is moving /old-blog/post-name to /blog/post-name as part of a permanent restructure. Every one of those URLs should 301 directly to its new equivalent — not through an interim "maintenance" redirect, not chained through a third URL, and not left as a 302 "just to be safe" during the first few weeks. The safety instinct behind reaching for 302 during a migration is understandable — a 302 feels reversible if something goes wrong — but that caution has a real cost: every day the move sits behind a 302, Google is being told not to transfer ranking signals yet, which for a site genuinely finished moving is actively working against the migration's own goal. If a permanent move might need to be reversed, the safer play is being confident it's correct before publishing the redirect, then using 301 immediately — not hedging with the wrong status code indefinitely.

Trace your own redirects

CheckSEO's Redirect Chain Checker traces a URL's complete redirect path and shows the exact status code at every hop, so you can confirm a permanent move is actually using a 301 rather than assuming it.

Frequently asked questions

What is the difference between a 301 and 302 redirect?

A 301 means the move is permanent and tells search engines to transfer the old URL's ranking signals to the new one. A 302 means the move is temporary — the original URL stays indexed as the real page, and signals aren't transferred.

Which redirect should I use for a site migration?

A 301, always, for a genuine permanent move. Using a 302 during a migration — even temporarily, out of caution — tells Google not to transfer ranking signals yet, which works against the migration's own goal.

Does a 302 redirect hurt SEO?

Not inherently — it's the correct choice for genuinely temporary situations like maintenance pages or A/B tests. It becomes a problem when used for a permanent move, or left in place long after it should have been removed or converted to a 301.

What's the difference between 302 and 307 redirects?

Both are temporary, but 307 explicitly forbids changing the request method during the redirect (a POST stays a POST) — 302 doesn't guarantee this, which matters for form submissions and API calls.

How do I check which redirect type a URL is using?

The status code isn't visible in a normal browser after the page loads. Check your browser's network tab, use a command-line tool like curl -I, or run a dedicated redirect checker that shows the full chain and each hop's status code.

Check your own site with the Redirect Chain Checker.

Open Redirect Chain Checker

More from the blog