Technical AI SEO is the discipline of structuring a website's HTML, schema, and content so AI answer engines — ChatGPT, Perplexity, Claude, Gemini, Google AI Overviews, and Google AI Mode — can extract, cite, and attribute your pages accurately. At WebFlur we ship a six-layer technical stack on every B2B site — this pillar breaks down the exact HTML, JSON-LD, and file-level patterns.
Traditional technical SEO checklists (crawlability, canonical, sitemap, Core Web Vitals) still apply — AI engines depend on them. But they are not enough. Technical AI SEO adds a machine-readable layer on top: schema stack, llms.txt, entity anchors, extractable answer blocks, chunk-friendly headings, and a disciplined interlinking topology. All of it below with copy-paste patterns.
What it is
The three-schema stack — Article (or BlogPosting) + FAQPage + HowTo — inside a single @graph block, linked to a shared Organization + WebSite node. This is the WF-AIO-4 minimum. Missing any of the three is a citation-eligibility gap in AI Overviews.
How to ship it
Every content page gets one <script type="application/ld+json"> block containing all three types keyed by @id. Article carries the headline, author, and datePublished. FAQPage mirrors the visible FAQ Q&A pairs exactly (mismatch triggers Google validation warnings). HowTo is required wherever the page has a numbered step sequence — which is almost always if the page teaches something.
How to validate
Run every deploy through validator.schema.org and Google's Rich Results Test. The most common failure we see in audits: an Article schema with no image field, or a FAQPage where the JSON questions and the visible questions have drifted apart after an edit.
What it is
/llms.txt is a plain-text site brief that AI crawlers (and increasingly AI answer engines directly) fetch to understand the whole site at once — what the company does, who it serves, which URLs are canonical, which are the flagship pieces of content, and how to cite it. Analogous to robots.txt but for meaning, not access.
How to ship it
Author a plain-text file at your site root: /llms.txt. Structure it with markdown-style headers: # Site name, > one-sentence description, ## What we do, ## Who we serve, ## Founders, ## Pages, ## Articles, ## Feeds. Update whenever entity content changes. Link from every page via <link rel="llms.txt" href="/llms.txt"> in the <head>.
Why now (even though it is emerging)
The llms.txt convention is not universally adopted yet — Anthropic, Perplexity, and a growing list of AI crawlers respect it; some do not. But the file is trivially cheap to ship and the models that do read it use it as high-authority ground truth about what the site is. Downside risk of shipping: near zero. Upside: entity-anchor clarity for every engine that reads it.
What it is
The first <p> inside .post-body — or its equivalent in your CMS — is a definitional-first sentence in "X is Y" grammar, ≤60 words, with the brand entity mentioned in the same paragraph. This is the primary AI Overview extraction target on every page. Missing it is the single most common structural gap in the WebFlur audit dataset.
The exact HTML pattern
Wrap the definitional paragraph in a visible "Quick Answer" card (blue accent border, labelled pill) so both humans and AI parsers see it as the direct answer. Then every H2 opens with a 40–80 word direct answer to the question that H2 asks, before any narrative. This is WF-AIO-2 — per-H2 extractable answers.
What it costs
Roughly 20 minutes per page to rewrite. Impact is disproportionate: median AIO citation frequency triples in WebFlur audits after this rewrite alone, before any other change. If you only ever ship one technical AI SEO layer, ship this one.
What it is
Populate the Organization schema's sameAs array with URIs to your entity on LinkedIn, Wikipedia, Wikidata, GitHub (if applicable), and Crunchbase. This lets AI models unambiguously anchor your brand to a specific entity — instead of guessing whether "Cargoflow" means a freight-tech company or a warehouse-logistics term.
How to ship it
Add the sameAs array to the single Organization node in your @graph. Because @graph nodes are shared by @id, every page inherits the anchor. Highest-value URIs: LinkedIn company page (always available), Wikipedia (if the company has a page), Wikidata (create one — it's free). Do not populate with vanity URLs (Twitter, YouTube) unless the account is active — dead links reduce trust.
Why this matters more than most teams think
Entity anchoring is the mechanism by which ChatGPT decides "when a user says X, they mean this specific company." Without sameAs, the model has to guess from context. With sameAs, it has a hard-linked knowledge-graph reference. The uplift in citation stability is not linear — it is a step function.
What it is
AI Mode and AI Overviews do not extract whole pages — they extract passages. A passage is roughly one H2 section's worth of self-contained content: a direct answer, context, one supporting example, deeper detail. The section is the citation unit, not the page. Optimizing for passage extraction is a distinct discipline from optimizing for page rank.
The rules
Every H2 is phrased as a complete user question (matches how buyers actually query). Every H2 section is 75–150 words and self-contained — reads correctly with no context from earlier sections (this is WF-ENG-8). Every H2 section opens with a 40–80 word direct answer before any narrative (WF-AIO-2). No cross-references like "as mentioned above" — each block must stand alone.
Why passage-friendly beats page-friendly
Every H2 becomes an independent AIO/AI Mode citation candidate this way. A 3,000-word pillar with 10 well-chunked H2s has 10 shots at citation instead of 1. Long monolithic essays get skipped by AI extraction even when the underlying content is strong.
What it is
Every published post belongs to exactly one topical cluster. Each cluster has one pillar page and 5–15 spokes. Every spoke links UP to its pillar twice (inline body + aside). Every spoke links SIDEWAYS to at least 2 sibling spokes. Every pillar links DOWN to every published spoke. Every post links to at least 1 cross-cluster pillar. This is codified as WF-LINK-1 through WF-LINK-6 in WEBFLUR_BLOG_SYSTEM.md PHASE 0.
How to ship it
For every existing spoke: add an inline body-copy sentence linking to the pillar with a contextual anchor. Add a "More from WebFlur" aside above the FAQ with 3–5 slots (pillar link + 2 siblings + solutions + optional case study). Track cluster health in blog/CLUSTER_HEALTH.md: for each cluster, tally spokes published, spokes with WF-LINK-1 up-links, pillar down-link coverage, and cross-cluster links.
Why cluster topology beats page-level optimization
A single-post optimization is bounded by its own signals. A cluster amplifies every post in the cluster through interlinks — AI models weight topical density heavily (documented in the arXiv GEO paper). In the WebFlur audit dataset, healthy clusters (pillar + 5+ interlinked spokes) out-cite equivalent isolated posts by ~2.5× on the primary query.
Layer coverage compared — which AI engine reads which layer
Not every engine weights every layer equally. The table below is the WebFlur cheat-sheet for prioritising layers based on which engine matters most for your buyers.
| Layer | Google AI Overviews | Google AI Mode | Perplexity | ChatGPT | Claude / Gemini |
|---|---|---|---|---|---|
| Schema stack | Required | Required | Strong hint | Weak hint | Strong hint (Claude), Required (Gemini) |
| llms.txt | Not yet read | Not yet read | Read | Read (Anthropic-authored spec) | Read (Claude), Not confirmed (Gemini) |
| Answer-first content | Critical | Critical | Strong signal | Moderate signal | Strong signal (both) |
| Entity sameAs | Required | Required | Strong signal | Critical (disambiguation) | Critical (both) |
| Chunking / question H2s | Critical (passage extraction) | Critical (passage extraction) | Strong signal | Moderate signal | Critical (Claude), Strong (Gemini) |
| Cluster topology | Strong signal | Strong signal | Strong signal | Very strong (training-data topical density) | Strong signal (both) |
The single most important read from the table: every layer helps every engine to some degree — none of the layers are engine-specific in a way that lets you skip them. Prioritize by order of impact, not by engine.
Step-by-step: the 7-step technical rollout
This is the exact order of operations for shipping the six-layer stack. Ordered by impact per hour of engineering time invested — the earliest steps have the highest ROI.
- Ship the three-schema stack. Article + FAQPage + HowTo JSON-LD on every content page. One @graph block per page, keyed by @id. Validate every deploy with validator.schema.org.
- Publish llms.txt at the site root. Plain-text machine-readable site brief. Link from every page via
<link rel="llms.txt" href="/llms.txt">. Update on entity changes. - Rewrite every page opener as answer-first. ≤60 word definitional paragraph, X-is-Y grammar, brand entity in the same paragraph. Wrap in a visible Quick Answer card. WF-AIO-1.
- Populate Organization sameAs. LinkedIn + Wikipedia + Wikidata + GitHub URIs. Ships once, applies site-wide via @graph inheritance. Highest per-hour uplift on Claude and Gemini.
- Break long prose into 75-150 word answer blocks. Every H2 phrased as a user question, every H2 section self-contained, every H2 opens with a 40-80 word direct answer. WF-AIO-2 + WF-ENG-8.
- Interlink into topical clusters. WF-LINK-1..6. Every spoke up-links to pillar. Every spoke sideways-links to 2+ siblings. Every pillar down-links to every spoke. Cross-cluster link on every post.
- Verify at 7 and 30 days post-publish. Run primary + top-3 secondary queries in incognito across all six engines for US + IN. Log to
blog/AI_OVERVIEW_TRACKER.md. Trigger rewrites on 🎯-flagged non-citations.
Anti-patterns — what to remove from your site today
Six patterns actively block AI citation and appear in almost every B2B site we audit. Remove them before adding anything new.
1. JS-rendered content that appears blank in view-source. AI crawlers do not execute JavaScript reliably. Any content that requires a client-side render is invisible to Perplexity, Claude, and half of AI Overview extraction.
2. Answer content hidden inside <details> / click-to-expand accordions. The initial HTML the crawler sees is the collapsed state — the answer never enters the retrieval index. WEBFLUR_BLOG_SYSTEM.md PHASE 6 blocks this pattern by pre-publish checklist.
3. Case studies gated behind forms or PDFs. Every gated proof point is a zero-citation asset. AI models cannot cite what they cannot read. Ungate the plain-text version even if the PDF stays gated.
4. Blocking AI crawlers in robots.txt. GPTBot, ClaudeBot, PerplexityBot, Google-Extended, and CCBot all respect robots.txt. Blocking any of them is a self-inflicted citation gap. Allow with sensible crawl-delay values.
5. <nav> elements inside .post-body. Global fixed-position rules pin them to the viewport and break the layout. Use <aside> for TOCs, <div> for callouts. Guardrail: WEBFLUR_BLOG_SYSTEM.md PHASE 6.
6. FAQPage schema that has drifted from the visible FAQ. When JSON questions and HTML questions do not match, Google validation warnings compound and the schema loses trust weight. Ship both from a single source of truth.
The strategy pillar for shipping all of this in sequence is AI SEO strategy 2026 — the step-by-step guide for B2B. The measurement pillar for verifying it worked is how to track AI SEO — metrics, rankings & diagnostics. And the per-engine mechanics behind the layer-coverage table are in how to get cited across all six AI answer engines.
For B2B sites optimizing for agentic buyers (procurement agents running vendor shortlisting autonomously), the technical stack extends to a live Agent2Agent endpoint at /.well-known/agent-card.json. Full walkthrough: what is an A2A endpoint and why every B2B needs one. That is the Layer 7 most technical AI SEO guides skip.
- Schema.org: The structured-data vocabulary the three-schema stack draws from.
- llmstxt.org: The emerging convention for machine-readable site briefs.
- validator.schema.org: The validator every deploy should pass through.
- a2a-protocol.org: The Agent2Agent protocol spec for the Layer 7 endpoint.
