Squarespace → Ghost
Move a Squarespace blog into Ghost with the official Squarespace migrator and an XML export. Categories become tags. Squarespace only exports one primary blog and skips store, portfolio, drafts, and style. Plan redirects, because Ghost slugs will not match Squarespace date paths.
Should you make this move?
Both platforms have a case. Compare what you gain with what you give up before scheduling the cutover.
Squarespace
- Beautiful templates and integrated hosting let small teams publish without technical operations
- Editors get a purpose-built publishing workflow instead of raw files
- Structured content, code control, and complex integrations are restricted
- Themes, extensions, and content models add maintenance and portability constraints
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
Ghost: A focused publishing and membership platform is fast and pleasant for writers. This removes a major source-side concern: Structured content, code control, and complex integrations are restricted.
What you lose: Beautiful templates and integrated hosting let small teams publish without technical operations. What you inherit: Its narrower ecosystem is less suitable for complex sites and custom application behavior.
Jump to a section
Know the shape of the move.
This timeline assumes
- One primary blog, up to 1,000 posts and pages, and 5 GB of media
- You can log into Squarespace and generate the WordPress XML export Ghost asks for.
- Squarespace stays public until Ghost images no longer load from Squarespace.
- Store, member areas, and extra blogs are out of this playbook or have their own plan.
- The Ghost site is built on a preview host before DNS changes.
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 |
|---|---|---|---|---|
| Primary blog posts and pages | partial | critical | Ghost Admin has a Squarespace migrator under Settings → Advanced → Import/Export. You open Squarespace, export XML, and upload that file. Ghost confirms post and page counts before import. | Compare those counts with the live Squarespace blog. |
| Secondary blog pages | lost | high | Squarespace exports only one selected primary blog. | Export or copy every secondary blog separately. |
| Store, portfolio, calendar, album, cover, and index pages | lost | critical | Squarespace lists these page types as excluded from the WordPress XML export. | Rebuild required pages in Ghost or keep them elsewhere. |
| Drafts, style settings, and custom CSS | lost | high | Squarespace does not include these in the export. | Capture drafts, screenshots, and CSS before you export. |
| Categories | partial | medium | Ghost converts Squarespace categories to tags. The first category becomes the primary tag. | Approve the tag map and check primary tags after import. |
| Images still hosted on Squarespace | partial | critical | Imported HTML can keep Squarespace image URLs. If you cancel Squarespace too soon, the images die. | Re-upload images into Ghost. Keep Squarespace online until hosts change. |
| URLs and date paths | manual | critical | Squarespace blogs often use /blog/yyyy/mm/dd/slug. Ghost uses /slug/. Ghost documents redirects after a Squarespace move. | Add a redirects.json for the old date paths. Test renamed slugs one by one. |
| Embeds and unusual blocks | partial | high | Audio, video, product, header, footer, and sidebar blocks export poorly or not at all. | Inventory blocks by route and recreate the ones that still matter. |
| Members and newsletter | manual | high | Squarespace email campaigns and member areas do not become Ghost members. | Export the mailing list separately if you have lawful consent. |
| Theme and design | lost | high | A Squarespace template is not a Ghost Handlebars theme. | Choose a Ghost theme and compare key templates. |
| Comments | lost | medium | Squarespace comments do not become Ghost comments. | Archive them or add a third-party comment system. |
| SEO metadata | manual | critical | Titles, descriptions, and canonicals need a Ghost pass. | Crawl both sites before DNS. |
Where each thing goes.
| Source | Destination | Method | Notes |
|---|---|---|---|
| Squarespace XML export | Ghost posts and pages via the Squarespace migrator | automatic | Upload the file Ghost asks for. |
| Post title and body | Ghost title and editor cards | transform | Repair embeds and leftover markup. |
| Category | Ghost tag, first category as primary tag | transform | Audit primary tags. |
| Squarespace date path | Ghost slug plus a redirect | transform | Write redirects.json before DNS. |
| Featured image | Ghost feature image | transform | Re-upload if the host is still Squarespace. |
| Author | Ghost staff user | manual | Create staff before bylines matter. |
| Page | Ghost page | transform | Only pages that were in the XML. |
| Store or portfolio page | No destination | unsupported | Rebuild or exclude. |
| Draft or custom CSS | No destination | unsupported | Capture before export. |
Make the move recoverable.
Create the source-of-truth backup
Keep the Squarespace XML, a URL crawl, and design evidence before Ghost imports.
- Export the primary blog XML.
- Crawl public URLs and image hosts.
- Screenshot templates and custom CSS.
- Export any mailing list you will move.
- Store files with checksums.
Proof to capture: XML hash, post count, URL count, and a named restore owner.
Ghost Squarespace migrator
Load the XML without guessing counts.
- Enter the Squarespace URL and open Squarespace settings from the migrator.
- Download the XML and upload it back to Ghost.
- Confirm the post and page counts Ghost shows.
- Do not change DNS yet.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
Redirects and media
Keep old Squarespace links and images alive.
- Map /yyyy/mm/dd/slug paths to Ghost slugs.
- Re-upload images that still point at Squarespace.
- Test renamed posts that Squarespace redirected internally.
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.
Images stay on Squarespace
Ghost posts still request static1.squarespace.com.
- Consequence
- The blog breaks when you cancel Squarespace.
- Mitigation
- Re-upload before cleanup.
Stop if: A high-traffic post still hotlinks Squarespace.
Date URLs 404
Old /2020/04/12/slug links miss the Ghost /slug/.
- Consequence
- Search and newsletters hit 404s.
- Mitigation
- Install redirects.json and test the crawl.
Stop if: A high-value Squarespace URL fails after one redirect fix.
You exported the wrong blog
Squarespace only exports the primary blog you selected.
- Consequence
- A second journal never arrives.
- Mitigation
- List every blog before export.
Stop if: A required blog is missing from the XML.
Trailing-slash routes fight Ghost
Ghost adds trailing slashes that Squarespace did not use.
- Consequence
- Redirect loops or 404s.
- Mitigation
- Test both slash variants.
Stop if: A cornerstone URL loops.
Do the work in this order.
- Days 1–3 · inventory
Inventory Squarespace
4–8 hours active2–3 days elapsedOwner review waiting- List blogs, page types, and mailing lists.
- Crawl URLs.
- Choose a Ghost theme.
Stop / go checkpointExport?
Go when: The primary blog and exclusions are signed.
Stop when: A store or extra blog is in scope with no plan.
- Days 3–5 · backup
Export XML
2–4 hours active1–2 days elapsedSquarespace export waiting- Download the XML.
- Capture CSS and drafts.
- Record counts.
Depends on: inventory
Stop / go checkpointImport?
Go when: The XML hash and counts exist.
Stop when: The export is the wrong blog.
- Days 5–10 · pilot
Import and repair
8–18 hours active3–5 days elapsedImage work waiting- Run the Ghost migrator.
- Fix tags, embeds, and images.
- Write redirects.
Depends on: backup
Stop / go checkpointPreview OK?
Go when: Sample posts, images, and redirects pass.
Stop when: Images still depend on Squarespace.
- Days 10–13 · cutover
Switch DNS
3–6 hours active1–2 days elapsedDNS and SSL waiting- Freeze Squarespace edits.
- Import any last posts.
- Point the domain at Ghost.
Depends on: pilot
Stop / go checkpointGhost is public?
Go when: URLs, SSL, and images pass.
Stop when: A cornerstone URL 404s.
- Days 13–14 · observe
Observe and close
3–4 hours active2–4 days elapsedSearch and newsletter cycle waiting- Watch 404s.
- Keep Squarespace readable.
Depends on: cutover
Stop / go checkpointClose rollback?
Go when: No trigger fires.
Stop when: Images or redirects regress.
Cut over with a way back.
Cutover
Make Ghost the public site without losing the last Squarespace posts.
- Freeze Squarespace publishing.
- Re-export and import the final delta if needed.
- Install redirects.
- Switch DNS.
- Run blocking URL and image checks.
Proof to capture: Ghost serves the domain. Counts match. Images do not use Squarespace.
Rollback
Return the domain to Squarespace without losing Ghost-era posts you still want.
- Restore Squarespace DNS.
- Export Ghost posts written after cutover.
- Apply only reviewed posts back to Squarespace if needed.
- Keep the XML.
Proof to capture: Squarespace serves the domain again.
- High-traffic images still on Squarespace
- Date URLs 404 after one redirect fix
- The wrong blog was imported
- Redirect loop on a cornerstone URL
- A blocking check cannot be fixed in two hours
Prove the migration worked.
Every blocking check must pass. Capture the evidence before cleanup begins.
| Pass | ID | Check | Method | Expected result | Evidence |
|---|---|---|---|---|---|
V-01Blocking | Post and page counts | Compare the XML and Ghost. | Counts match or variances are signed. | Count sheet. | |
V-02Blocking | Image hosts | Inspect a stratified sample. | No required image depends on Squarespace. | Image-host report. | |
V-03Blocking | Primary tags | Check posts that had several categories. | Approved primary tag. | Tag sample. | |
V-04Blocking | Date paths | Request old /yyyy/mm/dd/slug URLs. | One 301 to the Ghost slug. | Redirect results. | |
V-05Blocking | Slash variants | Request URLs with and without a trailing slash. | No loop. | Slash test. | |
V-06Blocking | Titles and canonicals | Crawl key posts. | Approved metadata. No accidental noindex. | SEO sample. | |
V-07 | Theme templates | Compare home, post, and page at two breakpoints. | Accepted layout. | Screenshots. | |
V-08Blocking | Single site | Inspect Squarespace and Ghost publishing. | Ghost alone is public. | DNS and publish screenshots. |
Remove the scaffolding safely.
Safe after: Seven stable public days, no required Squarespace image hosts, and a signed report.
- Archive the XML, redirects, and evidence.
- Re-upload leftover Squarespace images.
- Keep Squarespace readable through the retention window.
- Cancel Squarespace only after images are independent.
- Revoke migration users.
- Schedule the next Ghost backup and redirect 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.
Matt Rutherford moved his site from Squarespace, where the newsletter and blog were separate chores, to hosted Ghost (Pro) in February 2022. Ghost support did not then offer a Squarespace migrator. Content arrived but needed a lot of manual fixing to read well. He kept both subscriptions for a couple of weeks while he cleaned posts, and called DNS the scariest step. He warns Ghost is simpler than WordPress and fits a newsletter with a light blog, not a complex site.
- Keep Squarespace paid until posts look right on Ghost. He ran both for a couple of weeks.
- Budget a manual edit pass even if an importer now exists. His archive needed fixing after the copy.
- The reason to move was write-once publishing, not a cheaper host.
- DNS cutover was the step he feared more than the content copy.
Verify against the primary material.
Platform behavior changes. Check these sources and the review dates above before executing a production migration.
- Ghost: migrating from SquarespaceAccessed 2026-10-30
- Squarespace: export your siteAccessed 2026-10-30
- Ghost: import contentAccessed 2026-10-30
- Ghost: redirectsAccessed 2026-10-30