1---
2name: aeo
3description: Make a site quotable by AI answer engines (ChatGPT, Claude, Perplexity, Gemini, Google AI Overviews). Encodes the AEO framework — the per-page Findable/Quotable/Understandable/Trustworthy checklist with exact pass thresholds, the site-wide Content/Technical/Authority/Measurement pillars, and the code recipes to fix each (robots for AI crawlers, llms.txt, JSON-LD schema, FAQPage, canonical/OG, alt text, freshness signals, AI-referral measurement). Use when the user says "AEO", "answer engine optimization", "GEO", "will AI cite my site", "get cited by ChatGPT/Perplexity", "LLM visibility", "schema for AI", "llms.txt", "AI crawler access", or wants an AEO audit/plan. Pairs with the aeo-manager agent (the working pass) and complements seo-manager, write-article, and web-performance.
4---
5
6# AEO — Answer Engine Optimization
7
8**AEO is structuring content, technical foundations, and authority signals so AI
9answer engines can understand, trust, and surface your content in generated
10answers.** SEO fights to rank in a list of blue links; AEO fights to be the
11source the model *quotes* in the one answer it gives. The overlap with SEO is
12large, but AEO adds four things SEO never had to care about: letting AI crawlers
13in, marking up meaning in machine-readable schema, writing content shaped so an
14answer can be *lifted whole*, and measuring whether LLMs actually mention you.
15
16This skill is the framework and the fix recipes. The **`aeo-manager` agent** is
17the working pass that applies it to a site. **`seo-manager`** covers the SEO
18overlap; **`write-article`** is the repeatable content workflow that closes
19question-coverage gaps. Cross-reference all three; don't duplicate their work.
20
21## The mental model
22
23For an AI to cite a page, four things must be true, in order. Each is a gate: a
24page that fails an earlier gate never reaches the later ones.
25
261. **Findable** — an AI crawler can reach and index the page at all.
272. **Quotable** — there's a clean, current, self-contained answer to lift.
283. **Understandable** — the machine can parse the structure and the meaning.
294. **Trustworthy** — the page signals it's an authority worth citing.
30
31Zoom out from the page to the whole site and the same thing splits into four
32**pillars** you can score and move: **Content** (do you answer the questions,
33and completely), **Technical** (can machines parse the site), **Authority**
34(does the rest of the web vouch for you), **Measurement** (do you even know how
35LLMs represent you). A site can be technically perfect and still invisible
36because it answers 16% of the questions buyers ask — AEO is all four or nothing.
37
38## The per-page checklist (exact pass thresholds)
39
40Score every page against these. **Pass items** count toward the score;
41**bonus items** add points but never penalize when missing. Reproduce these
42thresholds exactly — they are the assessment's real bars, not approximations.
43
44### Findable — can an AI crawler reach and index it
45
46- **HTTPS enabled.** Served over HTTPS. Required for AI crawlers to trust and index it.
47- **robots.txt present** and does **not** block the AI bots. See the AI-crawler list below.
48- **sitemap.xml present**, lists all key pages, submitted in Google Search Console under Sitemaps.
49- **Canonical URL set** — a `<link rel="canonical">` in the head of every page, to prevent duplicate-content splits.
50- **AI crawlers allowed** — no `Disallow` targeting `GPTBot`, `ClaudeBot`, `PerplexityBot`, `Google-Extended`. This is the single most common own-goal: a default `Disallow` quietly locks every answer engine out.
51
52### Quotable — can it lift a clean, current answer
53
54- **Meta description, 50–160 chars.** Also set `og:description`; make sure it's SSR-rendered (present in the raw HTML, not injected client-side — crawlers read the raw HTML).
55- **Substantial text content** — at least **100 words** of readable body text. AI can't quote a page that is mostly images or a headline.
56- **Content freshness signals** — a date in JSON-LD (`datePublished`/`dateModified`), meta tags, or sitemap `lastmod`. "Fresh" = updated within **6 months**.
57- **FAQ-style content (bonus)** — H2/H3 headings phrased as questions ending in `?`, or `FAQPage` schema. Adds points, never penalizes. Question-shaped headings are the highest-leverage single edit for quotability.
58
59### Understandable — can it parse structure and meaning
60
61- **Single H1**, descriptive, reasonable length. One clear "what this page is about" signal. Not zero, not three.
62- **Clean heading hierarchy** — headings structure the content (h1 → h2 → h3), not just style text. No jumping levels for visual size.
63- **Structured data (JSON-LD)** — the schema.org type the page obviously is. Missing is a finding; *wrong* type is a worse finding. The single most reliable way for AI to know a page's type and context.
64- **Open Graph tags** — `og:title`, `og:description`, `og:image`, `og:url` in the head.
65- **Image alt text coverage ≥ 50%** — the pass threshold is **50%, not 100%**. Alt text descriptive, under ~125 chars, describing what the image shows.
66
67### Trustworthy — does it signal authority
68
69- **Internal links present** — at least **3 contextual links in the page body**, pointing to related content, pricing, or core pages. **Nav and footer links do not count** — they must be in-prose links.
70- **External citation links** — at least **2 outbound links to external sources**. Signals you're citing evidence, which is what a citable source does.
71- **llms.txt file present (bonus)** — a `/llms.txt` at the site root describing the site to AI systems. Emerging standard; adds points, never penalizes.
72
73## The four site-wide pillars (what moves the score)
74
75Per-page is necessary but not sufficient. These are the levers that move the
76whole-site score, in the assessment's own terms.
77
78### Content — answer the questions, completely
79
80- **Library size.** A handful of pages is a weak foundation. Aim for **≥ 10 content pages** on your core topics (guides, articles, resource pages).
81- **Question coverage.** Score = share of the **top ~50 questions your audience asks** that your content addresses. Going from ~16% to majority coverage is usually the biggest single AEO win. Prioritize **high-intent** questions: ROI, implementation timeline, use cases, pricing, security.
82- **Answer depth ("complete the thought").** LLMs cite thorough answers and skip partial ones. Never mention a capability without explaining how it works; never state a benefit without evidence. A half-answer earns zero citations.
83
84→ Every gap here is a `write-article` job. Turn each uncovered high-intent question into an article; each one raises coverage and ships `Article` + (ideally) `FAQPage` schema.
85
86### Technical — let machines parse the site
87
88- **Schema coverage %** — share of pages carrying JSON-LD. Start with `Organization` on the homepage and `Article`/`FAQPage` on content pages; scale to **50%+ of pages**. Validate with Google's Rich Results / Structured Data test.
89- **Metadata coverage** — title + meta description + canonical + OG on every page.
90- **Mobile speed** — mobile **LCP under 4s** per the AEO assessment bar (~5s fails). This is looser than the `web-performance` skill's 2.5s Core Web Vitals budget; hitting that budget satisfies this automatically. For fixes, see the `web-performance` skill. Speed is an AI-crawlability signal, not just UX.
91- **Accessibility metadata** — clean landmarks and alt text double as machine-parseability signals.
92
93### Authority — make the rest of the web vouch for you
94
95- **Contact page** — a dedicated page with real contact info (email, booking link, address where applicable). A basic legitimacy signal for both prospects and AI.
96- **Consistent brand messaging sitewide** — the same one-line description of what you do and who you're for on homepage, about, product, pricing. **Inconsistent descriptions confuse LLMs and dilute authority** — this is the "AI slop / misrepresentation" risk. Keep a one-paragraph canonical description and reconcile every page to it.
97- **Author attribution** — bylines with **author bios + credentials**, linked author profiles, and `Person` schema so LLMs get structured authorship. Aim for author attribution on ~15% of content pages and up.
98- **Off-site mentions** — how many of the top ~50 sites in your space mention you. Mostly earned (PR, directories, guest content, being genuinely referenceable), not a code fix — file it as strategy.
99
100### Measurement — know how LLMs represent you
101
102Externally-visible analytics (GA4, PostHog) is table stakes. AEO-specific
103measurement is the frontier, and most of it can't be seen from outside — so if
104it's not in place, it's a real gap even when a scanner can't detect it:
105
106- **Share of voice** — how often LLMs recommend you vs. competitors, across your priority buyer questions.
107- **Accuracy / representation** — do LLMs describe your product, positioning, and pricing correctly, and *consistently* across different phrasings of the same question? Track which sources get cited in those answers.
108- **AI-referred traffic as its own channel** — segment visits/conversions from `chatgpt.com`, `perplexity.ai`, `gemini.google.com`, etc. Do they convert differently than organic search?
109- **Server-log crawler hits** — confirm `GPTBot`, `ClaudeBot`, `PerplexityBot`, `Google-Extended` are actually fetching your pages.
110- **Real-time dashboards + alerts** on LLM mention/citation rate and on changes in how you're represented.
111
112## Code recipes (Next.js App Router shown; principles are generic)
113
114### robots — allow the AI crawlers (the #1 own-goal)
115
116The bots that must be allowed: `GPTBot` (OpenAI), `OAI-SearchBot` (ChatGPT
117search), `ChatGPT-User`, `ClaudeBot` / `Claude-Web` (Anthropic), `PerplexityBot`
118+ `Perplexity-User`, `Google-Extended` (Gemini/AI Overviews training),
119`Applebot-Extended`, `Bytespider`, `CCBot` (Common Crawl, feeds many models).
120**Allowing = simply not `Disallow`-ing them.** A blanket `Disallow: /` or a
121CMS-default block is what kills AEO. In `app/robots.ts`:
122
123```ts
124export default function robots(): MetadataRoute.Robots {
125 return {
126 rules: [{ userAgent: '*', allow: '/', disallow: ['/api/', '/auth/'] }],
127 sitemap: 'https://example.com/sitemap.xml',
128 host: 'https://example.com',
129 }
130}
131```
132
133If you must gate specific bots, do it deliberately and know you're trading away
134that engine's citations. Don't block AI bots "to save bandwidth" by default.
135
136### llms.txt (bonus, but cheap) — a plain-text map for AI
137
138A `/llms.txt` at the root: an H1 with the site name, a blockquote one-liner,
139then `##` sections of Markdown links to your key pages with short descriptions.
140It's the AI-era `sitemap.xml` in prose. Serve it at the root (a route or a
141static file). Keep it current when pages change.
142
143### JSON-LD — the meaning layer
144
145Inject `<script type="application/ld+json">` per page with the right type:
146
147- `Organization` + `WebSite` — once, sitewide (root layout). Name, url, logo, `sameAs` (social profiles), `contactPoint`.
148- `Article` / `BlogPosting` — every article. `headline`, `datePublished`, `dateModified`, `author` (a `Person`), `image`, `publisher`.
149- `FAQPage` — any page with Q&A sections. Each `Question` + `acceptedAnswer`. This is what surfaces you in "People also ask" and in AI answers directly.
150- `Person` — author bios; link from `Article.author`.
151- `BreadcrumbList`, `Product`, `Service`, `SoftwareApplication` — where they genuinely fit the page.
152
153Never fabricate schema that misrepresents the page — wrong schema is worse than
154none. Validate everything before shipping.
155
156### Canonical + Open Graph — the Next metadata API
157
158```ts
159export const metadata: Metadata = {
160 title: '…',
161 description: '…', // 50–160 chars
162 alternates: { canonical: 'https://example.com/page' },
163 openGraph: { title, description, url, images: [{ url: '/og.png' }] },
164}
165```
166
167For localized sites also emit `alternates.languages` (hreflang) so each locale
168is its own canonical.
169
170### FAQ-shaping — the highest-leverage content edit
171
172Turn body prose into H2/H3 questions ending in `?`, each answered in one tight,
173self-contained paragraph, and mirror them into `FAQPage` schema. This is exactly
174what `write-article` already does for meirlabs articles — the answer-engine
175structure and the primaryQuestion/answerSummary block. Reuse that pattern.
176
177### Freshness — prove the page is current
178
179Set `dateModified` in the page's JSON-LD **and** `lastmod` in the sitemap, and
180bump them on material edits. Stale-looking pages (no date, or >6 months) get
181skipped even when the answer is good.
182
183### Measurement — detect AI-referred traffic
184
185In your analytics (PostHog for meirlabs — see `posthog-ops`), segment by
186referrer host: `chatgpt.com`, `perplexity.ai`, `gemini.google.com`,
187`copilot.microsoft.com`. Track those as a named "AI answer engines" channel and
188compare conversion vs. organic. For crawler confirmation, grep server/CDN logs
189for the bot user-agents above.
190
191## Running an audit
192
193The `aeo-manager` agent does this end to end. If you're doing it inline:
194
1951. **Map the surface** — enumerate pages from framework routes or by crawling the live URL (cap ~25).
1962. **Score each page** against the four-gate checklist above; record pass/fail/bonus per item.
1973. **Check the site-wide items once** — robots (AI bots allowed?), sitemap, llms.txt, schema coverage %, contact page, brand-message consistency, measurement tooling.
1984. **Separate fix-in-code from strategy.** Code: schema, robots, llms.txt, canonical/OG, alt text, freshness, FAQ-shaping, internal links. Strategy/worklist: new content pages, question coverage, off-site mentions, LLM-mention tracking.
1995. **Audit the real code, not a stale report.** External scanners run at a point in time and go out of date fast — verify every claimed gap against the current codebase before repeating it. A "missing contact page" finding is wrong the moment the page ships.
2006. **Never invent metrics.** Claim only what you can see in code or fetch live. "9% schema coverage" is a number from a specific crawl, not a fact about the code today.
201
202## The org layer (why AEO stalls, from the AEO Divide research)
203
204AEO is as much an operating problem as a technical one. The research is blunt:
20568% of marketing *leaders* claim AEO maturity, but only 26% of *practitioners*
206say they're actually implementing it. The gap is ownership, enablement, and
207measurement, not knowledge. The four moves that separate high-maturity teams:
208
2091. **Name an owner.** One person/team owns AEO strategy and coordination (usually from an SEO background), even if it's part of their remit. Ambiguous ownership keeps AEO stuck in "experiment" mode forever.
2102. **Enable before you raise expectations.** Give the team reference examples and hands-on training, not high-level decks. (Only 23% of practitioners get hands-on AEO training.)
2113. **Systematize content, don't optimize one page at a time.** Standardize FAQs, answer sections, author attribution, and freshness so improvements apply across many pages. Embed AEO in the *content workflow*, not as a post-publish afterthought.
2124. **Measure early, even imperfectly.** High-maturity teams track AI visibility and LLM-referred traffic before the standards settle. Waiting for perfect metrics delays learning; it doesn't reduce risk.
213
214For a solo operator (meirlabs): the owner is obvious, `write-article` **is** the
215systematized content workflow, and PostHog is the measurement base — so the
216whole org layer collapses to "keep shipping question-coverage articles with
217schema, and watch AI referrals." Don't over-engineer the org story for a
218one-person shop; do apply the content-system and measurement discipline.
219
220## Checklist before calling an AEO pass done
221
222- [ ] robots allows GPTBot / ClaudeBot / PerplexityBot / Google-Extended (verified, not assumed).
223- [ ] sitemap.xml present and complete; canonical + OG on every page.
224- [ ] llms.txt present and current (bonus, but cheap).
225- [ ] JSON-LD on the homepage (`Organization`/`WebSite`) and on content pages (`Article`/`FAQPage`); type matches the page; validated.
226- [ ] Each page: single descriptive H1, clean heading hierarchy, meta description 50–160 chars, ≥100 words body, ≥50% image alt coverage.
227- [ ] Each substantive page: ≥3 in-body internal links, ≥2 external citation links.
228- [ ] Freshness: dateModified in schema + sitemap lastmod, bumped on edits.
229- [ ] Content: counted question coverage; each gap filed as a `write-article` job; no half-answers.
230- [ ] Authority: contact page live; one canonical brand description reconciled across home/about/pricing; author bios + `Person` schema.
231- [ ] Measurement: AI-referral channel segmented in analytics; a plan to track LLM mentions/representation.
232- [ ] Every claimed gap verified against current code, not copied from a stale external report. No invented metrics.
233