Active Document
Schema Markup for AI Search Engines, The 2026 Checklist
Exactly which Schema.org types matter for AI search in 2026, how to implement them correctly, and what to skip. Complete reference with code examples.
Loading document...
Schema Markup for AI Search Engines, The 2026 Checklist
Active Document
Exactly which Schema.org types matter for AI search in 2026, how to implement them correctly, and what to skip. Complete reference with code examples.
Loading document...
Schema.org structured data was originally built for Google's rich results. In 2026, it has a bigger job: it's how AI search engines (ChatGPT, Gemini, Claude, Perplexity) understand what your page is actually about, who runs it, and whether they should cite it.
This is a practical checklist of the schema types that matter for AI search in 2026 — which ones to use, where, and how to implement them in a way that both traditional Google and AI engines can parse cleanly.
Minimum schema every site should emit:
Everything else is optional but situationally valuable.
All schema should be JSON-LD (not microdata or RDFa). Embedded in a <script type="application/ld+json"> tag in your <head> or near the top of <body>.
What it does: Tells crawlers who you are as an entity.
Minimum fields:
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://yoursite.com/#organization",
"name": "Your Business Name",
"url": "https://yoursite.com",
"logo": "https://yoursite.com/logo.png",
"description": "One-sentence description of what you do.",
"email": "hello@yoursite.com",
"sameAs": [
"https://www.linkedin.com/company/yourbusiness",
"https://twitter.com/yourbusiness",
"https://github.com/yourbusiness"
]
}
Key things AI engines care about:
@id — unique, stable, used for cross-referencing from other schemasameAs — pointers to your authoritative social profiles. This is how AI engines verify you exist as a real entity.description — single sentence AI can quote. Write it for them.What it does: Identifies you as a brick-and-mortar or service-area business in a specific location. Critical for local queries.
Full example:
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"@id": "https://yoursite.com/#localbusiness",
"name": "Your Business Name",
"image": "https://yoursite.com/hero.jpg",
"url": "https://yoursite.com",
"telephone": "+1-780-555-1234",
"email": "hello@yoursite.com",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main Street",
"addressLocality": "Edmonton",
"addressRegion": "AB",
"postalCode": "T5K 2M1",
"addressCountry": "CA"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 53.5461,
"longitude": -113.4938
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "17:00"
}
],
"priceRange": "$$",
"areaServed": {
"@type": "City",
"name": "Edmonton"
}
}
For service-area businesses (no physical storefront), use ServiceArea instead of PostalAddress or specify areaServed as an array of cities/regions.
Specific LocalBusiness subtypes — use these instead of generic LocalBusiness when applicable:
Dentist, MedicalClinic, Physiotherapist, VeterinaryCareAutoRepair, HVACBusiness, Electrician, Plumber, RoofingContractorLegalService, AccountingService, FinancialServiceRestaurant, CafeOrCoffeeShop, BarOrPubStore (with subtypes for specific retail)Using the correct subtype helps AI engines route local queries correctly.
What it does: Identifies your site as a recognized entity and enables sitelinks in search results.
{
"@context": "https://schema.org",
"@type": "WebSite",
"@id": "https://yoursite.com/#website",
"url": "https://yoursite.com",
"name": "Your Site Name",
"description": "What this site is about.",
"publisher": { "@id": "https://yoursite.com/#organization" },
"potentialAction": {
"@type": "SearchAction",
"target": "https://yoursite.com/search?q={search_term_string}",
"query-input": "required name=search_term_string"
}
}
The publisher reference uses @id to cross-link to your Organization schema — this is how AI engines build a connected understanding of your entity graph.
What it does: Describes a specific service you offer. Put one on each service page.
{
"@context": "https://schema.org",
"@type": "Service",
"@id": "https://yoursite.com/ai-voice-agents#service",
"serviceType": "AI Voice Agent Deployment",
"name": "AI Voice Agents for Edmonton Businesses",
"description": "24/7 AI-powered voice agents that answer calls, book appointments, and qualify leads.",
"provider": { "@id": "https://yoursite.com/#organization" },
"areaServed": {
"@type": "City",
"name": "Edmonton"
},
"offers": {
"@type": "Offer",
"priceRange": "$3000-$8000",
"priceCurrency": "CAD"
}
}
Include pricing info if you can. AI engines quote "starts at $X" language directly. If you don't provide it, they synthesize (sometimes inaccurately).
What it does: Marks blog posts and long-form content. Critical for AI citation.
{
"@context": "https://schema.org",
"@type": "Article",
"@id": "https://yoursite.com/blog/post-slug#article",
"headline": "Post Title",
"description": "One-line summary of the post.",
"image": "https://yoursite.com/images/hero.jpg",
"datePublished": "2026-04-28T09:00:00-06:00",
"dateModified": "2026-04-28T09:00:00-06:00",
"author": { "@id": "https://yoursite.com/#author" },
"publisher": { "@id": "https://yoursite.com/#organization" },
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://yoursite.com/blog/post-slug"
}
}
dateModified matters a lot in 2026. AI engines give heavy weight to freshness. Update the field (automatically via file mtime or manually) whenever content changes substantively.
For technical how-to posts, use TechArticle or HowTo instead of generic Article.
What it does: Identifies authors as real entities — increasingly important for E-E-A-T.
{
"@context": "https://schema.org",
"@type": "Person",
"@id": "https://yoursite.com/#author",
"name": "Anders Kitson",
"url": "https://yoursite.com/about",
"jobTitle": "Founder & AI Engineer",
"worksFor": { "@id": "https://yoursite.com/#organization" },
"image": "https://yoursite.com/images/anders.jpg",
"sameAs": [
"https://www.linkedin.com/in/anderskitson",
"https://github.com/anderskitson",
"https://twitter.com/anderskitson"
]
}
The sameAs links are doing the heavy lifting — they verify the author is a real person with an online footprint. Without these, the Person schema is weak.
What it does: Marks Q&A sections so AI engines can quote individual questions.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How much does an AI voice agent cost?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Setup ranges $2,500-$8,000, monthly retainer $150-$600, usage $0.15-$0.30 per call minute."
}
},
{
"@type": "Question",
"name": "How long does deployment take?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Typical deployment is 90 days from kickoff: 2 weeks setup, 2 weeks soft launch, 4 weeks tuning, 4 weeks full rollout."
}
}
]
}
Critical rule: FAQ schema must match visible content on the page. Don't hide FAQs in schema that aren't shown to users — Google penalizes this and AI engines ignore it.
What it does: Shows page hierarchy, helps AI understand where a page sits in your site.
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://yoursite.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Blog",
"item": "https://yoursite.com/blog"
},
{
"@type": "ListItem",
"position": 3,
"name": "Post Title",
"item": "https://yoursite.com/blog/post-slug"
}
]
}
Small signal, easy to emit. Every non-home page should have one.
Don't chase every schema type — the following are often suggested but rarely matter for AI search:
Add these when specifically relevant, not preemptively.
Notice how most of the examples above use @id:
"publisher": { "@id": "https://yoursite.com/#organization" }
Instead of re-emitting the full Organization schema inside Publisher, you reference it by @id. Benefits:
Consistent @id usage is the mark of production-quality schema. Sketchy implementations duplicate full blobs everywhere.
JSON-LD script tags in <head> are cleanest. Next.js, Astro, and most modern frameworks make this straightforward.
Next.js 16 example:
export default function Layout({ children }) {
return (
<html>
<head>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify(organizationSchema())
}}
/>
</head>
<body>{children}</body>
</html>
)
}
WordPress example: Use Yoast SEO (emits basic schema automatically), Schema Pro, or RankMath for more control. Avoid manually pasting schema into posts — it's fragile.
Always validate before shipping:
Common errors:
image, datePublished, etc.)sameAs@id mismatches — same ID used differently on different pagesFix all validator errors. AI engines skip pages with invalid JSON-LD, not "try to parse anyway."
"AI agency Edmonton AI voice agents AI SEO best Edmonton AI agency" in a name field gets flagged. Use normal language.
FAQ schema with Q&A that isn't visible on the page → penalty. Don't do it.
Static datePublished is fine. Static dateModified on a post you edited last week tells AI engines nothing has changed. Use file mtime or manual updates.
If homepage says "@id": "https://yoursite.com/#organization" and blog page says "@id": "https://yoursite.com/about/#organization", you have two entities from the AI's perspective. Keep IDs consistent.
An Organization or Person without sameAs links is an isolated node. AI engines can't verify you exist as a real entity. Always include sameAs with links to authoritative profiles.
Schema must describe YOUR business accurately. Don't inherit competitor field values.
Beyond technical validators, test whether AI engines actually parse your schema:
If responses match what you've declared in schema, it's working. If the AI makes up details or contradicts what's in your schema, something is off — check validation, check that your schema loads (not blocked by CSP or delayed by JS), and check that AI-accessible crawlers can reach it (not blocked in robots.txt).
Yes, increasingly so in 2026. Perplexity gives noticeable weight to structured data. ChatGPT uses schema when extracting facts during live browsing. Gemini is Google — structured data is central. Claude's impact is less documented but trending positive. All four benefit from clean schema.
No. That was true in 2012. In 2026, AI engines, voice assistants (Siri, Alexa), app previews (WhatsApp, Slack), and search engines all consume schema. It's the universal machine-readable metadata layer.
Organization and WebSite only need to be on the home page (or globally in a layout). Other types are per-page (Article on posts, Service on service pages, Product on product pages). BreadcrumbList goes on every non-home page.
WordPress: Yoast, Schema Pro, or RankMath plugins. Squarespace: limited built-in + manual code injection. Shopify: default schema for products; manual for others. For anything beyond basic, you'll eventually want developer help.
AI engines sometimes hallucinate based on partial information. Clean schema + llms.txt + consistent facts across your web presence (Google Business Profile, directories, social) reduce this. If ChatGPT says something wrong about you, check what it's pulling from — the error is almost always traceable to an external source with outdated or wrong info.
Only if it's inaccurate. A page with 10 schema types that all accurately describe the content is fine. A page with 1 schema type that's inaccurate is worse than none.
Yes, they do different things. Schema describes individual pages in machine-readable structure. llms.txt is a curated index of your site. Use both.
LocalBusiness (with correct subtype) on the home page. For local service businesses, it's the single biggest schema lever for local search and AI search.
Want a schema audit for your site? We'll check every schema block, validate against AI engine requirements, and ship fixes. Book a free consult or see our AI SEO Edmonton service.