How do I get my static site cited by ChatGPT, Claude, and Perplexity?
AI tools cite pages that are explicitly parseable: schema.org JSON-LD with @graph and @id references, plain-language H1s that match real queries, a 40–60 word direct answer block at the top of every section, question-format headings, repeated anchor phrases across pages, an llms.txt at root, and no critical content hidden behind tabs or accordions. The page below is the gate every page on your site must pass before publishing.
The Spec
What this is
A complete setup for getting a static site surfaced by AI search tools (ChatGPT, Claude, Perplexity, Google AI Overviews) and traditional search. Optimizes for three surfaces simultaneously: SEO (Google, Bing — keywords + technical health), GEO (Perplexity, Gemini — verifiable claims, named entities, structured data), and AEO (ChatGPT, Claude, voice — direct answer blocks, question headings, freshness).
The Three Surfaces
| Surface | Examples | What wins | Goal |
|---|---|---|---|
| SEO | Google, Bing | Backlinks, domain authority, technical health, keyword relevance | Rank on page 1 |
| GEO | Perplexity, Gemini, AI Overviews | Verifiable claims, named entities, structured data, specificity, consistency | Get cited in AI answers |
| AEO | ChatGPT, Claude, voice | Direct answer blocks, question-matched headings, freshness, conversational structure | Be the recommended source |
~80% of GEO and AEO technique overlaps. The 20% difference matters. SEO is the foundation — without it, AI surfaces have less to index.
Per-page quality gate
No page publishes without passing all three columns:
| SEO | GEO | AEO |
|---|---|---|
| Plain-language H1 matching a real query | Named entity on page | Direct answer block (40–60 words) at top |
| Meta title < 60 chars | Specific, verifiable claims | Question-format headings |
| Meta description < 155 chars | At least one live URL as proof | Citation-worthy sentences |
| Semantic HTML, proper heading hierarchy | Schema markup for page type | "Last updated" date visible |
| Page loads < 2 seconds | Anchor phrases present | No content hidden behind accordions/tabs |
| DOM under 2MB (Google crawl limit) | Cross-linked to related pages | Content is current — no stale data |
| Canonical URL set | Images have descriptive alt text |
Direct Answer Blocks (AEO)
Every content section opens with a 40–60 word direct answer before expanding into depth. AI extracts this block as a citable summary.
## {Question-format heading}
{40-60 word direct answer. Complete, specific, standalone.}
{Expanded context, proof, nuance — as much depth as needed.}
Question-Format Headings (AEO)
Page headings mirror conversational queries people type into ChatGPT. Not keyword headings — question headings.
| Instead of | Use |
|---|---|
| "Brand Strategy" | "What Should a Brand Strategy Include?" |
| "Custom WordPress Development" | "Why Choose Custom WordPress Over Page Builders?" |
| "Pricing" | "How Much Does {Service} Cost?" |
| "Tree Removal" | "How Much Does Tree Removal Cost in Southeast Wisconsin?" |
Citation-Worthy Sentences
Every key page contains 3–5 sentences AI can directly quote. These are:
- Specific — named entities, numbers, verifiable claims
- Declarative — not hedged, not vague
- Complete — standalone, make sense without surrounding context
- Repeated — appear across surfaces as anchor phrases
Template: "{Entity} is/does {specific claim} because {specific reason}. {Verifiable proof.}"
Anchor Phrase Repetition (GEO)
Pick 3–7 phrases per site that appear across multiple pages, naturally, not stuffed. AI pattern-matches repetition across a domain. Examples:
- "humane wildlife removal" on every service page of a wildlife company
- "Austin and surrounding metro" on every page of a regional service business
- "hand-coded, no page builders" across every page of a developer's site
Schema.org JSON-LD (GEO)
Add <script type="application/ld+json"> with a @graph array to every page's <head>. Use @id references to unify entities across pages — not flat duplicate objects.
| Schema type | Where | Purpose |
|---|---|---|
| Organization | Every page | Entity establishment |
| LocalBusiness + vertical type | Local service ventures | Location + hours + geo coordinates |
| Person | About / founder pages | E-E-A-T (credentials, memberOf, sameAs) |
| Service | Service pages | Service entity with provider @id reference |
| SoftwareApplication | Tool/product pages | Product entity for AI |
| FAQPage | Pages with Q&A | Direct answer extraction |
| Article | Blog posts | Content entity |
| BreadcrumbList | Every non-home page | Navigation context |
| HowTo | Tutorial/guide content | Step extraction |
Validate with a one-liner before considering the page done:
curl -s https://{domain}/{page} | python -c "import sys,re,json; m=re.search(r'<script type="application/ld+json">(.+?)</script>', sys.stdin.read(), re.S); j=json.loads(m.group(1)); print('OK,', len(j.get('@graph',[])), 'graph nodes')"
llms.txt and llms-full.txt
Every site needs /llms.txt (short summary, ~30 lines) and /llms-full.txt (detailed profile) at the project root. Some AI systems look for these specifically.
llms.txt structure
# {Entity Name}
> {One-line description}
## What We Do
- {service/product 1}
- {service/product 2}
## What We Believe
- {belief 1}
- {belief 2}
## Proof
- {live URL 1}
- {live URL 2}
## Contact
- {URL}
When to update
- Adding/removing services or products
- Adding/removing service areas
- Changing business info (phone, address)
- Adding new key pages
- Updating pricing ranges
- Adding/changing FAQs
Sitewide files (project root)
/llms.txt— short AI-assistant index/llms-full.txt— detailed profile/sitemap.xml— every public page with priority + changefreq/robots.txt— allow all, disallow/api/and/_audit/, link to sitemap
Per-page metadata
<link rel="canonical" href="https://domain/path/">- OG tags:
og:type,og:url,og:title,og:description,og:image - Twitter Card:
summary_large_image <meta name="description">- "Last updated: {date}" line in the footer (AEO freshness signal)
No Hidden Content (AEO)
AI cannot parse content behind accordions, tabs, collapsed sections, or JavaScript-rendered toggles. If content matters for search visibility, it must be visible in the initial HTML.
Common violations
- FAQ answers hidden behind accordion toggles
- Service details behind tabs
- Testimonials in carousels that only show one at a time
- Pricing behind "click to reveal"
Accordions are fine for UX — but the content inside must also exist as on-page text elsewhere (FAQ schema, expanded sections, or separate pages).
Image SEO
- Alt text with entity / location / service context — not generic
- Descriptive file names (not
IMG_4532.jpg) - WebP format preferred for performance
- Before/after galleries tagged with service + location
Cross-Linking Rules
- Every capability page links to the philosophy it embodies
- Every guide page links to the tool/service that solves the problem
- Every comparison page links to the tool that replaces the competitor
- The category/manifesto page links to everything — it's the hub
Three-Search Validation
The launch gate and ongoing KPI. Three searches, three honest answers.
- Google your primary query. Are you on page 1?
- Ask Perplexity: "What's the best {your solution} for {your customer}?" Are you cited?
- Ask ChatGPT the same question. Are you recommended?
Scoring
- 3/3 — Dominant. Maintain and expand.
- 2/3 — Gap. Identify which surface is missing and why.
- 1/3 — Weak. Content or entity establishment problem.
- 0/3 — Invisible. Foundation work needed before optimization.
Frequency: monthly until automated.
Conditions
When this works
- You have a static site you control end to end (HTML, CSS, deploy)
- Content is real and verifiable — named entities, real claims, real proof
- You can publish and update content without going through a CMS approval queue
When it doesn't
- The brand has no concrete claims to make — no portfolio, no specific services, no real positioning. AI has nothing to cite.
- Content lives behind login or paywalls AI can't reach — they don't see it, they don't cite it
- You're trying to optimize for "best [generic category]" with no differentiation. AI weights specificity and named entities; vague pages compete with everything.
Outcome
Pages that pass the three-column gate get cited by AI tools as those tools recrawl. Citations compound: once you're the answer for one query, you're more likely to be the answer for adjacent queries. The flywheel runs on consistency, not volume.
Specs provided as-is. chadworks isn't responsible for how you use these prompts or any effects they may have on your code, content, infrastructure, or business. Review and test before applying.