Schema markup that Google AI Overviews cites: real composition that works
How to combine Article, FAQPage, HowTo and BreadcrumbList to maximize citations in AI Overviews and ChatGPT. Real examples, not schema.org copy-paste.
"Add Schema" is the most repeated and worst-explained SEO advice of recent years. Most sites implement a flat Article or a generic LocalBusiness, then wonder why Google AI Overviews and ChatGPT don't cite them.
This post is what actually works in 2026, with real examples of Schema composition I see cited in AI responses, and the anti-patterns I keep finding in sites that come to audit.
The important change: Schema is no longer just for rich snippets
Until 2023, Schema mainly served to get rich snippets (stars, FAQ dropdowns, visual breadcrumbs) in SERPs. In 2026 there's a second function that's equally or more important:
Generative AIs use Schema to understand what each page is and decide what to cite.
ChatGPT, Perplexity and Google AI Overviews read JSON-LD before the visible content. If your Schema is vague or incorrect, they ignore you. If your Schema is specific and rich, they pick you among 5 alternatives with equivalent content.
Schema composition by page type
Informative blog post
Wrong (what I see in 70% of WP blogs):
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "My post",
"datePublished": "2026-05-01"
}
Right (rich composition):
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Article",
"@id": "https://example.com/blog/my-post/#article",
"headline": "How to appear in ChatGPT in 2026",
"description": "Practical guide with real data on Bing indexing, Schema and topical authority.",
"datePublished": "2026-05-17T10:00:00+02:00",
"dateModified": "2026-05-17T10:00:00+02:00",
"wordCount": 2100,
"inLanguage": "en-GB",
"image": "https://example.com/blog/my-post/hero.webp",
"author": { "@id": "https://example.com/#person" },
"publisher": { "@id": "https://example.com/#person" },
"mainEntityOfPage": "https://example.com/blog/my-post/",
"isPartOf": { "@id": "https://example.com/blog/#website" }
},
{
"@type": "Person",
"@id": "https://example.com/#person",
"name": "Jesús Porres",
"url": "https://example.com/about",
"sameAs": [
"https://www.linkedin.com/in/jesusporres",
"https://github.com/jesusporres"
],
"jobTitle": "SEO Consultant",
"knowsAbout": ["Technical SEO", "AI applied to SEO", "Schema markup"]
},
{
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://example.com/" },
{ "@type": "ListItem", "position": 2, "name": "Blog", "item": "https://example.com/blog/" },
{ "@type": "ListItem", "position": 3, "name": "How to appear in ChatGPT" }
]
}
]
}
What this composition adds:
@graphgroups multiple related entities in a single structure.- Unique
@idlets nodes reference each other (Article points to Person via@id). - Person with
sameAstriangulates authority: AIs cross-check your LinkedIn, GitHub, etc. BreadcrumbListhelps hierarchical understanding of the site.knowsAbouton Person labels you as a topical expert.
Post with FAQs
Add FAQPage when the post explicitly answers questions. Do NOT invent FAQs just to add the Schema — AIs detect over-optimization.
{
"@type": "FAQPage",
"@id": "https://example.com/blog/my-post/#faq",
"mainEntity": [
{
"@type": "Question",
"name": "How long does it take for a site to appear in ChatGPT?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Between 2 and 6 weeks after correctly indexing in Bing Webmaster Tools and activating IndexNow. New sites can take up to 8 weeks."
}
},
{
"@type": "Question",
"name": "Do you need to pay to appear in ChatGPT?",
"acceptedAnswer": {
"@type": "Answer",
"text": "No. ChatGPT has no system for paid mentions. Anyone selling «guaranteed citations» is selling smoke."
}
}
]
}
Bonus: each Answer.text ideally between 80-200 characters. AIs prefer direct and verbatim-citable answers.
Step-by-step tutorial
HowTo still works even though Google removed the visual rich snippet in 2023. AIs still read it.
{
"@type": "HowTo",
"name": "How to register your site in Bing Webmaster Tools",
"totalTime": "PT15M",
"estimatedCost": { "@type": "MonetaryAmount", "currency": "EUR", "value": "0" },
"step": [
{
"@type": "HowToStep",
"position": 1,
"name": "Create account",
"text": "Go to webmaster.bing.com and create an account with your email.",
"url": "https://webmaster.bing.com/"
},
{
"@type": "HowToStep",
"position": 2,
"name": "Add your site",
"text": "Click «Add a site», enter your site URL, verify ownership via meta tag or DNS TXT."
},
{
"@type": "HowToStep",
"position": 3,
"name": "Submit sitemap",
"text": "In Sitemaps, paste your sitemap.xml URL (typically https://yourdomain.com/sitemap.xml)."
}
]
}
Service page
For a service page (commercial landing):
{
"@context": "https://schema.org",
"@type": "Service",
"@id": "https://example.com/services/local-seo/#service",
"name": "Local SEO for small businesses",
"description": "Local SEO service for small businesses in Spain with initial setup + monthly retainer.",
"provider": {
"@type": "LegalService",
"@id": "https://example.com/#legalservice",
"name": "Jesús Porres SEO Consulting",
"url": "https://example.com/",
"telephone": "+34 ...",
"address": { ... },
"priceRange": "€€"
},
"areaServed": {
"@type": "Country",
"name": "Spain"
},
"serviceType": "Local SEO",
"offers": {
"@type": "AggregateOffer",
"priceCurrency": "EUR",
"priceSpecification": {
"@type": "PriceSpecification",
"priceCurrency": "EUR",
"minPrice": "800"
}
},
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Included services",
"itemListElement": [
{ "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Initial GBP audit" }},
{ "@type": "Offer", "itemOffered": { "@type": "Service", "name": "LocalBusiness Schema" }},
{ "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Monthly GBP posts" }},
{ "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Monthly report" }}
]
}
}
hasOfferCatalog moves the needle most. Almost no one implements it well.
The 5 anti-patterns I keep seeing
1. Schema only on home
I see this on 60% of sites. Home with complete Schema, rest of pages empty. Each page must have its specific Schema for its type.
2. JSON-LD with syntax errors
Trailing commas, mismatched quotes, keys without quotes. Any syntax error makes the browser parse JSON-LD as invalid and Google ignores it all. Validate with Google's Schema Validator (the official one), not Rich Results Test.
3. @type that doesn't exist in schema.org
Inventing types like "@type": "ConsultingService" (doesn't exist). The correct one is "@type": "ProfessionalService" with serviceType: "Consulting". If in doubt, schema.org has a search box.
4. Contradictory data between Schema and visible page
If Schema says priceRange: "€€" and the page shows services at 3,000€/month, there's contradiction. AIs penalize contradiction.
5. Multiple Schemas of the same type on one page
Marking the same thing twice (e.g. two different Organization on home). Google keeps one arbitrarily. Better one @graph with all unique entities.
How to actually validate
- Official Schema Validator (
https://validator.schema.org/). The only one that validates against the full spec. - Rich Results Test only validates types with visual rich snippet (limited).
- Google Search Console → Enhancements → Structured data shows errors in real coverage.
- For mass audits, Screaming Frog has a structured data validation module in licensed plan.
Recommended workflow when launching a new page
- Decide the main
@typebased on the page type (Article, Service, Product, etc.). - Build the JSON-LD locally.
- Validate with Schema Validator before deploy.
- After deploy, verify the JSON-LD renders correctly with View Source.
- Submit the URL in Google Search Console → URL Inspection to force re-crawl.
- Wait 7-14 days and check in GSC → Enhancements if the type is recognized.
Why it matters more in 2026
Three cumulative reasons:
- AI Overviews in global rollout, including Spain progressively. Rich Schema = higher chance of citation.
- ChatGPT with search enabled by default. Citations in responses are the new SERP impression.
- Perplexity and other LLMs value structured extraction over pure prose.
Schema markup done right is the best-ROI technical investment I know of in 2026. Cost: 3-5 hours per main page of the site. Benefit: months of AI citations + rich snippets + better understanding by Google.
Want to review your site's current Schema with external criteria? It's a standard part of the technical SEO audit. For implementation + monthly monitoring, see technical SEO.
