Case study · Commercial and residential AV · Client work

A full site migration with zero 404s.

An Inland Empire AV integrator needed off WordPress without losing the URLs Google had already indexed, and without touching the Microsoft 365 email the business runs on. We mapped every old URL, kept every blog post where it was, and changed only the two website records at cutover. The client's name is withheld for privacy.

Client work, described by industry and region. Every number below comes from our own audit and build records.

Inland Empire AV integrator homepage on a laptop, client site blurred for privacy
Inland Empire AV integrator on a phone
0
Old URLs returning 404On the final re-audit
client site · client site, blurred · captured live Oct 9, 2026
43

301 redirects mapped from old URLs to new pages

0

old sitemap URLs returning 404 on the final re-audit

12

blog posts kept on their exact original URLs

0

email records changed at cutover

From the redirect map, the pre-launch SEO check of all 52 pages and the post-launch re-crawl of the old site.

ClientCommercial and residential AVWordPress migration
The situation

Indexed URLs and live email.

The old site used nested service URLs that Google had already indexed. The new build organized services differently, so every old address needed a new home or visitors and search engines would hit dead ends.

The domain also carried the company's Microsoft 365 email. A careless DNS change could stop mail for the whole business, so the cutover plan had to leave every email record alone.

DNS at cutoverIllustration
RecordPurposeAt cutover
ARoot domain to the new siteChanged
CNAMEwww to the new siteChanged
MXIncoming emailUntouched
TXTEmail verification, SPF and DMARCUntouched
CNAMEEmail signing (DKIM)Untouched
CNAMEEmail client setupUntouched
Record types shown generically. Only the two website records changed.
What we did

A full site migration with zero 404s and zero email downtime.

The final re-audit found zero 404s across every old sitemap URL, and email kept flowing through the cutover.

01 · Redirects

Every old URL lands somewhere real.

We built the redirect map from the old site's sitemaps and tested every rule before launch. URLs keep their trailing slash, because that is how Google had indexed them. We also added catch-all rules for the feed, archive and pagination URLs WordPress generates on its own, and a branded 404 page for anything unmapped.

  • Each old address 301s to its closest new page
  • WordPress feed, category, tag and page-number URLs sent to the blog
  • A branded 404 with links back into the site
Redirect map, simplifiedIllustration
/services/old-parent/child-service/301 →/child-service/
/contact/301 →/contact-us/
/category/any-topic/301 →/blog/
/retired-service/any-page/301 →/services/
Illustrative paths. The real map has 43 rules.
02 · Blog and SEO

Nothing ranked gets moved.

All 12 existing blog posts kept their exact original URLs, so they needed no redirect at all. Before launch we checked all 52 pages for a unique title and a unique meta description: zero missing, zero duplicates.

Pre-launch SEO check

All 52 pages on the new build
CheckResult
Pages checked52
Missing titles or descriptions0
Duplicate titles or descriptions0
Blog posts on original URLs12 of 12
03 · After launch

We went looking for what we missed.

Two old URLs surfaced after launch that WordPress had been serving through its own internal redirects, outside its sitemap. Instead of patching just those two, we re-crawled the old site from its original server, found two more, and redirected all four. The final re-audit found zero 404s across every old sitemap URL.

The post-launch re-auditIllustration
Legacy URLs reported after launchServed by WordPress itself, never listed in its sitemap.404
More found by re-crawling the old siteEvery internal link on every old page was followed.Found
Redirects in the final mapAll four added and deployed.0 404s
Process

How the work actually ran.

The same order every time: measure, rank, fix, then measure again and report the result either way.

  1. 01

    Map

    Every URL in the old sitemaps paired with its new page.

    Blog posts
    Kept on original URL12
  2. 02

    Check

    Unique title and description on every page before launch.

    Pages checked
    Count52
  3. 03

    Cut over

    Only the two website DNS records changed.

    Email records
    Changed0
  4. 04

    Re-audit

    The old site re-crawled; the four legacy URLs it surfaced were all redirected.

    Final
    Redirects43
    404s0
The honest part

Our first map was not complete.

Two legacy URLs that WordPress served outside its sitemap surfaced after launch. We re-crawled the old site, found two more, and redirected all four. The lesson: a WordPress sitemap is not a full list of the URLs it serves.

This case shows a clean migration, not a growth result. We do not show this client's traffic or leads without their permission.

Questions

Case study FAQ

How do you avoid 404s when migrating off WordPress?

Map every URL in the old sitemaps to its new page with a 301 redirect, cover the feed, archive and pagination URLs WordPress creates on its own, then re-crawl the old site after launch for anything the sitemap never listed. On this project the final re-audit found zero 404s.

Did the company's email go down during the move?

No. Only the two website DNS records changed. Every email record stayed exactly as it was, and email kept flowing through the cutover.

Did the blog posts lose their rankings?

All 12 existing blog posts kept their exact original URLs, so nothing about their addresses changed and no redirects were needed for them.

What went wrong?

Two legacy URLs that WordPress served outside its sitemap surfaced after launch. We re-crawled the old site, found two more, and redirected all four within the same fix.

Start free

Want numbers like these for your site?

Book the free live audit. We measure where your site stands today and show you what we would fix first. Or call (702) 609-0182.