← All playbooks
Publishing migration

WordPress → Ghost

Move WordPress posts, pages, authors, media, taxonomies, subscribers, URLs, and publishing operations to Ghost without mistaking a content import for a complete site migration.

Typical timeline7–14 business days28–48 hours active work
Statusneeds review
Source testedWordPress documentation reviewed 2026-07-19
Destination testedGhost documentation reviewed 2026-07-19
Last reviewed2026-07-19
Sources3
Before you migrate

Should you make this move?

Both platforms have a case. Compare what you gain with what you give up before scheduling the cutover.

Current platform

WordPress

Reasons to stay
  • Unmatched ecosystem breadth and content ownership support almost any publishing model
  • Editors get a purpose-built publishing workflow instead of raw files
Reasons to leave
  • Plugin, hosting, security, and performance maintenance accumulate over time
  • Themes, extensions, and content models add maintenance and portability constraints
New platform

Ghost

What gets better
  • A focused publishing and membership platform is fast and pleasant for writers
  • Editors get a purpose-built publishing workflow instead of raw files
What gets worse
  • Its narrower ecosystem is less suitable for complex sites and custom application behavior
  • Themes, extensions, and content models add maintenance and portability constraints
Best of the move

Ghost: A focused publishing and membership platform is fast and pleasant for writers. This removes a major source-side concern: Plugin, hosting, security, and performance maintenance accumulate over time.

Worst of the move

What you lose: Unmatched ecosystem breadth and content ownership support almost any publishing model. What you inherit: Its narrower ecosystem is less suitable for complex sites and custom application behavior.

01At a glance

Know the shape of the move.

Transfer outcome12 features audited
Transfer outcome distributionClean transfer: 0, Partial transfer: 6, Manual rebuild: 3, Not transferred: 3.
Clean0
Partial6
Manual3
Lost3
Mapping route9 of 9 fields have a destination path

This timeline assumes

  • Up to 2,500 posts and pages, 20 authors, and 10 GB of media
  • The source remains publicly reachable until media and route verification passes.
  • Dynamic features outside the documented scope require an approved replacement.
  • The destination is built and reviewed on a private preview before DNS changes.
  • The migration team records evidence for every blocking verification check.
02Loss matrix

What survives the move.

“Partial” and “manual” are not footnotes. They are work that must be scheduled and verified.

ItemOutcomeImpactWhat happensMitigation
Custom post typeslostcriticalGhost’s built-in WordPress migrator does not support custom post types.Model essential records as posts, pages, tags, or a separate system before import.
Page-builder and uncommon shortcodespartialhighThe migrator handles selected shortcodes, but uncommon and plugin-defined markup can remain broken.Inventory every shortcode and convert representative content before the full import.
WordPress categoriespartialmediumGhost converts categories to tags and uses the first category as the primary tag.Approve the taxonomy mapping and audit primary-tag selection after import.
Plugins and plugin-controlled accesslostcriticalWordPress plugins and content whose access they modify do not run in Ghost.Choose explicit Ghost or external replacements before cutover.
Published posts and pagespartialcriticalCore titles and body content can move, but platform-specific blocks and metadata need review.Compare every route and a stratified content sample.
Images and downloadable mediapartialcriticalExports can reference remote files instead of carrying verified local originals.Copy originals, record hashes, and keep the source public until reconciliation.
Public URLs and redirectsmanualcriticalRouting rules and slug behavior differ between the two platforms.Create a source-to-destination URL registry and test every redirect.
Authors and permissionspartialhighBylines may move, but user accounts, roles, and credentials do not transfer safely.Create destination users deliberately and assign least privilege.
Taxonomies and navigationpartialhighCategories, tags, menus, and collection semantics rarely map one-to-one.Approve a mapping and test archive, menu, and breadcrumb behavior.
SEO metadata and structured datamanualcriticalTitles, descriptions, canonicals, social cards, and schema require destination configuration.Crawl both sites and block cutover on critical SEO differences.
Forms and submissionsmanualcriticalHosted form processing, spam controls, notifications, and submission history are platform-specific.Export history and test each replacement from submission through durable receipt.
Analytics and historical reportslostmediumHistorical platform reports do not become native destination history.Export dated reports and annotate the analytics cutover.
03Field and feature mapping

Where each thing goes.

SourceDestinationMethodNotes
WordPress post or pageGhost content item or pagetransformPreserve source ID and public URL.
TitleTitleautomaticVerify entities and Unicode.
Slug or pathSlug or pathtransformPreserve the public URL or create one redirect.
Rich bodyDestination rich contenttransformRepair unsupported blocks and embeds.
AuthorDestination user or bylinemanualProvision users before assignment.
Category or tagDestination taxonomytransformApprove hierarchy and primary classification.
Featured image and mediaDestination mediatransformCopy originals and preserve alt text.
SEO fieldsDestination SEO fieldsmanualVerify titles, descriptions, canonical, social data, and schema.
FormDestination form or external handlermanualRebuild validation, consent, spam control, storage, and alerts.
04Before you begin

Make the move recoverable.

Backup procedure

Create the source-of-truth backup

Preserve WordPress data, configuration, and operating evidence before any destination write.

  1. Export all available WordPress content and settings.
  2. Crawl production for routes, metadata, schema, assets, forms, status codes, and integrations.
  3. Capture themes, design tokens, screenshots, DNS, domains, users, redirects, analytics, and submissions.
  4. Record counts and cryptographic hashes in an immutable manifest.

Proof to capture: A signed manifest reconciles every scoped record class, runtime dependency, export file, count, and hash.

Transformation · Crawler, spreadsheet, and content transformer

Content and route registry

Preserve public content and URL intent.

  1. Inventory source values and exceptions.
  2. Define explicit destination mappings.
  3. Reject unmapped critical records.

Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.

Transformation · Checksum tool and schema validator

Asset and metadata normalization

Make media, taxonomy, and SEO deterministic.

  1. Normalize encoding, dates, identifiers, and blanks.
  2. Run a representative pilot.
  3. Reconcile accepted, rejected, and transformed rows.

Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.

05Handle with care

The things most likely to hurt.

These are operating limits. Treat every “Stop if” condition as a blocked migration, not a suggestion.

Import

A successful import hides missing runtime behavior

criticalpossible likelihood

A page renders while forms, access, search, or integrations fail.

Consequence
Visitors lose content or business actions.
Mitigation
Test behavior, not screenshots alone.

Stop if: Any critical runtime path lacks durable evidence.

Cutover

URLs or metadata change silently

criticalpossible likelihood

The destination crawl has missing routes, redirect chains, or canonical differences.

Consequence
Traffic and search visibility regress.
Mitigation
Require a route and SEO diff before DNS changes.

Stop if: A critical route lacks one valid destination.

Cleanup

Remote media disappears after source shutdown

highpossible likelihood

Destination markup still loads source-hosted assets.

Consequence
Images and downloads break later.
Mitigation
Copy and hash every required asset.

Stop if: A critical asset depends on the source domain.

06Precise timeline

Do the work in this order.

Estimate forUp to 2,500 posts and pages, 20 authors, and 10 GB of media
Total elapsed7–14 business days
Active work28–48 hours
BufferAdd 5–10 days for custom post types, memberships, large exports, or unusual page-builder shortcodes.
01
Days 1–3Inventory and decisions2–3 days
02
Days 3–5Backup and reconcile1–3 days
03
Days 5–12Map and pilot3–8 days
04
Days 10–20Final delta and switch1–5 days
05
Days 12–40Observe and close3–10 days
  1. Days 1–3 · inventory

    Inventory and decisions

    6–12 hours active2–3 days elapsedOwner review waiting
    • Inventory WordPress data, features, users, domains, and integrations.
    • Approve scope, owners, mappings, and exclusions.

    Depends on: WordPress and Ghost administrator access

    Stop / go checkpoint

    Export?

    Go when: Every critical item has an owner and disposition.

    Stop when: Consent, billing, access, or system ownership is unclear.

  2. Days 3–5 · backup

    Backup and reconcile

    5–10 hours active1–3 days elapsedExport processing waiting
    • Create immutable exports and configuration evidence.
    • Reconcile counts, totals, and hashes.

    Depends on: Approved inventory

    Stop / go checkpoint

    Transform?

    Go when: Source totals and export manifests agree.

    Stop when: Any critical dataset or configuration is absent.

  3. Days 5–12 · pilot

    Map and pilot

    10–35 hours active3–8 days elapsedDestination processing and review waiting
    • Configure Ghost and transform representative data.
    • Run a pilot containing normal records and every critical edge case.

    Depends on: Verified backup

    Stop / go checkpoint

    Scale?

    Go when: Pilot mappings, behavior, access, and evidence pass.

    Stop when: Any critical check fails or produces unexplained variance.

  4. Days 10–20 · cutover

    Final delta and switch

    5–25 hours active1–5 days elapsedDNS, import, or sync propagation waiting
    • Freeze production writes in WordPress.
    • Apply the final delta, switch ownership, and run blocking checks.

    Depends on: Passed pilot and approved rollback

    Stop / go checkpoint

    Open production?

    Go when: Counts reconcile and one destination system owns production.

    Stop when: A source writer remains active or a blocking check fails.

  5. Days 12–40 · observe

    Observe and close

    3–18 hours active3–10 days elapsedOperating-cycle evidence waiting
    • Monitor one complete operating cycle.
    • Sign the verification report and close rollback only after stability.

    Depends on: Verified cutover

    Stop / go checkpoint

    Close rollback?

    Go when: No trigger occurs during the agreed observation period.

    Stop when: Data, access, delivery, routing, or business results regress.

07The point of change

Cut over with a way back.

Go live

Cutover

Make Ghost the only production system without losing the final WordPress delta.

Recommended window: A low-volume weekday morning with platform, data, DNS, and business owners available.

  1. Freeze production writes and scheduled actions in WordPress.
  2. Export, transform, and reconcile the final delta.
  3. Apply the approved delta to Ghost.
  4. Switch domains, forms, integrations, sending, or sync ownership as applicable.
  5. Run every blocking verification check and keep the source intact.

Proof to capture: Ghost owns production, totals reconcile, and every blocking check has durable evidence.

Return to safety

Rollback

Return production ownership to WordPress without losing destination-era changes.

Deadline: Within seven days and before source data, plans, credentials, domains, or billing are changed.

  1. Stop new writes and scheduled actions in Ghost.
  2. Restore the prior WordPress routing, forms, integrations, sending, or sync ownership.
  3. Export the Ghost post-cutover delta.
  4. Review and apply safe destination-era changes to WordPress.
  5. Run the same blocking checks against the restored source.

Proof to capture: WordPress again owns production with current data and no duplicate destination action.

Rollback immediately when
  • Unexplained critical count or value variance
  • Missing or exposed critical data
  • Duplicate production action
  • Failed access, routing, delivery, or integration check
  • A critical feature has no safe destination replacement
08Verification report

Prove the migration worked.

Every blocking check must pass. Capture the evidence before cleanup begins.

0%
Interactive report preview0 / 8 checks passed
PassIDCheckMethodExpected resultEvidence
V-01BlockingURL dispositionCrawl every source URL.One 200 destination or one-hop permanent redirect.Crawl diff.
V-02BlockingRecord and field reconciliationCompare counts and stratified records.Every scoped item and critical field maps.Content manifest.
V-03BlockingBinary independenceCompare URLs, hashes, sizes, and source-domain requests.No required asset depends on the source.Asset report.
V-04BlockingMetadata and index controlCompare titles, descriptions, canonicals, robots, social data, and schema.Approved parity with no accidental noindex.SEO diff.
V-05BlockingSubmission lifecycleSubmit every form and upload path.Validation, storage, consent, notification, and response pass.Submission IDs.
V-06BlockingRestricted contentTest anonymous and authorized roles.No restricted content leaks.Access matrix.
V-07Responsive templatesCompare key pages at approved breakpoints.Content and interactions meet acceptance.Screenshot set.
V-08BlockingSingle source of truthInspect publishing and integrations in both systems.Ghost alone owns production.Operating inventory.
09Post-migration cleanup

Remove the scaffolding safely.

Safe after: One complete operating cycle, at least seven stable days, and owner sign-off on every blocking check.

  1. Create final WordPress exports and archive verification evidence.
  2. Revoke temporary credentials, API keys, webhooks, and elevated roles.
  3. Remove obsolete embeds, forms, jobs, integrations, and DNS records.
  4. Keep the source intact through the approved retention window.
  5. Cancel paid plans only after billing, legal, and recovery review.
  6. Schedule the next Ghost backup, access, and migration-playbook review.
10Experiences from the field

When the plan met reality.

First-hand accounts are preferred. Vendor case studies are labeled, and every note below is an editorial paraphrase—follow the link for the full context.

First-person accountNeville Hobson · Studio6

From WordPress to Ghost: Reflections on a Fresh Start

Neville Hobson evaluated moving more than 4,000 WordPress posts and pages, then chose a new-domain Ghost site while keeping WordPress online as an archive. Thousands of CDN-hosted images, shortcodes, custom formatting, redirect risk, and SEO uncertainty made a full import conflict with the goal of simplification. A Ghost Pro trial validated the new writing and newsletter workflow before the March cutover.

What they recommend
  • Audit image hosting, shortcodes, custom formatting, and redirect coverage before promising a full historical migration.
  • Consider an archived source plus a fresh destination when preserving every legacy page would create permanent cleanup work.
Worth noticing
  • The best migration decision was not to migrate everything; the old WordPress site remained a deliberate archive and fallback.
  • Ghost reduced publishing overhead but offered less customization and no WordPress-style media library.
Sources and maintenance

Built to be reviewed.

Tested 2026-07-19. Next scheduled review: 2026-10-19.

  1. Ghost: migrate from WordPressAccessed 2026-07-19
  2. WordPress.com: export website contentAccessed 2026-07-19
  3. Ghost: import membersAccessed 2026-07-19