Templates
Website Migration URL Mapping Template
Every migration failure traces back to a URL nobody knew existed. The mapping sheet is the artefact that prevents it, and building the inventory is most of the work.
Run a fresh DomainLens audit and use the report as your priority list.
Source the inventory from four places
A crawl alone is not enough — it finds only what your own site links to, and the URLs that matter most in a migration are frequently the ones with external links and no internal ones.
| Source | Finds | Misses |
|---|---|---|
| Site crawl | Everything linked internally | Orphans |
| Search Console | Everything Google indexed | Never-indexed pages |
| Analytics | Everything with traffic | Zero-traffic pages |
| Sitemap | Everything you declared | Anything omitted |
| Server logs | Everything actually requested | Needs log access |
The columns
The Template column is what makes a large mapping tractable. Ten thousand product URLs following one pattern is one rule, not ten thousand rows to decide individually.
| Column | Contains | Why |
|---|---|---|
| Old URL | The full existing URL | The key |
| New URL | Destination, or blank if retiring | The mapping |
| Action | 301, 410, or unchanged | Explicit decision per URL |
| Sessions (90d) | Traffic before the move | Priority when time runs short |
| Impressions (90d) | Search visibility | Catches pages with no clicks yet |
| External links | Whether anything links in | Raises priority sharply |
| Template | Which template produced it | Lets you map in bulk |
| Verified | Post-launch check result | Filled in after go-live |
Rules for mapping
The home-page default is the most damaging shortcut available. Google treats a bulk redirect of unrelated URLs to the home page as a soft 404, so those pages lose everything they had.
- Every old URL gets an explicit decision. Blank is not a decision.
- Map to the closest genuine equivalent, never to the home page as a default.
- Where nothing equivalent exists, 410 rather than redirect somewhere unrelated.
- Redirect directly to the final URL, not through an intermediate that also redirects.
- Preserve query strings that carry meaning; strip tracking parameters.
Deciding what not to keep
A migration is the one moment when retiring pages is cheap, because you are already touching every URL. Taken seriously, the mapping sheet is as much a content decision as a technical one — every row marked for a 410 is a page you have decided the new site does not need.
Be deliberate about it rather than defaulting to keeping everything. Migrating a thousand thin pages preserves a thousand thin pages, and the effort of mapping them is spent carrying forward the problem rather than solving it.
The test is the same one you would apply outside a migration: does this page have traffic, external links, or a job to do. A page failing all three is one to retire, and doing it during the migration costs nothing extra because the redirect infrastructure is already being built.
Verifying after launch
For the surrounding process see the migration checklist and redirect chains .
- 1Run the whole old-URL list through a redirect check and record the final status for each.
- 2Filter to anything not ending at 200 — those are the ones to fix first.
- 3Count hops separately; a chain works but costs a round trip and should be collapsed.
- 4Spot-check that destinations are genuinely equivalent, not just returning 200.
- 5Re-run the check a week later, since caching and CDN rules can mask problems initially.
while read -r url; do
out=$(curl -sIL "$url" -o /dev/null \
-w '%{http_code} %{num_redirects} %{url_effective}')
echo "$out <- $url"
done < old-urls.txt | tee verify.txt
# Anything not starting with 200
grep -v '^200' verify.txt
# Chains: more than one hop
awk '\$2 > 1' verify.txt
- Do I need to map every URL?
- Every URL needs an explicit decision, which can be a bulk rule per template. What you cannot do is leave URLs unaccounted for.
- What about URLs with no traffic?
- Check for external links before retiring them. A page with no traffic but an inbound link is still worth redirecting.
- How long do I keep the mapping sheet?
- For as long as the redirects run, which should be at least a year. It is the record of what was decided and why.