Schema markup for AI: the complete JSON-LD reference for ChatGPT and Perplexity
Ten production-ready schema templates AI models actually extract from. Organization, FAQPage, Service, Article, Person, Product, BreadcrumbList, Event, HowTo, VideoObject — copy-paste ready.
Founder 8 min read
Summarize with AI Open this article in your preferred assistant
In this article
- 01 Why JSON-LD, not microdata?
- 02 1. Organization (every page, in the layout)
- 03 2. WebSite + SearchAction (homepage only)
- 04 3. FAQPage (service, pricing, product, support pages)
- 05 4. Service (every service page)
- 06 5. Article (every blog post and journal piece)
- 07 6. Person (About page, author bio pages)
- 08 7. Product (SaaS products, physical goods)
- 09 8. BreadcrumbList (every non-home page)
- 10 9. HowTo (tutorial content)
- 11 10. VideoObject (video content)
- 12 How to validate
- 13 What to deploy in what order
- 14 What this guide doesn’t cover
If you only do one thing this quarter to improve your AI visibility, deploy schema. Schema markup is the most underrated lever in GEO because the work is mechanical, the lift is measurable within weeks, and most sites do not have it deployed correctly. This piece is the working reference we use on every Citable engagement.
Every example below is JSON-LD, placed in the <head> of the relevant page (or globally for site-wide schemas like Organization). All examples are valid against Schema.org as of Q2 2026 and validate cleanly in Google’s Rich Results Test.
Why JSON-LD, not microdata?
Three reasons: AI extractors parse JSON-LD reliably; microdata inline in HTML is more brittle and harder to maintain; and JSON-LD lets you describe relationships between entities that microdata cannot easily express. Use JSON-LD. Place it in the <head> (or end of <body> if your CMS forces that). Do not nest microdata in your content.
The ten templates below cover ~90% of pages on a typical B2B services site. We deploy them as part of every Web Development build and as part of the schema overhaul phase of every GEO Foundations engagement.
1. Organization (every page, in the layout)
The single most important schema. Goes on every page of your site — typically deployed once in the global layout. The sameAs array is the entity-disambiguation backbone.
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Your Brand",
"url": "https://yourbrand.com",
"logo": "https://yourbrand.com/logo.png",
"email": "hello@yourbrand.com",
"description": "One-sentence description that exactly matches your homepage and your LinkedIn tagline.",
"sameAs": [
"https://en.wikipedia.org/wiki/Your_Brand",
"https://www.linkedin.com/company/yourbrand",
"https://www.crunchbase.com/organization/yourbrand",
"https://www.wikidata.org/wiki/Qxxxxxxx",
"https://github.com/yourbrand"
],
"areaServed": ["ES", "GB", "US"]
}
The hidden trap: brands write three different description fields across their homepage, LinkedIn, and Crunchbase. Pick one canonical description and use it everywhere. Inconsistency is what tells the model “I don’t know what this brand is.”
2. WebSite + SearchAction (homepage only)
Tells AI models that your site has internal search and helps with sitelinks search box display in Google.
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Your Brand",
"url": "https://yourbrand.com",
"potentialAction": {
"@type": "SearchAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "https://yourbrand.com/search?q={search_term_string}"
},
"query-input": "required name=search_term_string"
}
}
Skip this if your site does not have a search endpoint. Do not declare a SearchAction that does not exist; it will fail validation in Search Console.
3. FAQPage (service, pricing, product, support pages)
The single highest-leverage page-level schema for AI extraction. Wrap the H2 sections of relevant pages with FAQPage. The name field must match the H2 text on the page exactly. This is what AI models extract.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How much does GEO cost?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Citable's pricing starts at 1,200 EUR for the AI Visibility Audit. GEO Foundations is 1,800 EUR per month. GEO Growth retainer is 3,500–6,000 EUR per month."
}
},
{
"@type": "Question",
"name": "How long does GEO take to produce results?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Schema and entity fixes produce measurable Share of Answer improvement within 30 to 60 days. Content extractability rewrites show lift within 60 to 90 days."
}
}
]
}
The acceptedAnswer.text is what gets pulled into AI Overviews and ChatGPT responses verbatim. Write it like a quote, not like a paragraph.
4. Service (every service page)
Use Service for service businesses. Use Product (template 7 below) for SaaS products and physical goods. Don’t mix them.
{
"@context": "https://schema.org",
"@type": "Service",
"serviceType": "Generative Engine Optimization",
"alternateName": ["GEO", "AEO", "AI Search Optimization"],
"provider": {
"@type": "Organization",
"name": "Your Brand",
"url": "https://yourbrand.com"
},
"description": "What the service does, in one sentence.",
"areaServed": ["ES", "FR", "DE", "IT", "PT", "NL", "GB", "US"],
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "GEO services",
"itemListElement": [
{
"@type": "Offer",
"name": "AI Visibility Audit",
"price": "1200",
"priceCurrency": "EUR",
"description": "50 prompts × 4 models. 7–10 business days."
}
]
}
}
The hasOfferCatalog nesting is what surfaces your specific pricing in AI answers when buyers ask “how much does X cost”. Skipping it is the most common Service-schema mistake.
5. Article (every blog post and journal piece)
Goes on every long-form content page. The author field is what enables E-E-A-T signal capture.
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Article Title",
"description": "One-sentence summary used in social and AI previews.",
"datePublished": "2026-04-18T00:00:00.000Z",
"dateModified": "2026-04-18T00:00:00.000Z",
"author": {
"@type": "Person",
"name": "Author Name",
"url": "https://yourbrand.com/about"
},
"publisher": {
"@type": "Organization",
"name": "Your Brand",
"url": "https://yourbrand.com"
},
"mainEntityOfPage": "https://yourbrand.com/journal/article-slug",
"keywords": "geo, ai search, schema"
}
Keep dateModified accurate. Out-of-date dateModified on stale content is one of the most common reasons AI models cite outdated information about brands. Update it every time you make a substantive edit. Schema that drifts out of sync with the page it describes is not only a freshness problem — it is an integrity and security one, since AI systems compare your markup to your live content and discount mismatches; hardening the schema AI reads about you covers that side.
6. Person (About page, author bio pages)
Strengthens E-E-A-T signals and is the schema that enables the model to associate quoted content with a real human. Critical for thought-leadership content.
{
"@context": "https://schema.org",
"@type": "Person",
"name": "Elizabeth S.",
"jobTitle": "Founder & Managing Partner",
"worksFor": {
"@type": "Organization",
"name": "Citable",
"url": "https://citable.agency"
},
"knowsLanguage": ["es", "en", "ru"],
"knowsAbout": [
"Generative Engine Optimization",
"Technical SEO",
"Multilingual digital marketing"
],
"url": "https://citable.agency/about",
"sameAs": [
"https://www.linkedin.com/in/eli-angulo"
]
}
The sameAs chain on Person is as important as it is on Organization. If Elizabeth is quoted in a blog post and her LinkedIn sameAs is wired up, the model has a confident way to attribute the quote.
7. Product (SaaS products, physical goods)
If you sell a SaaS product or physical product, use Product instead of Service.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Your Product",
"description": "What the product does in one sentence.",
"brand": {
"@type": "Organization",
"name": "Your Brand"
},
"offers": {
"@type": "AggregateOffer",
"priceCurrency": "USD",
"lowPrice": "29",
"highPrice": "299",
"offerCount": "3",
"availability": "https://schema.org/InStock"
}
}
For SaaS, use AggregateOffer to express your tier pricing range without listing every plan as a separate Offer. For e-commerce with stock-level variability, individual Offer entries with availability are the right call.
8. BreadcrumbList (every non-home page)
Helps AI models understand your site hierarchy and improves how they describe where a piece of content lives in your site.
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://yourbrand.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Services",
"item": "https://yourbrand.com/services"
},
{
"@type": "ListItem",
"position": 3,
"name": "GEO",
"item": "https://yourbrand.com/services/geo"
}
]
}
Most CMSs can generate this dynamically from URL structure. Deploy it once in your template layer; do not hand-write it per page.
9. HowTo (tutorial content)
Use HowTo only for content that is genuinely a step-by-step procedure. AI Overviews pulls HowTo content into structured how-to cards when the schema is correct.
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "How to deploy Organization schema",
"totalTime": "PT15M",
"step": [
{
"@type": "HowToStep",
"position": 1,
"name": "Build the JSON-LD object",
"text": "Use the template in section 1 of this guide."
},
{
"@type": "HowToStep",
"position": 2,
"name": "Validate with Google's Rich Results Test",
"text": "Paste the JSON into the validator at search.google.com/test/rich-results."
}
]
}
Common misuse: using HowTo for content that is really an Article. AI extractors will reject the HowTo card display if the steps don’t read like procedural steps.
10. VideoObject (video content)
If you have video on the page, declare it. AI Overviews increasingly surface video answers, and VideoObject is what enables that.
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "How to measure Share of Answer",
"description": "Two-minute walkthrough of the Citable measurement methodology.",
"thumbnailUrl": "https://yourbrand.com/video-thumb.jpg",
"uploadDate": "2026-04-18T00:00:00.000Z",
"duration": "PT2M30S",
"contentUrl": "https://yourbrand.com/video.mp4",
"embedUrl": "https://www.youtube.com/embed/abcdefg"
}
contentUrl and embedUrl should both be present where applicable. AI extractors will use whichever is accessible.
How to validate
After deployment, validate every schema before you ship:
- Google’s Rich Results Test at search.google.com/test/rich-results — confirms the markup is parseable and shows what Google sees.
- Schema.org validator at validator.schema.org — confirms compliance with the spec.
- Manual ChatGPT and Perplexity test — ask the AI directly about the entity, the service, the question. If your schema deployment is working, the response will start mirroring your declarations within 2–6 weeks. Re-test on a documented cadence.
What to deploy in what order
If you are starting from zero schema:
- Organization in the global layout — same hour you commit to doing this work
- WebSite + SearchAction on the homepage — same day
- FAQPage on your top 5 service or product pages — week 1
- Service or Product on every service/product page — week 1–2
- Article on every blog post (deploy globally via your CMS or static site generator template) — week 2
- Person on About and author bio pages — week 2
- BreadcrumbList on every non-home page — week 3
- HowTo and VideoObject as the relevant content types appear — ongoing
The first four cover ~70% of the achievable lift. The full set is what compounds over months.
What this guide doesn’t cover
We are deliberately not including schema types that have low impact on AI extraction relative to the implementation cost — Event, Recipe, Course, Review, Rating. They are correct for sites where that content is the primary product (an event venue, a recipe site, an education platform) but they are not high-leverage for the typical B2B services or SaaS site this guide is aimed at.
We also don’t cover Speakable schema in depth. It is technically the correct schema for voice-search optimization, but as of Q2 2026 it has not been adopted as a meaningful signal by the major AI surfaces. Watch this; we will update if that changes.
If you want our hand-written schema starter pack with all ten templates pre-filled and validated, the Schema for AI Starter Pack lead magnet — free download — has every template above plus a non-developer implementation guide. If you want us to deploy the schema layer on your site as part of an engagement, that is the first phase of GEO Foundations at 1,800 EUR/month for the 3-month sprint.
Schema priority
Source: Schema.org, OpenAI ChatGPT docs, Google Search Central (2026)
Which Schema.org types AI engines actually use
| Type | Why it matters for AI | Priority |
|---|---|---|
| Organization | Defines the entity. Powers Knowledge Graph join. | Critical |
| Article | Marks extractable body, author, publish date. | Critical |
| FAQPage | Direct-quote candidate for AI Overviews + ChatGPT. | Critical |
| Service | Makes offerings extractable for category queries. | High |
| Person | Establishes author E-E-A-T for citation. | High |
| BreadcrumbList | Helps models reconstruct site taxonomy. | Medium |
Frequently asked
Questions buyers ask before booking
Which schema type matters most for getting cited by ChatGPT?
Organization is the foundation. Without a strong Organization schema with sameAs links to your authoritative profiles, ChatGPT struggles to disambiguate your brand from similarly named entities. After Organization, FAQPage and Article schemas are the highest-leverage additions for citation rate.
Do I need every one of these ten schemas?
No. Pick the ones that match your content. Organization on every page (typically via global header), Service on each service page, Article on every blog post, FAQPage where you have an FAQ section. Person schema for the founder or spokesperson. Add Product, Event, HowTo, VideoObject as relevant.
How do I know if my schema is actually being read?
Three checks. First, Google's Rich Results Test validates syntactically. Second, Schema.org's validator catches semantic issues. Third, a manual Perplexity query for a brand-related term — if Perplexity surfaces information that only exists in your schema (not in visible page text), the model is reading it.
Can I auto-generate schema from page content?
Yes, and we recommend it. For Astro and Next.js, schema can be generated server-side from typed content collections. For WordPress, plugins like RankMath or Yoast cover the basics. The risk with auto-generation is staleness — set a quarterly audit to catch generated schema that is out of sync with visible content.