Schema.org 2026: types that matter for Google and LLMs
Schema.org types that move the needle in 2026: Article, Organization, BreadcrumbList, FAQPage, ProfessionalService. Ready-to-use JSON-LD examples.
Schema.org went from "nice to have" in 2020 to critical in 2026, especially since the entry of generative engines. The reason: LLMs use schema to understand what type of entity you are, what relationship you have with other entities, and how reliable you are as a source. Without schema, the LLM has to infer everything from plain text, and when there's ambiguity, it prefers not to cite.
This post is the practical guide for devs and technical founders. We won't cover the 800+ schema types. Just the 8 that move the needle today, with ready-to-copy JSON-LD examples.
Why schema.org still matters in 2026
Three reasons that changed in the last 24 months:
- Google shows rich results (stars, expandable FAQs, visible breadcrumbs, sitelinks) in SERPs when schema allows. Without valid schema, you stay with the basic snippet.
- LLMs use schema to identify entities.
Organizationwith consistent@idtells ChatGPT "this is the same brand appearing elsewhere with the same @id". - Google AI Overviews extract directly from FAQPage and HowTo schemas. If your content is marked, you have more chance your answer appears inside the overview.
Schema almost never hurts. Almost always adds. The exception is invalid or deceptive schema (marking content that doesn't exist on the page). That penalizes.
Essential types per type of site
| Type of site | Minimum schemas |
|---|---|
| Agency / B2B services | ProfessionalService, WebSite, Article (blog), BreadcrumbList, FAQPage |
| E-commerce | OnlineStore, WebSite, Product, Offer, AggregateRating, BreadcrumbList, ItemList (categories) |
| Blog / publication | Organization or Person, WebSite, Article or BlogPosting, Person (author), BreadcrumbList |
| SaaS / app | SoftwareApplication, Organization, WebSite, Article, FAQPage |
| Local / restaurant | LocalBusiness or subtype (Restaurant, Dentist), Menu, OpeningHoursSpecification, AggregateRating |
| Education | Course, EducationalOrganization, Article, Person (instructor) |
The critical thing is that the @type you choose is the most specific that applies. LocalBusiness > Restaurant > FastFood is better than LocalBusiness alone. ProfessionalService is better than Organization when applicable.
Table: what Google reads vs LLM vs both
| Schema | Google rich result | LLM citation signal | Critical GEO |
|---|---|---|---|
| Organization / ProfessionalService | Yes (knowledge panel) | Yes (entity) | High |
| WebSite with SearchAction | Yes (sitelinks search) | Low | Low |
| Article with Person author | Yes (author in SERP) | Yes (EEAT signal) | High |
| BreadcrumbList | Yes (visible breadcrumbs) | Yes (hierarchy) | Medium |
| FAQPage | Yes (expandable FAQ) | Yes (Q&A direct) | High when applicable |
| HowTo | Yes (visible steps) | Yes (extractable steps) | High when applicable |
| Product with Offer | Yes (price, stock) | Partial | Medium |
| Review / AggregateRating | Yes (stars) | Yes (trust signal) | Medium |
Ready-to-copy JSON-LD examples
ProfessionalService (main entity)
{
"@context": "https://schema.org",
"@type": "ProfessionalService",
"@id": "https://yourdomain.com/#organization",
"name": "Your Brand",
"url": "https://yourdomain.com",
"logo": "https://yourdomain.com/icon",
"image": "https://yourdomain.com/icon",
"description": "An honest description of what your business does.",
"priceRange": "$5,500–$12,000 MXN+",
"areaServed": "MX",
"contactPoint": {
"@type": "ContactPoint",
"contactType": "sales",
"email": "hello@yourdomain.com",
"availableLanguage": ["Spanish", "English"]
}
}
Inject this JSON inside a <script type="application/ld+json"> in <head> or <body>. Better in the root layout so it's on all pages.
Article with Person author
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Exact post title",
"description": "Post meta description",
"image": ["https://yourdomain.com/blog/post-slug/og-image"],
"datePublished": "2026-05-09",
"dateModified": "2026-05-09",
"inLanguage": "en-US",
"author": {
"@type": "Person",
"@id": "https://yourdomain.com/#founder",
"name": "Iván Landaverde",
"url": "https://yourdomain.com",
"worksFor": { "@id": "https://yourdomain.com/#organization" }
},
"publisher": {
"@type": "Organization",
"name": "Your Brand",
"logo": {
"@type": "ImageObject",
"url": "https://yourdomain.com/icon"
}
},
"mainEntityOfPage": "https://yourdomain.com/blog/post-slug"
}
Person author is better than Organization author for EEAT in 2026. LLMs prefer to cite articles signed by a real person with credentials.
BreadcrumbList
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://yourdomain.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Blog",
"item": "https://yourdomain.com/blog"
},
{
"@type": "ListItem",
"position": 3,
"name": "Post title",
"item": "https://yourdomain.com/blog/post-slug"
}
]
}
Goes on each interior page (not home). Allows Google to show visible breadcrumbs in SERP and the LLM to understand the site hierarchy.
FAQPage
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How much does a professional website cost in Mexico?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Depends on scope. A basic presence with technical SEO starts at X. An AI-optimized site starts at Y. An ecommerce starts at Z."
}
},
{
"@type": "Question",
"name": "How long does it take to position a new site?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Between 3 and 6 months for medium-competition keywords, assuming correct technical SEO and regularly published content."
}
}
]
}
Only if the page has visible FAQ. Do not mark FAQ that isn't in the HTML, that's a violation of Google guidelines and gets penalized.
Common errors that invalidate schema
- Marking content that doesn't exist on the visible page. If your schema says
aggregateRating: 4.8but reviews aren't visible to the user, Google penalizes as spam. - Using wrong @type.
LocalBusinessfor a 100% remote agency is misleading (the agency doesn't serve clients in person). BetterProfessionalServiceorOrganization. - Syntactically broken JSON-LD. An extra comma, badly escaped quotes, and the entire schema is ignored. Validate every change in Schema Markup Validator.
- Same @id pointing to different entities. If your
Organizationhas@id: "https://yourdomain.com/#organization"and yourArticle.publishertoo, they must be the same entity. If a page defines@idwith different data, the graph breaks. - Schema on pages without related content.
Productschema on home when home doesn't show specific product. The LLM discards or distrusts.
Article + Person author for EEAT
EEAT (Experience, Expertise, Authoritativeness, Trustworthiness) is the framework Google and LLMs use to evaluate authority. Article with Person author + rich information about the person (worksFor, sameAs with external profiles, jobTitle) reinforces EEAT directly.
The minimum viable for Person:
{
"@type": "Person",
"@id": "https://yourdomain.com/#founder",
"name": "Your Name",
"url": "https://yourdomain.com/about",
"jobTitle": "Founder",
"worksFor": { "@id": "https://yourdomain.com/#organization" }
}
The ideal includes sameAs with LinkedIn, X, GitHub:
"sameAs": [
"https://www.linkedin.com/in/your-profile",
"https://github.com/your-username"
]
This tells the LLM "this person is real, has validatable presence on external platforms". Adds trust.
BreadcrumbList with site architecture
The BreadcrumbList should reflect the real site architecture, not the conceptual hierarchy. If your URL is /servicios/agencia-seo-mexico/, the breadcrumb should be Home → Services → SEO Agency in Mexico. If the URL is /blog/what-is-geo, it should be Home → Blog → What is GEO.
Inconsistencies between visible breadcrumb and schema break trust. If the visual says "Home → Blog" but the schema says "Home → Articles", the validator marks conflict.
Next steps
If you got here and your site doesn't have half these schemas, there's work. Priority order:
OrganizationorProfessionalServicein root layout (all pages).ArticlewithPersonauthor in each blog post.BreadcrumbListon all interior pages.FAQPagewhen the page has visible FAQ.HowTowhen the page has step-by-step tutorial.
Validate everything in Schema Markup Validator and in Google Rich Results Test.
If your stack is Next.js, the standard pattern is centralizing the schema objects in a file (lib/schemas.ts) and serializing them to JSON inside JSX:
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(organizationSchema) }}
/>
If your site isn't Next.js or implementation gets complicated, write us. Bad schema is worth less than well-done schema, and the correct setup is where long-term authority is built.