The Content Factory · Migration Recovery
David Meerman Scott wrote two blogs on TypePad for years — his Apollo artifact collection and the renovation of his 1958 mid-century house. When TypePad wound down and the posts moved to WordPress, the migration broke in a dozen quiet ways: photos went dead, dates got scrambled, URLs came out mangled. Here’s the move most people skip: you can read almost all of that damage straight out of the site’s own sitemap, before you touch a single page. We did it across 124 posts, and every fix traces to a file — not a guess.
The sitemap is the fastest audit you’re not running
When a blog gets moved between platforms, the wreckage is rarely random. Importers make the same mistakes every time, and they leave the same fingerprints — most of them sitting in /sitemap.xml, free, one request, no login. Before crawling a single post on apolloartifacts.com or techbuiltrenovation.com, the sitemap already told us what broke and where.
Rule we hold to: a number you report has to come from a file you can open. The importer’s own log claimed one post count; the live sitemap showed 124. We trust the sitemap, every time — the live site can’t round up, can’t misremember, can’t be optimistic. Count it, don’t estimate it.
What a broken migration leaves in the sitemap
Every fingerprint below maps to an exact fix. Learn to spot them and you can triage a migration in minutes instead of days.
| Fingerprint in the live sitemap | What it proves | Fix |
|---|---|---|
Slug is an under_score string cut to ~15 chars (apollo_command__2, moon_rock_conta) | The raw TypePad slug rode over untouched — WordPress uses hyphens, never underscores | Rewrite to a human slug, 301 the old one SEO |
lastmod is the import day (Oct 14, 2025) on a post that’s really from 2007 | The date got reset to the day the importer ran, not the day David wrote it | Backdate to the true date TRUST |
Image src starts web.archive.org/…im_/ or a dead /images/ path | The photo only “works” by borrowing the Internet Archive — one outage and it’s gone | Pull the id_ full-res original, rehost to WP media BROKEN |
That same archived src contains /images/2007/04/30/ | The post’s real publish date, handed to you for free | Use it to backdate AND rebuild the old URL FREE DATA |
A slug plus -2 next to its twin | The importer created a duplicate | Merge, keep the better copy, 301 the loser DUPE |
Typos frozen into the URL: reonovation, russion, biographis | A bad slug is now a permanent, indexable address | Fix the slug, 301 the misspelling EMBARRASSING |
The fourth row is the quiet winner. A broken image is annoying; the path inside that broken image is a gift — it carries the year, month, and day the post was published, which is exactly what you need to un-break the date and reconstruct the old permalink for the redirect. One defect hands you the fix for two others.
The recovery package
Everything below is derived from the live sites and checked against a file you can open. Nothing is estimated. Run in this order:
1. Slugs & dates. A triage sheet — 81 posts, each row carrying its exact fix and the true date pulled from the original image path.
2. Images. A runnable script that pulls the full-resolution originals from the Archive, uploads them to the WordPress media library, and writes a swap map for the 55 fragile images.
3. Redirects. 18 reconstructed 301s in .htaccess form, so the old Wikipedia / Forbes / WNYC / collectSPACE links land on the right new post.
4. Duplicates. The three -2 pairs, merged, loser redirected.
5. Typos. The flagship reonovation, the russion page, the biographis post — fixed and redirected.
One step we ran differently: enumerating posts that are missing entirely needs the Internet Archive’s index, which the build environment couldn’t reach. Rather than estimate it, we wrote the exact query into the README so it runs the second it’s on a machine with Archive access. A blocked step you hand off precisely beats a guessed number you have to walk back.
Don’t audit a migration by eye. The sitemap already knows what broke — underscore slugs, import-day dates, borrowed photos, real dates hidden in image paths. Read it first.
Steal this checklist
1. Pull /sitemap.xml before you crawl anything — it’s the cheapest, fastest read on a migration’s health.
2. Count from the live site, not the importer’s log. A number that doesn’t trace to a file you can open is an estimate, so label it or replace it.
3. Scan slugs for underscores and truncation, lastmod for the import date, image src for proxied or dead hosts.
4. Mine the image paths — /images/YYYY/MM/DD/ hands you the true publish date for free.
5. When a step is blocked, hand off the exact command — don’t paper over the gap with a plausible guess.
The one line that carries the method: the sitemap is a confession the migration can’t help making — read it before you trust anything else.
David’s archive is recoverable: every broken photo has a full-res original waiting in the Archive, and eighteen years of inbound links get their destinations back. The sites stay honest the same way every build in this series does — nothing publishes without a change list you can see first. Same discipline we run on the CXOTalk inventory audit and the Billy Batt delta.
Run a Quick Audit on your own site → How the Content Factory works →

