Guide
How to QA redirects after a website migration
A migration keeps its search rankings, bookmarks and inbound links only if every old URL lands on the right new page in one permanent step. This guide is the checklist we use, with the fixes for the failures we see most.
1. Build the redirect map
The map is a two-column table: every URL that exists on the old site, and the single URL it should end up on.
- Collect old URLs from several sources: the old XML sitemap, a crawl of the old site, your analytics landing pages for the last 12 months, and the top linked pages in your search console. Sitemaps alone miss old campaign pages and PDFs that still get traffic.
- Map one to one where possible. Send each old page to its closest new equivalent. Sending everything to the home page is treated by search engines like a missing page (a "soft 404").
- Write full absolute URLs including the scheme and the final host you will serve, for example
https://www.example.com/about/, exactly as the new site answers, trailing slash included. - Keep it in CSV with a header row
source_url,expected_url. Get the free template.
2. What a good redirect looks like
- Permanent:
301 Moved Permanentlyor308 Permanent Redirect. 302, 303 and 307 say "temporary" and should not be used for a migration. - One hop: old URL → final URL. Every extra hop adds latency and risks the chain being cut by crawlers.
- Final answer is 200: the destination must load, not 404 or redirect again.
- Exact destination: the URL the visitor ends on matches the map, including https, the host (www or not), path, trailing slash and query string.
3. Common failures and how to fix them
- Redirect chain (old → http new → https new)
- Usually separate rules for "old path to new path", "http to https" and "non-www to www" that run one after another. Write the migration rule so it targets the final https host and path directly, and put it before the generic canonicalization rules.
- Wrong destination: trailing slash differs
- The redirect points to
/aboutand the site then adds a slash (or the reverse). Point the rule at the canonical form the new site actually serves. - Wrong destination: query string dropped or added
- Some servers append the original query string to the target by default; others drop it. In nginx,
return 301 https://www.example.com/docs/$is_args$args;keeps it; in ApacheRewriteRule, theQSDflag drops it andQSAappends it. - Destination returns 404
- The redirect is right but the new page is missing, unpublished or has a different slug. Fix the page or update both the map and the rule.
- Temporary redirect (302/307)
- Many frameworks and hosting dashboards default to 302. In nginx use
return 301, in ApacheRedirect 301or[R=301,L], and in hosting UIs pick "permanent". - Redirect loop
- Two rules point at each other, often a "remove trailing slash" rule fighting an "add trailing slash" rule, or an old and a new rule for the same path. Remove one of them.
- No redirect: the old URL still answers 200
- The old page is still being served (a cached copy, an old CMS route, or a CDN rule that never deployed). Purge the cache and confirm the rule is live on the server that answers that host.
- Host does not resolve
- The old domain's DNS was removed or moved before the redirect host was set up. Keep the old domain pointing at a server that issues the redirects for at least a year.
4. When to test
- On staging, if the staging host is publicly reachable on standard ports, using a copy of the map with the staging host.
- Right after the DNS or rules go live, with the production map.
- Again after cache purges and CDN deploys, and once more a few days later. Rule changes, plugin updates and CDN edits regularly break redirects that worked on launch day.
5. Testing a map with RedirectProof
- Open the checker and load your CSV (or try the demo first).
- Fix rows flagged as invalid (missing scheme, spaces, non-standard ports, local hosts).
- Run the free check on the first 25 routes. Put your most important URLs first if you want them in the free check.
- Unlock the full check ($49 one time per project) for up to 500 routes, repeat checks, the CSV and the printable report.
- Filter by Fail and Warning, open each hop chain, fix the rules, and run the same project again.
RedirectProof sends plain GET requests without cookies or login from a server, over IPv4 only. Sites that vary by location, device, login state or bot detection may answer your visitors differently.
6. Launch-day checklist
- Map covers sitemap URLs, top landing pages and top linked pages
- Every route: one 301/308 hop to an exact, 200-answering destination
- http → https and www/non-www rules do not add extra hops to migration routes
- Old domain DNS and TLS certificate stay valid
- New XML sitemap lists only final URLs; internal links point to final URLs
- Check repeated after cache purge and again a few days later