Paste your old URLs and your new ones. Every old page is matched to its closest new page with a confidence score you can override, then the map exports as six ready to paste redirect files. Free, and your URL lists stay in your browser.
When a site moves, every old URL that had links or rankings pointing at it needs to land on the closest page of the new site. If it does not, that page starts returning a 404 and the value built up over years goes with it. A redirect map is simply the list of old URL to new URL pairs, plus the server configuration that makes those pairs real. Building one by hand in a spreadsheet is where migrations quietly go wrong, because a spreadsheet does not tell you that the same old path is listed twice, so only the first rule would ever fire, or that one of your destinations is itself being redirected somewhere else.
Each old path and each new path is reduced to a comparable string, then scored with a Dice coefficient over character bigrams, which is a fast way of asking how much text two strings share. The score of the whole path is blended with the score of just the last segment, and an exact full path or an exact page slug is promoted to the top. That handles the boring majority: a product page that kept its name, a blog post that moved from /2019/06/why-gutters-matter.html to /blog/why-gutters-matter, a service page that lost a folder level. It cannot handle a rename with no shared words, so the confidence number exists to tell you exactly which rows to read. Sort your attention by it and the manual work drops to the handful of pages that genuinely changed name.
Apache reads .htaccess and does it with mod_alias, so there is no regular expression to escape. Nginx wants one exact location block per rule, or for a very large map a single map block that has to live in the http context rather than inside server. Vercel wants a redirects array inside vercel.json, and it caps that array at 2048 entries. Cloudflare Bulk Redirects wants a CSV with no header row and full URLs including the hostname. The WordPress Redirection plugin wants five columns, not two. GoHighLevel reads none of those formats, its redirects are set in Sites, then URL Redirects, so what you get for it is a clean pair list to import or paste there. One mapping pass, six outputs, plus a review CSV that is the sheet you send the client for sign off.
Read the chain warnings. A redirect that points at a URL which is itself redirected costs an extra hop, and some hosts and crawlers give up after a few. Read the duplicate warnings, because a source path listed twice means only the first rule ever fires. Keep the old sitemap reachable for a while so crawlers keep finding the old URLs and following the redirect. Test a few real URLs after deploying, especially any with a query string, because none of these six formats match on the query string by default. And keep the review CSV, it is the record of what you decided when someone asks in six months why a page moved.
This page builds files. It cannot deploy them, it cannot see your server, and no tool can promise a search engine will pass every signal through a move. What it removes is the spreadsheet, the copy and paste, and the escaping mistakes that make a generated config silently match nothing.