---
name: Content Migration
slug: content-migration
category: SEO
description: Content Migration moves content between platforms, domains, or URL structures while preserving SEO equity, bookmarks, and integrations. Use it for CMS migrations, site merges, replatforming, or launches that change existing URLs.
github: "https://github.com/rampstackco/claude-skills/tree/main/skills/content-migration"
language: Python
stars: 684
forks: 94
install: "npx degit https://github.com/rampstackco/claude-skills/tree/main/skills/content-migration ~/.claude/skills/content-migration"
installs_to: ~/.claude/skills/content-migration
source_path: skills/content-migration/SKILL.md
collection_size: 25
category_size: 164
collection_url: "https://dirskills.com/collections/rampstackco/claude-skills"
added: 2026-08-24T05:16:04.334Z
last_synced: 2026-08-24T05:16:04.334Z
canonical_url: "https://dirskills.com/skills/content-migration"
---

# Content Migration

Content Migration moves content between platforms, domains, or URL structures while preserving SEO equity, bookmarks, and integrations. Use it for CMS migrations, site merges, replatforming, or launches that change existing URLs.

**Install:**

```bash
npx degit https://github.com/rampstackco/claude-skills/tree/main/skills/content-migration ~/.claude/skills/content-migration
```

## README

# Content Migration

Move content from one platform, domain, or URL structure to another without breaking SEO, user bookmarks, or downstream integrations. Stack-agnostic.

---

## When to use

- Migrating from one CMS to another (e.g., WordPress to a headless setup)
- Consolidating multiple sites into one
- Splitting one site into multiple
- Changing URL structures
- Domain migration (one brand to another, mergers, rebrands)
- Migrating from a custom build to a platform (or vice versa)
- Content audit-driven cleanup as part of a larger move

## When NOT to use

- A net-new site with no existing content (no migration needed)
- Single-page edits or content updates within an existing site (use `content-and-copy`)
- Performance or technical SEO improvements without URL changes (use `seo-technical`)
- Routine content audits (use `seo-content-audit`)

---

## Required inputs

- The source: current platform, current URL structure, current content inventory
- The destination: target platform, target URL structure, target capabilities
- The reason for migration (drives priority of what to preserve)
- Constraints (timeline, budget, downtime tolerance)
- Stakeholders (SEO, content, dev, comms, support)

---

## The framework: 6 phases

Every content migration follows the same arc. Skipping a phase is how migrations go badly.

### Phase 1: Inventory

You can't migrate what you don't know. Build a complete map of what exists.

For each piece of content:
- URL
- Title
- Content type (article, landing page, product, doc, etc.)
- Status (live, draft, archived, scheduled)
- Last modified
- Author or owner
- Traffic (last 12 months), or state the gap per the data-availability rule
- Backlinks (top external referrers)
- Internal links pointing to it
- Embedded assets (images, video, downloads)

Pull from: CMS export, XML sitemap, server logs, analytics, search console, backlink tool.

The inventory is a spreadsheet. It's the source of truth for the rest of the migration.

### Phase 2: Audit and decide

For each piece of content, decide:

- **Keep:** migrate as-is
- **Update:** migrate with edits (refresh, expand, fix)
- **Merge:** combine with another piece, redirect both old URLs to the new
- **Redirect:** don't migrate; redirect to a related page
- **Delete:** don't migrate, no redirect (use sparingly; only for clearly low-value pages)

This is `seo-content-audit` work. The migration is the time to do it; not the time to skip it.

For each "Update" or "Merge," document the specific changes.

### Phase 3: Map URLs

The URL map is the most important migration artifact.

| Old URL | New URL | Status code | Reason |
|---|---|---|---|
| /old/path | /new/path | 301 | Direct equivalent |
| /old/page-1, /old/page-2 | /new/merged | 301 | Merged content |
| /old/deprecated | /related/replacement | 301 | Closest replacement |
| /old/junk | (none) | 410 | Intentionally gone |

Rules:
- 301 (permanent redirect) for content that has a new home
- 410 (gone) for intentionally deleted content
- Avoid 404 (not found) where 410 is more accurate
- Never redirect everything to the homepage; specific is always better
- Map every URL with traffic or backlinks; lower-priority URLs can be patterned

For domain migrations, use a 1:1 path mapping by default (`old.com/page` → `new.com/page`) with specific overrides where structure changes.

### Phase 4: Build and stage

Build the destination. Don't skip a staging environment.

- Set up the new platform with the new content
- Implement the URL map (most platforms support a redirect file or rule)
- Verify a representative sample of redirects work
- Test critical user flows (signup, purchase, contact)
- Validate analytics, monitoring, and integrations
- Test from search engine perspective: robots.txt, sitemap, canonicals

If possible, get the destination crawled by Google before the cutover, so it's already indexed when redirects flip.

### Phase 5: Cut over

The actual switch. Plan it like a launch (and use `launch-runbook` alongside this skill).

Pre-cutover:
- Comms to stakeholders (date, expected impact)
- Comms to users if downtime expected
- Support team prepped for likely questions
- Lower DNS TTL the day before (1-3 days for safety)
- Backup of source platform (in case rollback is needed)

Cutover:
- Redirect rules go live
- DNS changes go live
- New sitemap submitted to search engines
- Old sitemap removed or updated
- Internal links audited and updated to point to new URLs (where possible)
- Status page or banner if user-visible disruption

Immediately post-cutover:
- Smoke test top 50 pages from the inventory
- Verify redirects are 301 (not 302)
- Verify search console for errors
- Watch real-time traffic for unexpected drops
- Watch error logs for missing assets, broken integrations

### Phase 6: Monitor and recover

The migration isn't done at cutover. The next 30-90 days reveal problems.

Watch:
- **Traffic:** expect a temporary drop (10-30% is common); should recover in 4-8 weeks. A persistent drop beyond that is a problem.
- **Indexing:** new URLs should be crawled and indexed. Check coverage in search console.
- **Rankings:** track top keywords. A position drop is normal; a position cliff is a sign of a redirect or canonical problem.
- **Backlinks:** check that linked-from-elsewhere pages still resolve to the right destination.
- **404s:** any URL getting 404s that should have been redirected? Add to the map.
- **User reports:** support tickets, social media. Are users finding their old links?

Common 30-day fixes:
- Add missed redirects from 404 patterns
- Update internal links you missed
- Re-submit sitemap if indexing stalls
- Investigate and fix any crawl errors

---

## Workflow

### Step 1: Set the scope

What's in scope? What's out? Write it down. Migrations expand if not bounded.

### Step 2: Build the inventory

Pull every URL, traffic, backlinks, internal links. The spreadsheet is the artifact.

### Step 3: Decide per piece

Keep, update, merge, redirect, delete. Document decisions.

### Step 4: Map URLs

The complete redirect map. Reviewed by SEO and content stakeholders.

### Step 5: Build the destination

In a staging environment. Real content (or representative content). Real redirects.

### Step 6: Test

- Sample of redirects (top 20 by traffic, top 20 by backlinks, edge cases)
- Critical flows (signup, checkout, contact)
- Analytics and monitoring
- Search-engine perspective (robots.txt, sitemap, canonicals)

### Step 7: Cut over

Following the cutover checklist. Have rollback ready.

### Step 8: Monitor

Daily for the first week. Weekly for the first month. Monthly through 90 days.

### Step 9: Document the result

What worked. What didn't. Lessons. (See `after-action-report`.)

---

## Failure patterns

**No URL inventory.** Migration team thinks they have everything. They don't. Old PDFs, archived posts, marketing landing pages with backlinks. Build the inventory.

**302 redirects instead of 301.** 302 is temporary. SEO equity doesn't reliably pass. Use 301 unless you have a specific reason.

**Redirecting everything to the homepage.** "We'll let users find their way." They won't. They'll bounce. Map specifically.

**Long redirect chains.** /a → /b → /c → /d. Each hop loses a little equity and adds latency. Collapse to /a → /d.

**Forgetting non-HTML URLs.** PDFs, images, downloads. They have URLs too. They have backlinks too. Include in the map.

**Forgetting query strings.** `/page?id=123` is a different URL than `/page`. Patterns or specific maps for query string variants.

**Ignoring trailing slashes.** `/page` and `/page/` are different to most servers. Pick one canonical form. Redirect the other.

**No staging.** The first time the migration runs is in production. Things break. Stage and test.

**Stage that's too different from production.** Different DNS, different CDN, different platform. Tests pass on staging, fail on production. Stage as close to prod as feasible.

**Leaving the source live.** Two sites serving the same content. Duplicate content, split equity, user confusion. Take down the source after confirming the destination is solid.

**Leaving the source domain unrenewed.** Domain expires, redirects break, traffic dies. Renew the source domain for a long time, even if you're not using it.

**Big-bang migration with no rollback plan.** Something goes wrong. Now what? Plan rollback before cutover.

**Cutover during a busy period.** End of quarter, holiday season, big campaign. Bad timing. Pick a quiet period.

**No comms.** Users find their bookmarks broken with no warning. Some won't come back. Communicate.

**Migration as a one-time event.** It's not done at cutover. Monitor for 30-90 days. Fix what surfaces.

**Treating migration as just a dev project.** SEO, content, support, comms all need to be involved. Cross-functional from day one.

---

## Output format

A migration plan document includes:

- **Scope:** what's in, what's out
- **Inventory:** the URL spreadsheet
- **Audit decisions:** keep, update, merge, redirect, delete
- **URL map:** old to new, with status codes
- **Architecture:** new platform setup, redirect implementation
- **Cutover plan:** the runbook for switch day
- **Rollback plan:** if it goes wrong
- **Monitoring plan:** what's watched, for how long
- **Comms plan:** internal and external
- **Owners and timeline:** who does what when

---

## If required data is unavailable

This skill's output depends on data, measurements, or tool results it cannot generate on its own. When a required input, tool, or data source is unavailable or unverifiable, the sanctioned output is the deliverable with the gap stated: what was needed, what was actually obtained or verified, and which parts of the output are affected. Fabricating, estimating, or interpolating a required number to complete the deliverable is never sanctioned. A stated gap is a complete answer.

---

## Reference files

- [`references/migration-runbook.md`](references/migration-runbook.md): Step-by-step runbook for cutover day, including pre-flight checks, the actual switch, immediate verification, and the first 24 hours of monitoring.
