Magister Digital AI

Site Migration Runbook


skill: site-migration-runbook title: CGH Injury Lawyers, Site Migration Runbook (Replatform, Protect the Money Pages) oneLiner: An ordered, do-not-skip runbook to replatform cghlawfirm.com without losing rankings on the Denver practice x city money pages, with the redirect map, DNS cutover, and Search Console steps spelled out. client: CGH Injury Lawyers

What it produced for CGH Injury Lawyers

Applied the three-phase runbook to a real CGH scenario: replatforming cghlawfirm.com onto a new stack while keeping the same domain and the same URL architecture (/{city}/{practice}-lawyer/ money pages, /practice-areas/{practice}/ hubs, /blog/ support articles). The migration's entire job is to keep the highest-value pages ranking through the cutover: the Denver car, truck, and motorcycle money pages that drive the firm's most expensive, highest-intent traffic.

Owner: willie (WordPress / build). Handoffs marked for tommy (Search Console, redirects, baseline), knox (DNS, SSL), and einstein (ranking impact). Because this is a YMYL legal site, the post-migration check also verifies that no published claim, fee language, or schema @id broke during the move.

The money pages that must not lose rank (protect-list)

These are the URLs the whole runbook exists to protect. Capture a position and traffic baseline for each before touching anything.

PriorityURLWhy it is protected
P0/denver/car-accident-lawyer/Flagship money page, proven case-result category
P0/denver/truck-accident-lawyer/Highest-CPC practice, highest revenue per case
P0/denver/motorcycle-accident-lawyer/High value, build-priority node
P0/denver/dog-bite-lawyer/Active geo-article destination
P1/practice-areas/car-accidents/, /practice-areas/dog-bites/Practice hubs, internal-link authority
P1/blog/typical-car-accident-settlement-amounts-in-colorado/Settlement pillar that supports the money pages
P1/blog/colorado-dog-bite-law/, /blog/average-dog-bite-settlement-in-colorado/Existing support articles, do not orphan
P2Attorney bio pages (Kevin Cheney and each attorney)E-E-A-T and entity signals for a YMYL firm

Phase 1: Pre-Migration (start 24 to 48 hours before)

PRE-MIGRATION:
- [ ] Full backup of BOTH the live site and the new build (files + database). 3-2-1 rule.
      Restore-test the backup; an untested backup is not a backup.
- [ ] Full crawl export of cghlawfirm.com to capture EVERY live URL. This export is the
      source of the redirect map. Confirm all protect-list URLs appear in the crawl.
- [ ] Export content / database from the current platform.
- [ ] Note all plugins, themes, schema injectors, and settings with versions, so the new
      stack has parity (especially the JSON-LD that sets schema @id to cghlawfirm.com).
- [ ] Lower DNS TTL to 300 seconds, 24 to 48 hours BEFORE cutover.  [handoff: knox]
- [ ] Build and fully test staging: every money-page template, the case-evaluation form,
      the click-to-call link, and every interactive element.
- [ ] Capture the rankings + organic-traffic BASELINE for the protect-list above, so any
      post-cutover movement is measurable.  [handoff: tommy / einstein]
- [ ] YMYL pre-check: confirm the contingency "no fee unless we win" language, any case
      results, and the "prior results do not guarantee similar outcomes" disclaimer are
      present and unchanged on staging. Do not let a migration silently drop a compliance
      disclaimer.

Phase 2: Migration (the cutover window)

MIGRATION:
- [ ] Put the old site in maintenance mode so no content changes are lost mid-move.
- [ ] Execute the migration (files + database to the new stack / host).
- [ ] Update database URLs serialized-safe. On WordPress use WP-CLI search-replace,
      NEVER a raw SQL find-replace (it corrupts serialized data and can break schema).
- [ ] Test all functionality on the new environment BEFORE flipping DNS: the case
      evaluation form actually delivers, click-to-call dials the tracked number, money
      pages render, attorney bios render with correct H1 and meta.
- [ ] Verify SSL is installed and valid on the new host, no mixed-content warnings.  [handoff: knox]
- [ ] Update DNS to point at the new host.  [handoff: knox]

Phase 3: Post-Migration (immediately, then monitor for weeks)

POST-MIGRATION:
- [ ] Spot-check every protect-list URL on the live new site (all four Denver money pages first).
- [ ] Confirm the case-evaluation form submits AND the lead actually arrives. One broken
      form on a PI site is lost cases, not just lost traffic.
- [ ] Confirm analytics AND call tracking fire on the new pages.  [handoff: tommy / analytics]
- [ ] Implement 301 redirects for every changed URL from the Phase 1 crawl export.
      Old URL to its closest live equivalent, one hop, no chains.
- [ ] Submit the new XML sitemap to Search Console; request indexing of the protect-list pages first.  [handoff: tommy]
- [ ] Monitor 404s continuously (server logs + Search Console coverage). Map every new 404 to a redirect same-day.
- [ ] Monitor rankings against the Phase 1 baseline. A brief reindex dip is normal; a
      sustained drop on a money page means a broken redirect, a blocked crawl, or lost content.  [handoff: tommy / einstein]
- [ ] YMYL post-check: schema @id still resolves to cghlawfirm.com, fee language intact,
      result disclaimers present on every page that shows a case result.
- [ ] Client sign-off (Kevin Cheney / firm contact).

Redirect discipline (the part that saves or sinks the money pages)

  • Every changed URL gets a 301 (permanent) to its closest live equivalent. A 302 leaks authority and is the classic migration mistake.
  • One hop only. If the old platform served /denver-car-accident-lawyer/ (flat) and the live pattern is /denver/car-accident-lawyer/ (foldered), redirect old straight to the final foldered URL, never through an interim path.
  • Do NOT blanket-redirect old URLs to the homepage. Google treats a homepage catch-all as a soft 404 and the page's ranking signal is lost. Each old money page maps to its exact new money page.
  • Watch the known flat-to-blog drift flagged in the CGH pack: the old flat /how-much-is-my-car-accident-case-worth-in-denver/ must 301 to /blog/how-much-is-my-car-accident-case-worth-in-denver/, and the old settlement pillar path must 301 to /blog/typical-car-accident-settlement-amounts-in-colorado/. Verify canonicals point at the new /blog/ paths, not the old flat ones.
  • Keep the redirect map as a checked-in artifact. Sample rows:
Old URLNew URLType
/denver-car-accident-lawyer//denver/car-accident-lawyer/301
/how-much-is-my-car-accident-case-worth-in-denver//blog/how-much-is-my-car-accident-case-worth-in-denver/301
/typical-car-accident-settlement-amounts-in-colorado//blog/typical-car-accident-settlement-amounts-in-colorado/301
/attorneys/kevin-cheney//attorneys/kevin-cheney/no change, verify it still resolves

DNS cutover notes

  • TTL was lowered in Phase 1 so the switch propagates in minutes, not hours.
  • Keep the OLD host live and serving through the propagation window. Both can serve during propagation; do not tear down the old box the moment DNS flips, it is the fallback.
  • SSL on the new host is verified BEFORE the flip (Phase 2), so no Denver visitor searching "car accident lawyer" ever lands on an insecure-warning page.

Launch and handoff

LAUNCH:
- [ ] Final backup of the old site, kept until the new site is proven stable 30+ days.
- [ ] DNS prepared, TTL lowered, SSL verified.
- [ ] Migration executed and verified; redirects implemented and spot-checked on the protect-list.
- [ ] Search Console sitemap submitted, key pages requested.
- [ ] Analytics + call tracking verified firing.
- [ ] Post-launch 404 and ranking monitoring active.

HANDOFF:
- [ ] Documentation delivered: what changed, where things live, the full redirect map.
- [ ] Credentials transferred securely (out of any Asana / public copy, per the ops rule).
- [ ] Monitoring plan active: weekly ranking check on the protect-list for the first month.

So-what / now-what: the single highest risk in this migration is a Denver money page losing rank during reindex. The plan mitigates it with a measured baseline, exact one-hop 301s for the flat-to-folder and flat-to-blog drift, old-host fallback during propagation, and same-day 404 mapping. The YMYL pre and post checks make sure the move does not silently drop a fee disclaimer or break the cghlawfirm.com schema identity.