All posts
Platform migrations

CMS Content Migration: How to Export, Clean and Import Content Between Platforms

CMS content migration, end to end: audit what to keep, export it, transform rich text, images and references, import it, and check every page before launch.

By Mehdi Hassan11 min read

The short answer

CMS content migration is moving pages, posts and assets from one website platform's CMS to another. Do it as a pipeline: inventory and audit the content, map the old content model to the new one, export, transform rich text, images and references, import in dependency order, then check every item and redirect every changed URL.

Key takeaways

  • Audit before you export. Every dead page you skip is one less item to clean, import and redirect.
  • Map fields between the old and new CMS in a spreadsheet before writing any import script.
  • Rich text, images and references cause most problems. Plan a transform step for each.
  • Import referenced collections first, such as authors and categories, then match items by slug.
  • Check imported content against the old site and keep a redirect for every URL that changes.

Most migration guides treat content as the easy part: export a CSV, import a CSV, done. In practice, content is where the hours go. Rich text loses its formatting, images keep pointing at the old platform, references break, and dead pages get faithfully moved to the new site. This guide walks through the full pipeline we use and links to a deeper guide for each step.

What is CMS content migration?

CMS content migration is the process of moving structured content, such as blog posts, case studies, team members and resource pages, along with their images and metadata, from one content management system to another. It's one part of a website migration, alongside design, build, redirects and analytics.

It applies whether you're moving between visual builders like Webflow and Framer, from WordPress or HubSpot to a headless CMS, or between headless platforms like Contentful, Sanity, Payload and Strapi. The tools differ; the pipeline doesn't.

  • Content: text fields, rich-text bodies, dates, flags and options.
  • Structure: collections, references between them, and URL slugs.
  • Assets: images, files and videos, including those embedded inside rich text.
  • Metadata: SEO titles, descriptions, social images and canonicals.
  • Behavior: forms, filters and anything else that depended on the old CMS.

Behavior is the part people forget. Forms in particular often post to the old platform's built-in handler, so they need their own plan; see migrating forms and lead capture.

How do you migrate CMS content between website platforms?

You migrate CMS content with an export, transform and import pipeline, wrapped in an audit at the start and a check at the end. Each stage has a clear output, which makes the work easy to divide and easy to rerun.

  1. Inventory

    Crawl the site and export every CMS collection so you have a full list of URLs and items, with traffic and backlinks next to each.

  2. Audit

    Mark every item keep, merge, rewrite, redirect or delete. Only kept and rewritten items move forward.

  3. Model

    Design the new collections and map each old field to a new field type, including references.

  4. Export

    Pull content out by CSV, API or platform export, plus every asset file.

  5. Transform

    Clean rich text, re-host images, convert references to slugs and normalize dates and options.

  6. Import

    Load collections in dependency order into the new CMS, starting with a small test batch.

  7. Verify

    Compare imported items with the originals, check metadata and links, and test on staging.

  8. Redirect and launch

    Add a 301 for every changed URL, launch, and watch Search Console and analytics.

Scripts make the pipeline repeatable. If an import goes wrong, you fix the transform and rerun it instead of editing hundreds of items by hand. That matters most on sites with large blogs or many collections.

Why should you audit content before a migration?

You should audit content before a migration because every page you move costs time to clean, import, check and maintain. Most sites carry pages nobody visits, old announcements, thin tag pages and duplicates, and a migration is the cheapest moment to drop them.

The audit is a copy decision as much as an SEO one. For each item, look at traffic, backlinks and conversions, then ask whether the message is still true and clear. A post with traffic but an outdated pitch is a rewrite, not a straight copy. Our content audit before migration template gives you the columns and decision rules.

Decision

When to use it

What happens to the URL

Keep

Traffic or links, message still accurate

Same URL, or 301 if the path changes

Merge

Several thin pages on one topic

301 from each to the merged page

Rewrite

Traffic or links, but outdated or unclear

Same URL, new copy

Redirect

No reason to exist, but has links

301 to the closest relevant page

Delete

No traffic, no links, no purpose

404 or 410, removed from the sitemap

If the audit shows many pages need new copy, decide whether to rewrite during the migration or after. We weigh the trade-offs in rewriting content during a migration. For pages you want AI engines to quote, consider an answer-first page structure while you're rewriting anyway.

How do you export content from your current CMS?

Export content using the platform's own export first, and its API when the export is incomplete. Most exports miss something: images inside rich text, references, SEO fields or drafts.

Platform

Main export route

Watch out for

Webflow

Per-collection CSV export, or the Data API

Image URLs point at Webflow's CDN

WordPress

Built-in export file, REST API or plugins

Shortcodes, page-builder markup, category URLs

Framer

CMS collections via plugins or CSV where available

Limited API compared with headless CMSs

HubSpot CMS

Blog and page exports, or the API

Modules and HubL templates don't transfer

Contentful

CLI export or Management API

Rich text is JSON, not HTML

Sanity

Dataset export

Portable Text needs serializing

Each platform has its own quirks. We cover them in detail in how to export Webflow CMS content and how to export a WordPress site's content.

How do you map content models between CMSs?

Map content models by listing every field in every old collection and choosing its new field type, collection and purpose. Do it in a spreadsheet, agree it with whoever edits the content, and only then build templates or write scripts.

The mapping is where you fix old mistakes. Free-text category fields can become references. Repeated blocks pasted into rich text can become structured fields. Fields used once can go. Our guide to content modeling for CMS migrations covers how to avoid copying the old structure, and content modeling 101 shows a good baseline for a SaaS site.

Old field

Common problem

Better model

Category as text

Typos create duplicate categories

Reference to a Categories collection

Author name in each post

Bios and photos repeated everywhere

Reference to an Authors collection

Pull quotes inside rich text

Styled by hand, inconsistent

Separate quote field or block type

SEO title missing

Falls back to post title

Dedicated SEO title and description fields

Hero image in rich text

Hard to reuse in cards

Dedicated image field

Check the destination's limits as you map. Framer CMS has no multi-reference fields, Webflow's plans set item limits, and Contentful's tiers cap content types, which is one reason teams move from it. If you're between headless platforms, read headless CMS migration.

How do you transform rich text, images and references?

Transform each of the three with its own rule: convert rich text to the format the new CMS expects, re-host every image and rewrite its URL, and turn references into slugs that match items already imported. These are the steps that decide whether imported content looks right.

Rich text

Rich text moves between three main formats: HTML, Markdown and structured JSON such as Portable Text or Contentful's rich-text format. Strip platform-specific classes and wrappers, convert custom blocks to standard elements, and fix heading levels so each post has one H1 from the template. Our guide to migrating rich text between CMSs covers each conversion.

Images and files

Download every asset, upload it to the new CMS or your own storage, and rewrite the URLs in both image fields and rich-text bodies. Keep alt text, and add it where it's missing.

References

Export references as slugs, import the referenced collection first, then match by slug during the main import. Slugs are stable and readable, unlike internal IDs that change between platforms.

For example, suppose a 200-post blog moving from WordPress to Webflow

Hypothetical example: the audit keeps 140 posts, merges 20 into 8 stronger posts and redirects the rest. Authors and categories are imported first as their own collections.

The transform script strips page-builder shortcodes, converts each body to clean HTML, downloads every inline image and rewrites its URL, and replaces category names with category slugs. Posts are imported in batches of 20, checked on staging, and published once the batch matches the originals. WordPress date-based URLs are mapped to the new /blog/slug pattern with 301s.

How do you import content into the new CMS?

Import content with the simplest method that handles your hardest field. CSV is fine for flat collections; the API or a plugin is better for rich text with images, references and large volumes.

Always import a small batch first, check it on a staging domain, then run the rest. Fixing the transform after ten items is much cheaper than fixing it after a thousand.

How do you check migrated content before launch?

Check migrated content by comparing counts, sampling items field by field, crawling the staging site, and testing everything that isn't content: forms, analytics and redirects. Each check catches a different kind of failure.

  • Counts. Kept items in the audit should equal imported items, per collection.
  • Samples. Open a random set of items side by side with the old site and compare text, images, links and metadata.
  • Crawl. Crawl staging for broken links, missing titles, duplicate descriptions and images still on the old CDN.
  • Redirects. Test every row in the redirect sheet returns a single 301 to the right page.
  • Tracking. Confirm events and conversions still fire; our guide to analytics continuity in a migration lists what to check.

After launch, watch Search Console for 404s and drops in indexed pages, and fix them quickly. Content problems that slip through are usually small and quick to fix if you spot them in the first weeks.

How much does CMS content migration cost?

CMS content migration is usually priced as part of a website migration, and the agency quotes we see for full migrations typically run from $1,500 to $25,000. These are typical ranges, and they vary by site size, CMS complexity and region. Larger platform exits take longer: WordPress to a headless Next.js setup is commonly quoted at six to twelve weeks, and leaving HubSpot CMS at six to ten weeks.

What drives the content part of the cost is volume after the audit, the number of collections and references, how messy the rich text is, and how many images sit inside it. A clean 50-post blog moves quickly. A 500-post blog full of page-builder markup doesn't. The reverse direction, out of a visual builder into code, follows the same logic; see Framer to Next.js migration cost.

Designify website package, up to 6 pages; migration scoped on the call
$8,000
Per extra page, fixed
+$500
Brand & design sprint, if the message needs work first
$3,000

Start with the step you're on. Each guide in this series goes deep on one stage of the pipeline.

Frequently asked questions

Can I migrate CMS content without a developer?
For small, flat collections, yes. CSV export and import tools in Webflow and Framer handle simple text, dates and image fields without code. Once you have rich text with inline images, references between collections or hundreds of items, a developer with an import script saves time and avoids manual fixes. Many teams do simple collections themselves and script the rest.
Should I migrate drafts and unpublished content?
Only if someone plans to finish them. Old drafts are a common source of clutter, and most CSV exports skip them anyway. List drafts during the audit, ask their owners whether each one is still wanted, and move only those. Keep a backup export of everything, so nothing is lost if a draft turns out to matter later.
How do I keep publish dates and authors after a migration?
Export them as fields and import them into dedicated date and reference fields in the new CMS. Many platforms set the publish date to the import date by default, so check that your template displays your imported date field instead. Authors should be a separate collection, imported first, so each post references the right person.
What should I back up before migrating content?
Back up every collection export, every asset file, the full crawl of the old site with titles and descriptions, your redirect rules, and form submissions stored on the old platform. Keep them somewhere outside both platforms. If anything goes wrong after launch, you can restore content or check what the old page said without reopening the old plan.
Can I migrate content and redesign at the same time?
Yes, and it's often cheaper because every template is rebuilt anyway. Keep URLs and core copy stable on pages that already rank, so you can tell what caused any change in traffic. Use the redesign to improve templates and structure, and use the content audit to decide which pages deserve new copy.

In this guide

· CEO & Design Director

Copywriter, designer and developer, and founder of Designify Studio. Over five years, 60+ projects across 14+ industries, for startups that have raised $300M+.

Want this done for you? Website, $8,000.

A multi-page marketing site, designed by us, developed in Next.js and animated. $8,000, one-time, up to 6 pages. Book a free 30-minute call to see if it fits.

Schedule Call