Site Migration Checklist (Excel)
Free editable Site Migration Checklist (Excel). Copy, personalize, or download the Word .docx template from UNmiss.
Use this workbook to run a site migration as a tracked, row-by-row URL mapping instead of a hopeful guess. Each variant is one tab of the Excel file, with the exact columns to add and the checks to log against every URL. Fill the URL Mapping tab first from a full crawl of the old site, then work the other tabs to confirm redirects fire, status codes are right, and metadata carries over. Keep the workbook as your single source of truth from planning through to post-launch verification.
6 ready-to-use variants
Setup & Legend Tab
Define the statuses, redirect types, and owners the rest of the workbook references.
Goal: agree the vocabulary once so every row on every tab means the same thing.
Fill in the reference cells
- Old domain: [old-domain.com]
- New domain: [new-domain.com]
- Planned launch date: [Date]
- Status values: Not started / Mapped / Redirect built / Verified / Failed
- Redirect types: 301 permanent / 302 temporary / Canonical / No redirect (kept)
- Owners: [Dev], [SEO], [Content]
Set it up
- Turn the status and redirect lists into data-validation dropdowns for the Mapping tab.
- Apply conditional formatting so "Failed" rows turn red automatically.
- Freeze the header row on every tab so columns stay labeled as you scroll.
URL Mapping Tab
The core tracker: one row per old URL mapped to its new destination.
Goal: map every old URL to exactly one new URL, with an owner and a status, so nothing is orphaned at launch.
Columns (A–H)
- A – Old URL: [paste from full crawl]
- B – New URL: [destination URL]
- C – Page type: [Product / blog / category / landing]
- D – Redirect type: [301 / 302 / Canonical / None]
- E – Status: [Not started / Mapped / Verified]
- F – Owner: [Name]
- G – Priority: [High / Medium / Low]
- H – Checked?: [Y/N]
Rules for the tab
- Every old URL from the crawl gets a row; no blanks in columns A or B.
- Flag high-priority rows as pages with traffic, rankings, or backlinks.
- Use
=COUNTIF(B:B,B2)>1to catch two old URLs pointing at the same new one by mistake.
Redirect Rules Tab
Turn the mapping into a clean redirect list your developer can implement.
Goal: hand developers an unambiguous list of source-to-target redirects with no loops or chains.
Columns (A–E)
- A – Source path: [/old-path]
- B – Target path: [/new-path]
- C – Redirect type: [301]
- D – Implemented?: [Y/N]
- E – Notes: [Edge cases, params]
Checks before handoff
- Confirm no target path also appears as a source path (that's a redirect chain).
- Confirm no source path equals its own target (that's a loop).
- Group rules that share a pattern so they can be handled with a single rule where possible.
- Mark parameter and trailing-slash edge cases in Notes so they aren't missed.
Status Code Check Tab
Log the live HTTP response for each URL before and after launch.
Goal: verify each old URL returns the redirect you expect and each new URL returns 200.
Columns (A–F)
- A – Old URL: [URL]
- B – Expected code: [301]
- C – Actual code (pre-launch staging): [code]
- D – Actual code (post-launch): [code]
- E – Final URL after redirect: [resolved URL]
- F – Pass/Fail:
=IF(D2=B2,"Pass","Fail")
How to run it
- Crawl the old URL list and paste the response codes into columns C and D.
- Watch for 302s where you expected 301s, and for redirects landing on a 404.
- Filter column F to "Fail" to get an instant fix list for the dev owner.
Metadata & Content Parity Tab
Confirm titles, meta, headings, and canonicals carried over to the new URLs.
Goal: make sure the new pages kept the on-page signals that earned the old pages their rankings.
Columns (A–G)
- A – New URL: [URL]
- B – Title present & correct?: [Y/N]
- C – Meta description present?: [Y/N]
- D – H1 matches intent?: [Y/N]
- E – Canonical correct?: [Y/N]
- F – Internal links updated?: [Y/N]
- G – Content parity: [Full / Partial / Missing]
Priority order
- Check the high-traffic and high-backlink rows from the Mapping tab first.
- Flag any page where content was trimmed during the move; lost content can cost rankings.
- Confirm canonicals point to the new URL, not the retired old one.
Progress Dashboard Tab
A live rollup of how much of the migration is verified, so nothing launches half-done.
Goal: see completion at a glance and prove readiness before and after go-live.
Metrics to calculate
- Total URLs:
=COUNTA('URL Mapping'!A:A)-1 - % mapped:
=COUNTIF('URL Mapping'!E:E,"Verified")/total - Redirects passing:
=COUNTIF('Status Code Check'!F:F,"Pass") - Failed rows outstanding: [count]
- High-priority pages verified: [count / total]
Use it to decide
- Don't launch while any high-priority row is unverified or failing.
- Chart the pass rate so stakeholders can see progress without reading every tab.
- Re-run the status crawl the day after launch and update the dashboard before closing the project.
How to use this template
- Crawl the old site in full and paste every URL into the URL Mapping tab, one row per page.
- Fill the Setup tab so status and redirect dropdowns and formatting apply across the workbook.
- Map each old URL to exactly one new URL, then assign a redirect type, owner, and priority.
- Export the mapping into the Redirect Rules tab and check for chains, loops, and duplicate targets.
- On staging, crawl the URLs and log status codes so failures are caught before launch, not after.
- Verify metadata, canonicals, and content parity on the highest-value pages first.
- Watch the Progress Dashboard and refuse to launch while any high-priority row is failing.
- Recrawl the day after go-live, update the actual status codes, and clear the remaining fails.
Pro tips
- Map from a full crawl, not your sitemap: sitemaps miss orphaned and old URLs that still hold backlinks you don't want to drop.
- Prioritize rows by traffic, rankings, and backlinks so limited QA time protects the pages that actually matter.
- Hunt redirect chains and loops in the Redirect Rules tab before launch; each extra hop leaks a little authority and slows the page.
- Keep the Progress Dashboard as your go/no-go gate: a launch is ready when high-priority rows are verified, not when the calendar says so.
Frequently asked questions
Why Excel instead of just a redirect plugin?
A plugin implements redirects but doesn't track ownership, verification, or content parity across hundreds of URLs. The workbook is your audit trail: it shows what was mapped, who owns it, and whether each redirect actually fired, which a live redirect rule alone can't tell you.
Should every old URL get a 301?
Most should, since 301s pass the strongest signal to the new URL. Use 302s only for genuinely temporary moves. Some low-value URLs may be intentionally retired without a redirect, but log that decision in the workbook so it's deliberate rather than an oversight.
How do I find every old URL to map?
Run a full crawl of the old site and cross-check it against server logs, analytics, and your backlink data. Relying on the sitemap alone misses orphaned pages and old URLs that still earn links, and those are exactly the ones a migration tends to break.
What's the most common thing this catches?
Redirect chains and 302s used where 301s were intended. Both quietly weaken the signal passed to the new page. The Status Code Check tab surfaces them by comparing the expected code to the actual one, so you fix them before rankings react.
Does this replace a full technical audit?
No. It focuses on URL mapping and redirect integrity, which is where most migration traffic loss happens, but it doesn't cover site speed, structured data, or crawl budget in depth. Pair it with a broader technical review for a complete pre-launch check.
When can I stop tracking?
Keep the workbook live until the day-after-launch recrawl shows high-priority rows passing and failures cleared. Rankings and crawling settle over weeks, so it's worth a final check a month out to confirm the new URLs are indexed and holding their positions.