# 301 vs 302 redirects: which to use and what chains cost you

> Use 301 for permanent moves and 302 for genuinely temporary ones. A 302 on a permanent move keeps the rankings on the old URL. Browsers cache 301s indefinitely, so never use one to test. Flatten every chain - point the first URL directly at the final destination.

Source: https://rankcert.com/blog/301-vs-302-redirects
Published: 2026-08-29 · Updated: 2026-08-29

---


Four status codes cover almost every redirect you will write. Picking the wrong one either loses you rankings or, worse, caches a mistake in every visitor's browser semi-permanently.

## The four codes

| Code | Meaning | Method preserved | Cacheable |
|---|---|---|---|
| 301 | Moved permanently | No - POST becomes GET | Yes, aggressively |
| 302 | Found (temporary) | No - POST becomes GET | No by default |
| 307 | Temporary redirect | Yes | No |
| 308 | Permanent redirect | Yes | Yes |

**301** is the default for anything permanent: a URL that changed, http to https, www consolidation. Google passes essentially full link value through it and eventually replaces the old URL in the index.

**302** tells search engines to keep indexing the original URL. Correct for genuinely temporary situations - a maintenance page, a seasonal promotion - and wrong for a permanent move. Using 302 for a permanent move means the old URL keeps the rankings, and the new one never accumulates any.

**307** and **308** are the strict versions that preserve the HTTP method. Use them for API endpoints where turning a POST into a GET breaks the request. For ordinary page moves, 301 is what everything expects.

Free tool: [Redirect Checker](https://rankcert.com/tools/redirect-checker) - Follow every hop a URL takes, see the status code at each step, and find the chains, loops and temporary redirects that leak link equity.

## The 301 caching trap

Browsers cache 301s aggressively and often indefinitely. If you 301 `/pricing` to `/plans` and later change your mind, every visitor who hit it in the meantime keeps going to `/plans` regardless of what your server now says. There is no way to purge it remotely.

Two consequences:

- **Never use 301 to test a redirect.** Use 302 while you are unsure, and switch to 301 once you are certain.
- **Send a short `Cache-Control` with your 301s** if you want any chance of revising them: `Cache-Control: max-age=3600`.

## Why chains matter

A chain is any redirect that lands on another redirect.

```
http://example.com        → 301 → https://example.com
https://example.com       → 301 → https://www.example.com
https://www.example.com   → 301 → https://www.example.com/en
```

Three hops to serve one page. What it costs:

- **Crawl budget.** Every hop is a separate request. Across thousands of URLs this is real.
- **Latency.** Three round trips before the first byte of content, which is felt most on mobile.
- **Reliability.** Google follows about five hops and gives up. Chains grow over time as people add redirects without checking existing ones.

**The fix is always to flatten**: point the first URL directly at the final destination. Keep the intermediate redirects - other sites may link to them - but nothing should route through them.

## Redirects and internal links

Even with a perfect redirect, an internal link pointing at the old URL is a bug. Every click pays the extra hop, and every crawl wastes a request.

After any URL change, update your internal links. The redirect is for external links and bookmarks, not for your own navigation.

## When not to redirect

**Deleted content with no equivalent.** Redirecting a removed page to the homepage is a "soft 404" - Google recognises the target is unrelated and treats it as an error anyway. Return a real 404 or 410. A 410 (Gone) tells Google to drop the URL faster.

**Bulk-redirecting an old site to a new one.** Redirecting every old URL to the new homepage transfers almost nothing. Map old URLs to their closest equivalent individually, or accept the loss.

**Redirecting instead of canonicalising.** If both URLs should stay reachable - a print version, a tagged campaign URL - use a canonical, not a redirect.

<Callout>
Check the redirect chain from the exact URL people actually type: the bare apex, with http and no www. That is the path with the most hops, and the one nobody tests.
</Callout>

<Cta />
