← Journal / 18 April 2026
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.
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", "LATAM", "GB", "US"],
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "GEO services",
"itemListElement": [
{
"@type": "Offer",
"name": "AI Visibility Audit",
"price": "1200",
"priceCurrency": "EUR",
"description": "50 prompts × 4 models. 5 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.
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": "Eli Angulo",
"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 Eli 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.