SEO Site Migration and Redirect Mapping

By Andrew Apell for Flookup Data Wrangler. Updated

About the author

Andrew Apell is the creator of Flookup Data Wrangler and has built data cleaning tools for Google Sheets since 2018. The method in this post reflects work on large reconciliation tasks with a government team and continued testing with Sheets users.
Every Flookup result described here can be checked in the documentation before purchase.
Read Our Story for the background, or contact the team with any questions about this post, including corrections, unclear steps or use cases we have not covered yet.

Key Takeaways

  • A redirect map is a two-column decision list, old URL to new URL, with a status code and a priority beside each row.
  • Build the inventory from a crawl, the sitemap, the Search Console 404 report and analytics landing pages, because no single source lists every URL that receives traffic.
  • Strip the protocol and domain, normalise case and trailing slashes, then fuzzy match the remaining paths before looking the full destination URL back up.
  • Use a permanent redirect for a page that has moved for good, validate that each target returns 200 with a single hop, and monitor the Page Indexing report after launch.

What a Redirect Map Has to Contain

A site migration keeps its rankings when every old URL that earned traffic or links resolves to the right new page. The redirect map is the file that makes that happen, and it is a spreadsheet before it is a server configuration.

Five columns are enough:

Column What It Holds Why It Matters
Old URL The path exactly as it appears in the crawl or report This is the value the server rule matches, so it has to be complete
New URL The destination path on the new site A blank destination is a deliberate 410 decision, not an oversight
Status 301 or 308 for a permanent move The status tells search engines the new URL is the canonical one
Priority Sessions, referring domains or revenue attached to the page Review effort follows the value of the page rather than the alphabet
Match type Exact, pattern or fuzzy Records why a row was accepted, which shortens the review of the next run

Google's guidance on redirects treats a permanent redirect as the signal that the target should be canonical, and recommends keeping redirects in place for as long as possible. That makes the status column a decision, not a default. A page removed without a successor is a 410 or a 404, and it should be recorded as such rather than pointed at the home page.


Build the URL Inventory

Start with four sources and merge them into one list. Each one misses something the others catch.

Deduplicate the merged list on the normalised path before anything else. The same page usually appears with and without a trailing slash, in upper and lower case and with campaign parameters attached, and each variant looks like a separate URL until it is cleaned.


Normalise URLs Before Matching

Matching full URLs wastes precision. The protocol, the host and the query string differ between the old and new site by definition, so they add noise to every comparison.

  1. Strip the protocol and host: Reduce https://www.example.com/pricing/teams to /pricing/teams.
  2. Decide on the trailing slash: Pick one convention and apply it to both columns. A mismatch here turns an exact match into a fuzzy one.
  3. Lowercase the path: Case-sensitive servers treat /Pricing and /pricing as different pages.
  4. Drop tracking parameters: Remove utm_ values and session identifiers, keeping only parameters that change the content, such as a product identifier.

Text Standardisation in Flookup applies these steps across the column in one pass, so both lists reach the matching step in the same shape.


Match Old Paths to New Paths

With clean paths on both sides, the comparison is between page slugs rather than between two unrelated domains. Three passes cover the list:

  1. Exact match first: A VLOOKUP or XLOOKUP on the normalised path resolves every page that kept its slug. These rows need no review.
  2. Fuzzy match the remainder: Run Fuzzy Match on the unmatched paths with a threshold around 80 per cent. Slugs that gained a word, changed a category or dropped an abbreviation land here. The fuzzy matching guide explains how the score is calculated.
  3. Look the full URL back up: The fuzzy step returns a matched path. Use it to retrieve the original destination URL from the new-site column:
    =VLOOKUP(E2, D:B, 2, FALSE)

Review the fuzzy band by hand. A slug such as /blog/csv-tools matching /blog/csv-editor may be correct, while /pricing matching /pricing-enterprise sends a general visitor to the wrong plan. The map is a proposal until a person has read those rows.


Prioritise by Traffic and Links

Not every URL deserves the same review effort. Sort the map by organic sessions and by the number of external links pointing at the old URL. The top of that sort is where a mistake costs the most, and it is usually a small share of the list.

Three groups are worth separating:


Validate the Map Before Launch

A map that looks correct in the sheet can still fail on the server. Four checks catch most of it before the DNS change:

  1. Every destination returns 200: A redirect to a page that itself returns 404 is worse than a direct 404, because it hides the problem behind a valid status code.
  2. One hop only: Old URL to new URL, not old to staging to new. Chains slow crawlers and dilute the signal.
  3. No loops: Check that no destination appears in the old URL column. A pair that points at each other produces a redirect error.
  4. No catch-all to the home page: Sending every unknown URL to the home page tells search engines that the content is gone and leaves the visitor without the page they wanted. Use a 404 or a targeted redirect.

Test the rules on a staging host with the production paths, then compare the status codes against the map. A script that requests each old URL and records the final status and destination turns this into a reviewable column, and it is the check that catches the rule that never fired.


After Launch

Keep the map in the sheet after deployment. It becomes the record of what changed, and it answers the first question of every post-migration report.

Monitor the Page Indexing report in Search Console for new 404s and soft 404s over the following weeks. A page that starts returning 404 after launch usually means a redirect rule was missed, a slug was renamed twice or an internal link still points at the old path. Fix those in the map and the internal link, not by widening a catch-all rule.

Update internal links to point at the new URLs directly. A redirect handles external links and bookmarks, but an internal link that still uses the old path adds a hop for every crawl and every visitor.


Frequently Asked Questions

How can Google Sheets help with an SEO site migration?

Google Sheets holds the redirect map, the URL inventory and the review decisions in one file. It imports the crawl, the sitemap and the Search Console export without a database, and the fuzzy match runs in the same sheet as the source data. The output exports as a two-column list for the server configuration.

What is URL mapping and why does it matter?

URL mapping records which new URL replaces each old one after a migration or redesign. It preserves link equity, sends visitors to the page they asked for and prevents the 404s that follow a broken migration. A map is also the audit trail when a ranking drops after launch.

Should I use a 301 or a 302 redirect?

Use a 301 or 308 for a permanent move, because Google treats a permanent redirect as a signal that the target should be canonical. Use a temporary redirect only when the change is genuinely temporary and the original URL will return. The status is a decision per row, not a global setting.

Can Flookup help with 404 detection after migration?

Flookup compares the old URL list against the new sitemap and scores the closest destination for each one, which turns an unstructured 404 list into candidate redirects. The scores need review, and the final check is a request to each URL that confirms a 200 response.


Run This Workflow on Your Own Data

Flookup runs inside Google Sheets: fuzzy matching, deduplication, profiling and standardisation on the rows you already have. Free tier from install with no credit card required.

Install Flookup Data Wrangler from the Google Workspace Marketplace, or open the documentation to run the match on sample data.


You Might Also Like