AEO Markup Patterns
Answer engine optimization (AEO) markup works in two layers: the visible HTML structure that actually earns extraction, and the schema that supports…
6 min read · updated 2026-08-03
Answer engine optimization (AEO) markup works in two layers: the visible HTML structure that actually earns extraction, and the schema that supports eligibility and grounding. The visible layer matters more — structure your content so answers are self-contained, quotable chunks, then add schema to corroborate it. There is no single "AEO schema type"; the right pattern depends on your content type.
Why the visible layer beats schema
Schema helps with eligibility and grounding, but the structure that actually earns extraction is your visible HTML. Grade both layers, and give the visible one more weight. Engines reconstruct answers from the DOM they render, so proximity, ordinality, and clean atomic values do more work than any markup block.
Schema is corroboration, not a substitute. When you emit structured data, make it match what a reader sees on the page — otherwise it adds nothing. For the broader mechanics, see Structured Data & Schema and how markup relates to Rich Results vs LLM Citations.
FAQ blocks
Structure each question-and-answer pair as a self-contained, extractable chunk. The visible HTML matters more than the FAQPage schema.
- Put the question in a heading element (
<h2>/<h3>) with a stableidfor fragment-anchored citation. - Place the answer in the immediately following sibling — no ads, CTAs, or wrapper divs breaking Q→A proximity.
- Make the first sentence a complete, standalone answer, then add supporting detail.
- Keep answers concise and standalone (roughly 40–80 words). This is an editorial heuristic, not a measured threshold — short complete answers get quoted; long multi-paragraph ones rarely get quoted whole.
- Avoid
<details>/<summary>accordions where the answer isdisplay:noneby default; some retrievers down-weight collapsed content. If you must use accordions, keep the text in the server HTML and nothidden/aria-hiddenat render.
Emit FAQPage schema only when the page is genuinely Q&A-dominant. Never blanket-apply it.
Comparison tables
Comparison queries ("X vs Y", "best X for Y") are where AI engines extract aggressively, and tables are the most quotable structure. There is no dedicated schema.org "comparison" type — be skeptical of any tool claiming otherwise. The visible table is the actual lever.
- Use a real
<table>, not CSS-grid<div>s. Engines reconstruct row/column relationships from<th scope="row">,scope="col">, and<caption>. Div-grids serialize as flat token soup and lose the matrix. - Write one
<caption>that names the compared subjects explicitly — it becomes the answer's framing sentence. - Keep cell values atomic ("$29", "Yes", "10"), not paragraphs. If a cell needs explanation, link out to an anchored section.
- Add a 2–3 sentence plain-text verdict before or after the table. Engines quote the verdict and reproduce the table.
For the schema layer, model each compared item as its own Product, SoftwareApplication, or Offer entity with shared property names, optionally wrapped as an ItemList. This corroborates but does not replace the visible table.
Definitions and glossary terms
Definitional queries are dominant in AI Overviews. The pattern engines reward is term → one-sentence canonical definition → expansion.
- Write the definition as a complete predication: "X is a [category] that [distinguishing function]." That is the exact shape engines lift for "what is X" answers.
- Put the term in a
<dt>or heading, with the definition in the immediately adjacent<dd>or paragraph. - Avoid openers like "X refers to..." or "When it comes to X..." — these read poorly when quoted, and engines sometimes skip them. Lead with the term as the grammatical subject.
- Bold the defined term on first use for visual and parsing salience.
For schema, use DefinedTerm within a DefinedTermSet, and reference Wikidata via sameAs for disambiguation. DefinedTerm produces no Google rich result, but it is clean grounding metadata and is parsed by entity-extraction pipelines. See Schema Types That Matter for how to choose among types.
How-to and procedural content
HowTo rich results are gone, so optimize for the visible numbered procedure that AI Overviews extract for "how to X" queries.
- Use an ordered list
<ol>, not paragraphs — ordinality is the signal. - Open each step with an imperative verb in bold (the action), then the detail. Engines extract the bolded action sequence as the answer skeleton.
- State total time and required tools or materials in plain text before the list; AI Overviews surface these.
- Add per-step
idanchors for passage-level citation. - Keep each step to one action. "Press and hold, then wait, then reconnect" should be three steps.
HowTo markup remains valid syntax with no rich result, so it is optional. One exception: if your content is a recipe, use Recipe.recipeInstructions with HowToStep, which does still drive Recipe rich results.
Statistics and data citations
Engines preferentially cite pages that present discrete, attributable stats.
- Write one stat per sentence: "73% of enterprises adopted RAG in 2025, according to the Example 2026 State of AI report."
- Include the figure, the subject, the timeframe, and the source inline. This quadruple is what gets quoted with attribution to your domain.
- Mark up the source as
Claim/ClaimReviewonly in fact-check contexts — otherwise it is overkill. For ordinary stats, a<cite>element plus a linked source suffices. - Give tables of stats a
<caption>naming the dataset and time period; they get cited as a unit.
Pros/cons and list content
For "best X" and "should I X" queries, use explicit structure engines can map to balanced answers.
- Use
<h3>Pros</h3>/<h3>Cons</h3>headings followed by<ul>. - Write each bullet as a complete clause, not a fragment ("Generous free tier with 1 user" beats "Free tier").
- For listicles ("10 best X"), use an
<h2>per item with the item name, model each as a list entry, and wrap the set inItemListschema withpositionandurlperListItem.ItemListcan drive carousel eligibility in some verticals and is cleanly extracted into ranked AI answers.
Pattern quick reference
| Content type | Visible lever | Schema layer |
|---|---|---|
| FAQ | Heading Q + adjacent standalone A | FAQPage (Q&A-dominant only) |
| Comparison | Real <table> + caption + verdict | Per-item Product/Offer, optional ItemList |
| Definition | Term → one-sentence definition | DefinedTerm + sameAs |
| How-to | <ol> with bold imperatives | HowTo (optional); Recipe for recipes |
| Statistics | Figure + subject + timeframe + source | <cite>; ClaimReview only for fact-check |
| Lists / pros-cons | <h2> per item, <ul> under headings | ItemList with position, url |
Validate whatever schema you emit — see Schema Validation Tools — and keep the structured data honest to the visible page. For where these patterns sit in the wider picture, see AEO & GEO.
What to do
- Audit each key page against its content type and confirm the visible HTML follows the pattern above before touching schema.
- Rewrite every answer, definition, and step so the first sentence is a complete, standalone statement.
- Convert any CSS-grid comparison layouts into real
<table>markup withscopeattributes and a naming<caption>, then add a plain-text verdict. - Add stable
idanchors to questions, steps, and glossary terms for passage-level citation. - Apply schema that matches the content type —
FAQPageonly on genuine Q&A pages,DefinedTermfor glossaries,ItemListfor ranked lists — and keep it consistent with the visible content. - Rewrite stats to include the figure, subject, timeframe, and source in a single sentence.
- Validate all emitted structured data and remove any blanket-applied or mismatched markup.
save this card
Download card1080×1350 · post it anywhere
put it to work
See how ChatGPT, Gemini and Google AI actually talk about your brand.