Migrate WordPress to EmDash: Complete Guide
Migrating from WordPress to EmDash isn't a one-click operation. EmDash is a different architecture, a different content model, and a different hosting platform. But the migration path is straightforward if you plan it. This guide covers what you need to know before, during, and after the switch.
Before you start: is migration right for you?
EmDash is v0.1. Before committing to migration, read Is EmDash Production-Ready? to understand current limitations. If you depend on specific WordPress plugins (WooCommerce, LearnDash, MemberPress), those features don't exist on EmDash yet. Migrate if your site is primarily content — blog posts, pages, documentation, portfolios.
Step 1: Export your WordPress content
In your WordPress admin, go to Tools > Export. Export all content as WXR (WordPress eXtended RSS). This XML file contains your posts, pages, categories, tags, comments, and media references.
You can also use WP-CLI for a cleaner export. This generates one file per content type, making it easier to process.
wp export --dir=./export Download your media separately. WordPress stores uploads in wp-content/uploads. You'll need these files to upload to EmDash's R2 media library.
Step 2: Map your content model
WordPress has posts, pages, and custom post types. EmDash has collections. Before importing, decide how your WordPress content maps to EmDash collections:
| WordPress | EmDash | Notes |
|---|---|---|
| Posts | Collection (e.g. "articles") | Define in seed.json with your fields |
| Pages | "pages" collection | Route via /[slug].astro |
| Categories | Taxonomy (hierarchical) | Define in seed.json taxonomies |
| Tags | Taxonomy (flat) | Define in seed.json taxonomies |
| Custom post types | Additional collections | One collection per CPT |
| Media | R2 media library | Upload via admin panel |
Step 3: Convert content format
WordPress stores content as HTML. EmDash uses Portable Text (structured JSON). This is the most significant technical step in the migration.
Manual
Best for small sites (under 20 posts). Re-create each post in the EmDash admin editor. Cleanest result, lets you improve content as you migrate.
Scripted
Parse WXR XML, convert HTML to Portable Text JSON, create entries via MCP or CLI. Best for medium sites (20–200 posts).
AI-assisted
Feed HTML content to an AI tool via MCP and have it create Portable Text entries. Fastest method for large sites (200+ posts).
Whichever method you choose, you'll lose WordPress-specific formatting — Gutenberg blocks, shortcodes, and plugin-generated HTML won't have EmDash equivalents. Plan to clean these up manually.
Step 4: Upload media
Upload your images and files through the EmDash admin panel's media library. Media uploads via MCP aren't available yet, so this step is manual. After uploading, update your content to reference the new EmDash media URLs.
EmDash stores media in Cloudflare R2 and serves it through the edge cache. Images get consistent URLs that include the media ID, so you don't need to worry about URL conflicts.
Step 5: Preserve your SEO
This is critical. If you have existing search rankings, losing them during migration is expensive.
| Check | Action | Tool |
|---|---|---|
| URL structure | Match WP URLs or set up 301 redirects | Cloudflare redirect rules |
| Meta tags | Verify EmDashHead outputs correct title, description, OG | Browser DevTools |
| Sitemap | Submit new sitemap after migration | Google Search Console |
| Internal links | Update all internal links to EmDash URL patterns | Search & replace in content |
| 301 redirects | Configure redirects for changed URLs | Cloudflare Pages redirect rules |
Step 6: Test before switching DNS
Deploy your EmDash site to Cloudflare Pages and test on the .pages.dev URL before pointing your domain. Check every page, verify SEO meta, test search, confirm media loads, and walk through the admin panel. Only switch DNS when you're confident everything works.
After migration
Monitor Google Search Console for the first two weeks. Watch for crawl errors, index coverage changes, and ranking fluctuations. Some temporary ranking movement is normal during a migration. If you see persistent drops, check for missing redirects or broken internal links.
Keep your WordPress site accessible (on a different URL or locally) for at least a month after migration. You may need to reference content or settings that didn't transfer cleanly.
Realistic expectations
A small site (10–30 pages) can be migrated in a day. A medium site takes a weekend with scripted conversion. The payoff is immediate: faster page loads, zero hosting maintenance, better security.
The payoff is immediate: faster page loads, zero hosting maintenance, better security, and a modern development stack. The cost is the migration effort itself and adapting to a younger ecosystem. For content-focused sites, the trade is usually worth it.
Is EmDash ready for your site?