301 against the alternatives
A 301 says the move is permanent and the new URL should replace the old one in the index. A 302 says it is temporary, so the engine keeps the original indexed. Using a 302 for a permanent move is one of the quieter ways to lose a migration.
A meta refresh and a JavaScript redirect both work for humans and are handled inconsistently by crawlers. Neither belongs in a migration plan when a server-level 301 is available.
| 301 | 302 | Meta refresh | Canonical tag | |
|---|---|---|---|---|
| Meaning | Permanent move | Temporary move | Client-side move | Preferred version |
| Old URL stays live | No | No | No | Yes |
| Passes ranking signals | Yes | Not reliably | Inconsistently | Yes, as a hint |
| Use for a migration | Always | Never | Never | Only for duplicates |
Where migrations go wrong
Almost always in the mapping, not the mechanism. A redirect chain three hops long, a rule that sends every unmatched URL to the homepage, or a missing row for the twenty pages that happened to hold most of the links.
- Map every old URL to its closest equivalent, never in bulk to the homepage
- Keep chains to one hop, since each extra hop leaks signal and slows the crawl
- Prioritise the URLs with real inbound links and real traffic
- Redirect to the final canonical URL, matching protocol and trailing slash exactly
- Keep the rules in place indefinitely, since old links never fully disappear
What good looks like
On a consolidation of three Energo-Pro sites into one, we mapped 1,262 pages across two languages with zero loss of search visibility. The work was entirely in the mapping and the verification, done page by page before launch and checked again after.
Why it matters for B2B marketing teams
A redirect map is the least glamorous deliverable in a migration and the one that decides whether it succeeds. When we consolidate sites, mapping and verification take more hours than the design does, which is exactly why the visibility survives.

