Redirects · Explainer

301 vs 302 redirects

The difference between a permanent and a temporary redirect decides whether your rankings transfer to the new URL or get stuck on the old one. Using the wrong one is a quiet, common, and costly mistake. Here's how to choose.

Permanent vs temporary: what each tells Google

A redirect's status code isn't a technicality, it's an instruction about whether the move is forever or just for now, and search engines act on it.

A 301 says "this page has moved permanently." Search engines respond by transferring ranking signals to the new URL and replacing the old URL in their index. A 302 says "this is a temporary detour; the original will be back." Search engines respond by keeping the original URL indexed and holding off on transferring signals. Both send a user to the same place, but they tell search engines opposite things about which URL matters, and that difference decides where your rankings end up.

When to use each

Match the status code to whether the change is permanent.

Use a 301 for permanent moves

Renaming or restructuring URLs, consolidating duplicate pages, migrating to HTTPS or a new domain, merging old content into a new page: anything where the old URL is gone for good. The 301 transfers authority to the new URL and replaces the old one in the index. This is the redirect you'll use the vast majority of the time.

Use a 302 only for genuinely temporary changes

A temporary promotion or A/B test, a page briefly down for maintenance, or geo/device routing where the original URL must stay indexed. The key word is temporary: you want the original URL to remain the indexed one because it's coming back. If you're not sure the change is temporary, it probably isn't: use a 301.

 301302
MeaningMoved permanentlyFound (temporary)
Which URL search engines indexThe new destinationThe original URL, for now
Ranking signal transferYes, to the new URLNo, held on the original
Method-preserving equivalent308307
Right choice forURL renames, domain moves, HTTPS migration, merging pagesA/B tests, maintenance pages, short promotions, geo routing
Wrong choice looks likeUsing it for a page you plan to bring back unchangedLeaving it in place after a move turns out to be permanent

The cost of getting it wrong

The audit flags 302s used where a 301 belongs, because it's such a common and silent error.

The damaging case is a 302 used for a permanent move. Because the 302 tells Google to keep the old URL indexed, the new page struggles to take over the rankings, authority doesn't transfer cleanly, and the old, now-empty URL can linger in results. Many platforms and frameworks default to a 302 (or an ambiguous "found" redirect) unless you explicitly specify a 301, so this happens by accident constantly. After any migration, verify that your permanent redirects actually return a 301, not a 302, and that they go directly to the final URL without forming a chain.

Status codes in detail

Does a long-lived 302 become a 301?

Google has said a long-lived 302 may be treated like a 301 over time, on the reasoning that a redirect left in place for months was probably meant to be permanent. That is a fallback behaviour, not a guarantee.

The transfer is slower and less certain than an explicit 301, and you have no visibility into when or whether it happens. Don't rely on it: if the move is permanent, declare a 301 so authority transfers promptly and predictably rather than waiting on an inference.

Where 307 and 308 fit

308 is the permanent equivalent of 307 in HTTP terms, mirroring the 301 and 302 pair but preserving the request method rather than allowing it to change to GET.

For SEO purposes the key distinction is still permanent (301 or 308) against temporary (302 or 307), and search engines treat the permanent pair alike. Most sites should use 301 for permanent moves; the method-preserving variants matter mainly for non-GET requests, such as redirecting a POST endpoint, where changing the method would break the request.

How much ranking value a redirect costs

A single, direct 301 passes nearly all link equity, so the redirect itself is not where value goes missing.

Value is lost from what surrounds it: chains, loops, using a 302 by mistake, or redirecting to an irrelevant page, such as sending every dead URL to the homepage, which can be treated as a soft 404. The rule that covers all of these is to redirect directly, permanently, and to the most relevant live page.

How to check which status code a redirect actually returns

Never assume. The status code shown in a browser is often hidden because browsers follow redirects silently, so check the raw response instead.

curl (any platform, from a terminal)

Run curl -I https://yoursite.com/old-page and read the first line of the response. It reads HTTP/1.1 301 Moved Permanently or HTTP/1.1 302 Found directly from the server, with nothing inferred. Add -L to follow the chain and repeat the check on each hop if you suspect more than one redirect is involved.

Browser developer tools

Open the Network tab before navigating to the old URL, then load it with "Disable cache" checked. The request list shows each hop with its actual status code, which is the only reliable way to see it in a browser, since the address bar and page itself only ever show you the final destination.

Setting the code explicitly on your platform

nginx: use return 301 (or 302) rather than a bare rewrite, since a rewrite without the redirect flag can silently serve a 302. Apache: Redirect 301 or Redirect 302 in .htaccess, or RewriteRule ... [R=301,L] if you need pattern matching. Cloudflare: Bulk Redirects and Redirect Rules both have an explicit status code selector, default to checking it rather than trusting the default. WordPress and Shopify redirect managers usually let you pick the type per rule; when a tool does not expose the choice, verify with curl rather than assuming.

Once the status code is right, confirm your internal links point straight at the destination rather than the redirect, and that the redirect doesn't hop through another URL first: see redirect chains & loops.

301 vs 302 questions, answered

What is the difference between a 301 and a 302 redirect?

A 301 tells search engines a page has moved permanently, so they replace the old URL with the new one in the index and transfer its ranking signals. A 302 tells them the move is temporary, so they keep the original URL indexed and hold off on transferring signals. Both send a user to the same destination; they differ only in what they tell a search engine about which URL should keep ranking.

What happens if I use a 302 for a permanent redirect?

The old URL stays indexed and the new page struggles to take over its rankings, because a 302 tells search engines the original is coming back. Authority does not transfer cleanly, and the old, now-empty URL can linger in results for longer than it should. This is the single most common redirect mistake, largely because many platforms default to a 302 unless you explicitly set a 301.

Does a 302 redirect eventually become a 301?

Google has said a long-lived 302 may eventually be treated like a 301, on the reasoning that a redirect left in place for months was probably meant to be permanent. That is a fallback, not a guarantee, and the transfer through it is slower and less predictable than declaring a 301 outright. If the move is permanent, use a 301 and do not rely on this inference.

What is the difference between a 302 and a 307 redirect?

Both are temporary, but a 307 guarantees the request method does not change, while a 302 historically allowed clients to switch the method to GET. For SEO purposes they are treated as the same temporary signal; the 307/308 pair matters mainly when redirecting a non-GET request, such as a form submission, where changing the method would break it.

Which status code does WordPress or Shopify use by default?

Shopify's built-in URL Redirects issue 301s automatically. WordPress has no native redirect manager, so the status code depends entirely on the plugin or theme handling it: most dedicated redirect plugins default to 301, but some page builders and hosting layers insert a 302 for moved content without telling you. Always verify the actual status code with a header check rather than assuming.

Make sure your permanent moves are actually 301s

Free to start. Find 302s used where 301s belong, plus chains and broken redirects.

Start my free audit