Technical guide
Schema.org for LLMs:
the technical guide with real code.
If ChatGPT or Perplexity don't cite you, your schema is probably incomplete or poorly structured. This guide covers the 8 schemas that matter in 2026, with JSON-LD code ready to copy, technical notes, and the 5 most-penalized mistakes. Built so your brand appears with confidence when an LLM mentions it.
TL;DR
- In 2026, schema.org stopped being a 'SEO plus' — it's a GEO cornerstone. LLMs read JSON-LD to identify entities with confidence.
- 8 minimum schemas: Organization, ProfessionalService/LocalBusiness, SoftwareApplication, Article, FAQPage, BreadcrumbList, MedicalBusiness (if applicable), Person.
- Use JSON-LD, not microdata or RDFa. Syntax Google recommends and the one LLMs parse best.
- Reference entities with
@idinstead of repeating them on every page. Centralize Organization, reference from Article, MedicalBusiness, etc. - Penalized mistakes: marking up what is NOT visible, invented AggregateRating, schemas in wrong language, inconsistent data across pages.
- Always validate with: validator.schema.org + Google Rich Results Test + manual test asking ChatGPT 'what do you understand this entity is'.
Why schema.org matters more with LLMs than with Google
Until 2023, schema.org was a 'technical SEO plus': Google used it for rich results (enriched snippets), but it understood the content itself with its own NLP. A page without schema but with good content could still rank.
In 2024-2026 the rule changed. AI assistants (ChatGPT,
Perplexity, Claude with tools, AI Overviews, Copilot) when
processing a web page prioritize structured data over free
NLP — because structured data eliminates ambiguity. A page
marked up as MedicalBusiness with
medicalSpecialty: "Dentistry" leaves ZERO room
for interpretation. And LLMs prefer ZERO interpretation when
they're about to cite your brand with confidence.
Practical result: two sites with equivalent content, one with complete schema and one without, the first gets cited routinely by LLMs and the second never appears. The difference isn't 'a bit better SEO' — it's invisibility vs citation.
If you're coming from SEO + GEO basics, the guides what is GEO and how to appear in ChatGPT as a business give the general context. This is the technical version.
Schema #1 of 8
Organization
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://yourdomain.com/#organization",
"name": "Your Company",
"legalName": "Your Company, Ltd.",
"taxID": "B12345678",
"vatID": "ESB12345678",
"url": "https://tudominio.com",
"logo": "https://tudominio.com/logo.png",
"email": "hola@tudominio.com",
"telephone": "+34900000000",
"foundingDate": "2020-01-15",
"address": {
"@type": "PostalAddress",
"streetAddress": "C/ Ejemplo, 25",
"addressLocality": "Vigo",
"addressRegion": "Galicia",
"postalCode": "36210",
"addressCountry": "ES"
},
"areaServed": [
{ "@type": "Country", "name": "Spain" }
],
"knowsLanguage": ["es-ES", "gl-ES", "en"],
"sameAs": [
"https://linkedin.com/company/tuempresa",
"https://twitter.com/tuempresa",
"https://www.crunchbase.com/organization/tuempresa"
]
} Schema #2 of 8
ProfessionalService / LocalBusiness
{
"@context": "https://schema.org",
"@type": "ProfessionalService",
"@id": "https://tudominio.com/#service",
"name": "Tu Servicio Pro",
"description": "150-300 character description of exactly what you do.",
"url": "https://tudominio.com",
"image": "https://tudominio.com/og.png",
"telephone": "+34900000000",
"email": "hola@tudominio.com",
"priceRange": "€€",
"address": {
"@type": "PostalAddress",
"streetAddress": "C/ Ejemplo, 25",
"addressLocality": "Vigo",
"postalCode": "36210",
"addressCountry": "ES"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 42.2406,
"longitude": -8.7207
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "09:00",
"closes": "18:00"
}
],
"serviceType": ["Category 1", "Category 2"],
"provider": { "@id": "https://tudominio.com/#organization" }
} Schema #3 of 8
SoftwareApplication
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"@id": "https://tudominio.com/#software",
"name": "Tu SaaS",
"description": "Your SaaS does X for companies that need Y.",
"applicationCategory": "BusinessApplication",
"applicationSubCategory": "SEOSoftware",
"operatingSystem": "Web",
"url": "https://tudominio.com",
"publisher": { "@id": "https://tudominio.com/#organization" },
"offers": [
{
"@type": "Offer",
"name": "Starter",
"price": "390",
"priceCurrency": "EUR",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"price": "390",
"priceCurrency": "EUR",
"unitText": "MONTH"
},
"url": "https://tudominio.com/planes",
"availability": "https://schema.org/InStock"
}
],
"featureList": [
"Feature 1 with a concrete description",
"Feature 2",
"Feature 3"
],
"inLanguage": ["es-ES", "en"]
} Schema #4 of 8
Article
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Exact article headline",
"description": "150-160 character summary.",
"image": "https://yourdomain.com/post-cover.png",
"author": {
"@type": "Person",
"name": "Author Name",
"url": "https://yourdomain.com/team/author-name",
"jobTitle": "Author job title",
"worksFor": { "@id": "https://tudominio.com/#organization" },
"sameAs": [
"https://linkedin.com/in/autor",
"https://twitter.com/autor"
]
},
"publisher": { "@id": "https://tudominio.com/#organization" },
"datePublished": "2026-05-14T10:00:00+02:00",
"dateModified": "2026-05-14T10:00:00+02:00",
"inLanguage": "es-ES",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://tudominio.com/blog/post-slug"
}
} Schema #5 of 8
FAQPage
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Exact question as it appears on the page?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Full 80-300 word answer. No HTML, just plain text (line breaks via \\n are allowed)."
}
},
{
"@type": "Question",
"name": "Second question?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Second answer."
}
}
]
} Schema #6 of 8
BreadcrumbList
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://yourdomain.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Resources",
"item": "https://yourdomain.com/resources"
},
{
"@type": "ListItem",
"position": 3,
"name": "Schema.org for LLMs"
}
]
} Schema #7 of 8
MedicalBusiness / Physician
{
"@context": "https://schema.org",
"@type": "MedicalBusiness",
"@id": "https://yourdomain.com/#clinic",
"name": "Example Clinic",
"medicalSpecialty": ["Dentistry", "Orthodontics"],
"description": "Dental clinic specialized in implantology and invisible orthodontics.",
"url": "https://tudominio.com",
"telephone": "+34900000000",
"address": { ... },
"employee": [
{
"@type": "Physician",
"name": "Dra. Ejemplo",
"medicalSpecialty": "Dentistry",
"identifier": {
"@type": "PropertyValue",
"propertyID": "colegiado",
"value": "12345"
},
"alumniOf": {
"@type": "EducationalOrganization",
"name": "Universidad Complutense de Madrid"
}
}
],
"availableService": [
{
"@type": "MedicalProcedure",
"name": "Implante dental",
"procedureType": "https://schema.org/SurgicalProcedure"
}
]
} Schema #8 of 8
Person
{
"@context": "https://schema.org",
"@type": "Person",
"@id": "https://tudominio.com/equipo/nombre#person",
"name": "Nombre Apellido",
"jobTitle": "CEO y fundador",
"image": "https://tudominio.com/equipo/nombre.jpg",
"url": "https://tudominio.com/equipo/nombre",
"worksFor": { "@id": "https://tudominio.com/#organization" },
"alumniOf": [
{
"@type": "EducationalOrganization",
"name": "Universidad Pompeu Fabra"
}
],
"knowsAbout": ["SEO", "Generative Engine Optimization", "Digital PR"],
"sameAs": [
"https://linkedin.com/in/nombre",
"https://twitter.com/nombre",
"https://github.com/nombre"
]
} 5 schema.org mistakes that get you penalized
We see them repeatedly in audits. Any of the 5 can trigger a Google manual action or, worse, make LLMs discard your entire schema as noise.
Marking up schemas that aren't visible on the page
You generate a FAQPage in the JSON-LD but the HTML has no visible FAQ section. Google detects it as spam and applies a manual penalty. Rule: only mark up what's visible.
Duplicate schemas with contradictory data
You have Organization with `name: "Company SL"` in the base layout and another Organization with `name: "Company S.L."` on another page. LLMs detect the inconsistency and lower confidence. Centralize the entity and reference it with `@id`.
AggregateRating without verifiable reviews
Marking up an AggregateRating with `"ratingValue": "5.0", "reviewCount": "237"` when in reality there are 3 reviews. Google applies manual action to entire sites that do this, not just the affected page.
Forgetting @id and duplicating entities on every page
You repeat the full Organization JSON-LD on every page instead of referencing with `{"@id": "..."}`. It works, but LLMs get confused if the data diverges slightly between pages. Use explicit references.
Schemas in the wrong language or without inLanguage
Spanish-language page with English schema (`"name": "Dental Clinic"` for a clinic actually called "Clínica Dental"). Without `inLanguage` LLMs have to guess, sometimes wrong. Always mark `inLanguage` ("es-ES", "gl-ES", etc.).
How to validate your schema works
Three sequential steps. If schema doesn't pass step 1, no point continuing. If it passes all 3, it's ready for production.
Step 1: syntactic validator — validator.schema.org
Paste your JSON-LD or the public URL. Detects syntax errors (commas, brackets), unrecognized types, and invalid properties per type. The minimum check: if it fails here, the schema doesn't exist for crawlers.
Step 2: Google Rich Results Test
search.google.com/test/rich-results. Tells you which rich results Google can generate from your schema (FAQ snippet, breadcrumb in SERP, sitelinks search box, etc.). Useful to confirm SERP compatibility — but note: passing this test does NOT guarantee rich results will appear, only that they are possible.
Step 3: qualitative LLM test
This is what almost nobody does, and it's the one that matters most for GEO. Take your freshly published URL, open ChatGPT (with browsing enabled), and ask literally:
- "Can you summarize what entity is behind [URL]?"
- "Who is behind [URL] and what do they do?"
- "Does this page describe a service, a product, an organization, or a person?"
If ChatGPT responds with correct and complete data ("this is company X, specialized in Y, founded in Z, with address W"), your schema is well structured. If it answers "I don't have information" or gives generic data, your schema is being ignored or misinterpreted. Iterate.
Free SEO + GEO audit
How do Google and ChatGPT
see you today?
In 30 seconds we tell you which schemas your site has, which are missing, and which are poorly structured. No signup, with criteria.
FAQ
About schema.org and LLMs.
01 Does schema.org still matter in 2026 with LLMs?
More than ever. Google still uses it for rich results, but on top of that AI assistants (ChatGPT with browsing, Perplexity, Claude with web tools, AI Overviews) read JSON-LD to understand what type of entity each page is. An organization with well-marked Organization + ProfessionalService gets cited with MUCH more confidence than one without structure. In 2026 schema stops being a 'technical SEO plus' and becomes a cornerstone of LLM presence.
02 JSON-LD, microdata, or RDFa?
JSON-LD, no debate. It's the syntax Google explicitly recommends, the easiest to maintain (separate from HTML), the one validators support best, and the one LLM crawlers parse with the fewest errors. Microdata and RDFa were from 2010 — leave them.
03 How many schema types does a typical SaaS company need?
Minimum viable: Organization + WebSite + SoftwareApplication + BreadcrumbList. If you have a blog, add Article on each post. If you have an FAQ, add FAQPage. If you have a visible team, add Person for each member. If you sell across multiple countries, add hreflang + multiple Organization with sameAs between them. Total: 5-8 types for full SaaS coverage.
04 Do I have to put schema on EVERY page?
Yes, but not the same one on every page. Organization + WebSite go on EVERY page (usually in the base layout). Then each page type adds its specific schema: blog post → Article, product page → Product, FAQ → FAQPage, contact → ContactPage, etc. The rule: each page should be identifiable by a single primary schema type, not by a vague list.
05 How do I validate my schema is correct?
Three tools. One: validator.schema.org (syntactic validity). Two: Google Rich Results Test (SERP compatibility). Three: manually read the JSON-LD you generate and ask ChatGPT 'what do you understand this entity is?' — if the LLM responds with correct and complete data, you did your job. If it answers 'I'm not sure', revise the schema.
06 Can aggressive schema get you penalized?
Yes, in three cases: 1) schema that does NOT match the visible content (marking up an FAQ that isn't on the page), 2) marking as Review things that aren't legitimate reviews, 3) artificially inflating aggregateRating with unverifiable data. Google penalizes deceptive schema with manual actions. The rule: mark up ONLY what's visibly on the page, don't invent data.
07 Do LLMs also read schemas not officially supported by Google?
Yes. LLMs are much more permissive with schema.org than Google. While Google only supports 30-40 types for rich results, LLMs process any valid schema.org type (Person, Place, Event, CreativeWork…) and use it to build the entity's context. If your business fits an uncommon schema (Brewery, GovernmentOrganization, MovieTheater…), use it even if Google shows nothing — the LLM does read it.
Keep reading