Free SEO tool. Site migrations

Redirect Map Builder: Free, Runs in Your Browser

Paste old and new URL pairs, or two plain lists and let it suggest the matches. It finds chains, loops, self-redirects and duplicates, then writes the rules for Apache, Nginx, Shopify, the Redirection plugin, Rank Math or a plain CSV.

2 modesCheck finished pairs, or match two lists by slug
9 checksChains, loops, duplicates, query strings and more
6 exports.htaccess, Nginx, Shopify, Redirection, Rank Math, CSV
0 uploadsEverything runs in this browser tab

Privacy: nothing you paste or upload leaves your device. The lists are read and processed by JavaScript in this browser tab. Nothing is sent to a server or saved.

A redirect map is the list that says where every old URL goes after a redesign, a replatform or a URL cleanup. Getting it wrong is the usual reason rankings fall off a cliff in the weeks after launch, and the website redesign recovery plan covers that whole story. This redirect map generator does the list-keeping part. Got the pairs already? It checks them. Only got two lists? It suggests the matches first, then checks them.

1. What have you got?

Headers are matched by name: Old URL and New URL, Redirect from and Redirect to, source and target, Address and Redirect URL. No header row? The first column is read as old, the second as new.

2. Settings

Turns bare paths into full URLs and tells the check which host is yours. Leave it blank to use the most common host in your new URLs.

Google treats 301 and 308 as permanent. Use 302 or 307 only for a move you’ll undo.

Built the map? The redesign recovery plan says what to watch in Search Console for the two weeks after launch, and the guide to redirecting thousands of URLs covers when a 410 is the better answer than a redirect.

Quick answer

This redirect map builder turns old and new URL lists into a checked 301 redirect map. Paste finished old and new pairs, or paste two lists and let it suggest a match for each old URL by comparing slugs, with a confidence score you can accept or change. Then it collapses chains, drops loops, self-redirects and duplicates, and writes the rules for Apache .htaccess, Nginx, Shopify’s CSV import, the WordPress Redirection plugin, Rank Math and a plain CSV. If you’re an SEO, a developer or a store owner planning a migration, it saves you hand-typing 500 rules.

How to Use the Redirect Map Builder

Seven steps. The first two take longest, and they’re the ones that decide whether your rankings make the move.

1

List every old URL worth keeping

Pull old URLs from more than one place, because each source misses some. Use the old XML sitemap, a crawl of the live site, the Pages tab in Search Console and the GA4 landing page report. Where each export lives is listed below.

2

List the new URLs

Export the new site’s XML sitemap or crawl the staging site. You can paste sitemap XML as it is, and the builder pulls the address out of every loc tag.

3

Pick a mode and paste

Already have old and new pairs? Use mode A and paste them or upload the CSV. Only have two lists? Use mode B, old list on the left, new list on the right. Headers are matched by name, so a Search Console or GA4 export works without editing.

4

Set the site address and status code

Enter the new site’s address so bare paths become full URLs. Leave the status on 301 for a permanent move. Google treats 301 and 308 as permanent and 302 and 307 as temporary.

5

Review the matches in mode B

High-confidence matches are ticked for you. Sort by clicks, check every medium and low match, and give each unmatched URL a target. Choose No redirect for pages that should return 404 or 410.

6

Fix what the check flags

Read the map check from the top. Loops, self-redirects and conflicting duplicates are left out of the exports until you fix them. Chains are collapsed for you.

7

Export, install, then test

Pick the export for your server or platform, copy or download it, and install it. Then request a sample of old URLs with curl -I or a crawler in list mode, and confirm each one returns a single 301 to the right page.

Where to get the old URL list

Google’s site move guide points at three sources: your sitemaps, your server logs or analytics, and your CMS. Use several. Each one misses pages the others catch, and any page missing from the map turns into a 404 on launch day.

Five exports worth merging

  • Search Console, Pages tab. Performance, then Search results, then the Pages tab, then Export. Google says the export is truncated to 1,000 rows. That covers a small site, but on a big one it’s only the top slice. The builder reads the Top pages header as the URL column and Clicks as the value column.
  • GA4 landing pages. Reports, then Engagement, then Landing page. Set 12 to 16 months so seasonal pages appear, then download it as CSV. GA4 gives paths without the domain and puts comment lines starting with # at the top. You don’t need to strip them: the builder skips those lines and uses the New site address for the host.
  • The old XML sitemap. Save a copy before launch day, because the platform will overwrite it. Then paste the XML straight into the box.
  • A crawl of the old site. Screaming Frog or any crawler. The Address column is picked up by name. Crawling a Shopify store? Slow the crawler down first, as the Shopify crawl settings guide explains.
  • Your backlink tool’s top pages. Old URLs with links pointing at them matter even when they get no clicks.

Where to get the new URL list

The new site’s XML sitemap is the cleanest source, though before launch you’ll crawl the staging site instead. If that list carries a staging hostname, set the New site address to the live domain. The check then flags every target that sits on a different host. That’s how a staging URL gets caught before it ships.

How to Read the Results

The summary says how many rows went in, how many are ready to export and what was found. Mode B adds a review table above the map check. Click any column header to sort a table, and each table has its own CSV download.

Match confidence in mode B

Each old URL is compared with the new URLs that share a word with it. But first the builder lowercases everything and strips trailing slashes, file extensions like .html and .php, stop words like the and and, date folders, and platform folders like products, collections, catalog and blog. Plurals are folded too, so socks and sock count as one word.

The score then mixes three things: how many slug words match, how close the slugs are letter by letter (so pack and backpack still score), and how much of the folder path overlaps. At 80% and up, a match is High and gets ticked for you. 60 to 79% is Medium, usually right but still worth a look. Low runs from your minimum (50% by default) to 59%. Treat it as a guess.

Below the minimum, the builder walks up the old URL’s folders and looks for the parent category on the new site. If the old parent folder is itself in your map, it borrows that match. It never falls back to the homepage. If nothing turns up, the row says No match and you choose the target.

What each check means and what to do

Chain collapsed (fixed)

Say old URL A pointed at B, and B is also in the map, pointing at C. A now goes straight to C. Google can follow up to 10 hops, but it advises sending the old URL to the final destination directly. The B to C row stays in the map, since B may have links of its own.

Loop (left out)

A goes to B and B comes back to A, directly or through other rows. Nobody lands anywhere. Decide which URL is the live page, then delete the row that points away from it.

Redirects to itself (left out)

Old and new are the same URL. Usually it’s a page that didn’t move, so just delete the row.

Duplicate or conflict

The same old URL twice with the same target? The copy is dropped. Twice with different targets? The first row wins, the second is left out, and you pick which one is right.

Trailing slash or case only (warning)

Fine when the server treats the two as separate URLs. But it’s a loop when the server already adds or strips the slash, or ignores case. Test one in a browser.

Points at the homepage (warning)

Google’s site move guide says redirecting many old URLs to one irrelevant destination, such as the home page, might be treated as a soft 404. So find a closer page. If there isn’t one, let the URL return 404 or 410.

Query strings

Apache gets a RewriteCond that matches the query exactly. Nginx gets an if on $args. Shopify’s help says redirects for URLs with query strings might not work as expected, so test those.

Hosts and protocols

Old URLs on more than one host (http and https, www and bare) are listed in the summary. Server rules match the path, so you’ll need a separate site-wide rule for the host-level redirect. And a target on http:// adds a hop when the site forces https.

Fragments and tracking tags

Anything after # is removed from old URLs, because browsers never send it to the server. utm_ tags on a target get flagged, since every visitor through that redirect would be counted as the campaign.

Which export to use

ExportWhere it goesWatch for
Apache .htaccessThe site root .htaccess, above # BEGIN WordPress and any other rewrite rulesTwo styles. RewriteRule (the default) matches each old path exactly, with or without the trailing slash. Redirect 301 is shorter but matches path prefixes: a rule for /catalog also catches /catalog/anything and appends the rest. Rows with a query string always use RewriteCond, since Redirect can’t see the query.
NginxLocation blocks in the old site’s server block, or maps in the http blockAn exact-match location treats /old and /old/ as two URLs. The map style keys plain paths on $uri, so tracking tags on old links don’t break the match. Long maps may need map_hash_bucket_size raised, per the map module docs.
Shopify CSVContent, Menus, URL redirects, ImportHeaders Redirect from and Redirect to, as in Shopify’s sample template. Redirect from is a path. Redirect to is a path on your store, or a full URL for another domain. The old URL has to return a 404 first. Shopify’s help also lists /apps, /application, /cart, /carts, /orders, /services and /shop as prefixes it can’t redirect. Limit: 100,000 redirects, or 20,000,000 on Plus.
Redirection pluginThe plugin’s Import/Export pageColumns source, target, regex and code, per the import docs. Regex is written as 0 on purpose: without that column, the importer treats any source containing ( ) [ ] $ ^ or * as a regular expression.
Rank MathRank Math SEO, Redirections, Import and ExportLowercase headers source, matching, destination, type and status, with sources written without a leading slash, as in Rank Math’s sample file. CSV import needs Rank Math PRO. Rank Math lists 301, 302, 307, 410 and 451, so a 308 is written as 301.
Plain CSVSign-off, a developer handover, any other platformFull old and new URLs, the status code and the check notes. Keep it with the project. Google says to keep redirects as long as possible, generally at least a year.

Every export is plain text, so copy it or download it as a file. The Apache file downloads as a .txt so it doesn’t vanish as a hidden dot file on your computer. Paste its contents into the real .htaccess.

Worked example: the sample data

Load the sample in mode A and 23 rows go in. 18 come out in the exports (10 OK, 2 fixed and 6 with a warning), and 5 are left out. Here are the fixed ones. /catalog/hiking-boots/acme-ridge-boot.html pointed at /products/acme-ridge-boot-v1, which the next row sends on to /products/acme-ridge-boot, so the chain is collapsed to a single hop. And the #balance fragment is stripped from the gift card URL. What’s left out? /sale/ and /collections/clearance point at each other (a loop), the size guide points at itself, one trail shoes row is an exact duplicate and the second socks row conflicts with the first. The 6 warnings are the kept socks row, two old blog posts sent to the homepage, a tents target on http://, a gaiters target carrying utm_source and a Hiking-Poles row that only changes the letter case. Switch to the Shopify export and two more notes appear: /shop/gift-guide/ starts with a prefix Shopify says it can’t redirect, and /products/acme-ridge-boot-v1 has to return a 404 before Shopify will redirect it.

Switch to mode B and load the sample. 22 old URLs from a Search Console Pages export meet a 22-URL sitemap, and 16 match with high confidence, most of them on an identical slug. acme-summit-30l-pack still scores 80% against acme-summit-30l-backpack, because the letter-level comparison sees pack inside backpack. The tent scores 70% (Medium), and shipping-and-returns.html gets 52% against the shipping policy (Low). Check that one. The refund policy may be the better home. The discontinued acme-trekker-gaiter.html scores 48%, under the 50% minimum, so the builder borrows the match of its parent folder, /collections/gaiters. /clearance/ and /product.php?id=118 get nothing, the homepage is never offered, and /pages/gift-cards is on both sites, so it needs no redirect at all.

Before you install anything, read the redesign recovery plan for the launch-day checks. If the move also merges products into variants, read the Shopify variants guide too. Shopify won’t redirect a product URL that still loads.

Limits of This Tool

  • It only reads URLs. It never opens the pages, so two matching slugs can hide two different products (an old model and its replacement, say). To match on page content, you’d need a crawl of both sites.
  • It doesn’t fetch anything. It can’t tell you that a new URL returns 404, that a target is redirected somewhere else on the live server, or that a host rule adds an extra hop. So crawl the old URLs in list mode after launch.
  • Chains are only found inside this map. Redirects that already live on the server, in an old plugin, at a CDN or in platform defaults, aren’t visible here.
  • One row, one rule. It doesn’t write regex or wildcard rules. If every /catalog/ URL maps to the same /collections/ slug, one hand-written pattern rule is shorter.
  • Servers differ. The Apache and Nginx output follows the official docs, but a host can disable mod_rewrite or override .htaccess. Back up the old file and test before production.
  • Vendor formats change. The Shopify, Redirection and Rank Math layouts were checked against each vendor’s docs and sample files. Still, import three rows first. Then the rest.
  • Size. In testing, 5,010 pairs were checked and turned into rules in under a second in desktop Chrome. Matching 5,000 old URLs against 4,827 new ones took about 1.4 seconds, or about 3 seconds with the tables drawn. Much bigger lists still work, just slower. If the tab stalls, split them by folder.

Redirect Map Builder FAQ

What is a redirect map?

A two-column list: every old URL, and the one new URL it should send people and Google to. You build it before a redesign, replatform or URL cleanup, and it becomes the source for your server rules or your platform’s redirect import.

Is this redirect map generator free?

Yes. There’s no signup and no row cap set by the page. It runs in your browser, so your URL lists never leave your device.

Can it generate bulk 301 redirects for .htaccess?

Yes. Paste old and new pairs and pick the Apache export. You get exact-match RewriteRule lines by default, or Redirect 301 lines if you prefer, and URLs with a query string get a RewriteCond. Paste the block above the WordPress rules.

How does it match old URLs to new ones?

It compares slugs after stripping case, trailing slashes, file extensions, stop words, dates and platform folders. The score mixes matching words, letter-level similarity and folder overlap. Anything below your minimum is left for you to decide.

Why won’t it redirect unmatched pages to the homepage?

Google’s site move guide warns that many old URLs redirected to one irrelevant page, like the home page, might be treated as soft 404s. The builder suggests the parent category instead, or leaves the row for you.

What format does Shopify’s redirect import need?

A CSV with two columns, Redirect from and Redirect to, as in Shopify’s sample template. Redirect from is a path on your store. Redirect to is a path, or a full URL for another domain. The old URL has to return a 404 before the redirect works.

How do I fix a redirect chain?

Point every old URL straight at the final page. The builder does this when the chain is inside your map: A to B plus B to C becomes A to C, and the B to C row stays for anyone still linking to B.

How long should I keep the redirects?

Google’s advice is as long as possible, generally at least a year. Old links across the web keep sending visitors for years, so most sites never take them down.

Moving a store to Shopify?

Most of a replatform’s SEO risk sits in the URL list. The Shopify SEO service covers the inventory, the redirect map and the Search Console checks after launch.

See Shopify SEO
RS

Built by Ram Kr Shukla

SEO and growth consultant. 20+ years in SEO and growth, 50+ brands across marketplaces, travel, BFSI and e-commerce. Google Analytics and Google Ads certified, and works daily in Search Console, Ahrefs, Semrush and Screaming Frog.