If your site doesn’t tell Google and the LLMs what each thing is, you don’t show up in AI Overviews. That blunt. Schema markup —structured data in JSON-LD format— is the language Google, ChatGPT, Perplexity and the rest of generative engines read to understand your content and decide whether to cite you as a source.
This article isn’t a philosophical explainer. It’s a technical manual with templates you can copy to your site today. Built for real websites, not textbook cases.
Why schema markup went from “nice to have” to mandatory
Until 2024, schema markup was mostly used for rich snippets: SERP stars, expandable FAQs, breadcrumbs. Important, but not critical.
In 2026 the game changed. Google AI Overviews, ChatGPT Search, Perplexity and Bing’s generative modes need structure to parse your content and attribute the answer to you. Without proper JSON-LD, your article is plain text the model can summarize, but rarely cite.
Practical consequences:
- In a cluster with authority (Person + Organization + Article well-nested), citations in AI Overviews go up to 3x according to public SearchEngineLand data from February 2026.
- Without
Personschema withsameAsto LinkedIn, LLMs can’t attribute expertise to you → no citation. - FAQs with
FAQPageschema and direct answers are one of the preferred sources for AI Overviews because of their direct question-answer format.
If you still doubt whether to invest time in this, read first the difference between GEO and SEO and the importance of E-E-A-T in the AI era. Without those two foundations, schema doesn’t pay off.
The 6 schema types that actually move the needle in GEO
Not every schema type is equally useful for generative search. These are the ones that really matter:
1. Article (or BlogPosting)
The non-negotiable. Mark every blog article with author, date, headline and inLanguage.
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Schema markup for AI Overviews: the technical guide 2026",
"description": "How to structure JSON-LD so Google and LLMs cite you.",
"datePublished": "2026-05-03",
"dateModified": "2026-05-03",
"inLanguage": "en-US",
"author": { "@id": "https://ad2place-digital.net/#jose" },
"publisher": { "@id": "https://ad2place-digital.net/#org" },
"mainEntityOfPage": "https://ad2place-digital.net/en/blog/schema-markup-ai-overviews-en/"
}
Critical trick: use @id with anchors (#jose, #org) instead of duplicating the Person/Organization object inside every article. Smaller payload, coherent graph.
2. Person with sameAs
Without this, LLMs don’t know who signs the content and can’t attribute authority to you. sameAs should point to verifiable profiles: LinkedIn, X, Crunchbase, GitHub.
{
"@context": "https://schema.org",
"@type": "Person",
"@id": "https://ad2place-digital.net/#jose",
"name": "José Redondo Delgado",
"jobTitle": "Director at Ad2Place Digital",
"sameAs": [
"https://www.linkedin.com/in/jose-redondo-delgado-8b560214b/"
],
"knowsAbout": ["SEO", "GEO", "Digital Marketing", "Schema Markup"],
"worksFor": { "@id": "https://ad2place-digital.net/#org" }
}
knowsAbout is optional but helps profile topical authority. Stick to 4-6 real areas, don’t spam 30 keywords.
3. Organization (or LocalBusiness)
Your company’s identity. Declared once on the homepage, referenced via @id from the rest of the site.
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://ad2place-digital.net/#org",
"name": "Ad2Place Digital",
"url": "https://ad2place-digital.net/",
"logo": "https://ad2place-digital.net/logo.webp",
"sameAs": [
"https://www.linkedin.com/company/ad2place"
]
}
If you have a physical location, use LocalBusiness with address, geo and openingHoursSpecification added. Local AI Overviews (the map-with-results panel) use those directly.
4. FAQPage
The format AI Overviews prefer. Literal Q&A, no fluff, one entity per real question.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Do I need schema markup to appear in AI Overviews?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. Without well-structured JSON-LD, LLMs may summarize your content but rarely cite you as an attributed source."
}
}
]
}
Hard rule: the schema answer must match the visible HTML literally. If they diverge, Google penalizes for hidden content.
5. HowTo
For step-by-step tutorials. AI Overviews shows them often when the query is actionable (“how to set up X”, “steps to do Y”).
{
"@type": "HowTo",
"name": "How to add FAQ schema to a page",
"step": [
{ "@type": "HowToStep", "name": "Identify the real questions", "text": "..." },
{ "@type": "HowToStep", "name": "Generate the JSON-LD", "text": "..." },
{ "@type": "HowToStep", "name": "Validate with Rich Results", "text": "..." }
]
}
6. BreadcrumbList
Navigation hierarchy. Helps LLMs understand the topical context of each URL.
{
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://ad2place-digital.net/" },
{ "@type": "ListItem", "position": 2, "name": "Blog", "item": "https://ad2place-digital.net/en/blog/" },
{ "@type": "ListItem", "position": 3, "name": "Schema markup for AI Overviews" }
]
}
The @graph pattern: how to nest everything without duplicating
The most common mistake is declaring 5 separate JSON-LD blocks, each with its own entities. The result: bloated HTML, Google parses worse, and the relations between entities are lost.
The fix is @graph: a single <script type="application/ld+json"> containing an array of entities referenced via @id. Each thing is declared once.
{
"@context": "https://schema.org",
"@graph": [
{ "@type": "Organization", "@id": "https://example.com/#org", "name": "Ad2Place" },
{ "@type": "Person", "@id": "https://example.com/#jose", "name": "José Redondo", "worksFor": { "@id": "https://example.com/#org" } },
{ "@type": "Article", "headline": "...", "author": { "@id": "https://example.com/#jose" }, "publisher": { "@id": "https://example.com/#org" } },
{ "@type": "BreadcrumbList", "itemListElement": [...] }
]
}
That’s the professional way. One entity declared with @id, referenced as { "@id": ... } from anywhere it’s needed.
Common mistakes you’re making (almost certainly)
After auditing 200+ websites in recent months, these are the failures I see in 80% of projects:
descriptioncopied verbatim from the meta description. Google flags it as duplicate and disables the rich snippet.- Schema in the HTML but not in the static HTML. If you inject it with JavaScript after load, Googlebot sees it, but LLMs that parse raw HTML (Perplexity, Claude) don’t.
authordeclared as a string ("author": "José Redondo") instead of a Person object. You lose attributable authority.- FAQ schema with answers that don’t appear on the page. Near-automatic penalty.
- Same
@idpointing to different entities across pages. Creates conflict in Google’s knowledge graph. mainEntityOfPagepointing to the URL without trailing slash when the site uses one. Crawlers treat them as two distinct URLs.- Not declaring
inLanguageon multilingual sites. Google can’t tell which hreflang version this is.
How to validate your schema without losing your mind
Three tools, in this order:
- Schema.org Validator (
validator.schema.org) — correct syntax. Strict but orthodox. - Rich Results Test (
search.google.com/test/rich-results) — which rich snippets Google can produce. If an entity doesn’t show up here, Google ignores it. - Google Search Console → Enhancements — which entities Google is indexing on your live site. The unchallengeable truth.
Practical rule: if Rich Results Test passes but Search Console shows nothing after 2 weeks, something else is blocking (robots.txt, JS rendering, @id conflict).
How to roll it out without rewriting everything
If you’re starting from scratch, this is the efficient order:
- Home:
Organization+WebSite+Person(single@graph). - Blog hub
/blog/:CollectionPagewithmainEntitypointing to recent articles. - Each article:
Article+BreadcrumbList+Person(referenced by@id). - Service pages:
Servicewithproviderpointing toOrganization. - Pages with real FAQs:
FAQPage. - Operational tutorials:
HowTo.
You don’t need everything at once. Start with the homepage and the 5 articles with most organic traffic. The GSC impact shows up in 2-4 weeks.
Frequently asked questions
Does schema markup rank you better in classic Google? Indirectly. It’s not a direct ranking factor, but rich snippets increase CTR and CTR is a factor.
Microdata, RDFa or JSON-LD? JSON-LD. Google has officially preferred it since 2017, LLMs parse it better, and it lives separately from the HTML, so it’s cleaner to audit.
Does dynamic schema (JS-injected) count? For Google yes, with a delay (waits for JS render). For LLMs that parse raw HTML (Perplexity, ChatGPT Search), generally no. If you want to appear in AI Overviews, schema in static HTML.
How many FAQs per page?
3-7 real ones. More is spam and Google ignores them. If you have 10+ questions, move them to a dedicated /faq/ URL.
Why does my schema validate but not appear in Search Console? Common causes: robots.txt blocking, page noindex, content too new (Google takes 2-4 weeks), or your domain authority isn’t high enough yet for rich snippets to display. In this last case, schema still helps the LLMs even if it doesn’t help Google yet.
Next step
Schema markup is half of the GEO work. The other half is real topical authority (content cluster + verifiable E-E-A-T) and a technical architecture that lets LLMs parse the HTML.
If you want a review of your current schema and a prioritized rollout plan, book a free SEO consultation of 45 minutes. In that session I audit your entities in GSC, find the gaps, and leave you a concrete roadmap.