All Pro Services · allproutah.com · v5 rebuild

301 Redirect Map & Migration Plan

How the current 400-page site collapses into the lean ~56-page rebuild without losing rankings, backlinks, or AI citations. Every one of the 398 crawled URLs is accounted for — none is left to 404.

The promise No dead ends. Every old link — a Google result, a bookmark, a backlink, an AI citation — lands on the closest live page, so equity flows forward instead of evaporating on launch day.
398
live URLs audited (full site crawl)
56
destination pages on the new site
12
blog posts preserved with their own 301s
8
AI citations protected (H1 + FAQ kept)

The four migration principles

How we decide where every old URL goes

The map isn't mechanical. Four rules govern every redirect, and they trace straight back to the site-map decisions and the SEO audit.

01 · Consolidate

Many old URLs → one strong page

The old site split one topic across a dozen thin pages that cannibalized each other. Those all point to a single authoritative survivor.

Result: ~380 redirects are many-to-one consolidations — the opposite of the sprawl the audit flagged.

02 · Stay topical

Every redirect lands on a relevant page

No lazy "send everything to the homepage." A water-damage post goes to the water-damage service; a carpet post goes to carpet cleaning.

Why: Google honors a relevant 301 and passes its equity; an irrelevant one gets treated as a soft-404 and the equity is lost.

03 · Protect AI

Guard the 8 AI citations

The 12 surviving posts each get their own 301 to a clean new slug — and we keep the question-style H1 and FAQ block that Google AI & SearchGPT quote.

Why: those citations are hard-won free visibility; a sloppy migration erases them overnight.

04 · Preserve equity

Keep the pages that hold the links

The legitimate backlinks point at the homepage and the core service/geo pages. Every one of those targets is preserved 1:1.

In parallel: the toxic-backlink disavow runs under the SEO/GEO line so only clean equity carries over.


The big picture

Where the 398 URLs land

Six buckets. The bar length is the number of old URLs flowing into each. The story of the migration is in the two biggest bars — a handful of service pages absorb the bulk of a 400-page site.

13 service pages
35 legacy service URLs + 318 retired blog posts, folded topically
353301 → /services/…
21 city pages
one old "[city] water damage" URL → one new city page
21301 → /service-areas/…
12 blog posts
the surviving pillars, each to a clean flat slug
12301 → /blog/…
Core pages
about-aps · culture · management · insurance · contact · careers · gallery
7301 → /about, /contact…
Kept unchanged
home, blog index, and the service-areas hub URL don't move
3no redirect
Statewide
water-damage & mold "utah" pages → the single statewide page
2301 → /service-areas/utah

398 URLs total · 395 permanent (301) redirects · 3 unchanged · 0 left to 404.


The bulk of the map · services

13 service pages absorb 353 old URLs

Each row is one new service page and the legacy URLs that fold into it. The + retired posts count is old blog articles on that topic — near-duplicate content the audit found ranking for nothing, now consolidated onto the page that should actually rank.

New service pageLegacy service URLs folded inOld URLs
/services/water-damage-restoration pillar /Salt-lake-city-water-damage-restoration + 8 sub-pages (emergency water removal, water extraction, 24/7 response, flood cleanup, water damage repair, dehumidification, moisture detection, structural drying) + content pack-out + emergency board-up · + 142 retired posts 153
/services/air-duct-cleaning /other-services/cleaning-services/air-duct-cleaning · duct-cleaning-and-inspection-service · duct-cleaning-utah · 2 root air-duct articles · + 48 retired posts 53
/services/storm-disaster-cleanup new standalone line — collects the old "disaster cleanup / storm / winter storm" blog cluster · 40 retired posts 40
/services/carpet-cleaning /other-services/cleaning-services/carpet-cleaning · + 38 retired posts (carpet + general cleaning) 39
/services/mold-remediation /other-services/other-restoration/mold-remediation-salt-lake-city · + 19 retired posts 20
/services/flooded-basement-cleanup flooded-basement-cleanup-slc · basement-water-removal-slc · + 10 retired posts 12
/services/hoarding-biohazard-cleanup hoarding-cleanup · crime-scene-cleanup · emergency-disinfecting · 90-day-virus-shield · + 5 retired posts 9
/services/fire-smoke-damage /other-services/other-restoration/fire-damage-salt-lake-city · + 5 retired posts 6
/services/commercial-water-damage commercial-water-damage-restoration-slc + industrial / office / retail sub-pages · + 2 retired posts 6
/services/asbestos-lead-abatement /other-services/specialized-services/asbestos · /lead · + 4 retired posts 6
/services/sewage-cleanup /other-services/other-restoration/sewage-cleanup-company · + 3 retired posts 4
/services/janitorial-cleaning /other-services/commercial-cleaning/janitorial · /parking-porter · + 1 retired post 3
/services/reconstruction-remodeling /other-services/specialized-services/Salt-Lake-City-Remodeling-and-tenant-improvements · + 1 retired post 2

Sub-pages such as water extraction, structural drying and dehumidification are not lost — they become sections inside the pillar page, so their keywords consolidate onto one page that can rank instead of ten that compete.


The 12 survivors · blog

Blog posts that keep their own 301

Of ~330 old posts, these 12 earned their place — they rank, they answer a real question, or they're quoted by AI. Each maps from its old category-folder URL to a clean flat slug.

Old URLNew URLPillar
/blog/water-damage/what-is-the-difference-between-remediation-and-restoration/blog/remediation-vs-restorationAI
/blog/water-damage/how-long-does-water-damage-restoration-take-in-salt-lake-city/blog/how-long-does-water-damage-restoration-take-slcAI
/blog/water-damage-restoration/the-costs-of-water-damage-restoration-in-utah/blog/water-damage-restoration-cost-utahAI
/blog/water-damage/flood-pros-water-damage-restoration-top-services-offered/blog/top-water-damage-servicesAI
/blog/water-damage/expert-tips-for-filing-water-damage-insurance-claims/blog/filing-water-damage-insurance-claimsAI
/blog/water-damage/how-fast-should-water-damage-remediation-begin/blog/how-fast-should-water-damage-remediation-beginAI
/blog/water-damage/water-damage-remediation-for-category-3-water-damage/blog/category-3-water-damage-remediationAI
/blog/water-damage/rebuilding-draper-water-damage-restoration-efforts-in-full-swing/blog/rebuilding-draper-water-damage-restorationDraper
/blog/water-damage/water-damage-emergency-what-to-do-while-waiting-for-help/blog/water-damage-emergency-what-to-doWater
/blog/water-damage/how-sump-pump-maintenance-can-prevent-flooding-and-water-damage-in-the-basement/blog/sump-pump-maintenance-prevents-floodingWater
/blog/water-damage/know-when-to-replace-subflooring-after-water-damage/blog/when-to-replace-subflooring-after-water-damageWater
/blog/mold-remediation/master-dry-fog-mold-removal-all-pro-services-revealed/blog/dry-fog-mold-removalMold

The remaining ~318 posts don't get individual slugs — they 301 to their topical service pillar (see the service table above). Many are near-identical AI-spun variants of these 12.


Local footprint · 1:1

City & statewide redirects

The old site already had one page per city (all named "…water damage…"). These are clean one-to-one moves into the new /service-areas/ namespace, so no local ranking is disturbed.

Old city URL (abbrev.)New
…/salt-lake-county/midvale-water-damage-restoration/service-areas/midvale
…/salt-lake-county/west-valley-water-damage-restoration/service-areas/west-valley-city
…/salt-lake-county/murray-water-damage-cleanup/service-areas/murray
…/salt-lake-county/west-jordan-water-damage-restoration/service-areas/west-jordan
…/salt-lake-county/south-jordan-water-damage-restoration/service-areas/south-jordan
…/salt-lake-county/sandy-water-damage-restoration/service-areas/sandy
…/salt-lake-county/draper-water-damage-restoration/service-areas/draper
…/salt-lake-county/riverton-water-damage-restoration/service-areas/riverton
…/salt-lake-county/millcreek-water-damage-restoration/service-areas/millcreek
…/salt-lake-county/taylorsville-water-damage-restoration/service-areas/taylorsville
…/salt-lake-county/cottonwood-heights-water-damage/service-areas/cottonwood-heights
Old city URL (abbrev.)New
…/utah-county/provo-water-damage-restoration/service-areas/provo
…/utah-county/orem-water-damage-cleanup/service-areas/orem
…/utah-county/lehi-water-damage-restoration/service-areas/lehi
…/utah-county/pleasant-grove-water-damage/service-areas/pleasant-grove
…/utah-county/american-fork-water-damage/service-areas/american-fork
…/davis-county/bountiful-water-damage-restoration/service-areas/bountiful
…/other-areas/ogden-water-damage-restoration/service-areas/ogden
…/other-areas/park-city-water-damage-restoration/service-areas/park-city
…/other-areas/tooele-water-damage-restoration/service-areas/tooele
…/other-areas/heber-city-water-damage-repair/service-areas/heber-city
Statewide
/service-area/utah/water-damage-restoration-utah/service-areas/utah
/service-area/utah/mold-removal-utah/service-areas/utah

One near-zero page — /service-area/utah/duct-cleaning-utah (0 impressions) — 301s to /services/air-duct-cleaning rather than surviving as its own statewide page.


Core & utility

The pages people actually bookmark

Four old "about-ish" pages merge into one About page; contact, careers and gallery move to cleaner slugs. Home and the two hubs keep their exact URLs.

Old URLNew URLStatus
/about-aps/about301 · merge
/all-pro-culture/about301 · merge
/management-team/about301 · merge
/insurance-coverage/about301 · merge
/contact-us-online/contact301
/employment-opportunities/careers301
/project-gallery/gallery301
/  (home)/unchanged
/blog  (index)/blogunchanged
/service-areas  (hub)/service-areasunchanged

The one judgment call

Why we 301 the old blog posts instead of deleting them

301 (redirect) — the recommended default for all 398 URLs

Every retired blog post 301s to its topical service pillar. Even for thin, near-duplicate content, a relevant redirect is the safe choice: if a single old post ever earned a stray backlink or still pulls a trickle of traffic, that value flows to a live page instead of hitting a wall. It costs nothing extra to implement — the retired posts collapse into a small set of pattern rules — and anyone landing from an old bookmark sees a useful page, not an error.

The alternative — 410 "Gone": a 410 tells Google a page was intentionally, permanently removed with no replacement. It's the more aggressive cleanup and it does concentrate crawl budget faster. We don't recommend leading with it, because these posts do map cleanly to a relevant destination — so there's no upside to throwing that relevance away, and real downside if even one post held equity. If Roger prefers the hard cut, the ~318 topical posts can be switched to 410 in one line; the 12 survivors and all structural pages stay 301 either way.

Our call: 301 everything now; revisit 410 for the lowest-value posts after 6–12 months, once Google has fully processed the consolidation.


For the build

Implementation notes

How this map becomes live redirects on the Next.js + Vercel rebuild — and the housekeeping that makes the migration stick.

01

Normalize host & protocol first

Force a single canonical host — https://www.allproutah.com → apex or vice-versa — and http → https at the platform edge, before the path redirects run.

02

Match case-insensitively

Legacy URLs mix case (/Salt-lake-city-…). New slugs are all-lowercase, so redirect rules must lowercase-match to catch every variant.

03

Specific rules before patterns

The 12 survivor redirects and all 1:1 maps must be evaluated before the broad /blog/water-damage/*-style cluster rules, so a survivor never gets swept into its pillar.

04

All 301 (permanent), not 302

302s don't pass equity. Use permanent redirects and keep them live for at least 12 months — ideally indefinitely; they're cheap.

05

Publish a fresh XML sitemap

Submit the new ~56-URL sitemap.xml in Google Search Console and drop the old one, so Google re-crawls to the new structure quickly.

06

Watch the 404 report post-launch

Monitor GSC Coverage + server logs for the first weeks. Any old URL that surfaces a 404 gets a redirect added — the map is a living document during the 3-week monitoring window.