Ghost → Astro
Move content, assets, authors, URLs, SEO, design, forms, permissions, integrations, and publishing operations from Ghost into Astro with an explicit exception ledger and evidence-based cutover.
Should you make this move?
Both platforms have a case. Compare what you gain with what you give up before scheduling the cutover.
Ghost
- A focused publishing and membership platform is fast and pleasant for writers
- Editors get a purpose-built publishing workflow instead of raw files
- Its narrower ecosystem is less suitable for complex sites and custom application behavior
- Themes, extensions, and content models add maintenance and portability constraints
Astro
- Content-focused sites ship very little client JavaScript by default
- Managed deployments reduce infrastructure and release-management work
- Repository-based publishing and custom integrations require engineering ownership
- Runtime assumptions, platform services, and pricing models shape the architecture
Astro: Content-focused sites ship very little client JavaScript by default. This removes a major source-side concern: Its narrower ecosystem is less suitable for complex sites and custom application behavior.
What you lose: A focused publishing and membership platform is fast and pleasant for writers. What you inherit: Repository-based publishing and custom integrations require engineering ownership.
Jump to a section
Know the shape of the move.
This timeline assumes
- Up to 10 sites, 10,000 content items, and 25,000 public routes
- 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.
What survives the move.
“Partial” and “manual” are not footnotes. They are work that must be scheduled and verified.
| Item | Outcome | Impact | What happens | Mitigation |
|---|---|---|---|---|
| Posts, pages, authors, tags, images, and public routes | partial | critical | Core posts, pages, authors, tags, images, and public routes can move, but Ghost and Astro use different models, limits, identifiers, and import behavior. | Pilot every feature class, preserve source IDs, and reconcile accepted, transformed, rejected, and excluded items. |
| Members, newsletters, paid subscriptions, themes, and admin workflows | manual | critical | Ghost membership and publishing runtime must be retained through APIs or rebuilt with separate services and repository workflows. | Inventory every active dependency, approve its destination disposition, and test the replacement before source writes stop. |
| Published posts and pages | partial | critical | Core 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 media | partial | critical | Exports can reference remote files instead of carrying verified local originals. | Copy originals, record hashes, and keep the source public until reconciliation. |
| Public URLs and redirects | manual | critical | Routing rules and slug behavior differ between the two platforms. | Create a source-to-destination URL registry and test every redirect. |
| Authors and permissions | partial | high | Bylines may move, but user accounts, roles, and credentials do not transfer safely. | Create destination users deliberately and assign least privilege. |
| Taxonomies and navigation | partial | high | Categories, tags, menus, and collection semantics rarely map one-to-one. | Approve a mapping and test archive, menu, and breadcrumb behavior. |
| SEO metadata and structured data | manual | critical | Titles, descriptions, canonicals, social cards, and schema require destination configuration. | Crawl both sites and block cutover on critical SEO differences. |
| Forms and submissions | manual | critical | Hosted 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 reports | lost | medium | Historical platform reports do not become native destination history. | Export dated reports and annotate the analytics cutover. |
| Theme and visual presentation | lost | high | Source themes and design systems do not run on the destination platform. | Rebuild approved templates and compare screenshots at supported breakpoints. |
| Integrations and scheduled jobs | manual | critical | API keys, webhooks, embeds, and scheduled jobs remain connected to the source. | Inventory, replace, rotate, and test every production integration. |
Where each thing goes.
| Source | Destination | Method | Notes |
|---|---|---|---|
| Ghost post or page | Astro content item or page | transform | Preserve source ID and public URL. |
| Title | Title | automatic | Verify entities and Unicode. |
| Slug or path | Slug or path | transform | Preserve the public URL or create one redirect. |
| Rich body | Destination rich content | transform | Repair unsupported blocks and embeds. |
| Author | Destination user or byline | manual | Provision users before assignment. |
| Category or tag | Destination taxonomy | transform | Approve hierarchy and primary classification. |
| Featured image and media | Destination media | transform | Copy originals and preserve alt text. |
| SEO fields | Destination SEO fields | manual | Verify titles, descriptions, canonical, social data, and schema. |
| Form | Destination form or external handler | manual | Rebuild validation, consent, spam control, storage, and alerts. |
Make the move recoverable.
Create the source-of-truth backup
Preserve Ghost data, configuration, and operating evidence before any destination write.
- Export all available Ghost content and settings.
- Crawl production for routes, metadata, schema, assets, forms, status codes, and integrations.
- Capture themes, design tokens, screenshots, DNS, domains, users, redirects, analytics, and submissions.
- 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.
Content and route registry
Preserve public content and URL intent.
- Inventory source values and exceptions.
- Define explicit destination mappings.
- Reject unmapped critical records.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
Asset and metadata normalization
Make media, taxonomy, and SEO deterministic.
- Normalize encoding, dates, identifiers, and blanks.
- Run a representative pilot.
- Reconcile accepted, rejected, and transformed rows.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
The things most likely to hurt.
These are operating limits. Treat every “Stop if” condition as a blocked migration, not a suggestion.
A successful import hides missing runtime behavior
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.
URLs or metadata change silently
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.
Remote media disappears after source shutdown
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.
Do the work in this order.
- Days 1–3 · inventory
Inventory and decisions
6–12 hours active2–3 days elapsedOwner review waiting- Inventory Ghost data, features, users, domains, and integrations.
- Approve scope, owners, mappings, and exclusions.
Depends on: Ghost and Astro administrator access
Stop / go checkpointExport?
Go when: Every critical item has an owner and disposition.
Stop when: Consent, billing, access, or system ownership is unclear.
- 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 checkpointTransform?
Go when: Source totals and export manifests agree.
Stop when: Any critical dataset or configuration is absent.
- Days 5–12 · pilot
Map and pilot
10–35 hours active3–8 days elapsedDestination processing and review waiting- Configure Astro and transform representative data.
- Run a pilot containing normal records and every critical edge case.
Depends on: Verified backup
Stop / go checkpointScale?
Go when: Pilot mappings, behavior, access, and evidence pass.
Stop when: Any critical check fails or produces unexplained variance.
- Days 10–20 · cutover
Final delta and switch
5–25 hours active1–5 days elapsedDNS, import, or sync propagation waiting- Freeze production writes in Ghost.
- Apply the final delta, switch ownership, and run blocking checks.
Depends on: Passed pilot and approved rollback
Stop / go checkpointOpen production?
Go when: Counts reconcile and one destination system owns production.
Stop when: A source writer remains active or a blocking check fails.
- 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 checkpointClose rollback?
Go when: No trigger occurs during the agreed observation period.
Stop when: Data, access, delivery, routing, or business results regress.
Cut over with a way back.
Cutover
Make Astro the only production system without losing the final Ghost delta.
- Freeze production writes and scheduled actions in Ghost.
- Export, transform, and reconcile the final delta.
- Apply the approved delta to Astro.
- Switch domains, forms, integrations, sending, or sync ownership as applicable.
- Run every blocking verification check and keep the source intact.
Proof to capture: Astro owns production, totals reconcile, and every blocking check has durable evidence.
Rollback
Return production ownership to Ghost without losing destination-era changes.
- Stop new writes and scheduled actions in Astro.
- Restore the prior Ghost routing, forms, integrations, sending, or sync ownership.
- Export the Astro post-cutover delta.
- Review and apply safe destination-era changes to Ghost.
- Run the same blocking checks against the restored source.
Proof to capture: Ghost again owns production with current data and no duplicate destination action.
- 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
Prove the migration worked.
Every blocking check must pass. Capture the evidence before cleanup begins.
| Pass | ID | Check | Method | Expected result | Evidence |
|---|---|---|---|---|---|
V-01Blocking | URL disposition | Crawl every source URL. | One 200 destination or one-hop permanent redirect. | Crawl diff. | |
V-02Blocking | Record and field reconciliation | Compare counts and stratified records. | Every scoped item and critical field maps. | Content manifest. | |
V-03Blocking | Binary independence | Compare URLs, hashes, sizes, and source-domain requests. | No required asset depends on the source. | Asset report. | |
V-04Blocking | Metadata and index control | Compare titles, descriptions, canonicals, robots, social data, and schema. | Approved parity with no accidental noindex. | SEO diff. | |
V-05Blocking | Submission lifecycle | Submit every form and upload path. | Validation, storage, consent, notification, and response pass. | Submission IDs. | |
V-06Blocking | Restricted content | Test anonymous and authorized roles. | No restricted content leaks. | Access matrix. | |
V-07 | Responsive templates | Compare key pages at approved breakpoints. | Content and interactions meet acceptance. | Screenshot set. | |
V-08Blocking | Single source of truth | Inspect publishing and integrations in both systems. | Astro alone owns production. | Operating inventory. |
Remove the scaffolding safely.
Safe after: One complete operating cycle, at least seven stable days, and owner sign-off on every blocking check.
- Create final Ghost exports and archive verification evidence.
- Revoke temporary credentials, API keys, webhooks, and elevated roles.
- Remove obsolete embeds, forms, jobs, integrations, and DNS records.
- Keep the source intact through the approved retention window.
- Cancel paid plans only after billing, legal, and recovery review.
- Schedule the next Astro backup, access, and migration-playbook review.
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.
Joshua Warren moved hundreds of Ghost posts to Astro and Cloudflare Pages in about a day. The work included exporting Ghost content, converting posts to Markdown with frontmatter, rebuilding the site, and mapping old URLs. Redirect logic was the hardest part because Ghost routes did not align cleanly with static output. The move removed hosting cost and expanded design control, but also replaced Ghost’s publishing interface with Git-based content work.
- Design the component system and content-collection schema before converting the full archive to avoid later restructuring.
- Map and test Ghost URLs before cutover because redirects are more difficult to repair after search engines see the new structure.
- The migration fit a technical owner who valued Git workflows and complete design control more than Ghost’s admin interface.
- Content conversion was completed quickly, while URL compatibility created the most important launch risk.
Verify against the primary material.
Platform behavior changes. Check these sources and the review dates above before executing a production migration.
- Ghost: official migration documentationAccessed 2026-07-19
- Astro: official migration documentationAccessed 2026-07-19