Example
staging.prlwarehouse.com (noindex staging of the 2026-09-02 restyle)
A staging copy of one of the two sites, where the move was built and verified before release.
For owners stuck on a platform: each old URL gets a 301, checked against a crawl, and the text is compared before release. The static target is checked at 12 stages on eight sites.
| Row | Old URL | New URL | Status |
|---|---|---|---|
| 01 | / | to / | kept: kept, no redirect needed |
| 02 | /menu | to /menu/slash added by WordPress | kept: kept, no redirect needed |
| 03 | /post/ | to /blog/ | 301: permanent redirect |
| 04 | /product | to /product/ | 301: permanent redirect |
| 05 | /old | to /menu/chain flattened | 301: permanent redirect |
| 06 | /blog/ | tag archive | decide: needs a decision |
| 07 | /About | to /about/case variant | 301: permanent redirect |
| 08 | /catering | to /catering/slash added by WordPress | kept: kept, no redirect needed |
| 09 | /about | to /about/slash added by WordPress | kept: kept, no redirect needed |
| 10 | /contact | to /contact/slash added by WordPress | kept: kept, no redirect needed |
| 11 | /visit | to /visit/slash added by WordPress | kept: kept, no redirect needed |
| 12 | /blog | to /blog/slash added by WordPress | kept: kept, no redirect needed |
| 13 | /blog/ | to /category/ | 301: permanent redirect |
| 14 | /blog/ | pagination | decide: needs a decision |
| 15 | /cart | platform system page | decide: needs a decision |
| 16 | /post/ | to /blog/ | 301: permanent redirect |
| 17 | /post/ | to /blog/ | 301: permanent redirect |
| 18 | /post/ | to /blog/ | 301: permanent redirect |
| 19 | /post/ | to /blog/ | 301: permanent redirect |
| 20 | /post/ | to /blog/ | 301: permanent redirect |
| 21 | /post/ | to /blog/ | 301: permanent redirect |
| 22 | /post/ | to /blog/ | 301: permanent redirect |
| 23 | /product | to /product/ | 301: permanent redirect |
| 24 | /product | to /product/ | 301: permanent redirect |
| 25 | /product | to /product/ | 301: permanent redirect |
| 26 | /product | to /product/ | 301: permanent redirect |
Select an old URL to see the pattern behind it.
# Redirect map: cafe.example (Wix) to WordPress. 16 permanent redirects.
# map block: http context. if line: inside the server block.
map $uri $ffd_redirect {
default "";
/post/sourdough-starter-guide /blog/sourdough-starter-guide/;
/product-page/house-blend-coffee /product/house-blend-coffee/;
/old-menu /menu/;
/About /about/;
/blog/categories/recipes /category/recipes/;
/post/why-we-mill-our-own-flour /blog/why-we-mill-our-own-flour/;
/post/winter-menu-is-here /blog/winter-menu-is-here/;
/post/meet-the-bakers /blog/meet-the-bakers/;
/post/holiday-hours /blog/holiday-hours/;
/post/catering-for-small-weddings /blog/catering-for-small-weddings/;
/post/how-we-roast-coffee /blog/how-we-roast-coffee/;
/post/cold-brew-at-home /blog/cold-brew-at-home/;
/product-page/sourdough-loaf /product/sourdough-loaf/;
/product-page/gift-card /product/gift-card/;
/product-page/cold-brew-concentrate /product/cold-brew-concentrate/;
/product-page/granola-jar /product/granola-jar/;
}
if ($ffd_redirect) { return 301 $ffd_redirect; }
# decide: /blog/tags/sourdough (tag archive)
# decide: /blog/page/2 (pagination)
# decide: /cart-page (platform system page) # Redirect map: cafe.example (Wix) to WordPress. 16 permanent redirects.
RedirectMatch 301 "^/post/sourdough-starter-guide$" "/blog/sourdough-starter-guide/"
RedirectMatch 301 "^/product-page/house-blend-coffee$" "/product/house-blend-coffee/"
RedirectMatch 301 "^/old-menu$" "/menu/"
RedirectMatch 301 "^/About$" "/about/"
RedirectMatch 301 "^/blog/categories/recipes$" "/category/recipes/"
RedirectMatch 301 "^/post/why-we-mill-our-own-flour$" "/blog/why-we-mill-our-own-flour/"
RedirectMatch 301 "^/post/winter-menu-is-here$" "/blog/winter-menu-is-here/"
RedirectMatch 301 "^/post/meet-the-bakers$" "/blog/meet-the-bakers/"
RedirectMatch 301 "^/post/holiday-hours$" "/blog/holiday-hours/"
RedirectMatch 301 "^/post/catering-for-small-weddings$" "/blog/catering-for-small-weddings/"
RedirectMatch 301 "^/post/how-we-roast-coffee$" "/blog/how-we-roast-coffee/"
RedirectMatch 301 "^/post/cold-brew-at-home$" "/blog/cold-brew-at-home/"
RedirectMatch 301 "^/product-page/sourdough-loaf$" "/product/sourdough-loaf/"
RedirectMatch 301 "^/product-page/gift-card$" "/product/gift-card/"
RedirectMatch 301 "^/product-page/cold-brew-concentrate$" "/product/cold-brew-concentrate/"
RedirectMatch 301 "^/product-page/granola-jar$" "/product/granola-jar/"
# decide: /blog/tags/sourdough (tag archive)
# decide: /blog/page/2 (pagination)
# decide: /cart-page (platform system page) # Redirect map: cafe.example (Wix) to WordPress. Netlify or Cloudflare Pages.
/post/sourdough-starter-guide /blog/sourdough-starter-guide/ 301
/product-page/house-blend-coffee /product/house-blend-coffee/ 301
/old-menu /menu/ 301
/About /about/ 301
/blog/categories/recipes /category/recipes/ 301
/post/why-we-mill-our-own-flour /blog/why-we-mill-our-own-flour/ 301
/post/winter-menu-is-here /blog/winter-menu-is-here/ 301
/post/meet-the-bakers /blog/meet-the-bakers/ 301
/post/holiday-hours /blog/holiday-hours/ 301
/post/catering-for-small-weddings /blog/catering-for-small-weddings/ 301
/post/how-we-roast-coffee /blog/how-we-roast-coffee/ 301
/post/cold-brew-at-home /blog/cold-brew-at-home/ 301
/product-page/sourdough-loaf /product/sourdough-loaf/ 301
/product-page/gift-card /product/gift-card/ 301
/product-page/cold-brew-concentrate /product/cold-brew-concentrate/ 301
/product-page/granola-jar /product/granola-jar/ 301
# decide: /blog/tags/sourdough (tag archive)
# decide: /blog/page/2 (pagination)
# decide: /cart-page (platform system page) {
"redirects": [
{ "source": "/post/sourdough-starter-guide", "destination": "/blog/sourdough-starter-guide/", "permanent": true },
{ "source": "/product-page/house-blend-coffee", "destination": "/product/house-blend-coffee/", "permanent": true },
{ "source": "/old-menu", "destination": "/menu/", "permanent": true },
{ "source": "/About", "destination": "/about/", "permanent": true },
{ "source": "/blog/categories/recipes", "destination": "/category/recipes/", "permanent": true },
{ "source": "/post/why-we-mill-our-own-flour", "destination": "/blog/why-we-mill-our-own-flour/", "permanent": true },
{ "source": "/post/winter-menu-is-here", "destination": "/blog/winter-menu-is-here/", "permanent": true },
{ "source": "/post/meet-the-bakers", "destination": "/blog/meet-the-bakers/", "permanent": true },
{ "source": "/post/holiday-hours", "destination": "/blog/holiday-hours/", "permanent": true },
{ "source": "/post/catering-for-small-weddings", "destination": "/blog/catering-for-small-weddings/", "permanent": true },
{ "source": "/post/how-we-roast-coffee", "destination": "/blog/how-we-roast-coffee/", "permanent": true },
{ "source": "/post/cold-brew-at-home", "destination": "/blog/cold-brew-at-home/", "permanent": true },
{ "source": "/product-page/sourdough-loaf", "destination": "/product/sourdough-loaf/", "permanent": true },
{ "source": "/product-page/gift-card", "destination": "/product/gift-card/", "permanent": true },
{ "source": "/product-page/cold-brew-concentrate", "destination": "/product/cold-brew-concentrate/", "permanent": true },
{ "source": "/product-page/granola-jar", "destination": "/product/granola-jar/", "permanent": true }
]
} source,target,regex,code
/post/sourdough-starter-guide,/blog/sourdough-starter-guide/,0,301
/product-page/house-blend-coffee,/product/house-blend-coffee/,0,301
/old-menu,/menu/,0,301
/About,/about/,0,301
/blog/categories/recipes,/category/recipes/,0,301
/post/why-we-mill-our-own-flour,/blog/why-we-mill-our-own-flour/,0,301
/post/winter-menu-is-here,/blog/winter-menu-is-here/,0,301
/post/meet-the-bakers,/blog/meet-the-bakers/,0,301
/post/holiday-hours,/blog/holiday-hours/,0,301
/post/catering-for-small-weddings,/blog/catering-for-small-weddings/,0,301
/post/how-we-roast-coffee,/blog/how-we-roast-coffee/,0,301
/post/cold-brew-at-home,/blog/cold-brew-at-home/,0,301
/product-page/sourdough-loaf,/product/sourdough-loaf/,0,301
/product-page/gift-card,/product/gift-card/,0,301
/product-page/cold-brew-concentrate,/product/cold-brew-concentrate/,0,301
/product-page/granola-jar,/product/granola-jar/,0,301 | Chains flattenedold redirects now point straight to the final page | 1 |
|---|---|
| Redirect loopsa person picks the real page | 0 |
| Many old URLs to one new URLonly variants of the same page may share one | 0 |
| Sent to the home pagethree or more is a soft 404 risk | 0 |
| Case and slash variants foldedeach variant still gets its own rule | 1 |
| Duplicates removed | 0 |
| Query strings droppedtracking tags like ?utm_source need no rule | 0 |
| ID-only addressesa person matches each ID to its page | 0 |
| Unaccountedevery URL in the list has a status | 0 |
Checked against Google's site-move guidance (opens Google Search Central)
3 need a decision. The audit resolves these.
Pick a sample site or paste your own URLs: the map, its 301 rules and its checks are worked out live in your browser, and nothing is uploaded.
Your platform is slow and pricey, a cage you want out of. What keeps you there is a Google result that leads to a dead page, and a lost weekend fixing links. We crawl the old site, map every URL, write the 301 redirects and compare the new text with the old before anything goes live.
Before anything changes, we back up the files, database and domain settings and restore them once on a test server. Undoing the move is planned as one change, and your customers keep the same links.
Your site sits on the GoDaddy builder or Wix, and you want to own it and edit it freely. We weigh a new builder or host against what you need.
Tell us which editing limits you want gone. The work can start there.
Two sites moved from Kirby to Astro on this method, built and verified on staging first. The migration case study walks through the checks. [Kirby, Astro 5, Tailwind 4]
Example
A staging copy of one of the two sites, where the move was built and verified before release.
A move-day checklist covers the home page, menu and order form, the padlock, test emails, contact messages, monitoring and backups. The old host stays available as the fallback.
Builder-to-builder moves, such as Wix to Framer, follow the same map-and-check method. WordPress conversions have their own page.
Your page text needs a checked destination as well as a redirect.
Replay
A real run, replayed: eight sites for trade businesses, 309 pages, 12 build stages, checked for look-alike pages across all 28 site pairs.
Example
One of the eight sites, from a collection of 309 pages in all. [Astro]
Judge the build quality yourself in the site factory. It also tested its contact-form handler against a test mail server.
We have moved sites for clients, too.
A host change needs a plan for your domain settings. Computers remember the old address for a set time. We shorten that time to minutes two days before the switch and raise it again once checks pass. [DNS, TTL]
The switch, drawn as a plan: the address refresh time (TTL) is lowered before move day T, both servers answer while the change spreads, and the old one stays ready as the way back.
Your customer records can move too. We plan an export from the tool holding your leads, operations or membership records into a database you own.
Before a hosting switch, we record the files, database settings and the domain records used for email. The site is copied to the new server and tested privately before the address switches, and the old host retires after the checks pass.
Your inbox and contact form belong in those checks. Mail settings are copied exactly, and test messages go in and out. [MX, SPF, DKIM]
The database work includes 27 repeatable database changes across two databases. [Postgres, Drizzle]
This part is for the technical reader.
Each old address gets an entry in a redirect map. The map is checked against the crawl and a truth table of expected destinations before release. [redirect map, 301 truth table]
Each site runs about 25 build tools. They add structured page data for search engines and compare content, so only the declared text change passes. Releases go out in one step, with a rollback and a health check. [schema.org, content fidelity, atomic release]
We check forms, tracking and checkout privately before a builder or hosting move, then record a short video tour of the site.
During a host switch the old server keeps running. Any orders or messages that land there late are copied over afterward.
Nothing moves until a paid site audit lands: every page, redirect and risk mapped, plus the platform we would pick and why. The audit is yours to keep. Your old platform had its run; stop at the audit, or pack up and leave with a scope you can review.
One sentence about the project is enough. Name the tools you already use, or point at an example on this site.