Leaving Medium for WordPress: story IDs, canonical links and custom domains
How much search value survives a move from Medium depends on one detail: whose domain the stories live on. Stories at medium.com/@you/... or inside a publication on medium.com can never be redirected, because Medium controls those servers. The best you can do is point each story's canonical link at its new WordPress URL. Stories on a custom domain are a normal migration: once the domain's DNS points at WordPress, you redirect every old path yourself.
The content side is manageable. Medium's Download your information export gives you a ZIP with one HTML file per story, a free converter turns it into a WordPress import file, and the standard WordPress Importer does the rest.
From the Medium ZIP to WordPress posts
Request the archive from your Medium settings under Download your information; Medium emails a link when it is ready. Inside, the posts folder holds one HTML file per item. Sort it before converting, because the folder can include drafts and your responses to other writers' stories alongside real posts, and you probably do not want responses published as articles.
WordPress has no Medium importer of its own. The usual route is the free converter at mediumtowp.com, which turns the ZIP into a WordPress XML file, followed by Tools → Import → WordPress. Tick the option to download attachments. Images on Medium are served from miro.medium.com, and imports often leave some of them pointing there, so search the imported posts for that host afterwards and upload anything still remote.
What does not travel: claps, responses, highlights and follower counts stay on Medium. The SEO title and SEO description you may have set in each story's settings are not reliably in the export either, so plan to write descriptions again for the stories that matter.
How Medium URLs are built
Every Medium story URL ends with a hexadecimal story ID, usually 12 characters, appended to a slug from the title:
medium.com/@jane/why-we-dropped-kubernetes-3f9a2c1b7d4emedium.com/some-publication/why-we-dropped-kubernetes-3f9a2c1b7d4ejane.medium.com/why-we-dropped-kubernetes-3f9a2c1b7d4eblog.example.com/why-we-dropped-kubernetes-3f9a2c1b7d4eon a custom domain
Medium finds a story by its ID, so the same post is often linked with an older slug after a title edit. That matters for redirects on a custom domain: a rule keyed on the ID catches every slug variant. In Hydrogen SEO's Redirection Manager, an Ends With rule on -3f9a2c1b7d4e pointing at /why-we-dropped-kubernetes/ does exactly that. WordPress slugs should drop the ID; it means nothing to readers.
Custom domain: moving the domain and the redirects
If your stories run on a custom domain, Medium serves it only while the domain is connected to your membership. Build the WordPress site on a staging address, import the stories, and prepare one redirect per story, keyed on the ID as above, plus rules for the tag and archive pages you care about. The redirect rule generator turns a two-column list into server rules if you would rather not enter them one by one.
Then repoint the domain's DNS from Medium to your host. From that moment the requests reach WordPress, so the rules have to be active already. Because the domain is unchanged, Search Console needs no Change of Address, and rankings usually recover within weeks once Google recrawls the redirected URLs.
medium.com stories: canonicals instead of redirects
For stories on medium.com, open each one, choose Edit story, then More settings, and under Advanced Settings select This story was originally published elsewhere and enter the WordPress URL. Republish to save it. Medium then prints a canonical tag pointing at your site.
Be realistic about the effect. A canonical is a hint, not a command, and Google weighs it against everything else it knows; with identical content it is often honored, but the medium.com copy may keep ranking for a while, and some stories never flip. Keep the Medium versions published with their canonicals rather than deleting them: deleting breaks every link pointing at them and passes nothing to your site. Add a line at the top of each story linking to the new home for readers who arrive there.
Moving the content to a brand-new domain also means starting without Medium's domain strength behind it. Expect lower rankings at first and build them back with internal links and fresh posts.
Checklist after the move
- Every imported post has its own slug without the hex ID, and a date matching the original.
- No post still loads images from
miro.medium.com. - Custom domain: each old story URL returns one 301 to its WordPress post.
- medium.com: each story has its canonical set to the matching WordPress URL.
- Descriptions are written for top stories; the site audit lists any post missing one.
- The WordPress sitemap is submitted in Search Console.
Common questions
Can I redirect my medium.com stories to WordPress?
No. Medium controls medium.com, so there is no way to add a 301. Set each story's canonical link to its new WordPress URL instead and leave the Medium copy published.
Does WordPress have a built-in Medium importer?
No. Convert Medium's HTML export into a WordPress XML file with a converter such as mediumtowp.com, then import it with the standard WordPress Importer.
Should I keep the story ID in my WordPress URLs?
There is no need. Use a clean slug in WordPress and redirect the old slug-plus-ID URLs to it when you control the domain.