Schema Markup for AEO: Complete Implementation Guide
Schema markup is structured data embedded in your HTML that explicitly tells AI engines what your content is and what questions it answers. FAQPage schema is the highest-value markup for AEO — it maps directly to AI-generated Q&A answers. Implementing FAQPage, HowTo, and Article schema takes 30–60 minutes per page and can meaningfully increase citation rates from ChatGPT, Perplexity, Claude, and Google AI Overviews.
This guide covers every schema type relevant to AEO with complete, copy-paste JSON-LD examples.
Why schema markup matters for AEO
AI engines parse structured data as a high-confidence signal about your content. When Perplexity encounters a page with FAQPage schema, it knows with certainty which questions the page answers and what the authoritative answers are — without needing to infer this from the prose.
This reduces ambiguity. An AI engine reading unstructured prose must decide whether the page answers the query. A page with FAQPage schema directly asserts "these are the questions this page answers." That's a strong citation signal.
Google's documentation (April 2026) confirms: pages with FAQPage schema are eligible for FAQ-style AI Overviews rich results. Multiple independent analyses of Perplexity citation patterns show that FAQPage schema correlates with higher citation rates for informational queries.
How to implement JSON-LD schema
All schema should be implemented as JSON-LD in a <script> tag in your page's <head>. This is Google's recommended format (versus Microdata or RDFa):
<head>
<!-- your existing meta tags -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
...
}
</script>
</head>
You can include multiple JSON-LD blocks on the same page (one per schema type). They don't conflict.
FAQPage schema (highest priority for AEO)
FAQPage schema is a list of Question/Answer pairs. Each question should match how users would phrase it in a chatbot — natural language, often ending with a "?".
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is prompt caching in Claude?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Prompt caching stores a prefix of your prompt on Anthropic's servers, reducing subsequent request costs by up to 90%. It requires adding cache_control: {type: ephemeral} to your message block."
}
},
{
"@type": "Question",
"name": "How long does the Claude prompt cache last?",
"acceptedAnswer": {
"@type": "Answer",
"text": "The cache TTL is 5 minutes, resetting on each cache hit. An entry not accessed for 5 minutes expires and must be re-cached on the next request."
}
}
]
}
Answer format guidelines:
- Keep answers under 300 characters where possible — AI engines often quote them verbatim
- Use plain text in the answer (the schema is plain text, not HTML markup)
- Be specific and definitive — hedged answers ("it depends") are less likely to be cited
How many Q&As per page? 3–10 is the optimal range. Under 3 questions may not trigger FAQ rich results. Over 10 questions starts to dilute focus.
Article / TechArticle schema
Every page should have Article or TechArticle schema. This identifies the page as an authoritative publication and provides freshness signals.
{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "Schema Markup for AEO: Complete Implementation Guide",
"description": "How to implement FAQPage, HowTo, Article schema to maximize AI citations.",
"datePublished": "2026-04-27",
"dateModified": "2026-04-27",
"url": "https://claudeguide.io/schema-markup-aeo-guide",
"author": {
"@type": "Organization",
"name": "ClaudeGuide",
"url": "https://claudeguide.io"
},
"publisher": {
"@type": "Organization",
"name": "ClaudeGuide",
"url": "https://claudeguide.io"
}
}
Use TechArticle instead of Article for developer/technical content. It signals domain expertise to AI engines that weight authoritative sources.
HowTo schema (for tutorials and step-by-step guides)
For content that walks users through a process, HowTo schema maps your steps into a structured format that AI engines can cite as procedure-style answers.
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "How to implement prompt caching in Python",
"description": "Add cache_control to your Claude API request to reduce input token costs by 90%.",
"totalTime": "PT15M",
"step": [
{
"@type": "HowToStep",
"name": "Install the Anthropic SDK",
"text": "Run: pip install anthropic",
"position": 1
},
{
"@type": "HowToStep",
"name": "Add cache_control to your system message",
"text": "In your messages.create() call, wrap your system prompt text in a content block with cache_control: {type: ephemeral}.",
"position": 2
},
{
"@type": "HowToStep",
"name": "Verify cache hits",
"text": "Check response.usage.cache_read_input_tokens — if greater than 0, the cache hit.",
"position": 3
}
]
}
totalTime uses ISO 8601 duration format: PT15M = 15 minutes, PT1H = 1 hour, PT2H30M = 2.5 hours.
BreadcrumbList schema (navigation context)
BreadcrumbList tells AI engines where a page sits in your site hierarchy, which helps with topical context:
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "ClaudeGuide",
"item": "https://claudeguide.io"
},
{
"@type": "ListItem",
"position": 2,
"name": "AEO Guides",
"item": "https://claudeguide.io/aeo-vs-seo-2026"
},
{
"@type": "ListItem",
"position": 3,
"name": "Schema Markup for AEO",
"item": "https://claudeguide.io/schema-markup-aeo-guide"
}
]
}
SoftwareApplication schema (for product/tool review pages)
If you have a page reviewing or describing a software product, SoftwareApplication schema signals this to AI engines:
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "Claude Code",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "macOS, Linux, Windows",
"description": "AI-powered coding assistant that operates as a CLI agent inside your project directory.",
"url": "https://claude.ai/claude-code"
}
Combining multiple schema types on one page
You can place multiple JSON-LD blocks in the same <head>. For an article with a FAQ section:
<!-- Article schema -->
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"TechArticle","headline":"..."}
</script>
<!-- FAQ schema -->
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[...]}
</script>
Each block is independent. This combination is valid and recommended.
Implementing in Next.js App Router
Inject JSON-LD as a server-rendered script tag in your page component:
// In your article page component
const faqSchema = {
"@context": "https://schema.org",
"@type": "FAQPage",
mainEntity: article.faqItems.map((item) => ({
"@type": "Question",
name: item.question,
acceptedAnswer: { "@type": "Answer", text: item.answer },
})),
};
return (
<>
<script
type="application/ld+json"
suppressHydrationWarning
// Schema is developer-authored static data, not user input
{...{ "data-schema": JSON.stringify(faqSchema) }}
/>
{/* page content */}
</>
);
For static sites (Next.js SSG), schema renders into static HTML at build time — AI crawlers see it without JavaScript execution.
Testing your schema
Google's Rich Results Test: search.google.com/test/rich-results — paste your URL to verify FAQPage and other schema are valid.
Schema.org Validator: validator.schema.org — more thorough validation across all schema types.
Manual JSON check: Validate your JSON before deploying. Invalid JSON means the script tag is silently ignored by crawlers.
Frequently asked questions
Does schema markup directly cause AI citation? Schema is one signal among many. A page with perfect FAQPage schema but weak content won't be cited. Schema increases the probability that an already-strong page gets cited for the specific questions it covers.
Should I use Microdata or JSON-LD for schema? JSON-LD. Google, Bing, and all major AI crawlers recommend JSON-LD as the primary structured data format. Microdata is legacy. JSON-LD is easier to maintain and update without touching your HTML structure.
How often should I update schema?
Update dateModified in Article schema whenever content changes. Keep FAQ answers current — AI engines that cite stale schema answers can hurt trust if users notice the information is outdated.
Does schema markup affect Google organic rankings? Schema itself is not a direct ranking factor for standard organic results. It affects rich result eligibility (FAQ results, How-to results) and can improve click-through rate. For AEO citations, it functions as a more direct signal.
Can I auto-generate FAQPage schema from markdown content?
Yes. Parse your FAQ section (e.g., ## Frequently asked questions) from markdown and generate the JSON-LD programmatically. This is more maintainable than hand-coding schema for every article. See the AEO 2026 citation guide for the full content strategy.
Related guides
- AEO 2026: How to Get Cited by ChatGPT, Claude, Perplexity — the full AEO strategy beyond schema markup
- AEO vs SEO: What Actually Changes in 2026 — where to invest your content effort
Take It Further
AEO Playbook: Rank in AI Answers (Claude, ChatGPT, Gemini) — The complete AEO system: audit framework, 12 content templates, implementation guide for all major AI engines, and an AEO audit checklist.
30-day money-back guarantee. Instant download.