Four status codes, and when each is honest
Google reads permanence as a signal about which URL to keep. A 301 says: this moved, consolidate onto the new URL. A 302 says: this is a detour, keep the original indexed. Get it backwards on a migration and Google keeps trying to rank URLs that no longer serve content.
| Code | Meaning | Use it for |
|---|---|---|
| 301 Moved Permanently | Permanent. Signals consolidate onto the destination. | Renames, merges, migrations, http→https, www consolidation. |
| 302 Found | Temporary. The original stays indexed. | A genuine short-term diversion — a sale page, maintenance, an A/B test. |
| 307 Temporary Redirect | Temporary, preserves the HTTP method. | The modern 302 for anything involving a POST. |
| 308 Permanent Redirect | Permanent, preserves the HTTP method. | Same as 301 for search. Fine to use; 301 is the better-understood default. |
A migration is a spreadsheet before it's a deploy
Every replatform that loses traffic loses it in the same place: nobody built the map. The redirect map is the deliverable; everything else is execution.
Export every URL that ever mattered — from your crawler, Search Console's Pages report, analytics, and your backlink tool. Those four sources disagree, and the URLs in only one of them are exactly the ones a sitemap-based export misses.
- Old URL. Every one returning 200 today, plus every one with a backlink or organic traffic in the last 12 months.
- Organic sessions, trailing 12 months. Your priority column. Sort by it.
- Referring domains. A URL with 40 links and no traffic still matters — the links are the asset.
- New URL. The closest equivalent. Not the homepage, unless it genuinely is.
- Redirect type. 301 for almost everything here.
- Tested. Filled in after launch, by requesting the old URL and checking the response.
The closest-equivalent rule
A discontinued product goes to its replacement, or the category selling the nearest thing. An old post goes to the article that superseded it.
When there's genuinely no equivalent, let the URL 404. That's a legitimate answer and better than a lie — the argument in full is in 404 error.
Chains, loops, and the homepage trap
Chains accumulate without anyone deciding to create them. You move to https, then to a new URL structure, then rename a category — three years later one old URL takes four hops. Google follows up to around ten, so it usually still works, but each hop is a separate fetch, a separate round trip on a phone, and a separate chance for someone to delete the middle rule. Point old URLs straight at their final destination.
Loops are simpler and worse: A points to B, B back to A, nothing resolves. Usually two rules written by two people — a CDN rule and an application rule. Test the whole set after any redirect change.
The homepage trap is the expensive one. Faced with 800 old URLs and a deadline, someone writes a catch-all sending everything to /. It feels tidy and it deletes the value. Google treats a redirect to an irrelevant page as a soft 404 — the destination doesn't answer the request, so nothing transfers. You've done the work of a migration and got the outcome of a mass deletion. That's the pattern behind most of the replatform that killed your traffic.
How long to keep them
Google's guidance on site moves is to keep redirects live for at least a year. That's the floor — long enough for Google to re-map the index and for most external links to be re-crawled.
The better answer is never to remove them. A redirect rule costs nothing to keep, and links from six-year-old articles still send people. Teams delete them when a bloated rules file slows the server — flatten the chains and move the mapping to a lookup table instead.
Do it at the server or CDN. Meta-refresh and JavaScript redirects work eventually, but they're slower, weaker and depend on rendering — so every crawler that doesn't execute JavaScript sees a page that doesn't redirect. If a migration is coming, migration SEO work is far cheaper before the deploy than after.