← Blog
Post
Leaving Wordpress

Leaving Wordpress

5 min read by Charlie Forêt

Easy to move in, terrifying to move out

WordPress is simple to start with and frightening to leave. That asymmetry is deliberate. It's the whole shape of lock-in, and it's why the internet is full of people who meant to migrate three years ago and never did.

I was one of them. I had a new platform ready, the one this whole series is about, and I still sat on WordPress for months. Not because moving the words was hard. Because moving everything attached to the words looked like it might wreck three things I couldn't afford to lose: my archive, my podcast, and my search rankings.

So before I touched anything, I named the three fears out loud. Then I built a way through each one.

Fear one: losing the archive

The obvious risk is the posts themselves. Years of writing, and a bad export turns all of it into today's date and broken links.

I built an importer that reads both a live WordPress site and a WordPress export file, the big XML thing the platform hands you on the way out. It pulls the posts, downloads every image and re-hosts it on my own storage, and converts each body into clean Markdown so it lives in my format going forward. The detail I cared about most: imported posts keep their original publish dates. A post from 2023 stays a post from 2023. Nothing gets stamped with the day I happened to run the import, because that one mistake alone can scramble your whole archive's history.

It doesn't have to be all-or-nothing either. I can scan a source blog, see its posts in a checklist, and pull over only the ones I want, matched by a stable ID so running the import twice never creates duplicates. There's a "clear imported content" button for when a trial run goes sideways, which mine did, more than once.

Two bugs from this stretch are worth the warning. Tags were matching by their URL slug instead of their name, which spawned a runaway pile of duplicate tags every run. And an importer that fetches arbitrary URLs is a security hole with a nice name, so I hardened it against being pointed at addresses it had no business reaching. Pulling data in from the outside world is exactly where you get careless and exactly where you can't afford to.

Fear two: the podcast trap

This is the one that kept me up. My podcast.

Every podcast app tracks each episode by a hidden ID called a GUID. Not the title, not the URL, that ID. It's how Apple Podcasts and Spotify know episode 12 is the same episode 12 they downloaded last week. And WordPress had been minting those IDs out of its own web addresses. Move hosts naively and every GUID changes, which means every listener's app either re-downloads the entire back catalog or, worse, decides my show is a stranger and drops it.

Thirteen episodes and a real audience, one careless migration away from vanishing.

So I stopped letting the host define the identity. Every episode now carries a GUID of my own, a stable name that isn't tied to any domain and gets stamped on at the moment the post is born. The feed can move hosts for the rest of its life and each episode keeps the same identity forever. Then I put a permanent redirect on the old WordPress feed address, pointing at the new feed, so Apple and Spotify follow the move on their own and every subscriber comes along without lifting a finger.

And then the multi-tenant gremlin from the second post came back to bite me. Remember that both sites share one database, and that URL slugs have to be globally unique across it? The flagship site already owned the slug "podcast." So when Charlie Forêt's imported podcast tag landed, the system renamed it "podcast-2." My feed was matching episodes by that slug, found nothing under "podcast" for this site, and served a completely empty show. Thirteen episodes, gone, because of a naming collision two posts in the making. The fix was to match by the tag's actual name instead of its slug. One of those bugs that's invisible until it's catastrophic, which is most of the interesting ones.

Fear three: losing Google

The last fear is the quiet killer. You migrate, your URLs change, and six weeks later your search traffic falls off a cliff because Google lost the thread.

Part of the answer was just doing the SEO homework properly: canonical URLs, structured data the search engines can read, social preview cards, and a real per-site sitemap and robots file generated fresh for each domain. Table stakes, but you have to actually lay them.

The part I'm happier about is that I didn't force a hard cutover at all. I built a bridge that runs the other direction: my new CMS can push a post back out to WordPress. So I could keep the old WordPress site alive as a mirror, publishing from my platform into both places, while search engines slowly re-learned that the new home is the real one. Canonical tags tell Google which copy is authoritative, so running in both places for a while doesn't get me punished for duplicate content. I get to leave at the speed that's safe instead of the speed that's brave.

Build a bridge, not a leap

That's the whole philosophy, and it's why most migrations fail. People treat leaving a platform as a single terrifying jump: export everything, flip the DNS, pray, and find out Monday whether the podcast still works. Of course that's scary. You've bet the archive on one irreversible move.

A bridge changes the bet. Import the posts with their real dates. Give the podcast an identity nothing can take away, and redirect the old feed so listeners never feel it. Keep WordPress running alongside until Google has caught up, then walk away when there's nothing left to lose. Every risky step gets its own safety line, and you cross when you're ready, not when the export finishes.

It took me an embarrassing number of evenings and a few genuinely alarming moments staring at an empty podcast feed. But the archive came over intact, dates and all. The listeners never noticed a thing. And the rankings held.

What the reader gets

Mostly, you get nothing, and that's the win. The blog reads the same, the podcast plays the same, the old links still land. The entire point of a migration done right is that the reader can't tell it happened.

If you're an author sitting on WordPress because leaving looks like a cliff, there's a bridge across it. I've crossed it, and I'll show you the plans if you ask.


Follow the build: one Workshop post left, the finale, where I add up the whole stack, the security scare, and whether building your own platform was worth it. Or just go read something that survived the move without a scratch.

Join Today & get free audiobook story versions

Join today and get ePub and Audio versions of two short stories.

We'll email it to you. Unsubscribe any time.

// Discussion 0 posts

// No posts yet. Start the conversation.

Create an account or log in to join the discussion.