SSL Checker DMARC Meta Tags Site Speed Broken Links AI Chat Bookings Try ModusOp

Published 27 April 2026

Every web developer has used both 301 and 302 redirects without thinking too hard about which one. The browser-facing behaviour is identical — the visitor lands on the new URL and never sees a difference. But to search engines, these two status codes mean very different things, and using the wrong one can quietly cost you years of accumulated link equity.

This guide covers what each redirect actually means, when each is appropriate, the SEO consequences of getting it wrong, and how to verify which type your server is actually serving.

What Each Redirect Means

301 Moved Permanently. The original URL is gone forever. Don't come back. Search engines should update their index to show the new URL, and any link equity from inbound links should transfer to the new destination. This is the redirect type that preserves SEO.

302 Found (originally "Moved Temporarily"). The original URL is temporarily unavailable, but you should keep coming back to it. Search engines should keep the original URL in their index and continue checking it regularly. Link equity does not transfer.

The HTTP/1.1 specification defines a third option, 307 Temporary Redirect, which is functionally similar to 302 but with stricter rules about preserving the request method (GET stays GET, POST stays POST). 302 is treated as 307-equivalent by search engines for SEO purposes.

And finally 308 Permanent Redirect, which is the strict-method-preserving version of 301. Same SEO meaning as 301; rare in the wild but increasingly seen in API contexts.

When to Use a 301

Use a 301 when the move is permanent. The destination URL is the new home of the content, and you don't expect the original URL to ever come back. Examples:

Whenever there's a permanent change in URL, the answer is 301. Don't overthink it.

When to Use a 302

302 is for genuinely temporary situations where the original URL will return. The list is much shorter than most people assume:

If you find yourself reaching for a 302 outside one of these patterns, you almost certainly want a 301 instead.

Why Picking the Wrong One Hurts

Wrong way 1: 302 when you meant 301

This is the more damaging mistake of the two. If you renamed a page from /old-product/ to /new-product/ and used a 302, here's what happens:

We've audited sites where every URL change for the last three years used 302 redirects. The team had no idea why their organic traffic was declining despite "doing nothing wrong" — but the answer was sitting in their server config. Switching all the permanent moves to 301 typically recovers most of the lost equity within a few months.

Wrong way 2: 301 when you meant 302

Less common but still painful. If you 301 a temporary maintenance page, search engines may de-index the original URL. When you take the maintenance page down, the original URL needs to be re-discovered and re-indexed from scratch. For high-value pages this can mean a temporary drop in organic traffic that takes weeks to recover.

The rule of thumb: if you're not 100% sure the change is permanent, don't 301. Use a 302 until you're certain, then upgrade to 301.

Implementing Redirects on the Server

nginx:

# Permanent
return 301 https://example.com/new-url/;

# Temporary
return 302 https://example.com/temporary-page/;

Apache (.htaccess):

# Permanent
Redirect 301 /old-page/ https://example.com/new-page/

# Temporary
Redirect 302 /maintenance/ https://example.com/temporary/

# Or with mod_rewrite
RewriteRule ^old-page/?$ /new-page/ [R=301,L]

WordPress: use a redirect plugin (Redirection is the standard) or add rules to .htaccess. WordPress core itself uses 301 for some moves (e.g. moving from /?p=123 to a permalink) automatically.

Cloudflare: Page Rules support both, but Cloudflare's "Forwarding URL" defaults to 302. Change it to 301 unless you genuinely mean temporary. The Bulk Redirects feature also defaults to 301 (correctly) but is worth verifying.

Verifying What Your Server Is Actually Sending

Configuration is one thing; what your server is actually returning is another. The fastest check is curl:

curl -sI https://example.com/old-url/ | head -1

The first line will be one of:

For a quick visual check across many URLs, run them through Broken Link Finder — the report shows the redirect type for every link, so you can spot 302s that should be 301s in seconds.

The "Redirect Mapping" Mindset

Whenever you change URLs, build a redirect map first — a spreadsheet with two columns, "old URL" and "new URL", covering every change. Then implement the entire map at once with 301s.

This avoids the most common migration disaster: redirects implemented piecemeal, with some 301s, some 302s, some missed entirely, and no record of what was supposed to happen. A single mapping document means you can audit, test, and roll back as a unit.

Always test the redirects on a staging site before launch. We've seen redirects that work in nginx config but get short-circuited by a CDN, redirects that loop forever (A → B → A → B), and redirects that drop query strings, breaking tracked campaign URLs. None of these survive a proper test pass.

Edge Cases Worth Knowing

Chained redirects

If /page-a/ 301s to /page-b/, and /page-b/ 301s to /page-c/, you have a redirect chain. Browsers and crawlers handle these but each hop costs latency and dilutes link equity slightly. Always shortcut chains: update /page-a/ to redirect directly to /page-c/.

Redirect loops

A → B → A is fatal. Browsers detect loops and stop with an error like ERR_TOO_MANY_REDIRECTS. Most commonly caused by HTTPS-forcing rules conflicting with another redirect, or by a CDN forcing the opposite direction from your origin.

Redirects with query strings

A naive redirect rule may strip the query string. /old-page/?utm_source=email redirected to /new-page/ loses the tracking parameter. In nginx, use $request_uri; in Apache, use [QSA] on the rewrite rule.

POST request preservation

301 and 302 may convert POST to GET (browsers historically did this; the spec is ambiguous). If you need the request method to be preserved across the redirect — typical in API contexts — use 308 (instead of 301) or 307 (instead of 302).

The One-Sentence Rule

If the URL is moving permanently, use 301. If it's coming back, use 302. If you're unsure, default to 302 until you're sure — it's easier to upgrade a 302 to a 301 later than to recover from an incorrect 301.

And once a redirect is in place, run the affected URL through Broken Link Finder to confirm the chain is short, the type is right, and nothing's broken.

Audit your redirects

Broken Link Finder reports every redirect on a page, including type and destination — spot the 302s that should be 301s in seconds.

Scan a Page →