The Hardest Part of Leaving WordPress Isn’t Moving Your Content. It’s Everything Else.

EmDash makes content migration frictionless, but porting plugins and custom theme remains the real work.

By Central
EmDash imports WordPress content in minutes, but plugins and theme require rebuilding.
Highlights
  • EmDash imports WordPress content in under 60 seconds for a typical site.
  • Plugin configurations, custom theme, and WooCommerce store do not migrate automatically.
  • EmDash on Cloudflare's paid plan costs $75 a year, compared to $525 for managed WordPress.

You’d think migrating 500 blog posts from one CMS to another would be the nightmare. It’s not.

EmDash, Cloudflare’s new open-source CMS, imports your WordPress content in minutes. Posts, pages, media, categories – the whole thing. A standard WordPress export file (WXR) uploads directly into EmDash’s admin panel, and the mapping is automatic.

The sites that migrate successfully won't be the ones with the best content. They'll be the ones with the most portable logic.

The real challenge? Your 15 plugins. Your custom theme. Your WooCommerce store. Your SEO configuration. Those don’t migrate. You rebuild them.

That’s the honest tradeoff. EmDash makes content migration frictionless so you can focus on the harder work: porting your functionality. Let’s walk through exactly how the import works, what moves, what doesn’t, and how to plan the rest.

What Actually Moves (And What Stays Behind)

EmDash’s WordPress import tool handles the structural content layer. Here’s the breakdown:

What Moves What Doesn’t What’s Partial
Posts and pages (all statuses) Plugin configurations Custom post types (structure maps, fields don’t)
Media library (images, documents) Theme customizations Shortcodes (rendered as HTML, not executable)
Categories and tags User roles and permissions SEO metadata (Yoast fields map if plugin installed)
Comments Widget areas Block content (converts to portable text, may lose layout)
Featured images Redirect rules Menu assignments

The import reads your WXR file or connects directly via the WordPress export plugin. It maps Yoast SEO fields to EmDash’s built-in SEO controls automatically. Custom post types come over as content types, but their custom fields don’t – you define those in EmDash’s content type builder after import.

Step 1: Export Your WordPress Site

Start with the standard WordPress export. Go to Tools → Export in your WordPress admin and download the WXR file. This includes all posts, pages, media references, categories, tags, and comments.

If you want the best results, install the EmDash WordPress export plugin from GitHub. It authenticates via your site URL and pushes content directly without the file download step. The plugin also preserves more metadata – including Yoast SEO fields, custom post type structures, and media attachment details.

Either method works. The WXR route is simpler. The plugin route is more complete.

Expected outcome: A single XML file (or plugin connection) containing your site’s content layer. Size depends on media references and post count – a 500-post blog with images might export at 5-10 MB.

Step 2: Import Into EmDash

Navigate to Admin → Import in your EmDash dashboard. You’ll see two options:

  • Upload file – Select your WXR file directly
  • Connect WordPress – Enter your WordPress site URL and authenticate

EmDash processes the file and maps each content type automatically. Posts become posts. Pages become pages. Categories and tags map to their EmDash equivalents. Media files upload to R2 (or your configured storage) with the same URLs preserved where possible.

The import runs server-side. For a typical site, it completes in under 60 seconds. You’ll see a summary screen showing counts for each imported content type.

Expected outcome: Your content appears in EmDash’s admin with the same titles, dates, and body content. Media displays in the media library. Categories and tags are ready to use.

Step 3: Rebuild Everything Else

This is where the real work starts. The import gives you content. It does not give you functionality.

Plugins: Every WordPress plugin with custom logic needs to be rewritten as an EmDash plugin or sandbox worker. EmDash’s plugin architecture uses TypeScript, not PHP. You define capabilities (read content, send email, etc.) in a manifest, and the plugin runs in an isolated V8 sandbox. If you’re comfortable with TypeScript, AI agents can help with the porting – EmDash includes MCP server support for exactly this use case.

Themes: Your WordPress theme’s functions.phpcodecodecodecodecodecode doesn’t work here. EmDash themes are Astro-based. You rebuild the frontend using Astro components, layouts, and CSS. The good news: Astro is designed for content sites, and modern tools like Tailwind and TypeScript are first-class citizens. The theme builder in EmDash lets you create sections (header, about author, sign-up forms) that map to reusable components.

Custom post types: EmDash handles these natively in the admin – no ACF plugin required. After import, go to Admin → Content Types and define the fields your custom post types need. This is a one-time setup, not ongoing maintenance.

Forms, SEO, analytics: EmDash ships with built-in SEO controls, a form builder, and AI-powered comment moderation. You don’t need plugins for the basics. But if you relied on a specific WordPress plugin for a niche feature (membership, booking, e-commerce), you’ll need to build or find an EmDash equivalent.

The Counterintuitive Truth About This Migration

The content import is the easy part. It works. It’s fast. It’s reliable.

The hard part is that EmDash is not WordPress. It’s a different architecture with different tradeoffs. The content comes over cleanly because content is portable. Your plugins, themes, and workflows are not – they’re tied to WordPress’s PHP ecosystem and 24-year-old design.

EmDash’s answer to this isn’t backward compatibility. It’s forward momentum: AI-assisted porting, sandboxed plugin architecture, and a modern developer experience. For a greenfield site, it’s compelling. For an existing WordPress site with 15 plugins and a custom theme, it’s a rebuild.

That said, the economics shift dramatically once you’re in EmDash. A managed WordPress site on WP Engine runs about $525 the first year. EmDash on Cloudflare’s paid plan is $75 a year. No egress fees. No plugin subscription costs. The infrastructure savings alone can fund the migration work.

One More Thing About the Future of This Pattern

The import tool exists because Cloudflare knows ecosystem lock-in is the real barrier. WordPress has 60,000 plugins. EmDash launched with zero. Making content migration trivial removes the biggest excuse to stay. But it also reveals a deeper truth: the CMS battle is no longer about content management. It’s about which platform can attract AI agents and developers to build the next generation of plugins and themes faster.

EmDash’s MCP server and agent skills files are designed for exactly that. Point an AI coding agent at your old WordPress theme and say “port this to Astro.” The agent reads the skills file, understands the EmDash architecture, and generates the code. It’s not magic. It’s structured documentation for machines.

The sites that migrate successfully won’t be the ones with the best content. They’ll be the ones with the most portable logic. Everything else is just a file upload.

Questions answered
  • What does EmDash's WordPress import tool move?It moves posts, pages, media, categories, tags, comments, and Yoast SEO fields. Plugin configurations and theme customizations stay behind.
  • How long does the EmDash import take?For a typical site, the import completes in under 60 seconds.
  • What is the hardest part of leaving WordPress?Rebuilding plugins, custom theme, WooCommerce store, and SEO configuration is the real challenge, not moving content.
Share This Article