You probably think search is search. Type a word, get results. Done.
That assumption is exactly what makes EmDash’s search so easy to underestimate. It’s not a better version of the same thing. It’s built on a completely different foundation that changes what search can actually do.
The counterintuitive truth is that EmDash's search isn't really about the search box at all. It's about the content model.
EmDash stores content as structured JSON — a format called portable text — instead of the HTML blobs WordPress dumps into post_contentcodecodecodecode. That single architectural decision means EmDash’s search doesn’t just match keywords. It understands the shape of your content. It knows which field is a title, which is a body paragraph, which is a metadata tag, and which is an image caption. It can search each one independently or in combination.
WordPress search can’t do that. It searches a mess of concatenated HTML and hopes for the best.
Here’s what that means for anyone actually running a site.
The Architecture That Makes Search Smarter
EmDash runs on a D1 database (Cloudflare’s SQLite-based serverless database) with Astro handling the frontend. Every piece of content — every post, page, project, or custom content type — is stored as structured fields, not as a single blob of markup.
When you create a content type in EmDash, you define each field individually. A “Project” content type might have a client_namecodecodecodecode field, a yearcodecodecodecode field, a descriptioncodecodecodecode field (using portable text for rich formatting), and a urlcodecodecodecode field. Each one is a separate column in the database, with its own data type and index.
Search operates on these individual fields, not on a rendered HTML string.
That means you can tell EmDash: “Only search the title and description fields, not the URL field.” Or: “Boost results where the search term appears in the title over results where it appears in the body.” Or: “Exclude draft content from search entirely.”
These are not post-install plugin features. They’re built into how the CMS handles data.
What EmDash Search Ships With Out of the Box
The default EmDash installation includes search functionality that covers the basics competently and a few things WordPress requires plugins for.
| Feature | EmDash (built-in) | WordPress (built-in) | WordPress (with plugin) |
|---|---|---|---|
| Field-level search scoping | Yes — per-field configuration in content types | No — searches entire post_contentcodecodecodecode blob |
Yes — via Relevanssi or SearchWP |
| SEO metadata as searchable fields | Yes — title, description, canonical included by default | No — requires Yoast or similar | Yes |
| Content type filtering | Yes — native content type system | No — only posts and pages | Yes — via CPT plugin |
| Draft/status-aware search | Yes — respects publication status | Yes — respects status | Same |
| Search indexing for custom fields | Yes — fields are database columns | No — custom fields are in wp_postmetacodecodecodecode |
Yes — via ACF + search plugin |
| Built-in sitemap integration | Yes — content types can be marked SEO-enabled | No — requires plugin | Yes |
The table makes it obvious: EmDash’s search advantage is architectural, not feature-bloated. It doesn’t add more stuff — it stores stuff better from the start.
How to Customize Search in EmDash
Customization happens at two levels: the content type definition and the query configuration.
Step 1: Configure Which Fields Are Searchable
When you create or edit a content type in EmDash, each field has a “searchable” toggle. You access this through the admin panel under Content Types.
- Go to Admin → Content Types in the EmDash dashboard.
- Select the content type you want to edit (Posts, Pages, Projects, or a custom one).
- Click on any field to open its configuration.
- Toggle Searchable on or off.
Fields marked searchable get included in the full-text index. Fields you leave off — like internal notes, URLs, or system IDs — are excluded. This is a per-field decision, not a global setting.
Step 2: Mark Content Types for SEO
Content types also have an SEO Enabled toggle. When you enable this:
- The content type gets added to the XML sitemap automatically.
- SEO fields (title, description, og:image) become searchable and indexable.
- The sitemap respects your publication status — drafts don’t appear.
This is how EmDash handles what WordPress requires Yoast or Rank Math to do. It’s not a plugin. It’s a checkbox on the content type definition.
Step 3: Use the Built-in MCP Server for Search Queries
EmDash ships with an MCP (Model Context Protocol) server. This isn’t a search feature for end users — it’s for developers and AI agents.
You can connect Claude, Cursor, or any MCP-compatible tool to your EmDash instance and run structured search queries directly. For example:
“Find all posts where the description field contains ‘TypeScript’ and the status is published, then return the title and URL.”
The MCP server translates that into the correct database query against the structured fields. No parsing HTML. No regex scraping content. The agent gets exactly the fields it asked for.
This is the AI-native search angle that WordPress is still trying to retrofit.
Step 4: Customize the Frontend Search Experience
The default EmDash starter templates (Blog, Marketing Site, Portfolio) include a basic search interface. If you want something different, you build it in Astro — which is the frontend framework EmDash uses.
Astro components receive content as structured data, not rendered HTML. So a search results component can display individual fields (title, excerpt, date, author) without parsing anything. You query the D1 database through EmDash’s API, filter by searchable fields, and render the results in whatever layout you want.
This is the same architecture that makes static site generation fast. The search index is built at build time or queried at runtime through Cloudflare Workers, depending on how you configure it.
The One Thing Search Doesn’t Do Yet
EmDash is version 0.1.0. Some search features you’d expect aren’t there yet.
- No built-in fuzzy matching. WordPress plugins can do “did you mean” corrections. EmDash’s current search is exact-match on indexed fields.
- No autocomplete/suggestions. The frontend templates don’t include a predictive search dropdown. You’d need to build that yourself with a custom Astro component and a D1 query.
- No search analytics. WordPress plugins track what users search for and what they click. EmDash doesn’t log search queries yet.
These are solvable problems. The architecture supports them. But they’re not shipped in the beta.
When Structured Search Breaks Down
There’s a scenario where EmDash’s approach actually hurts: highly visual, unstructured content.
If your site relies on complex HTML layouts — think page builders like Elementor or Divi — the content isn’t stored as clean fields. It’s stored as nested HTML blocks inside a single field. Structured search can’t parse “the third paragraph inside the second column of the hero section” because that structure is markup, not data.
The WordPress migration tool handles this by importing the raw HTML into a single content field. Search treats it as one blob, just like WordPress does. You lose the field-level advantage.
For new sites designed for EmDash, this isn’t a problem. You define the fields upfront. But if you’re migrating a 500-page Elementor site, your search experience will be closer to WordPress than to native EmDash.
What This Changes About How You Think of Search
Search isn’t an afterthought you bolt on with a plugin. It’s a function of how you store your data.
WordPress stores content as HTML. Search is a text-matching problem against that HTML. EmDash stores content as typed, structured fields. Search is a query problem against those fields.
One requires plugins to work well. The other requires planning upfront.
That’s the tradeoff. EmDash asks you to think about your content model before you start writing. WordPress lets you write first and figure out search later. If you take the time to define your content types and fields properly, EmDash’s search is faster, more precise, and more flexible than anything WordPress offers without third-party plugins.
If you don’t, it’s just another search bar.
The counterintuitive truth is that EmDash’s search isn’t really about the search box at all. It’s about the content model. Get that right, and the search takes care of itself.
- What makes EmDash search different from WordPress search?EmDash stores content as structured JSON fields (portable text) instead of HTML blobs, allowing field-level search scoping and precision.
- Does EmDash search require plugins?No, EmDash includes built-in search with field-level configuration, content type filtering, and draft-aware search without plugins.
- What happens when migrating a WordPress site to EmDash?The migration tool imports raw HTML into a single content field, losing field-level search advantages for migrated content.