Thoughts about tech, programming, and more.

Goodbye WordPress, Hello Ghost

The time to say goodbye to WordPress is here. I've migrated my blog to Ghost.

Even though WordPress was the start of my journey into web development and programming, I can't really say I'm sad to be writing this. I don't feel a single shred of attachment to what WordPress is today.

I say that while typing this post into the clean, non-intrusive, non-distracting, darkmode Ghost editor.

No more bloated websites. No more hoops to jump through to allow people to subscribe to my posts. No more plugin maintenance.

And so, without any remorse, I began and completed the process of moving my personal blog over to Ghost in less than a couple hours tonight.

Step 1: Create a Ghost account

Easy. Done. If you're able to get to this webpage to read this post then you'll be able to handle it. I opted just to use the hosted Ghost(Pro) version. Maybe at some point I'll explore self hosting. But for now, this hosted version is nice to not have to worry about.

Step 2: Choose a theme

I found one that I'm okay to start with. I'll definitely want to figure out how to create my own custom themes. I like minimal designs especially when it comes to blogs. There's a few free one's available in the Ghost marketplace but nothing that really captures what I'm looking for. This one will do for now but I'll definitely be setting something else up down the road.

Step 3: Import posts from WordPress

This wasn't quite so slick. I don't blame Ghost. I don't blame WordPress either. Well, I probably should blame WordPress' new editor – don't get me started on that – but this issue may not be related at all.

Anyhow, I installed and activated the Ghost plugin on my WordPress site.

Ghost plugin screenshot

From there, I went into Tools > Export to Ghost and clicked on Download Ghost File.

That didn't work. The request timed out and nothing happened. So I opted for the Download JSON button just below which most likely exists because other people are experiencing the issue too. Particularly since the message right above the button says:

Struggling with the zip file? Download the .json instead.

That worked so I headed back over to Ghost, navigated to Settings > Labs, found the option to Import content uploaded the JSON file I just downloaded from the WordPress site.

It look a few moments but the file uploaded and I was greeted with some error messages telling me that some dates didn't match so those were changed to today's date. Turned out that the posts that encountered that issue were all Draft posts. So if you're reading this before you try importing, I'd suggest deleting any old drafts you don't plan on posting. Also, delete any pages and posts you don't want to bring over because I ended up having to delete a number of pages that I forgot even existed on my WP site.

The Download Ghost File that didn't work is supposedly the easy way to import posts complete with images. Since I used the JSON file, the images in the posts were all broken. I don't use too many images so it's not that much of a pain to fix.

Aside from all that, the posts came over fine. I say "fine" only because it brought over the posts as HTML instead of pulling the text into the Ghost editor. I'm assuming this is because of WordPress' [not-so]lovely editor. I'm pretty sure WordPress saves the HTML right into the database and so that would make since why the Ghost plugin has to pull the HTML over.

One other thing to note: the JSON file includes the slug of the WordPress posts so I imagine that is what Ghost uses to set up the post URL for all the posts imported over. This is very important because if the URL were to change, it would break all the search result links where Google links. Of course Google would correct this over time, but not without it temporarily affecting your search rankings. But this all came over correctly so I did not need to set up any kind of redirects.

Step 4: Hook up the domain

Ghost seems to want you to use a 'www' subdomain. Not sure what the reason for that is, but since we're not in the 2000's anymore, I prefer just using the root domain. Unless of course there's a specific purpose to the subdomain like "blog" or "shop" if I need to use a subdomain. Anyhow, since I opted for the root domain, their instructions didn't really make since. I'm wondering if part of the reason they try and steer you towards the "www" subdomain is because they want a CNAME and A record which doesn't work on the root domain on some registrars.

I ended up adding the domain in Ghost and it sat their for a few minutes so I dug around and found a support article that correctly spelt out what your DNS records should be if you want to use the root domain. I had incorrectly entered it so I removed my pending change and resubmitted. It activated in seconds this time now that the records were correctly in place. Here's the support article with the correct instructions.

And that's it - I'm now live on Ghost! Bye WordPress.

I'm looking forward to hopefully stepping up the frequency of my posts now that I've moved over. I'm also very interested in seeing how the newsletter members functionality works in here as it's built in as a core component of Ghost.

Subscribe to Daniel Lemky

Sign up now to get access to the library of members-only issues.
Jamie Larson