Plan a site migration
Match old and new URL lists into a proposed 301 map with confidence tiers and plain-language reasons.
Free, no signup. A migration lives or dies on whether every old URL lands somewhere real. Paste your old URLs and new URLs and get a suggested 301 map — each row scored into a confidence tier with a plain-English reason, an override dropdown, a first-class unmatched bucket, and a 410 kill-list for pages with no equivalent.
Built your map? Verify the live chains afterwards with the HTTP Status & Redirect Checker.
Example data — replace with your own
Runs entirely in your browser — nothing you paste is uploaded or stored. Sitemap import and content matching are opt-in exceptions — see below. Anonymous run-level outcome counters may be used for aggregate research; URLs, domains, IPs, and identifiers are never included, and no statistic is released below 100 runs.
Each row’s “Why” control shows every matcher that ran. Raw scores are internal ordering only, not confidence percentages; the tier descriptions come from the labeled fixture calibration below.
Fetches page metadata only (title, H1, description) — live for new URLs, from Wayback first and Common Crawl only when Wayback has no usable capture — and ranks by text similarity. Capped per run; no full-body scrape, no embeddings. Content guesses are styled distinctly so they're never confused with a structural match.
Pattern rules go to formats that can run them (Bulk Redirects can't — they're listed as a note there). Rows are ordered specific → general; self-redirect no-ops are dropped; 410 rows export where the platform supports them and remain explicit notes otherwise. The WordPress plugin CSV stays import-only; use its review companion CSV for confidence, evidence, and Ahrefs session context.
Paste exported redirect/status/content evidence as JSON. Clicks, traffic, referring domains, provenance, hops, final canonical, raw/rendered error evidence, and intent text stay attached to each source row.
Say you migrated a blog and product catalogue. Your old URLs:
https://example.com/2019/06/seo-tips
https://example.com/about-us.html
https://example.com/product.php?id=482
https://example.com/blog/deprecated-tactic …and your new URLs:
https://example.com/blog/seo-tips
https://example.com/about-us
https://example.com/shop/482-blue-widget …and the builder returns:
/about-us.html is actually an Exact match (extension-stripped hit
on /about-us) — here it's shown marked 410 instead, to demonstrate
the kill-list toggle overriding an automatic pick./blog/deprecated-tactic has no equivalent — its best candidate is
only an 18%-similar weak guess, below the accept threshold, so it lands in
unmatched for a manual decision, content matching, or a 410.<loc>
entries..htaccess, nginx, Cloudflare
_redirects/Bulk Redirects, or CSV — and optionally
Check destinations are live 200s before you ship.Each row carries a confidence tier and a status. The summary pills tally them:
/about-us.html → /about-us). Trust these.When you run Check destinations are live 200s, each destination also gets a small badge: 200 (clean), N redirects → … (you're mapping to a redirect, not the final URL), or 404/unreachable (a broken destination to fix first).
The matching engine runs entirely in your browser. Both lists are normalised first — optionally
treating /a and /a/ as equal, comparing paths case-insensitively, stripping
tracking params (utm, gclid, fbclid), and ignoring file extensions. Then each old URL runs a matcher
cascade, strongest first: exact path, exact path minus extension, last-slug match, numeric-ID
extraction, and finally whole-path token similarity. The first matcher that fires sets the tier; a
below-threshold token best is demoted to unmatched rather than shown as a shaky guess.
The optional trailing-slash normalisation is migration matching only: it lets /a
and /a/ represent the same content candidate. The Redirect Chain Mapper keeps them
distinct because its job is to expose an actual slash redirect hop.
After matching, a chain-flattening pass detects cases where an old URL points at another old URL and
rewrites the map to the final destination (or flags a genuine loop). Correct a row by hand and the
tool offers to induce a pattern rule — e.g. /blog/* → /articles/* — and apply it
to every similar row at once. The only server calls are opt-in: sitemap import, Tier 2 content
matching (fetches title/H1/description only, live for new URLs and from Wayback or Common Crawl for dead old ones),
and the destination-liveness check.
.htaccess, nginx, Cloudflare _redirects and Bulk
Redirects, and CSV — ordered specific → general, with self-redirect no-ops dropped.It matches on URL structure, not meaning — two unrelated pages that happen to share a slug can match, which is why Fuzzy rows are flagged for review. It does not crawl your site to discover URLs (paste or import them). Sitemap imports follow nested indexes within explicit depth, document, and URL caps. The destination check and content matching are capped per run and only reach public URLs. And it builds the map — it doesn't deploy the redirects; you export the rules and add them to your server or CDN.
A redirect map is a list that pairs every old URL with the new URL it should 301 redirectA 301 redirect is the HTTP status code for a permanent move: it tells browsers and search engines a URL has moved for good, and it's the strongest signal for consolidating a page's ranking signals onto the new URL. Google says permanent redirects don't cause a loss in PageRank. to after a site migrationA site migration is any significant change to a website's URL structure, domain, platform, protocol, or hosting that can affect how search engines crawl, index, and rank it. The risk scales with how much you change at once. or restructure. It is the deliverable you hand to whoever configures the redirects, and getting it right is what preserves rankings and stops visitors hitting 404s. This tool builds that list for you by matching your old URLs to your new ones and scoring each pairing so you know which rows to trust and which to review.
It runs a cascade of matchers, strongest first: identical path (Exact), identical path ignoring the file extension (Exact), a matching last slug segment or a shared numeric ID (Strong), then token similarity of the whole path (Fuzzy above your threshold, Weak below it). The first matcher that fires sets the tier, and the row shows the plain reason — for example "slug match" or "shared ID token 482". You can override any pick from the dropdown, and correcting one row offers to generalise the fix into a pattern rule for similar URLs.
No. Parsing, normalisation, matching, chain-flattening and every export run entirely in your browser, and your project autosaves to that browser only. The only network calls are optional and clearly opt-in: importing a sitemap by URL, the Tier 2 "match remaining by content" step, and the destination-liveness check. If you paste your URLs and export, nothing leaves your machine.
Unmatched rows are the whole point of the tool being loud about them — they are the old URLs with no confident new equivalent, and they are exactly what you would otherwise miss. For each one, either pick a destination manually from the dropdown, run Tier 2 content matching to get suggestions, or mark it 410 GoneA 410 Gone status code tells search engines a page was intentionally and permanently removed, prompting slightly faster de-indexing than a standard 404. if the page genuinely has no replacement. Leaving them unmatched means those URLs 404 after launch.
Use a 301 when the old page has a real equivalent on the new site. Use 410 Gone when the content is genuinely retired with no replacement — a discontinued product, an old campaign page, thin content you are pruning. A 410 tells search engines the URL is intentionally gone so they drop it faster than a soft 404A soft 404 is a URL that returns a success status code (usually 200 OK) even though the page is empty, missing, or shows a 'not found' message. It isn't a status code a server sends — it's a label search engines apply after comparing the response code against the rendered content, and they treat the page like a 404 for indexing., and it keeps you from redirecting dozens of dead pages to the homepage, which Google treats as a soft 404 anyway. The tool exports 410 rows as a separate kill-list.
Saved targets, named lists, and recent check summaries remain only in this browser.
Upvote what you want most. New ideas can be submitted from the floating Feedback menu; requests appear here once approved, and the most-wanted rise to the top.
You won't be emailed about that request anymore.
Loading…
New requests are reviewed before they appear here.
Where this tool helps
Match old and new URL lists into a proposed 301 map with confidence tiers and plain-language reasons.
Review uncertain rows, override weak suggestions, and separate genuine removals into a 410 kill list.
Flatten mappings before launch so the generated rules do not create avoidable multi-hop paths.
Create Apache, nginx, or Cloudflare output after a human confirms the mapping and edge cases.
Watch the full workflow
A migration can lose users and rankings when old U-R-Ls land on errors or irrelevant pages. I’ll show you when this builder helps, how to load and normalize lists, read the real sample map, review confidence tiers, handle unmatched and retired pages, export safely, understand limitations, and verify the deployment.
This tool proposes one destination for each old U-R-L, explains the structural evidence, and isolates rows that need a human decision. Use it for domain moves, platform migrations, taxonomy changes, product retirement, content consolidation, historical four-oh-fours, and redirect-map quality review.
Paste or upload the full old set from crawls, analytics, Search Console, backlinks, logs, and historical sitemaps. Add the canonical live new set from staging crawls or sitemaps. Missing inputs cannot be mapped, so reconcile counts and normalize domains before judging match quality.
Select Load sample to populate old and new lists and run the actual structural matcher. Your own pasted matching stays in the browser. Sitemap import, destination checks, and content matching are explicit network actions; the Turnstile challenge is excluded from this capture.
Normalization can treat trailing slashes as equal, compare paths without case, remove tracking parameters, ignore file extensions, and set the fuzzy threshold. Match the choices to the planned routing behavior. Normalization helps find candidates, but it must not hide real redirect hops or case-sensitive server behavior.
The summary counts Exact, Strong, Fuzzy, unmatched, already-existing, four-ten, and loop states. Filter by tier, status, review decision, search text, or traffic priority. Accepting Exact and Strong in bulk can speed review, but high-value destinations still deserve sampling and intent checks.
Each row shows the old U-R-L, proposed destination, tier, alternatives, and a plain reason such as exact path, shared slug, or numeric I-D. Raw similarity scores order candidates; they are not confidence percentages. Override any wrong choice and inspect the evidence before accepting it.
Exact means the path matches after selected normalization. Strong uses a slug, numeric I-D, or explicit pattern rule. Fuzzy is plausible but requires review. Already exists needs no redirect. A loop must be repaired. A high structural tier still does not prove equivalent content or user intent.
Unmatched is a required decision queue, not a failure to hide. Choose a true equivalent manually, use capped metadata matching for a suggestion, create suitable replacement content, or mark four-ten when the page is intentionally retired. Do not redirect unrelated pages to the homepage; that creates poor journeys and soft-four-oh-four risk.
Wildcard and regular-expression rules can transform repeated directory structures before matching. Preview the match count, test boundary cases, and keep specific rules before general ones. A pattern that looks efficient can redirect thousands of unrelated U-R-Ls, so derive it from reviewed examples and validate the output.
Export reviewed rows to Apache, nginx, Cloudflare, or C-S-V formats. The builder orders specific rules before general ones, removes self-redirects, preserves four-ten decisions when supported, and can save the project and an audit baseline. Confirm your platform’s escaping, precedence, and deployment syntax.
The matcher compares U-R-L structure, not page meaning, and it cannot discover missing inventory. Network-assisted checks are capped and limited to public targets. Sitemap imports have depth and size limits. The tool builds rules but does not deploy them, so server behavior and cache layers remain outside the map.
Record each source, target, reason, tier, reviewer, intent decision, traffic or link priority, and four-ten rationale. Check destinations return final two-hundreds, stage the rules, crawl every old U-R-L, flatten chains, eliminate loops, and review likely soft four-oh-fours. After launch, monitor logs, Search Console, backlinks, rankings, and unexpected errors.
Export only reviewed decisions, deploy them in staging, and test every important old U-R-L through its complete redirect chain. Fix loops, chains, broken destinations, and soft-four-oh-fours, launch with monitoring, and compare crawl, index, traffic, and error evidence after the migration.