EmDash ships with SEO controls baked into its core. You get title tags, meta descriptions, canonical URLs, and XML sitemaps without installing anything. The dashboard even includes a dedicated SEO panel on every post and content type. But here’s the problem that kills the migration dream for most WordPress site owners: EmDash has zero third-party SEO plugins. No Yoast. No Rank Math. No All in One SEO. You either code your own or you do without the features those plugins provided. That gap is wider than most developers realize.
What SEO features does EmDash have built-in, and what requires custom development? EmDash provides title, meta description, canonical URL, and sitemap controls out of the box. It also auto-generates Open Graph and Twitter Card tags from those fields. What it lacks is any form of content readability analysis, schema markup for articles (JSON-LD for NewsArticle, BlogPosting, etc.), automated internal linking suggestions, bulk SEO editing, social preview simulations, or integration with third-party tools like Google Search Console. Every one of those features requires a custom plugin or external service.
EmDash is not ready to replace WordPress for SEO-heavy sites. Not because the architecture is weak — it’s stronger — but because the ecosystem is empty.
Built-In SEO: What You Get for Free
The admin panel in EmDash (version 0.1.0) includes an SEO section on every post, page, and custom content type. You can set a custom title, meta description, and canonical URL. There’s a toggle for “noindex” and a field for the Open Graph image. The system also generates a standard XML sitemap automatically, and it respects the noindex flag.
Behind the scenes, EmDash uses portable text — structured JSON instead of raw HTML. That means the content is machine-readable by default. An AI agent can parse it, modify it, and regenerate it without touching markup. This is a genuine advantage over WordPress, where SEO plugins have to parse HTML blocks and custom shortcodes.
But the built-in SEO stops at the basics. There is no schema markup for your content. If you want Google to understand that your “blog post” is actually a “Recipe” or “Product” or “Event”, you’ll need to inject that JSON-LD yourself. There is no readability score, no keyword density analysis, no internal link suggestions. The SEO panel is a form, not a toolkit.
The Plugin Gap: What You’ll Have to Build
Yoast SEO was installed on over 10 million WordPress sites. Its founder, Joost de Valk, actually praised EmDash’s AI-native architecture in a blog post the day it launched. But praise doesn’t ship features. Yoast’s core functionality — real-time content analysis, AI-powered title suggestions, schema generation, social preview, breadcrumb control, redirect management — does not exist in EmDash.
The same applies to Rank Math’s 30+ modules. Or All in One SEO’s local business schema. Or SEOPress’s Google News sitemap support. EmDash launched with exactly three starter templates (blog, marketing site, portfolio) and zero third-party plugins. The plugin marketplace is empty.
Cloudflare’s strategy to fill this gap is twofold: the MIT license (so developers can build commercial plugins without GPL restrictions) and the built-in MCP server (so AI agents can generate plugins programmatically). In theory, you can point an AI coding agent at your EmDash site and say, “Build me a schema plugin for articles.” In practice, you’re writing TypeScript and deploying a dynamic worker.
What You Need to Code: A Real Example
Suppose you need JSON-LD schema markup for blog posts. In WordPress, you install Yoast and check a box. In EmDash, you write a plugin.
The plugin registers a hook that fires after a post is published. It declares capabilities: read:contentcodecodecodecodecodecode and write:contentcodecodecodecodecodecode. Inside the hook, you fetch the post’s portable text, extract the title, excerpt, publish date, and author, then construct a JSON-LD snippet for BlogPostingcodecodecodecodecodecode. Finally, you inject that snippet into the codecodecodecodecodecode of the page via a theme template modification.
Total effort: a few hours for a developer familiar with Astro and TypeScript. But if you have 10 different schema types across 5 content types, that’s weeks of custom code. And every time Google updates its schema requirements, you update your plugin.
The same applies to redirect management. EmDash has a built-in redirect manager in the admin — you can create 301s from a UI. But there’s no automatic redirect creation when you change a slug. No bulk import from a CSV. No wildcard pattern matching. You’ll code those yourself.
The Migration Reality: Portable Text vs HTML
This is the hidden cost. WordPress stores content as HTML in the post_contentcodecodecodecodecodecode column. EmDash uses portable text — a structured JSON format originally developed by Sanity. When you import a WordPress site via EmDash’s migration tool, it converts HTML blocks to portable text blocks. For simple paragraphs and images, it works fine. For custom layouts built with Elementor, Divi, or Gutenberg blocks, the conversion is lossy.
Joost de Valk, after testing the migration, noted that the SEO fields from Yoast (focus keyphrase, meta description, etc.) are mapped to EmDash’s built-in SEO fields. That’s good. But the 15 other Yoast fields — cornerstone content, estimated reading time, schema type override — are ignored. You have to recreate that data manually or build a custom migration script.
The migration tool itself is straightforward: you export a WXR file from WordPress, upload it to EmDash, and it maps posts, pages, media, and custom post types. I tested it with a 500-post site. It took about 2 minutes. But the result was a site with no internal linking, no breadcrumbs, no redirects from old URLs, and no social preview images. Every one of those requires manual setup or custom code.
The Urgent Question: Is the Trade-Off Worth It?
EmDash’s SEO is clean, fast, and AI-ready. The built-in controls cover the 80% use case for a simple blog. But the missing 20% — schema, analysis, bulk tools, integration — is exactly what makes WordPress’s SEO plugin ecosystem so powerful. And that 20% is what agencies and content teams depend on.
For a developer building a personal site in TypeScript, EmDash’s approach is liberating. You control every line of SEO output. You’re not waiting for a plugin update or fighting with GPL licensing. But for a business that needs to rank in 2025, the time spent coding SEO features could be better spent on content and link building.
The honest take: EmDash is not ready to replace WordPress for SEO-heavy sites. Not because the architecture is weak — it’s stronger — but because the ecosystem is empty. In 12 to 18 months, if Cloudflare’s MIT license and MCP server attract a wave of plugin developers, the gap will close. Today, you either code or you wait.
- What SEO features does EmDash have built-in?EmDash provides title tags, meta descriptions, canonical URLs, XML sitemaps, and auto-generated Open Graph and Twitter Card tags.
- What SEO features are missing in EmDash?EmDash lacks content readability analysis, schema markup, internal linking suggestions, bulk SEO editing, social preview simulations, and third-party integrations.
- Is EmDash ready to replace WordPress for SEO-heavy sites?No, EmDash is not ready because its ecosystem is empty, and businesses would need to code missing features.