Why We Left Medium for Ghost (and Not WordPress)

Medium's poor performance and a lack of control drove us to find a new home

8 months ago

Latest Podcast Is Affirmative Action Legitimate Activism? (Escape From Plan A Ep. 217)
by Plan A Editors

Now that we've finally completed our migration off Medium and onto a self-hosted Ghost instance, I wanted to take the time to explain why we made the switch and how we decided on Ghost as our software of choice, as is tradition (see HackerNoon, FreeCodeCamp, and Signal v Noise).

When we first started Plan A Magazine we were looking to get started with minimal overhead and investment. We didn't have a business plan, we didn't have wild ambitions, we didn't even necessarily have a mission statement (though we do now). What we did have was something to say and nowhere to say it.

So we decided to start an online magazine and began looking for a platform. We chose Medium for a few reasons:

This worked out great for us in the beginning. Medium enabled us to get writing right away with a presentable site and custom domain. A couple of our articles benefitted from Medium's network effects so we were excited for what the future might hold.

Cracks Start Showing

As we built up our reader base and started getting more serious about building up Plan A, we started noticing Medium's shortcomings. Some of it due to the nature of our site being hosted by an external party, some of it by Medium's design.

Some of these shortcomings are expected when your website is hosted (for free) by an external party. However, aside from the lack of control over appearance, what mattered most to us was that our content was available and accessible. Unfortunately Medium failed us in that regard.

Multiple readers informed us that our site couldn't be accessed at various times during the day, affecting readers inconsistently. Even when readers were able to access our publication, their mobile experience was terrible. Much of the poor experience could be attributed to Medium's multiple redirects (for their own analytics I would assume), Medium's insistence on pushing their mobile app, and the large javascript bundles they required for all their UI features.

With a Google PageSpeed Insights score of 12 (out of 100!) performance metrics for our Medium publication were terrible:

Some of the factors behind Medium's abysmal performance were:

This was just not going to cut it so we started looking for a new platform.

Since we all have day jobs and operate Plan A as a side project, we took our time discussing the migration plan. We were growing our reader base and we didn't want to rush into it. Unfortunately Medium forced our hand.

Medium decided to set up a membership service giving its members access to paywalled articles hosted on Medium. Medium would go on to share that revenue with the authors of paywalled articles based on page views. That's a good thing right?

On its own that's a great thing (we pay our writers too) but we wanted our content to be freely available. Should be fine because participation was opt-in right? Wrong, it seemed to be opt-out not opt-in, and this lead to confusion among our writers and a consequently a worse experience for our readers.

In addition to memberships, Medium began buying out established publications and featuring them on Medium. This presents an obvious conflict of interest. Perhaps it's cynical of me, but I imagine this change greatly reduces any potential benefit of our content being discoverable through Medium's network.

This pretty much put the nail in the coffin on any future with Medium. There simply were no remaining benefits to staying on their platform. With 78% of our traffic coming from organic searches and social media shares, and another 16% of our traffic coming to us directly, we wouldn't miss Medium's network much.

A Brighter Future

After reviewing our options we decided to self-host a Ghost server (more on why we chose Ghost later). After a long finger numbing manual migration (Medium does not make it easy to export your content) here's what we were able to accomplish:

With a Google PageSpeed Insight score of 93, moving onto Ghost gave us some serious performance improvements! Not only did we greatly improve our reader's experience, we also gained full control over content. By moving to Ghost we also gained control over our site's presentation and layout as you've no doubt noticed by now. Major wins all around.

Graph of Medium's performance vs self-hosted Ghost's performance
Those are good results but there's still room for improvement

Ghost has been a pleasure to work with and the small but active community is great. Setting up Ghost on a DigitalOcean droplet was really easy and it doesn't require high end specs either.

The hardest part was exporting our content off Medium. Their only option is to export html files and parsing those files for your raw content is not an easy task. There are pictures to download and re-insert, metadata to add, and redirects to be set up (to handle any links to our old slugs). This is fine for 50, maybe a 100 articles, but we had 300+ articles to migrate and it was growing day by day. After this experience I have a greatly increased appreciation for common standards.

After that it was just a matter of updating DNS records and we were on our way. With our current daily volume Ghost is keeping up just fine, I don't think we're anywhere near its limits. It's probably earning a degree on the side and not breaking a sweat.

Why We Chose Ghost

If you've made it this far, you might be wondering why we chose Ghost over other platforms such as WordPress. When we thought about what we wanted out of the new site here's what we prioritized:

Ghost hit all of those priorities. SEO and social media features are baked in (built-in AMP pages too), Ghost's Koenig editor reminds me very much of Medium's editor, and Ghost runs well on a VPS with entry-level specs. I'm sure we could have made a number of the available solutions work for us, but Ghost gave us what we wanted out of the box at a very manageable cost and it's open source.

Ghost is written in Node.js which is a language and ecosystem I'm more familiar with than PHP. Nice to know if I ever want to make changes to the core software. If the built-in Handlebars templates can't keep up, the option to use Ghost as a headless CMS is nice to have, allowing for a wide range possibilities including static site generators. Articles are stored as plain text, HTML, and Mobiledoc and the articles along with all our data can be exported as a JSON file so if we do have to move platforms again, it should be possible to programmatically migrate our content.

All in all our move away from Medium has been a great success. Looking forward, the next immediate improvements we can make would be image optimization and using a CDN. Who knows what the future holds, maybe we decide we want to self-host our podcasts too...


Like this article by Jong Kim?

Become a Plan A Patreon to support our writers!

  • Bonus podcast episodes
  • Patron-only Discord server

Want to know why we started a Patreon? Click here

Jong Kim

Published 8 months ago