[{"data":1,"prerenderedAt":194},["ShallowReactive",2],{"seo-verification":3,"blog-migrating-squarespace-ghost-vps-en":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-migrating-squarespace-ghost-vps-en",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":35,"sections":36,"ctaTitle":128,"ctaBody":129,"ctaButton":130,"ctaUrl":131,"relatedPosts":132},389,"migrating-squarespace-ghost-vps",{"fr":12,"en":10,"ar":13,"es":14},"migrer-squarespace-ghost-vps","الانتقال-من-squarespace-إلى-ghost-على-vps","migrar-squarespace-ghost-vps","Migrating from Squarespace to Ghost on a VPS","Squarespace raised prices 26% in July 2026. Migrate to self-hosted Ghost on a VPS: 3-year cost comparison, step-by-step export and import, 301 redirects.",10,0,false,"2026-09-29T00:00:00+00:00","2026-09-29T14:40:42+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},5,"Comparison","comparatif","bg-info\u002F10 text-info",[28],{"id":23,"name":24,"slug":25,"color":26,"icon":25},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fmigrer-squarespace-ghost-vps-poster.svg",{"categorySlug":33,"appSlug":34},"cms-websites","ghost","In July 2026, Squarespace increased its Core plan price from $276 to ~$348\u002Fyear — a 26% rise on a subscription many renew without thinking. Ghost is an open-source CMS released under the MIT licence: you host the engine on a VPS, you keep your subscriber list, and the total cost stays flat year after year. This guide walks through the numbers, then every step of the migration.",[37,41,51,88,91,119,122,125],{"type":38,"title":39,"body":40},"h2","Why Squarespace's July 2026 price increase changes the calculation","Squarespace moved from $23 to $29 per month on its Core plan in July 2026, billed as ~$348\u002Fyear at renewal. This is not the first increase — the Business plan had already risen by 33% between 2022 and 2024 — and Squarespace pricing does not include paid newsletters without commission or root access to your server.\n\nGhost, by contrast, is software you install on your own infrastructure. You only pay for the VPS that runs it. No surcharge when you cross a traffic threshold, no commission on paid subscriptions, no dependency on a third party's pricing policy.\n\nThe break-even calculation is straightforward: if your VPS costs 99 DH\u002Fmonth and your domain depending on the extension, you are ahead within the first year compared to Squarespace Core at $348.",{"type":42,"title":43,"items":44},"ul","What self-hosted Ghost gives you that Squarespace does not",[45,46,47,48,49,50],"**Paid newsletters with zero commission** — Stripe connects directly; Ghost takes no percentage of your subscriber revenue, unlike the 10% fee on Squarespace's Core plan.","**Root server access** — you can modify the nginx configuration, set caching rules, install an analytics proxy or connect Ghost to your data pipeline.","**Open-source themes** — hundreds of Ghost themes are available on GitHub without extra licences; customising them only requires knowledge of Handlebars.","**Full portable export** — Ghost exports your content as structured JSON and your subscribers as CSV; you can import these files into any other Ghost instance without losing metadata.","**Predictable cost** — the VPS price does not vary with your traffic or subscriber count; only a voluntary upgrade changes the bill.","**Updates on your schedule** — you decide when to move to the next major version, avoiding forced migrations that have broken Squarespace themes in the past.",{"type":52,"title":53,"headers":54,"rows":58},"comparison","Total cost over 3 years: Squarespace Core vs Ghost on a ServOrbit VPS",[55,56,57],"Item","Squarespace Core","Ghost on ServOrbit VPS",[59,63,66,68,72,76,80,84],[60,61,62],"Platform subscription (year 1)","~$29\u002Fmonth ($348\u002Fyear)","99 DH\u002Fmonth × 12",[64,65,62],"Platform subscription (year 2)","~$29\u002Fmonth or more ($348\u002Fyear)",[67,65,62],"Platform subscription (year 3)",[69,70,71],"Domain (.com, per year)","Included in plan","depending on registrar",[73,74,75],"Paid newsletter commission","10% of revenue","0% — direct Stripe",[77,78,79],"SSH \u002F root access","Not available","Included",[81,82,83],"Backups","Not included (paid add-on)","Weekly backups included",[85,86,87],"Assisted migrations","No","Included on request",{"type":38,"title":89,"body":90},"Prerequisites before you start","Ghost is built on Node.js and uses MySQL (or MariaDB) as its database. Recommended resources for a personal or professional blog with moderate traffic:\n\n**Server**: 1 vCPU, 1 GB RAM minimum — Ghost runs comfortably on 512 MB at steady state, but theme build spikes and migrations need headroom. A VPS Start covers most use cases.\n\n**Storage**: 10 GB is enough to start; plan for 20 GB if you publish images or audio files regularly for a podcast.\n\n**Software**: Node.js 22 LTS or later, npm, MySQL 8 or MariaDB 10.6+, nginx as a reverse proxy, certbot for TLS certificates.\n\n**Domain name**: a domain pointing to your VPS IP; SSL will be provisioned automatically by Ghost CLI via Let's Encrypt.\n\n**SSH access**: an ED25519 or RSA key configured on the server — Ghost CLI refuses root installations, so you will need a dedicated system user.\n\n**Active Squarespace account** until the migration date: article export is done from the administration panel.",{"type":92,"title":93,"steps":94},"steps","Migrating from Squarespace to Ghost on a VPS: steps",[95,98,101,104,107,110,113,116],{"title":96,"body":97},"Export your content from Squarespace","From your Squarespace dashboard, go to Settings → Advanced → Import \u002F Export Content, then click Export. Squarespace produces an XML file in the WordPress Extended RSS (WXR) format. This format is recognised by Ghost conversion tools — Ghost does not read Squarespace XML natively, but `ghost-gscan` and third-party converters handle WXR.\n\nAlso export your subscribers: Marketing → Email Subscribers → Export, which produces a CSV file with addresses, subscription statuses and sign-up dates. Keep this CSV carefully — it is your list, and it cannot be recovered after the account is closed.",{"title":99,"body":100},"Prepare the VPS server","Connect via SSH to your VPS: `ssh user@your-domain.com`. Update packages, then install Node.js 22 via the NodeSource repository:\n\n`curl -fsSL https:\u002F\u002Fdeb.nodesource.com\u002Fsetup_22.x | sudo -E bash -`\n\n`sudo apt-get install -y nodejs`\n\nThen install MySQL and nginx:\n\n`sudo apt-get install -y mysql-server nginx`\n\nSecure MySQL with `sudo mysql_secure_installation`, then create the Ghost database and user:\n\n`sudo mysql -u root -p -e \"CREATE DATABASE ghostdb; CREATE USER 'ghostuser'@'localhost' IDENTIFIED BY 'strong_password'; GRANT ALL ON ghostdb.* TO 'ghostuser'@'localhost'; FLUSH PRIVILEGES;\"`\n\nFinally, create a non-root system user for Ghost: `sudo adduser ghost-runner`.",{"title":102,"body":103},"Install Ghost CLI and Ghost","Install Ghost CLI globally: `sudo npm install ghost-cli@latest -g`\n\nCreate the installation directory and transfer ownership to your Ghost user:\n\n`sudo mkdir -p \u002Fvar\u002Fwww\u002Fghost`\n\n`sudo chown ghost-runner:ghost-runner \u002Fvar\u002Fwww\u002Fghost`\n\n`sudo chmod 775 \u002Fvar\u002Fwww\u002Fghost`\n\nSwitch to the Ghost user, then run the installation:\n\n`su - ghost-runner`\n\n`cd \u002Fvar\u002Fwww\u002Fghost && ghost install`\n\nGhost CLI will ask a series of questions: production URL (e.g. `https:\u002F\u002Fyour-domain.com`), MySQL login details, and will offer to configure nginx and SSL automatically. Answer yes to both — Ghost CLI writes the nginx configuration and calls certbot to provision the Let's Encrypt certificate.",{"title":105,"body":106},"Convert and import Squarespace content","The Squarespace XML file must be converted to Ghost JSON format before import. Use the `@tryghost\u002Fmigrate` tool:\n\n`npx @tryghost\u002Fmigrate squarespace --pathToFile export-squarespace.xml`\n\nThe tool produces a `ghost-import.json` file. Check its structure: each post should have a `title`, a `slug`, a `status` and an `html` field. Images are referenced by Squarespace URL — they will be downloaded during import if you pass the `--scrape media` option.\n\nLog into the Ghost administration interface (`https:\u002F\u002Fyour-domain.com\u002Fghost`), create your admin account, then go to Settings → Advanced → Migrations → Import content and upload the JSON file. Ghost processes the import in the background and notifies you by email when done.",{"title":108,"body":109},"Import your email subscribers","In Ghost Admin, go to Members → Import members and upload your Squarespace CSV file. Ghost recognises the `email`, `name` and `subscribed_to_emails` columns. Map the columns if the headers differ.\n\nImported subscribers are marked as 'free members' by default. If some had a paid subscription on Squarespace, you will need to update them manually or via the Ghost Admin API (`PATCH \u002Fadmin\u002Fmembers\u002F{id}`) once Stripe is configured.\n\nThen configure Stripe in Ghost Admin → Settings → Subscriptions to enable paid newsletters. Enter your Stripe API key and set your subscription prices.",{"title":111,"body":112},"Set up 301 redirects from old URLs","Squarespace generates URLs in the format `\u002Fblog\u002Fpost-title` or `\u002Fpost-title` depending on the template. Ghost uses `\u002F{slug}\u002F` by default. If your URLs differ, create a `redirects.yaml` file in the Ghost directory (`\u002Fvar\u002Fwww\u002Fghost\u002Fcontent\u002Fdata\u002Fredirects.yaml`):\n\n`from: \u002Fblog\u002F{slug}`\n`to: \u002F{slug}`\n`permanent: true`\n\nRestart Ghost to apply the redirects: `ghost restart`. Check each old URL with `curl -I https:\u002F\u002Fyour-domain.com\u002Fblog\u002Ffirst-post` — the response should return a `301` pointing to the new URL.\n\nIf your domain was previously hosted at Squarespace, update the DNS records (`A` or `CNAME`) to point to your VPS IP. DNS propagation takes between a few minutes and 48 hours.",{"title":114,"body":115},"Check the sitemap and submit to Google Search Console","Ghost automatically generates a sitemap at `https:\u002F\u002Fyour-domain.com\u002Fsitemap.xml`. Open it in a browser and verify that all your posts appear with the correct URLs.\n\nIn Google Search Console, add your domain as a property if not already done, then submit the sitemap via Indexing → Sitemaps. This speeds up re-indexing of your content on the new URLs.\n\nIf your domain had authority on Squarespace, the 301 redirects transfer the SEO signal to the new URLs — expect a few weeks for rankings to stabilise. Avoid changing post slugs at this point: each additional modification adds a step to the redirect chain.",{"title":117,"body":118},"Cancel Squarespace after validation","Do not cancel your Squarespace subscription until you have verified that the content is correctly imported into Ghost, that DNS points to your VPS and that the redirects work. Allow a minimum 48-hour overlap for DNS propagation to complete.\n\nIn Squarespace, go to Settings → Billing & account → Cancel site. Squarespace keeps the site live until the end of the billing period — during this window, a visitor with the old URL in cache will still see your old site, which is normal and expected.\n\nSave one final copy of the Squarespace XML and subscriber CSV before confirming the cancellation.",{"type":120,"body":121},"tip","Before pushing Ghost to production, harden the default nginx configuration that Ghost CLI generated. Add security headers in the `server` block: `add_header X-Frame-Options SAMEORIGIN;`, `add_header X-Content-Type-Options nosniff;` and `add_header Referrer-Policy strict-origin-when-cross-origin;`. Also enable nginx rate-limiting on `\u002Fghost\u002Fapi\u002Fadmin\u002F` to slow down brute-force attempts on the admin interface. Test the configuration with `nginx -t` before reloading: `nginx -s reload`.",{"type":38,"title":123,"body":124},"Troubleshooting: common errors during migration","**`Ghost is already running` after an interrupted installation.** If Ghost CLI installation was interrupted, it may leave an orphaned process. Stop it cleanly: `ghost stop`, then rerun `ghost install`. If `ghost stop` returns an error, identify the process with `pm2 list` and stop it manually: `pm2 stop ghost`.\n\n**`Error: EACCES: permission denied` during JSON import.** The Ghost user does not have access to the `content\u002Fdata` directory. Check permissions: `ls -la \u002Fvar\u002Fwww\u002Fghost\u002Fcontent\u002F` — the `data` directory must belong to `ghost-runner`. Fix with `sudo chown -R ghost-runner:ghost-runner \u002Fvar\u002Fwww\u002Fghost\u002Fcontent\u002F`.\n\n**Squarespace images no longer display after migration.** Image URLs in the imported JSON still point to `images.squarespace.com`. Ghost can download them automatically if you pass the `--scrape media` option during `@tryghost\u002Fmigrate` conversion. Alternatively, from Ghost Admin → Settings → Advanced, run 'Re-download external images'.\n\n**SSL certificate is not renewed.** Ghost CLI delegates renewal to certbot. Check that the systemd certbot timer is active: `systemctl status certbot.timer`. If it is inactive, restart it: `sudo systemctl enable --now certbot.timer` and test renewal: `sudo certbot renew --dry-run`.\n\n**301 redirects return a 302.** Ghost interprets some redirects as temporary if the `permanent` value is missing or set to `false` in `redirects.yaml`. Check the file, correct the value and restart Ghost: `ghost restart`.",{"type":38,"title":126,"body":127},"After migration: routine maintenance","A self-hosted Ghost instance requires minimal but regular maintenance. Ghost updates take one command: `ghost update`. Before any major update (for example, Ghost 5 → 6), check the official changelog for breaking changes with your theme.\n\nBackups are weekly on ServOrbit entry-level plans — verify that they cover the `\u002Fvar\u002Fwww\u002Fghost\u002Fcontent` directory and your MySQL database. You can supplement with an automated local MySQL dump: `mysqldump -u ghostuser -p ghostdb > \u002Fvar\u002Fbackups\u002Fghost-$(date +%F).sql`.\n\nMonitor disk usage: Ghost compresses images on import, but an active blog accumulates several gigabytes over time. Check usage from your ServOrbit client area or on the command line: `df -h \u002Fvar\u002Fwww\u002Fghost\u002Fcontent`.\n\nTo go further on Ghost hosting and Caddy as an alternative to nginx, see our guides \u003Ca href=\"\u002Fblog\u002Fheberger-ghost\">heberger-ghost\u003C\u002Fa> and \u003Ca href=\"\u002Fblog\u002Fdeployer-avec-caddy\">deployer-avec-caddy\u003C\u002Fa>. To compare total cost of ownership between SaaS and self-hosted for other tools, read \u003Ca href=\"\u002Fblog\u002Fsaas-vs-self-hosted-comparatif-cout-2026\">saas-vs-self-hosted-comparatif-cout-2026\u003C\u002Fa>.","Your Ghost blog on a ServOrbit VPS","You manage your content and subscribers, we hold the infrastructure — configured VPS, SSL included, weekly backups from entry level.","View VPS plans","\u002Fsolutions\u002Fprofessionnels",[133,149,171],{"id":134,"slug":135,"slugs":136,"title":140,"excerpt":141,"readTime":142,"views":18,"isPinned":19,"publishedAt":143,"updatedAt":144,"category":145,"categories":146,"featuredImage":29,"bgImage":30,"posterImage":148,"relatedSolution":29},374,"saas-vs-self-hosted-real-cost-comparison-2026",{"fr":137,"en":135,"ar":138,"es":139},"saas-vs-self-hosted-comparatif-cout-2026","saas-مقابل-الاستضافة-الذاتية-مقارنة-التكاليف-2026","saas-vs-self-hosted-comparativa-de-costes-2026","SaaS vs self-hosted: real cost comparison 2026","Calculate the true TCO of 7 agency SaaS tools versus their self-hosted VPS equivalent. Is the switch worth the ~$14,000\u002Fyear in savings?",11,"2026-09-24T00:00:00+00:00","2026-09-24T12:27:51+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[147],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fsaas-vs-self-hosted-comparatif-cout-2026-poster.svg",{"id":150,"slug":151,"slugs":152,"title":156,"excerpt":157,"readTime":158,"views":18,"isPinned":19,"publishedAt":159,"updatedAt":160,"category":161,"categories":167,"featuredImage":29,"bgImage":30,"posterImage":169,"relatedSolution":170},72,"hosting-ghost-on-your-own-vps",{"fr":153,"en":151,"ar":154,"es":155},"heberger-ghost","استضافة-ghost-على-خادمك-الـvps-الخاص","alojar-ghost-en-un-vps","Hosting Ghost on your own VPS: complete 2026 guide","Deploy Ghost v6 on your VPS with Caddy, MySQL, Ghost CLI and Stripe Tax: installation, TLS reverse proxy, updates and troubleshooting common startup errors.",8,"2026-04-09T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":162,"name":163,"slug":164,"color":165,"icon":166},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[168],{"id":162,"name":163,"slug":164,"color":165,"icon":166},"\u002Fblog\u002Fcovers\u002Fheberger-ghost-poster.svg",{"categorySlug":164,"appSlug":34},{"id":172,"slug":173,"slugs":174,"title":178,"excerpt":179,"readTime":158,"views":180,"isPinned":19,"publishedAt":181,"updatedAt":182,"category":183,"categories":188,"featuredImage":29,"bgImage":30,"posterImage":190,"relatedSolution":191},39,"deploy-your-applications-with-caddy-on-a-vps",{"fr":175,"en":173,"ar":176,"es":177},"deployer-avec-caddy","انشر-تطبيقاتك-باستخدام-caddy-على-خادم-vps","desplegar-con-caddy","Caddy as a reverse proxy on VPS: complete guide","Install and configure Caddy as a reverse proxy on your VPS: automatic Let's Encrypt HTTPS, multi-app setup, security hardening and common error troubleshooting.",1,"2026-05-12T00:00:00+00:00","2026-09-25T23:43:04+00:00",{"id":184,"name":185,"slug":186,"color":187,"icon":186},3,"Deployment","deploiement","bg-success\u002F10 text-success",[189],{"id":184,"name":185,"slug":186,"color":187,"icon":186},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-caddy-poster.svg",{"categorySlug":192,"appSlug":193},"application-deployment-devops","caddy",1790693268285]