---
title: "AEO Ultimate for EmDash"
url: "https://aeoultimate.com/docs/emdash/"
description: "Free EmDash plugin that auto-publishes connected Schema.org graphs, Open Graph and Twitter cards from your data only — no guessing, no external calls, MIT…"
published: "2026-10-04T14:53:45+00:00"
modified: "2026-10-04T14:53:45+00:00"
language: "en-US"
site: "AEO Ultimate"
---

Source: https://aeoultimate.com/docs/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, `sameAs` profiles and site search.
- **WebPage and Article** — with `AboutPage`, `ContactPage`, `FAQPage`, `ItemPage` and `Service` page 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.txt` or `/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.

[View on the EmDash Directory](https://emdash.directory/plugins/aeo-ultimate)

[Source on GitHub](https://github.com/tampawebtech/aeo-ultimate-emdash)