Back to all posts

Why I Moved My Blog Off Medium (and How I Rebuilt It)

Sixtus Miracle AgboSixtus Miracle Agbo
3 min read
Why I Moved My Blog Off Medium (and How I Rebuilt It)

For years my writing lived on Medium. It was easy to start: sign up, write, publish. But that convenience came with strings I got tired of, so a few weeks ago I moved everything to my own site at sixtusagbo.dev/blog. Here is why I left, and how I rebuilt the whole thing.

Why I left Medium

A few reasons piled up over time.

I did not own the platform. My posts, my URLs, and my readers all lived on someone else's domain. If Medium changed its rules, paywalled my work, or shut down, my writing would go with it.

The reading experience also bothered me. Sign-up walls, "you have N free articles left" banners, and app-install nags stood between my readers and something I wrote for free.

Then there was SEO. On Medium, my articles built authority for medium.com, not for me. I wanted the search traffic and the ranking to compound on my own domain.

And finally, design. I wanted my blog to look like my site, not a template I share with millions of other writers.

None of this is a new complaint. Plenty of people have written the "leave Medium" post. But owning your platform only counts if you actually do it, so I did.

There was one more reason, and it had nothing to do with Medium. I am a developer, and every now and then I just want a project to build. A blog is a fun, self-contained thing to make, and the itch to spin one up from scratch was hard to ignore.

What I built

The blog is part of my portfolio at sixtusagbo.dev, built with:

  • Next.js (App Router) for the site and the blog, server-rendered so the content is easy for search engines to read.
  • MongoDB with Mongoose to store the posts.
  • A custom admin panel where I write in Markdown with a live preview, manage drafts, and publish. Auth is a simple email and password with a signed session cookie.
  • Cloudinary for images, so I am not committing media into the repo. I also wired in an Unsplash picker, so I can search for a cover photo right in the editor, pick one, and it lands in my own Cloudinary. Old images are cleaned up automatically when I delete or change a post.

The admin is the part I am happiest with. I write in Markdown, watch it render live, set tags, search Unsplash for a cover image, and hit publish. Publishing revalidates the affected pages on the spot, so a new post is live in a couple of minutes.

SEO was non-negotiable

The entire point of leaving Medium was to own my search presence, so the SEO layer got real attention:

  • Per-post metadata, canonical URLs, and Open Graph and Twitter cards.
  • An Open Graph image generated for every post, so shared links look right.
  • BlogPosting, Person, and WebSite structured data (JSON-LD).
  • A sitemap, robots rules, and an RSS feed, all generated from the database.

Migrating 16 posts

I had 16 posts on Medium and I wanted all of them, with their original dates, tags, and images. This was the fiddly part.

My first plan was Medium's RSS feed. It worked, but I learned the hard way that the feed only returns your 10 most recent posts. My 6 older ones were missing. So I scraped those straight from their pages, pulling the title, body, publish date, and tags.

From there a script did the rest. It converted each post's HTML to Markdown, downloaded the images (which later moved to Cloudinary), preserved the original publish dates and tags, and generated slugs, excerpts, and reading times.

A few things bit me along the way:

  • Inline code like .env first rendered as a full block, a CSS scoping issue between my code-block styles and inline code. Quick fix once I spotted it.
  • Medium stored some tags oddly, so I normalized them. For example, cicd became CI/CD.

What about the old Medium posts

I did not delete them. I trimmed each one down to a short note that points to the version on my site. Old links still work, readers get sent here, and my site becomes the single canonical copy of each article.

Was it worth it

Yes. I control the design, the URLs, the reading experience, and the SEO. New posts go live from my own admin in a couple of minutes, and the writing is mine again, on my domain, where it should have been from the start.

If you have been weighing a move off Medium, I can tell you the effort paid off.

Cover photo by Pankaj Patel on Unsplash

Share this post
Sixtus Miracle Agbo

Sixtus Miracle Agbo

Full-Stack Developer crafting high-performance web and mobile applications. I write about software development, technology, and lessons learned building real products.

Get in touch