SEO / GEO / AEO — Search & AI Visibility
Traditional search optimization plus optimization for AI answer engines (2026 landscape).
The Three Layers of Visibility
| Layer | Target | Optimizes For |
|---|---|---|
| SEO | Google, Bing | Crawlers, backlinks, keyword relevance |
| AEO | Featured snippets, voice search | Direct question-answer matching |
| GEO | ChatGPT, Perplexity, Claude, AI Overviews | Being cited/quoted by LLMs |
Traditional SEO Fundamentals
Technical SEO Checklist
✓ robots.txt allows crawling of important pages
✓ sitemap.xml submitted to Search Console
✓ Canonical URLs set on every page
✓ No duplicate content (or rel=canonical pointing to original)
✓ Mobile-responsive (Google is mobile-first indexing)
✓ Core Web Vitals pass (LCP < 2.5s, INP < 200ms, CLS < 0.1)
✓ HTTPS everywhere
✓ Structured data (JSON-LD) on key page types
Metadata Template (Next.js)
// app/blog/[slug]/page.tsx
import type { Metadata } from "next"
export async function generateMetadata({ params }: Props): Promise<Metadata> {
const post = await getPost(params.slug)
return {
title: `${post.title} | YourBrand`,
description: post.excerpt.slice(0, 160),
keywords: post.tags,
alternates: {
canonical: `https://example.com/blog/${post.slug}`,
},
openGraph: {
title: post.title,
description: post.excerpt,
type: "article",
publishedTime: post.publishedAt,
authors: [post.author.name],
images: [{ url: post.ogImage, width: 1200, height: 630 }],
},
twitter: {
card: "summary_large_image",
title: post.title,
description: post.excerpt,
images: [post.ogImage],
},
}
}
Structured Data (JSON-LD)
// Article schema
function ArticleSchema({ post }: { post: Post }) {
const schema = {
"@context": "https://schema.org",
"@type": "Article",
headline: post.title,
description: post.excerpt,
image: post.ogImage,
datePublished: post.publishedAt,
dateModified: post.updatedAt,
author: { "@type": "Person", name: post.author.name },
publisher: {
"@type": "Organization",
name: "YourBrand",
logo: { "@type": "ImageObject", url: "https://example.com/logo.png" },
},
}
return (
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
/>
)
}
// FAQ schema (also boosts AEO — see below)
const faqSchema = {
"@context": "https://schema.org",
"@type": "FAQPage",
mainEntity: faqs.map(faq => ({
"@type": "Question",
name: faq.question,
acceptedAnswer: { "@type": "Answer", text: faq.answer },
})),
}
AEO — Answer Engine Optimization
Goal: get your content selected as a featured snippet or voice search answer.
Question-Answer Format
## How long does it take to set up a SaaS MVP?
A typical SaaS MVP takes 4-8 weeks to launch, depending on feature scope.
The breakdown: 2-3 days for project setup, 1 week for auth and billing
integration, and 2-4 weeks for core feature development.
<!-- Direct, complete answer in the FIRST sentence — this is what gets
extracted into featured snippets and voice answers -->
AEO Content Structure
1. Question as H2/H3 heading (matches actual search queries)
2. Direct answer in first sentence (40-60 words ideal for snippets)
3. Supporting detail/context after
4. Bullet points or numbered lists for scannable answers
## What is Row-Level Security in PostgreSQL?
Row-Level Security (RLS) is a PostgreSQL feature that restricts which rows
a user can access in a table, based on policies you define. Unlike
application-level checks, RLS enforces access control at the database
layer itself.
Key benefits:
- Enforced even if application code has bugs
- Works across all database clients (not just your app)
- Reduces duplicate authorization logic
Voice Search Optimization
- Target natural language questions ("how do I...", "what is...", "why does...")
- Write answers in conversational tone — voice assistants read these aloud
- Keep primary answer under 30 words when possible (voice answers are brief)
GEO — Generative Engine Optimization (2026)
Goal: get cited, quoted, or referenced by AI systems (ChatGPT, Perplexity, Claude, Google AI Overviews).
What LLMs Look For When Citing Sources
- Clear, extractable claims — specific facts, numbers, definitions stated plainly
- Authoritative structure — proper headings, not walls of text
- Recency signals — dates, "last updated," version numbers
- Original data/research — content that can't be found elsewhere is more citable
- Clean semantic HTML —
<article>,<section>, proper heading hierarchy
GEO Content Patterns
<!-- ✅ Citable: specific, attributable claim -->
According to our 2026 survey of 500 SaaS companies, 73% use PostgreSQL
as their primary database, up from 61% in 2024.
<!-- ❌ Not citable: vague, no source -->
Most companies use SQL databases these days.
<!-- ✅ Definition format LLMs extract easily -->
**Row-Level Security (RLS)** is a PostgreSQL access-control mechanism
that filters query results based on the requesting user's identity,
enforced at the database engine level rather than in application code.
<!-- Structured for extraction: term in bold, clear definition follows -->
Author & Source Authority Signals
// E-E-A-T signals (Experience, Expertise, Authoritativeness, Trust)
// LLMs and search engines both weight these
const authorSchema = {
"@context": "https://schema.org",
"@type": "Person",
name: "Author Name",
jobTitle: "Senior Backend Engineer",
worksFor: { "@type": "Organization", name: "Company" },
sameAs: [
"https://linkedin.com/in/author",
"https://github.com/author",
],
}
Llms.txt (Emerging Standard, 2025-2026)
# llms.txt — at your domain root, similar to robots.txt
# Signals to AI crawlers what content is most important/citable
# YourBrand
> One-line description of what your site/product does.
## Documentation
- [API Reference](https://example.com/docs/api): Full API documentation
- [Getting Started](https://example.com/docs/start): Quickstart guide
## Key Pages
- [Pricing](https://example.com/pricing): Current pricing tiers
- [Changelog](https://example.com/changelog): Recent product updates
Landing Page SEO/AEO Writer Template
# [Primary Keyword] — [Value Proposition]
<!-- H1: include primary keyword naturally, keep under 60 chars -->
[Hook paragraph: 2-3 sentences, state the problem and your solution.
Include primary keyword in first 100 words.]
## What is [Primary Keyword]?
<!-- AEO: direct definition, extractable -->
[40-60 word direct answer]
## Why [Primary Keyword] Matters
<!-- Supporting context, secondary keywords naturally woven in -->
## How [Product] Solves [Problem]
<!-- Feature breakdown with H3s for each feature -->
### [Feature 1]
[Benefit-focused description]
### [Feature 2]
[Benefit-focused description]
## Frequently Asked Questions
<!-- AEO + FAQ schema — high snippet/voice-answer potential -->
### [Question matching real search query]
[Direct answer, 40-60 words]
### [Question matching real search query]
[Direct answer, 40-60 words]
## [CTA Section]
[Clear single call-to-action]
On-Page Checklist for Landing Pages
- H1 contains primary keyword, appears once
- Primary keyword in first 100 words
- H2/H3 use question format where relevant (AEO)
- Meta description: 150-160 chars, includes keyword + CTA
- Internal links to 2-3 related pages
- Image alt text descriptive (not keyword-stuffed)
- FAQ section with schema markup
- Page load < 2.5s LCP
- At least one specific, citable fact/statistic (for GEO)
Measuring Success
| Metric | Tool | Tracks |
|---|---|---|
| Organic traffic | Google Search Console | Traditional SEO |
| Featured snippets | Search Console + manual checks | AEO |
| AI citations | Manual prompting of ChatGPT/Perplexity/Claude | GEO |
| Core Web Vitals | PageSpeed Insights, Vercel Analytics | Technical SEO |
| Keyword rankings | Ahrefs, SEMrush | SEO |
Key Rules
- Direct answers in the first sentence — this is what gets extracted for both AEO snippets and GEO citations
- Specific, attributable facts beat vague claims — numbers, dates, named sources are more citable by LLMs
- Question-format headings — match real search queries and voice search patterns
- FAQ schema everywhere relevant — cheap to add, high AEO value
- Structured data (JSON-LD) on all key page types — Article, FAQPage, Product, Organization
llms.txtat domain root — emerging signal for AI crawler prioritization- Core Web Vitals are non-negotiable — slow pages rank worse and convert worse
- One H1 per page, logical heading hierarchy beneath it
- Original data/research is the highest-value content for GEO — AI systems prefer unique sources
- Update dates visibly — "Last updated" signals recency to both crawlers and LLMs