Migrated from Ghost to Jekyll


Recently I migrated my blog from hosted Ghost to Jekyll. Here is why I did and how.

Articles in this series:

  1. Migrated from Ghost to Jekyll (this article)
  2. Migrating content from Ghost to Jekyll
  3. How I set up this blog on Jekyll
  4. How I improved my Jekyll setup
  5. How I improved my Jekyll SEO
  6. Fixing my content after migrating to Jekyll

WordPress to Ghost

About two years ago I migrated my blog from self-hosted WordPress to hosted Ghost. I wanted to simplify my setup so that whatever time I had available, I could spend on writing rather than maintenance and security.

The team at Ghost helped me moved my blog over. Literally. All I had to do was to provide them with exported WordPress content and the archive of images and they did all the work converting the content to Markdown and ensuring everything worked as expected. Since the first day I was on Ghost, the team was very helpful and I don’t think I’ve ever had any issue with my blog. I can highly recommend their service to anyone who needs a reliable publishing platform as a service.

Ghost offers premium service, setup, and support for a premium price. For a business, it makes perfect sense, but for a personal blog, I wanted to explore other, more cost-efficient venues.

What I wanted to achieve

The primary driver behind my decision to move my blog was to lower my operational costs. I wouldn’t mind paying something, but I knew there were (virtually) free options that could fit my needs. I was very satisfied with Ghost and wasn’t missing any features that I hoped to find elsewhere.

What hasn’t really changed since I moved to Ghost is that I wanted to keep the maintenance of my blog to the bare minimum. I’m doing quite a few things in my spare time, and the last thing I wanted was to add ongoing maintenance. I wouldn’t mind some upfront setup work to get things running, but from the operations point of view, there should be as little effort as possible, preferably none.

One of the most important things for me was to keep ownership of my content. This is why I didn’t want to move to a service like Medium or LinkedIn. I’ve been writing for a few years now and I want to keep control over how my content is presented and where. I don’t want to wake up to a notice that some service would discontinue and my content would disappear with it.

For a while now I’ve been drafting my blog posts in VSCode using Markdown. Somehow I never got to trust web editors that they wouldn’t lose my content due to a connectivity or code glitch. Also, I find Markdown easier to write than HTML. It forces me to think more about the semantics of the content instead of its make up. Ghost had good support for Markdown and preferably whatever I’d move to, would have it too.

Hello Jekyll

Looking at the different options, I noticed that a good friend of mine, Thorsten Hans, has recently moved his blog off Ghost as well. Before he moved, he took a look at some static site generators and chose Jekyll.

Jekyll is one of the most popular static site generators. It’s written in Ruby and while it’s not as fast or easy to set up as Hugo (which can build your site before you blink your eyes and is literally a single executable), it has a pretty active community, many themes, and plugins and is used for blogs a lot.

Content repository and hosting

Static site generators turn your Markdown content to a website using a theme of your choice and some settings. What you get then, is a static website: a bunch of HTML pages, CSS and JavaScript files and images. There is no CMS or a database behind it. To run a static website, all you need is a place to store your content (which could be your computer) and a webserver to host the generated website.

Content repository on GitHub

To keep the maintenance to a minimum, I decided to store my content on GitHub. Using GitHub as my content repository allows me to have a backup of all my content off my computer. Also, using branches, I can have separate copies of my website whenever I want to change and test something without making it public. And should anything go wrong, I can revert any changes in a second.

Hosting on Netlify

I chose to host the generated website on Netlify. Netlify takes care of automatically building my website each time I change something and hosting it on their CDN. While I could’ve used GitHub pages, Netlify offers more complete experience including redirects, support for custom plugins and a guided setup of SSL and custom domains.

Both GitHub and Netlify are SaaS services that I can just use with some initial configuration and no ongoing maintenance. What’s more, the total cost of running my blog is $0.

What’s next

In the next posts, I will tell you more about how I migrated from Ghost to Jekyll. You will read about how I converted the content, optimized my Jekyll settings and theme for SEO, RSS and social and how I set up publishing on Netlify. Stay tuned, and don’t hesitate to reach out if you have any questions.

Others found also helpful: