~/$AEO//GuideAnswer Engine Optimization · v2.0
01 · Foundation

Answer Engine
Optimization

Traditional SEO optimizes for clicks. AEO optimizes for citations — being the source that AI answer engines quote when users ask questions in ChatGPT, Perplexity, Claude, Google AI Overviews, and Bing Copilot.

The web is shifting from a link-click model to an answer-synthesis model. LLMs don't send users to ten blue links — they read, extract, and synthesize. If your content isn't structured for extraction, you don't exist in the answer layer.

↗ Context
As of 2025, over 40% of search queries for informational intent return zero-click AI answers. For technical and product queries, that number is higher. Your content may rank #1 on Google and still never be cited in an LLM response.

The Answer Layer Stack

🌐
Crawl
Bot fetches your pages
⚙️
Parse
Extracts structured signal
🧠
Index
Embeds semantic content
🔍
Retrieve
RAG pulls your chunk
💬
Cite
Answer surfaces your brand

Why This Matters Now

⚡
Zero-click answers
LLMs answer before users ever visit a site. Your content must win at the extraction layer.
🔗
Citation = traffic
Being cited in AI Overviews or Perplexity drives high-intent referral traffic and brand impressions.
🏗️
Structure wins
LLMs favor semantically clear, well-structured HTML. Sloppy markup means missed extractions.
🎯
Intent matching
Conversational query patterns differ from keyword queries. Content must match natural language intent.
🔐
E-E-A-T signals
Experience, Expertise, Authoritativeness, Trust. These are now cross-referenced across the web graph.
📡
Real-time RAG
Perplexity and Bing do live crawls. Fresh, accurate content outcompetes stale high-DA pages.
01 · Foundation

SEO vs AEO

AEO doesn't replace SEO — it extends it into the AI answer layer. Many AEO signals reinforce classic SEO, but the optimization target is fundamentally different.

Traditional SEO
Optimize for keyword density
Target PageRank / backlinks
Blue link click-throughs
10-blue-links SERP placement
Meta description for humans
Long-form content for dwell time
Title tags for ranking signals
AEO
Optimize for answer extractability
Build entity authority and citations
AI citations and brand mentions
AI Overview / featured snippet wins
Structured data for LLM parsing
Concise, quotable answer blocks
Schema markup for entity context
Key insight
The most impactful AEO move isn't rewriting your content — it's restructuring it. Add direct answer blocks, FAQ sections, and schema markup to content that already ranks. This layered approach wins both channels.

The Answer Block Pattern

The single highest-leverage AEO tactic: every major section should open with a direct answer in 2–3 sentences before elaborating. LLMs extract the first clear, complete answer they encounter for a query match.

content-structure.md
// ❌ SEO-optimized (for dwell time) In this comprehensive guide, we'll explore the many facets of Next.js middleware, including its history, use cases, and how it compares to other approaches in the ecosystem... // ✓ AEO-optimized (direct answer first) Next.js middleware runs on the Edge before a request completes, enabling auth checks, redirects, and header rewrites with sub-millisecond latency. It uses the Web Request/Response API. ## Use Cases Middleware is best used for...

Shared Signal Overlap

These classic SEO signals also improve AEO performance — doing them well benefits both channels:

Fast TTFBClean HTML semanticsCanonical URLsInternal linkingMobile-friendlyAuthor attributionUpdated timestampsSchema.org markupFAQ structured data
01 · Foundation

How LLMs Index Your Site

Different AI systems ingest your content in different ways. Understanding each pipeline helps you prioritize what to fix first.

Perplexity
Live RAG crawler — fetches pages in real-time per query. Sonar model does live web search before answering. Being crawlable and fast matters enormously. Prioritizes pages with direct answers near the top of the document. Respects X-Robots-Tag and robots.txt for its bot PerplexityBot.
robots.txt · allow perplexity
User-agent: PerplexityBot Allow: / User-agent: GPTBot Allow: / User-agent: ClaudeBot Allow: / User-agent: anthropic-ai Allow: /
ChatGPT / GPT-4o
Uses GPTBot for web crawling (opt-in via robots.txt) and Bing index for web-enabled queries. Training data has a cutoff, but GPT-4o with browsing pulls live results. Site content is also embedded into OpenAI's training corpus from Common Crawl. Being in Bing's index with high authority is a strong signal.
Google AI Overviews
Pulls from the existing Google Search index. Standard Googlebot crawl + indexed = eligible. Google prioritizes pages with structured data (FAQ, HowTo, Article schema), E-E-A-T signals, and content matching conversational search intent. Featured snippet wins strongly correlate with AIO inclusion.
Claude / Anthropic
Training data from Common Crawl, licensed data sets. ClaudeBot crawls for future training updates. When using web search in Claude.ai (claude-sonnet-4-20250514), it indexes live via search providers. Respects anthropic-ai and ClaudeBot user-agents in robots.txt. llms.txt protocol is directly useful for structured context delivery.

The Extraction Heuristic

Every major LLM answer engine uses some variant of this pipeline when generating citations:

llm-retrieval-pseudo.js
// Simplified RAG retrieval pipeline async function getAnswer(query) { const candidates = await semanticSearch(query, topK=20); const ranked = candidates.filter(doc => { return doc.hasDirectAnswer // ← answer block at top && doc.hasStructuredData // ← schema markup present && doc.authorityScore > 0.6 // ← E-E-A-T signals && doc.freshness > cutoff; // ← recently updated }); const context = ranked.slice(0, 5).map(extractChunks); return synthesize(query, context); }
02 · Signals

Content Structure

Content structure is the highest-leverage AEO investment. LLMs extract meaning from document hierarchy, proximity of claims to headings, and the presence of direct answer patterns.

The AIDA → AREA Pattern

Classic marketing copywriting uses AIDA (Attention, Interest, Desire, Action). AEO-optimized content uses AREA:

area-pattern.md
Answer — Lead with the direct answer (2-3 sentences max) Reason — Explain why / how it works Example — Concrete code or real-world example Alternate — Caveats, edge cases, related topics // Example ## What is React Server Components? // Answer block (gets extracted by LLMs) React Server Components (RSC) are components that render exclusively on the server and never ship JavaScript to the browser. They enable direct database/filesystem access without client bundle impact. // Reason RSC works by separating the component tree into server and client boundaries at build time. The server renders to a special RSC payload...

HTML Semantic Hierarchy

LLM parsers weight content based on its position in the semantic document tree. Proper use of HTML elements directly improves extraction quality.

semantic-html.html
<!-- ✓ High LLM extraction value --> <article itemscope itemtype="https://schema.org/TechArticle"> <header> <h1>How to implement JWT auth in Next.js App Router</h1> <time datetime="2025-06-01">June 2025</time> <address rel="author">Tyler Hughes</address> </header> <!-- Direct answer block — extracted first --> <section aria-label="summary"> <p>JWT auth in Next.js App Router uses...</p> </section> <section> <h2>Step 1: Install dependencies</h2> <pre><code>npm install jose</code></pre> </section> </article>

FAQ Blocks

Explicit Q&A blocks are the most reliable AEO extraction pattern. Every informational page should end with 4–6 FAQ items in both visible HTML and FAQ schema.

Tactic
Use keyword research tools to find People Also Ask questions for your topic. Model your FAQ blocks directly on those — they represent the actual conversational queries LLMs are trained on.
02 · Signals

Schema Markup

Schema.org structured data is machine-readable context that tells LLMs exactly what your content represents, who wrote it, and how to categorize it. It's the most direct signal you can send to the answer layer.

Priority Schema Types

FAQPageArticle / TechArticleHowToOrganizationPersonBreadcrumbListProductSoftwareApplicationWebSite + SearchAction

FAQPage Schema

faq-schema.tsx · Next.js App Router
// components/FaqSchema.tsx interface FaqItem { question: string; answer: string; } export function FaqSchema({ faqs }: { faqs: FaqItem[] }) { const schema = { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faqs.map(({ question, answer }) => ({ '@type': 'Question', name: question, acceptedAnswer: { '@type': 'Answer', text: answer, }, })), }; return ( <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }} /> ); } // Usage in page.tsx export default function Page() { return ( <> <FaqSchema faqs={[ { question: 'What is Next.js App Router?', answer: 'The App Router is a file-system-based...', } ]} /> {/* page content */} </> ); }

Article + Author Schema

article-schema.ts
export function buildArticleSchema(post: Post) { return { '@context': 'https://schema.org', '@type': 'TechArticle', headline: post.title, description: post.excerpt, datePublished: post.publishedAt, dateModified: post.updatedAt, // ← freshness signal author: { '@type': 'Person', name: post.author.name, url: post.author.profileUrl, sameAs: [ // ← entity linking 'https://linkedin.com/in/...', 'https://github.com/...', ], }, publisher: { '@type': 'Organization', name: 'Your Org', logo: { '@type': 'ImageObject', url: '...' }, }, mainEntityOfPage: { '@type': 'WebPage', '@id': post.canonicalUrl, }, }; }
02 · Signals

llms.txt Protocol

The llms.txt convention (proposed by Jeremy Howard of fast.ai) is a Markdown file at your domain root that gives LLMs a curated map of your most important content — analogous to robots.txt for crawlers, but for AI agents doing research.

Status
llms.txt is not a W3C standard — it's a community convention gaining rapid adoption. Perplexity, some ChatGPT plugins, and developer-focused tools actively read it. Implement it, but don't rely on it exclusively.

File Structure

https://yourdomain.com/llms.txt
# Your Company / Product Name > One-paragraph description of what this site is, who it's for, > and what an AI agent should understand about the context. > Be specific and factual — this is consumed by machines. ## Docs - [Getting Started](https://yourdomain.com/docs/start): Installation and setup - [API Reference](https://yourdomain.com/docs/api): Full API documentation - [Configuration](https://yourdomain.com/docs/config): Config options reference ## Blog - [Recent Posts Index](https://yourdomain.com/blog): Latest articles ## Optional: llms-full.txt For tools that support it, link to a full text dump of docs content: - [Full Text](https://yourdomain.com/llms-full.txt): Complete documentation

Next.js Route Handler

app/llms.txt/route.ts
import { NextResponse } from 'next/server'; export async function GET() { const content = `# YourSite > YourSite is a [describe product]. It helps [audience] > achieve [goal] by [mechanism]. Built with Next.js App Router. ## Documentation - [Overview](/docs): Product overview and quick start - [API Reference](/docs/api): REST API endpoints - [Guides](/docs/guides): Step-by-step tutorials ## Blog - [Blog Index](/blog): Technical articles and product updates ## About - [About Us](/about): Team, mission, company background `; return new NextResponse(content, { headers: { 'Content-Type': 'text/plain; charset=utf-8', 'Cache-Control': 'public, max-age=86400', }, }); }
02 · Signals

Authority Signals

LLMs don't just extract content — they weight it by trust. Authority signals are the cross-domain evidence that your content comes from a credible, expert source.

E-E-A-T in the LLM Context

Google's E-E-A-T (Experience, Expertise, Authoritativeness, Trust) framework was designed for human raters, but LLMs have internalized similar patterns from training data. Sites with strong E-E-A-T signals appear more frequently in cited sources.

🧪
Experience
First-hand accounts, case studies, screenshots, real metrics. "We tested X and found Y" outperforms third-hand summaries.
🎓
Expertise
Author bio with credentials, bylines on technical content, consistent subject focus, schema Person markup with sameAs links.
🔗
Authoritativeness
Inbound links from high-authority domains, citations by other sources, presence in Wikipedia, consistent brand mentions across the web.
🛡️
Trust
HTTPS, privacy policy, contact page, accurate "About" page, no factual errors, transparent correction policy.
📅
Freshness
dateModified in schema, visible "last updated" dates in content. Real-time RAG systems strongly favor recent content over stale high-DA pages.
🌐
Entity Presence
Your brand existing as a recognized entity in Wikidata, Crunchbase, industry directories. The more entity nodes, the higher the trust graph score.

The Entity Graph Strategy

LLMs build a knowledge graph of entities (people, companies, products, concepts). Being a well-connected node in that graph dramatically increases citation likelihood.

High-ROI Actions
1. Create and maintain a Wikidata entry for your company/product
2. Add your organization to Google's Knowledge Panel via structured data
3. Get cited/linked from .edu, .gov, and industry authority sites
4. Ensure your LinkedIn, GitHub, Twitter/X profiles link back to your site
5. Guest post on high-DA publications with byline links to your author page
03 · Technical

Entity Architecture

Entity pages are dedicated pages whose sole purpose is to establish a canonical, authoritative definition of a specific topic, person, product, or concept — and to become the go-to citation source for that entity.

Entity Page Anatomy

entity-page-structure.md
URL: /glossary/react-server-components H1: React Server Components (RSC) 1. Definition block ← direct answer, 2-3 sentences 2. At a glance table ← key/value facts (released, version, etc.) 3. How it works ← mechanism explanation 4. Code example ← concrete implementation 5. Use cases ← when to use / not use 6. Related entities ← internal links to related glossary pages 7. External references← link to official docs, RFC, spec 8. FAQ section ← 4-6 Q&A with FAQPage schema Schema: TechArticle + FAQPage + BreadcrumbList

Glossary / Knowledge Hub Strategy

A glossary section (e.g., /glossary or /docs/concepts) is one of the highest-ROI AEO investments. Each page targets a specific entity or term, builds internal link equity, and creates hundreds of citable definition pages.

Grafana-style example
Grafana Labs runs extensive glossary and entity pages for observability terms (metrics, traces, logs, LGTM stack). These pages consistently get cited in LLM responses about monitoring and observability — driving qualified developer traffic that converts for their cloud product.

Internal Linking Graph

LLMs read your internal link structure as a relevance signal. Pages that are heavily interlinked around a topic cluster appear more authoritative for that cluster's queries.

topic-cluster-model.md
// Pillar → Cluster model Pillar page: /docs/observability ← comprehensive overview, links to all clusters Cluster pages: /glossary/metrics ← links back to pillar /glossary/distributed-tracing /glossary/structured-logs /blog/metrics-vs-logs ← comparison content /blog/open-telemetry-guide // Every cluster page links to: 1. The pillar page 2. 2-3 sibling cluster pages 3. External authoritative source (RFC, official docs)
03 · Technical

Performance Signals

Core Web Vitals and TTFB (Time to First Byte) are direct inputs into both Google's ranking algorithm and Perplexity's real-time crawler scoring. Slow pages get deprioritized in the answer layer.

Key Targets

performance-targets.md
TTFB < 200ms ← use SSG/ISR, edge caching LCP < 2.5s ← largest contentful paint FID/INP < 200ms ← interaction responsiveness CLS < 0.1 ← no layout shift HTML payload < 50KB ← critical HTML, not 500KB SPA // Anti-patterns that kill AEO ✗ Content in JS bundles (React CSR without SSR) ✗ Text inside <canvas> or <svg> (not parseable) ✗ Key answers behind modals/accordions (collapsed) ✗ Dynamic content loaded after page load (bot sees empty) ✗ Infinite scroll (bot can't paginate)

SSR / SSG is Non-Negotiable

A React SPA that renders entirely client-side delivers an empty HTML shell to crawlers. LLM bots have limited or no JavaScript execution — they see what's in the raw HTML response.

Critical
If your content lives in a client-side React component and isn't SSR'd, it is invisible to LLM crawlers. Next.js Server Components and SSG are not optional for AEO — they're the foundation.
03 · Technical

Next.js AEO Patterns

Metadata API

app/blog/[slug]/page.tsx
import { Metadata } from 'next'; export async function generateMetadata({ params }): Promise<Metadata> { const post = await getPost(params.slug); return { title: post.title, description: post.excerpt, // ← concise, answer-forward authors: [{ name: post.author, url: post.authorUrl }], openGraph: { type: 'article', publishedTime: post.publishedAt, modifiedTime: post.updatedAt, authors: [post.authorUrl], }, alternates: { canonical: `https://yourdomain.com/blog/${params.slug}`, }, }; }

Sitemap with Priority

app/sitemap.ts
import { MetadataRoute } from 'next'; export default async function sitemap(): Promise<MetadataRoute.Sitemap> { const posts = await getAllPosts(); return [ // High-priority entity pages { url: 'https://yourdomain.com/glossary', priority: 0.9, changeFrequency: 'weekly' }, { url: 'https://yourdomain.com/docs', priority: 0.9, changeFrequency: 'daily' }, // Blog posts with dynamic dates ...posts.map(post => ({ url: `https://yourdomain.com/blog/${post.slug}`, lastModified: new Date(post.updatedAt), priority: 0.7, changeFrequency: 'monthly' as const, })), ]; }

robots.txt for LLM Bots

app/robots.ts
import { MetadataRoute } from 'next'; export default function robots(): MetadataRoute.Robots { return { rules: [ { userAgent: '*', allow: '/' }, { userAgent: 'GPTBot', allow: '/' }, { userAgent: 'PerplexityBot', allow: '/' }, { userAgent: 'ClaudeBot', allow: '/' }, { userAgent: 'anthropic-ai', allow: '/' }, { userAgent: 'Googlebot', allow: '/' }, ], sitemap: 'https://yourdomain.com/sitemap.xml', }; }
04 · Execution

AEO Audit

Run this audit against any existing page to score its AEO readiness. Target 80%+ before publishing new content.

Crawlability Layer

audit-crawlability.sh
# 1. Verify LLM bots are allowed curl https://yourdomain.com/robots.txt | grep -E "GPTBot|PerplexityBot|ClaudeBot" # 2. Check TTFB curl -o /dev/null -s -w "%{time_starttransfer}" https://yourdomain.com/your-page # 3. Check if critical content is in raw HTML (not JS-rendered) curl -s https://yourdomain.com/your-page | grep "your key term" # 4. Validate structured data # → https://search.google.com/test/rich-results # → https://validator.schema.org # 5. Check llms.txt exists curl -I https://yourdomain.com/llms.txt

Content Quality Signals

✓ Direct answer block
Does the page open with a 2-3 sentence direct answer to the primary query it targets?
✓ FAQ section
Are there 4+ Q&A pairs with FAQPage schema? Questions should match People Also Ask patterns.
✓ Author attribution
Is there a visible author byline with a link to an author page that has Person schema?
✓ Last updated date
Visible dateModified with matching schema markup. Real-time RAG systems weight this heavily.
✓ Semantic HTML
article, section, h1-h3 hierarchy, time, address elements used correctly.
✓ Internal linking
3+ contextual internal links to related entity pages or topic cluster content.
04 · Execution

AEO Checklist

Click items to mark complete. Progress tracked per session.

COMPLETION
0 / 16 complete
Foundation
robots.txt allows GPTBot, PerplexityBot, ClaudeBot, anthropic-aiCritical
All content pages SSR'd or SSG — no client-only rendering of key contentCritical
TTFB under 200ms (use SSG + CDN edge caching)Perf
sitemap.xml includes all key pages with lastModified datesCrawl
Content Structure
Every key page opens with a direct answer block (2-3 sentences)Critical
FAQ section on every informational page (4+ Q&A pairs)Critical
Proper semantic HTML: article, section, header, h1-h3 hierarchyStructure
Visible author byline with link to author page on all contentTrust
Visible "last updated" date on all articles and docsFreshness
Schema Markup
FAQPage schema on all pages with FAQ sectionsSchema
Article/TechArticle schema with author, datePublished, dateModifiedSchema
Organization schema on homepage with sameAs entity linksSchema
Person schema on author pages with LinkedIn/GitHub sameAsSchema
BreadcrumbList schema on all non-root pagesSchema
LLM-Specific
/llms.txt implemented and accessibleAEO
Glossary / entity pages built for primary topic clusterAEO
AEO Reference Guide
Next.js · Schema.org · llms.txt
claude-sonnet-4-20250514