Docs / AEO Ultimate for EmDash
AEO Ultimate for EmDash · EmDash plugin · ● Available now · Free
AEO Ultimate for EmDash
A free, sandboxed plugin for EmDash CMS that publishes one connected Schema.org graph per page, plus Open Graph and Twitter cards — built only from data you entered, never guessed from prose.
Free · MIT licensed
Sandboxed · no outbound network calls
Ships an Agent Skill
EmDash 0.36+
What does it publish?
One linked @graph per page, contributed under EmDash’s primary JSON-LD id so it replaces core’s disconnected baseline instead of adding a second block:
- Organization and WebSite — your business identity, logo, contact details,
sameAsprofiles and site search. - WebPage and Article — with
AboutPage,ContactPage,FAQPage,ItemPageandServicepage types, set per page or detected from the path. - BreadcrumbList for every page.
- Service entries for the pages you list in settings.
- FAQPage from question-and-answer rows you fill in.
- Open Graph and Twitter/X cards, with per-page overrides.
How do I install it?
Add the package to your EmDash site:
npm install aeoultimate-emdash
Register it inside the emdash() integration in astro.config.mjs, then restart the dev server — plugin registration is read at build time:
import emdash from "emdash/astro";
import aeoUltimate from "aeoultimate-emdash";
export default defineConfig({
integrations: [
emdash({
// ...database, storage
plugins: [aeoUltimate],
}),
],
});
Your theme must render <EmDashHead>. All stock EmDash templates do. A hand-built layout that leaves it out renders no plugin metadata at all, with no error anywhere.
Where are the settings?
Three screens under Admin › Plugins:
- AEO Settings — organization name and type, contact details, credentials, services and site search. Set the organization name and type at minimum; blank fields fall back to the site title and
Organization. - Social & Schema — audit Open Graph, Twitter and schema coverage across your collections, run bulk fills for missing descriptions, titles, share images and alt text, and override any page individually.
- Indexing — lists pages hidden from search engines, and names any collection it could not check because SEO is switched off for it.
Services go one per line, pipe-separated; only the first two columns are required:
/pages/ac-repair | Air Conditioning Repair | HVAC repair | Tampa, FL | Same-day diagnosis
A malformed row is reported in the save toast and skipped, not published.
How do I add FAQ schema?
Add a repeater field to the collection — by default named faq, with question and answer sub-fields — and fill it in on the entry. The plugin does not sniff headings for questions: guessed FAQ markup misrepresents a page to search and answer engines, so a row missing either half is skipped. Field names are configurable in AEO Settings.
What permissions does it need?
content:read— auditing collections and reading page data.content:write— saving SEO fields and media alt text when you run a bulk action.allowedHosts: []— no outbound network access. Nothing leaves your site, and there is no AI or API cost.
Can a coding agent set it up?
Yes. The package ships an Agent Skill at skills/aeo-ultimate/SKILL.md covering install, configuration, the FAQ field, the indexing report and troubleshooting. Copy it into .agents/skills/aeo-ultimate/ in your site and list it in AGENTS.md, and an agent asked to “add AEO to my EmDash site” can wire it up without guessing.
What can’t it do?
These are limits of EmDash’s plugin sandbox, not settings you have missed:
- No author profiles from bylines. Bylines are not exposed to plugins. Author data comes from settings or from a theme that supplies it.
- No
/llms.txtor/robots.txt. Plugin routes are namespaced and return JSON; those files are yours to add to the site. - No raw HTML or scripts. All output goes through EmDash’s typed metadata contributions.
Still stuck?
Message me directly — free tier included. Most replies land within the hour during Tampa working hours. Get support →