Geodocs.dev

AEO Answer Block Schema Specification: A Markup Standard for Extractable AI Answers

ShareLinkedIn

Open this article in your favorite AI assistant for deeper analysis, summaries, or follow-up questions.

The AEO Answer Block Schema is a vendor-neutral JSON-LD specification, built on Schema.org QAPage and Answer, that wraps a single canonical question and its concise answer so generative engines (ChatGPT, Perplexity, Google AI Overviews, Claude, Gemini) can extract and cite the unit as an atomic, attributable fact. It defines five required fields, six optional grounding fields, validation rules, conformance levels, and a microdata fallback.

TL;DR

An answer block is the smallest unit of content an answer engine can lift verbatim and cite. This specification (v1.0) defines the JSON-LD shape that makes such a unit machine-extractable: one canonical question, one concise answer (40-80 words), a stable anchor URL, an author entity, and a freshness timestamp. Optional fields surface citations, evidence, confidence, and review metadata. Conformance has three levels — Minimal, Recommended, Citation-Ready — so teams can adopt incrementally.

1. Status of this specification

This is version 1.0 of the AEO Answer Block Schema, published 2026-04-29 by the Geodocs Research Team. It is a community specification, not a Schema.org core type. It composes existing Schema.org vocabulary (QAPage, Question, Answer, Person, Organization, CreativeWork) with a small set of conventional fields and validation rules. The specification is reviewed every 90 days; the current canonical URL is https://geodocs.dev/aeo/aeo-answer-block-schema-specification.

This spec is not an official Google rich-result format. Google currently supports FAQPage and QAPage for rich results per Google Search Central. The Answer Block Schema reuses those types so existing parsers continue to work, while adding the AEO-specific fields generative engines need.

2. Scope and non-goals

In scope. A single, self-contained question/answer unit that:

  • Targets one canonical question (one intent).
  • Resolves with a 40-80 word direct answer.
  • Carries provenance: author, organization, dateModified, optional citations.
  • Is anchorable via a stable in-page URL (#fragment).

Non-goals.

  • Long-form articles. Use Article or TechArticle for those, and embed answer blocks within them.
  • Multi-question FAQ pages. Continue to use FAQPage; an answer block may also appear inside an FAQ entry.
  • Ranking. Schema markup builds clarity, not authority. As The HOTH notes, structured data does not guarantee citations or rankings.
  • E-commerce, video, recipe, or local business markup. Use the relevant Schema.org types.

3. Terminology

The key words MUST, MUST NOT, SHOULD, SHOULD NOT, and MAY in this document are to be interpreted as described in RFC 2119.

  • Answer block — A JSON-LD object conforming to this spec.
  • Canonical question — The single, normalized question the block answers.
  • Direct answer — A self-contained 40-80 word response that resolves the canonical question without requiring the surrounding article.
  • Anchor URL — A URL that resolves to the answer block in the rendered page (https://example.com/page#answer-id).
  • Citation-Ready — Conformance level at which all grounding fields are populated.

4. Schema overview

An answer block is a JSON-LD object with @type: "QAPage" whose mainEntity is a Question containing exactly one acceptedAnswer of type Answer. The schema layers three groups of properties:

  1. Identity — @id, url, name, inLanguage.
  2. Content — text of the question and answer.
  3. Provenance — author, publisher, dateModified, citation, isBasedOn.

The Answer node is the canonical unit an engine extracts. Everything else exists to make that extraction trustworthy.

5. Required fields (Minimal conformance)

A conformant answer block MUST include all of the following:

FieldTypeNotes
@contextURLhttps://schema.org
@typestringQAPage
mainEntity.@typestringQuestion
mainEntity.namestringThe canonical question, ≤ 140 chars, ending in ?.
mainEntity.acceptedAnswer.@typestringAnswer
mainEntity.acceptedAnswer.textstring40-80 words, plain text or minimal inline HTML.
mainEntity.acceptedAnswer.urlURLAnchor URL pointing to the rendered block.
mainEntity.acceptedAnswer.authorobjectPerson or Organization with name and url.
mainEntity.acceptedAnswer.dateModifiedISO 8601 dateLast substantive edit to the answer text.

If any required field is missing or malformed, parsers MUST treat the block as non-conformant.

Adding these fields elevates the block to Recommended conformance and materially improves AI extractability:

  • mainEntity.acceptedAnswer.upvoteCount — Integer signal of community validation.
  • mainEntity.acceptedAnswer.inLanguage — BCP-47 language tag (e.g. en, vi).
  • mainEntity.acceptedAnswer.publisher — Organization with name, url, logo.
  • mainEntity.suggestedAnswer — Array of additional Answer nodes for nuance, never used as the primary extractable answer.
  • mainEntity.acceptedAnswer.about — Linked entity (@id to a Wikipedia, Wikidata, or in-site entity page) that grounds the answer.
  • mainEntity.dateCreated — ISO 8601 date for the original publication of the question.

7. Citation-Ready fields

For Citation-Ready conformance, an answer block SHOULD also expose grounding metadata:

  • mainEntity.acceptedAnswer.citation — Array of CreativeWork nodes, each with @id, name, url, and datePublished. These are the sources the answer relies on.
  • mainEntity.acceptedAnswer.isBasedOn — Authoritative primary source (e.g. spec, paper, vendor doc) the answer paraphrases.
  • mainEntity.acceptedAnswer.confidence — A custom field (https://geodocs.dev/vocab/confidence) expressed as a decimal 0.0-1.0.
  • mainEntity.acceptedAnswer.evidence — Optional array of short verbatim quotes from cited sources, each with text and url.
  • mainEntity.acceptedAnswer.reviewedBy — Person who fact-checked the answer; pairs with dateReviewed.
  • mainEntity.acceptedAnswer.dateReviewed — ISO 8601 date of last human review.

Citation-Ready blocks align with the Geodocs citation-readiness framework and are the only blocks SHOULD be flagged citation_readiness: reviewed in article frontmatter.

8. Canonical JSON-LD example

{
  "@context": "https://schema.org",
  "@type": "QAPage",
  "@id": "https://example.com/aeo/what-is-an-answer-block#answer",
  "mainEntity": {
    "@type": "Question",
    "name": "What is an AEO answer block?",
    "dateCreated": "2026-04-12",
    "acceptedAnswer": {
      "@type": "Answer",
      "text": "An AEO answer block is a self-contained 40 to 80 word response to a single canonical question, marked up with Schema.org Answer and JSON-LD so generative engines can extract and cite it verbatim. It carries author, dateModified, anchor URL, and optional citation metadata, and is the smallest unit a model can lift without rewriting.",
      "url": "https://example.com/aeo/what-is-an-answer-block#answer",
      "inLanguage": "en",
      "dateModified": "2026-04-29",
      "author": {
        "@type": "Organization",
        "name": "Example Research",
        "url": "https://example.com"
      },
      "publisher": {
        "@type": "Organization",
        "name": "Example Research",
        "url": "https://example.com",
        "logo": "https://example.com/logo.png"
      },
      "about": {
        "@id": "https://example.com/glossary/answer-engine-optimization"
      },
      "citation": [
        {
          "@type": "CreativeWork",
          "name": "Schema.org Answer",
          "url": "https://schema.org/Answer",
          "datePublished": "2024-01-01"
        },
        {
          "@type": "CreativeWork",
          "name": "Q&A (QAPage) structured data",
          "url": "https://developers.google.com/search/docs/appearance/structured-data/qapage",
          "datePublished": "2025-09-01"
        }
      ],
      "reviewedBy": {
        "@type": "Person",
        "name": "Reviewer Name",
        "url": "https://example.com/team/reviewer"
      },
      "dateReviewed": "2026-04-29"
    }
  }
}

Blocks MUST be embedded in the page or immediately before the rendered answer in the , inside a