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 @id instead 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

When to use

On every page of the site. Defines who your company is.

Why it matters

It's the anchor. Every other schema references this entity. Without a well-marked Organization, LLMs can't confidently identify which company is behind the domain.

Technical notes

  • The `@id` field lets you reference this entity from other schemas with `{"@id": "..."}` instead of repeating everything.
  • `sameAs` is CRITICAL for LLMs. It's how you tell them "this entity is the same as that LinkedIn profile, Crunchbase, etc.". LLMs cross-reference data between sources — without sameAs they miss that link.
  • `taxID` and `vatID` help Google disambiguate entities with similar names and raise confidence in regulated industries.
JSON-LD @type: 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

When to use

If you sell a professional service or have a physical presence.

Why it matters

Differentiates your Organization schema ("we are a company") from the specific service you sell. For local SEO it weighs more than Organization alone.

Technical notes

  • Swap `ProfessionalService` for `LocalBusiness` for generic physical businesses, `MedicalBusiness` for healthcare, `LegalService` for lawyers, `RealEstateAgent` for real estate agents, etc. Schema.org has 100+ subtypes — use the most specific one.
  • `priceRange` accepts `€`, `€€`, `€€€` or literal text like "From €390/month". The latter gives more context to the LLM.
  • `geo` with latitude and longitude is optional but weighs in the Map Pack. For online-only businesses, omit it.
JSON-LD @type: ProfessionalService
{
  "@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

When to use

If you sell software or SaaS.

Why it matters

Specific type for apps and SaaS. Carries price, platform, requirements and, most importantly, feature list (featureList) — LLMs read featureList literally when they answer "what does X do".

Technical notes

  • `applicationCategory` must be one of schema.org's official values: BusinessApplication, DesignApplication, DeveloperApplication, FinanceApplication, GameApplication, etc.
  • `featureList` is literally the first thing an LLM reads when you ask "what does [your app] do". Treat it as sales copy: clear, actionable, never vague.
  • If you offer a free trial, add `offers[0].priceValidUntil` and a separate `Offer` with `price: "0"` and `eligibleDuration` to make it explicit.
JSON-LD @type: 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

When to use

On every blog post or editorial article.

Why it matters

Marks the content as authored editorial. Author + datePublished + dateModified are the 3 signals that weigh most for E-E-A-T and for LLMs to cite the article with confidence.

Technical notes

  • `author` as a Person with sameAs to LinkedIn is key for E-E-A-T. An article without an identifiable author gets discarded in YMYL.
  • `datePublished` is fixed; `dateModified` updates on every revision. Google gives more weight to recently modified articles — update with judgment, not for SEO's sake.
  • For analysis or opinion use `OpinionNewsArticle`; for tutorials `HowTo`; for reportage `ReportageNewsArticle`. Each subtype gives specific context to the LLM.
JSON-LD @type: 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

When to use

On any page with a visible FAQ section.

Why it matters

Tells Google and LLMs "these question-answer pairs are explicitly Q&A". LLMs cite FAQs almost literally when they answer similar questions.

Technical notes

  • Only mark it up if the questions/answers EXIST visibly on the page. Marking up an FAQ that's only in the JSON-LD is a spam signal and Google penalizes it.
  • A 50-word answer is better than none, but 150-300 word answers get cited much more in LLMs because the model can use the entire answer.
  • FAQs must be REAL customer questions, not invented to stuff keywords. Invented ones sound AI-generated and LLMs discard them.
JSON-LD @type: 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 #7 of 8

MedicalBusiness / Physician

When to use

For clinics, practices and healthcare professionals.

Why it matters

Schema.org has a complete medical hierarchy that Google and LLMs read with extra-high E-E-A-T weight. Without these schemas, a clinic is giving up its best SEO/GEO asset.

Technical notes

  • `medicalSpecialty` accepts controlled schema.org values: Dentistry, Surgery, Pediatrics, Cardiovascular, etc. Use the most specific one.
  • For psychologists use `@type: "Psychologist"` (subtype of Physician). For physiotherapists `@type: "Physiotherapy"`. For non-medical professionals like lawyers, `LegalService` with `Attorney` for each professional.
  • The `identifier` with the registration number is the strongest E-E-A-T asset you have — LLMs read this and substantially raise the author's confidence.
JSON-LD @type: MedicalBusiness
{
  "@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

When to use

For every author, team member or verifiable professional.

Why it matters

When listed as `author` in Articles or as `employee` in MedicalBusiness, without a well-marked Person the author looks anonymous and E-E-A-T is lost.

Technical notes

  • `knowsAbout` is heavily underused. It tells the LLM "this person is an authority on X, Y, Z". If the author page says so visibly ("Specialized in…") you can mark it legitimately.
  • `sameAs` with externally verifiable profiles (LinkedIn, GitHub, ORCID if academic) builds Knowledge Graph entity and improves the author's citation rate in LLMs.
  • For a cooperative company with visible partners, mark each one as a Person and link them with `Organization.member`.
JSON-LD @type: 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.

01

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.

02

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`.

03

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.

04

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.

05

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.

Does ChatGPT mention your brand?
Find out free in 30s.

Try free