The three schema types that get cited in Google AI Overviews are Article (or BlogPosting), FAQPage, and HowTo — combined into one @graph block per page and linked to a shared Organization + WebSite node. This is the WF-AIO-4 minimum on every WebFlur B2B site. Missing any of the three — especially HowTo when a step sequence exists — is a blocking gap for AIO citation eligibility.
Google does not officially rank schema types by AIO uplift. But the WebFlur audit dataset — 40+ B2B sites tracked across the September 2026 auto-expand rollout — shows a consistent pattern: pages with the three-schema stack out-cite pages missing any one of them by roughly 2.5×. Below is the exact stack, why each type earns its slot, and a copy-paste starter you can adapt in an afternoon.
Which schema types get cited in AI Overviews
Three schema types earn AIO citation eligibility on B2B content pages. A fourth (BreadcrumbList) is required for SERP breadcrumb rendering but does not directly influence AIO. A fifth (Organization) is the shared entity anchor every other type references.
| Schema type | Required for AIO? | Why it earns citation |
|---|---|---|
| Article (or BlogPosting) | Yes | Tells AIO this is editorial content, provides author/date/publisher for E-E-A-T signals |
| FAQPage | Yes if page has an FAQ | AIO extracts individual Q&A pairs verbatim; strongest per-passage citation signal |
| HowTo | Yes if page has numbered steps | AIO renders step-by-step answers directly from HowTo; missing it when steps exist is a blocking gap |
| BreadcrumbList | Required for breadcrumb SERP rendering (not AIO-specific) | Google renders breadcrumbs in SERP + AIO citation attribution |
| Organization + WebSite | Site-wide (ship once) | The shared entity node every other schema references by @id — foundation for entity anchoring |
Other schema types (Product, Review, LocalBusiness, etc.) matter for other SERP features but do not directly move the needle on AIO citation. If you're building B2B content pages, the three-schema stack + Organization is enough. Skip Product/Review unless you have a specific SERP-feature reason.
Why the @graph block matters (not separate scripts)
Two common patterns in the wild:
Pattern A — separate scripts (avoid): One <script type="application/ld+json"> block for Article, another for FAQPage, another for BreadcrumbList. Each block re-declares the Organization inline. Wastes bytes, and — more importantly — Google has to reconcile duplicate Organization nodes across scripts, which produces warnings.
Pattern B — single @graph (correct): One <script type="application/ld+json"> block with a top-level @graph array containing every schema type as a separate node. Each node has its own @id. Organization is defined once and referenced by {@id: "https://your-domain.com/#organization"} from every other node. Clean, canonical, no duplication.
Every node gets a fully-qualified URL @id — for the Article on this page, https://your-domain.com/blog/schema-for-ai-overviews#article. For the Organization, https://your-domain.com/#organization. For the WebSite, https://your-domain.com/#website. This is what lets nodes reference each other unambiguously across the @graph.
Step-by-step: shipping the three-schema stack
Total time from blank <head> to validated schema: about 45 minutes the first time, ~10 minutes on subsequent pages once you have a template.
- Draft the @graph shell. Create a
<script type="application/ld+json">block in your page<head>. Open with{ "@context": "https://schema.org", "@graph": [ ... ] }. Every schema type on this page goes inside the @graph array. - Add Organization + WebSite as shared nodes. First two nodes: Organization (with
@id,sameAsURIs, logo) and WebSite (with@id, publisher referencing Organization by@id). Ship these once site-wide. - Add the Article node. With
@id(page URL +#article),headline,description,url,datePublished,dateModified,author(Person with jobTitle + sameAs),publisher(@id Organization),image(1200×630 min),about(Thing[] with sameAs). - Add the BreadcrumbList node. With
itemListElementarray: Home → Blog → this page. Position numbers, names, item URLs. - Add the FAQPage + HowTo nodes. FAQPage with
mainEntityof Question/Answer pairs mirroring the visible FAQ exactly. HowTo required wherever page has a numbered step sequence — with name, description, totalTime, step[]. WF-AIO-4 minimum. - Validate every deploy. Run through validator.schema.org and Google Rich Results Test. Fix any warnings before merge.
Copy-paste JSON-LD starter
Drop this into your page <head> and swap in your own values. This is the minimum viable three-schema stack + shared Organization + WebSite + BreadcrumbList.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://your-domain.com/#organization",
"name": "Your Company",
"url": "https://your-domain.com/",
"logo": "https://your-domain.com/logo.svg",
"sameAs": [
"https://www.linkedin.com/company/your-company",
"https://en.wikipedia.org/wiki/Your_Company",
"https://www.wikidata.org/wiki/Q123456"
]
},
{
"@type": "WebSite",
"@id": "https://your-domain.com/#website",
"url": "https://your-domain.com/",
"name": "Your Company",
"publisher": { "@id": "https://your-domain.com/#organization" }
},
{
"@type": "Article",
"@id": "https://your-domain.com/blog/post-slug#article",
"headline": "Your Post Title",
"description": "One-sentence summary of the post.",
"url": "https://your-domain.com/blog/post-slug",
"datePublished": "2026-09-12",
"dateModified": "2026-09-12",
"author": {
"@type": "Person",
"name": "Author Name",
"jobTitle": "Role",
"sameAs": ["https://www.linkedin.com/in/author"]
},
"publisher": { "@id": "https://your-domain.com/#organization" },
"image": {
"@type": "ImageObject",
"url": "https://your-domain.com/og-post.png",
"width": 1200,
"height": 630
}
},
{
"@type": "BreadcrumbList",
"itemListElement": [
{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://your-domain.com/"},
{"@type": "ListItem", "position": 2, "name": "Blog", "item": "https://your-domain.com/blog"},
{"@type": "ListItem", "position": 3, "name": "Your Post Title", "item": "https://your-domain.com/blog/post-slug"}
]
},
{
"@type": "FAQPage",
"mainEntity": [
{"@type": "Question", "name": "Which schema types get cited in Google AI Overviews?", "acceptedAnswer": {"@type": "Answer", "text": "Three schema types earn AIO citation eligibility on B2B content pages: Article (or BlogPosting), FAQPage (when the page has an FAQ), and HowTo (when the page has numbered steps). BreadcrumbList is required for SERP breadcrumb rendering but does not directly influence AIO. Organization + WebSite are shared entity nodes that every other schema references."}},
{"@type": "Question", "name": "What is the three-schema stack?", "acceptedAnswer": {"@type": "Answer", "text": "The WF-AIO-4 minimum: Article + FAQPage + HowTo combined into one @graph block per page, linked to a shared Organization + WebSite node by @id. Missing any of the three — especially HowTo when a step sequence exists — is a blocking gap for AIO citation eligibility."}},
{"@type": "Question", "name": "Why should I use one @graph block instead of separate scripts?", "acceptedAnswer": {"@type": "Answer", "text": "Separate scripts force you to re-declare the Organization inline in each, wastes bytes, and produces Google warnings for duplicate entity nodes. A single @graph with unique @id references for each node lets you define Organization once and reference it from Article, FAQPage, etc. by @id. Clean, canonical, no duplication."}},
{"@type": "Question", "name": "Do I need Product or Review schema for AI Overviews?", "acceptedAnswer": {"@type": "Answer", "text": "Not for AIO citation on B2B content pages. Product and Review schema matter for other SERP features (product carousels, review stars) but do not directly move the needle on AI Overview citation. Skip them unless you have a specific SERP-feature reason for a product-detail or review page."}},
{"@type": "Question", "name": "What image size does Article schema need?", "acceptedAnswer": {"@type": "Answer", "text": "At least 1200×630 for AIO citation eligibility. Google requires this minimum for the Article rich result and for the AIO source card image. Missing image = Article is treated as invalid. Serve as WebP or JPEG; PNG works but the file size premium isn't worth it."}},
{"@type": "Question", "name": "How often should FAQPage schema match the visible FAQ?", "acceptedAnswer": {"@type": "Answer", "text": "Always, exactly. When JSON questions and HTML questions drift apart after an edit, Google flags it as manipulative and discounts the entire page's schema. Ship both from a single source of truth — usually a markdown FAQ that generates both the visible HTML and the JSON-LD on build. Never edit one without editing the other."}},
{"@type": "Question", "name": "Which validators should I run before deploying schema?", "acceptedAnswer": {"@type": "Answer", "text": "Two, in order: (1) validator.schema.org — the reference validator, catches every schema.org spec violation. (2) Google Rich Results Test — shows which rich results Google will actually render for your page. Both are free and take under 30 seconds per URL. If Google Rich Results Test doesn't render the rich result, AIO usually won't cite from the schema either."}}
]
},
{
"@type": "HowTo",
"name": "How to do the thing this page teaches",
"description": "One-sentence summary.",
"totalTime": "PT30M",
"step": [
{"@type": "HowToStep", "position": 1, "name": "Step 1 name", "text": "Step 1 detail."}
]
}
]
}
</script>
Swap the domain, IDs, headline, description, author, image, breadcrumb names, FAQ questions, and HowTo steps for your own values. Keep the structure — the @graph convention and the @id cross-references are what make this reliable.
Validator checklist — what to run before every deploy
Two validators, run in this order:
- validator.schema.org — the reference validator. Paste your deployed page URL or the raw JSON. Reports every schema.org spec violation. Fix all errors before proceeding.
- Google Rich Results Test — Google's own tool. Shows which rich results Google will render for your page (breadcrumbs, FAQ accordion, HowTo carousel). If Google doesn't render the rich result, AIO usually doesn't cite from the schema either.
Both are free. Both take under 30 seconds per URL. There is no reason to ship a schema deploy without running both.
Schema anti-patterns that get you discounted by AIO
1. FAQPage schema that has drifted from the visible FAQ. When JSON questions and HTML questions do not match, Google flags it as spam / manipulative. Ship both from a single source of truth.
2. HowTo schema on non-instructional content. Adding HowTo just for the rich-result carousel when the page is not actually step-based. Google's spam filters catch this reliably. Only use HowTo when there is a real numbered sequence.
3. Article schema with no image field. Article requires an image URL of at least 1200×630 for AIO citation eligibility. Missing image = Article is treated as invalid.
4. Organization schema without sameAs. The sameAs array (LinkedIn + Wikipedia + Wikidata URIs) is what lets AI models disambiguate your brand as an entity. Without it, the schema is technically valid but functionally weak for AI SEO.
5. Duplicate schema across multiple scripts. Two Organization nodes across two scripts = Google warnings + reduced trust weight. Consolidate into one @graph block.
Schema is Layer 1 of the six-layer technical AI SEO stack. The full stack (llms.txt, answer-first content, entity anchoring, chunking, cluster topology) is documented in the P5 pillar: Technical AI SEO — structuring for AI agents, LLMs & Overviews. The companion Layer 2 deep-dive is llms.txt for SEO — what it is, how to ship it.
- schema.org/Article: The spec for Article + BlogPosting types.
- schema.org/FAQPage: The spec for FAQPage + Question + Answer.
- schema.org/HowTo: The spec for HowTo + HowToStep.
- Google — Article structured data: Google's own field requirements.
