Schema markup voor AI is structured data in JSON-LD die in machineleesbare vorm vastlegt wie je bent, wat een pagina is en welke feiten erop staan. Het maakt entiteiten zoals je bedrijf, je auteurs en je producten eenduidig. Google gebruikt structured data aantoonbaar voor zoekresultaten. Hoe LLM's achter ChatGPT, Gemini en Perplexity het precies gebruiken, is niet openbaar.
Dit artikel hoort bij de complete gids over GEO. Je leest wat structured data is, wat er wel en niet bekend is over het gebruik door AI, welke types ertoe doen en hoe je een volledig JSON-LD-blok opbouwt. Daarna volgen de valkuilen en de manier waarop je je markup valideert.
Eén ding vooraf: schema markup is geen vervanging voor goede tekst. Het helpt een machine de feiten te koppelen die al op je pagina staan. De tekst zelf moet nog steeds content die AI citeert zijn.
Wat zijn structured data, schema markup en JSON-LD?
Structured data is een gestandaardiseerde beschrijving van een pagina en de dingen erop, in een formaat dat een machine zonder interpretatie kan lezen. Google omschrijft het in zijn introductie tot structured data als een standaardformaat om informatie over een pagina te geven en de inhoud te classificeren.
Drie begrippen lopen vaak door elkaar:
| Begrip | Wat het is |
|---|---|
| Schema markup | Structured data die de woordenschat van schema.org gebruikt: types als Organization en eigenschappen als name of address. |
| JSON-LD | Het formaat waarin je die markup schrijft: een los <script type="application/ld+json">-blok in de HTML, los van de zichtbare opmaak. |
| Entiteit | Een uniek ding in de wereld, zoals een bedrijf, persoon of product, dat je met markup een vaste identiteit geeft. |
Google raadt in dezelfde documentatie aan het formaat te kiezen dat voor jou het makkelijkst te onderhouden is, en zegt dat dit in de meeste gevallen JSON-LD is. Het voordeel is praktisch: je hoeft je HTML niet te verbouwen, en je kunt meerdere entiteiten in één blok aan elkaar koppelen.
Wat is er bekend over hoe AI schema markup gebruikt?
Wat vaststaat, is dat Google structured data gebruikt voor zoekresultaten en rich results, en dat het die data ook inzet om informatie te verzamelen over de wereld, zoals mensen, boeken en bedrijven. Google noemt in de introductie expliciet dat het de sameAs-eigenschap en andere schema.org-data breed kan gebruiken.
Voor AI-functies is Google ook duidelijk. In de documentatie over AI-functies en je website staat dat je geen speciale schema.org-markup en geen aparte AI-bestanden nodig hebt om in AI Overviews of AI Mode te verschijnen. Wel noemt Google het als goede praktijk dat je structured data overeenkomt met de zichtbare tekst op de pagina.
Wat niet bekend is: hoe OpenAI, Perplexity en andere aanbieders structured data verwerken. Zij publiceren daar geen documentatie over. Een redelijke, voorzichtige conclusie is deze:
- JSON-LD staat als tekst in de HTML. Een crawler die je pagina ophaalt, krijgt het dus mee.
- Bij retrieval-augmented generation zoekt een systeem bronnen op en baseert het antwoord daarop. Eenduidige feiten (naam, adres, auteur, datum, prijs) maken het makkelijker om een bron correct te koppelen en te citeren.
- Bij Google is gedocumenteerd dat structured data meetelt voor zoekresultaten. Een AI-systeem dat op zo'n zoekindex leunt, kan daar indirect van profiteren, maar dat is niet bevestigd.
Wie beweert dat schema markup je gegarandeerd in ChatGPT brengt, beweert meer dan iemand kan onderbouwen. Wie zegt dat het zinloos is, negeert dat de grootste zoekmachine het actief gebruikt. Meer over het selectieproces lees je in hoe AI-zoekmachines bronnen kiezen.
Welke schema types tellen en wanneer gebruik je ze?
De types die het meest bijdragen, zijn de types die je bedrijf, je auteurs en je belangrijkste pagina's eenduidig beschrijven. Gebruik per type alleen de eigenschappen die echt op de pagina staan.
| Type | Waar | Wanneer en belangrijkste eigenschappen |
|---|---|---|
Organization of LocalBusiness | Homepage of over-ons-pagina | Altijd. name, url, logo, address, telephone, sameAs. Kies het meest specifieke subtype. |
WebSite | Homepage | Altijd. name, url, publisher naar je organisatie. |
BreadcrumbList | Elke pagina met broodkruimels | Bij een hiërarchische site. Minimaal twee ListItems met position, name en item. |
Article | Blog- en kennisbankartikelen | Bij redactionele content. headline, author, datePublished, dateModified, image. |
Product met Offer | Productpagina's | Bij verkoop. name, image, offers met price en priceCurrency. |
FAQPage | Pagina met zichtbare vragen | Alleen bij echte, zichtbare vraag-en-antwoordblokken. Let op de status hieronder. |
Person | Auteurspagina, teampagina | Voor auteurs en sleutelpersonen. name, jobTitle, worksFor, sameAs. |
Organization en LocalBusiness met sameAs
Organization-markup vertelt wie er achter de site zit, en sameAs koppelt die organisatie aan dezelfde entiteit elders op het web. Google adviseert in de Organization-documentatie om deze markup op de homepage of één pagina over je organisatie te zetten, en om het meest specifieke subtype te gebruiken. Voor een winkel, praktijk of restaurant is dat een subtype van LocalBusiness.
sameAs is volgens schema.org de URL van een referentiepagina die de identiteit van het item ondubbelzinnig aangeeft. Denk aan je LinkedIn-bedrijfspagina, je Wikidata-item, je KvK-vermelding of een Wikipedia-artikel als je dat hebt. Zo help je een systeem te zien dat "De Spaak" op je site en "De Spaak" op LinkedIn hetzelfde bedrijf zijn. Dat sluit aan op hoe een knowledge graph entiteiten aan elkaar verbindt.
WebSite en BreadcrumbList
WebSite geeft je site als geheel een naam en koppelt hem aan de uitgever. BreadcrumbList laat zien waar een pagina in de hiërarchie staat. Google gebruikt broodkruimelmarkup volgens de breadcrumb-documentatie om de inhoud van een pagina in zoekresultaten te categoriseren, en vraagt om minimaal twee items.
Article met auteur en datums
Article-markup legt vast wie iets schreef en wanneer, twee signalen die direct raken aan E-E-A-T. De Article-documentatie van Google kent geen verplichte eigenschappen, maar raadt author, datePublished, dateModified, headline en image aan. Google vraagt om elke auteur apart op te nemen, als Person met een url of sameAs, en in author.name alleen de naam te zetten.
Product en Offer
Product-markup maakt prijs, beschikbaarheid en identificatie van een product eenduidig. Voor productpagina's waar je direct kunt kopen, vraagt Google in de merchant-listing-documentatie minimaal name, image en een Offer met price (groter dan nul) en priceCurrency als ISO 4217-code, zoals EUR. Aanbevolen zijn onder meer brand, gtin of sku, availability en itemCondition.
FAQPage: let op de actuele status
FAQPage is nog een geldig schema.org-type, maar Google toont er geen rich results meer voor. In september 2023 beperkte Google de FAQ-rich-results al tot bekende, gezaghebbende overheids- en gezondheidswebsites. Volgens de changelog van Google Search Central verschijnt de functie sinds 7 mei 2026 helemaal niet meer in Google Search, en op 15 juni 2026 is de documentatie verwijderd.
Gebruik FAQPage daarom alleen als je echte vragen en antwoorden zichtbaar op de pagina hebt staan. Het koppelt vraag en antwoord dan expliciet, maar verwacht er geen uitklapblok in Google van.
Person
Person-markup geeft auteurs en sleutelpersonen een eigen identiteit, los van het bedrijf. Gebruik het op een auteurs- of teampagina en verwijs ernaar vanuit author in je artikelen. Met sameAs naar bijvoorbeeld een LinkedIn-profiel maak je duidelijk welke persoon het is.
Volledig JSON-LD-voorbeeld met @graph
Met @graph zet je meerdere entiteiten in één JSON-LD-blok en verwijs je ernaar met een vaste @id. Hieronder staat de markup voor een kennisbankartikel van de fictieve fietsenmaker "Fietsenmakerij De Spaak" in Utrecht. Alle namen, adressen en URL's zijn verzonnen.
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "BicycleStore",
"@id": "https://www.despaak-voorbeeld.nl/#organisatie",
"name": "Fietsenmakerij De Spaak",
"url": "https://www.despaak-voorbeeld.nl/",
"logo": "https://www.despaak-voorbeeld.nl/images/logo.png",
"image": "https://www.despaak-voorbeeld.nl/images/winkel.jpg",
"telephone": "+31 30 000 0000",
"email": "info@despaak-voorbeeld.nl",
"address": {
"@type": "PostalAddress",
"streetAddress": "Voorbeeldstraat 12",
"postalCode": "3500 AA",
"addressLocality": "Utrecht",
"addressCountry": "NL"
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "18:00"
}
],
"sameAs": [
"https://www.linkedin.com/company/despaak-voorbeeld",
"https://www.instagram.com/despaak-voorbeeld"
]
},
{
"@type": "WebSite",
"@id": "https://www.despaak-voorbeeld.nl/#website",
"name": "Fietsenmakerij De Spaak",
"url": "https://www.despaak-voorbeeld.nl/",
"inLanguage": "nl-NL",
"publisher": { "@id": "https://www.despaak-voorbeeld.nl/#organisatie" }
},
{
"@type": "Person",
"@id": "https://www.despaak-voorbeeld.nl/over-ons/sanne-de-vries#persoon",
"name": "Sanne de Vries",
"jobTitle": "Hoofdmonteur",
"url": "https://www.despaak-voorbeeld.nl/over-ons/sanne-de-vries",
"worksFor": { "@id": "https://www.despaak-voorbeeld.nl/#organisatie" },
"sameAs": ["https://www.linkedin.com/in/sanne-de-vries-voorbeeld"]
},
{
"@type": "WebPage",
"@id": "https://www.despaak-voorbeeld.nl/kennisbank/e-bike-accu-onderhoud#webpagina",
"url": "https://www.despaak-voorbeeld.nl/kennisbank/e-bike-accu-onderhoud",
"name": "E-bike-accu onderhouden: zo gaat hij langer mee",
"isPartOf": { "@id": "https://www.despaak-voorbeeld.nl/#website" },
"breadcrumb": { "@id": "https://www.despaak-voorbeeld.nl/kennisbank/e-bike-accu-onderhoud#broodkruimels" },
"inLanguage": "nl-NL"
},
{
"@type": "BreadcrumbList",
"@id": "https://www.despaak-voorbeeld.nl/kennisbank/e-bike-accu-onderhoud#broodkruimels",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://www.despaak-voorbeeld.nl/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Kennisbank",
"item": "https://www.despaak-voorbeeld.nl/kennisbank"
},
{
"@type": "ListItem",
"position": 3,
"name": "E-bike-accu onderhouden"
}
]
},
{
"@type": "Article",
"@id": "https://www.despaak-voorbeeld.nl/kennisbank/e-bike-accu-onderhoud#artikel",
"headline": "E-bike-accu onderhouden: zo gaat hij langer mee",
"image": "https://www.despaak-voorbeeld.nl/images/e-bike-accu.jpg",
"datePublished": "2026-09-01T09:00:00+02:00",
"dateModified": "2026-10-10T14:30:00+02:00",
"inLanguage": "nl-NL",
"mainEntityOfPage": { "@id": "https://www.despaak-voorbeeld.nl/kennisbank/e-bike-accu-onderhoud#webpagina" },
"author": { "@id": "https://www.despaak-voorbeeld.nl/over-ons/sanne-de-vries#persoon" },
"publisher": { "@id": "https://www.despaak-voorbeeld.nl/#organisatie" }
}
]
}
Een paar keuzes in dit voorbeeld zijn bewust:
- Vaste
@id's. Elke entiteit krijgt één identificatie, en andere entiteiten verwijzen ernaar. Zo bestaat er één organisatie, niet vijf losse kopieën. - Specifiek subtype.
BicycleStoreis een subtype vanLocalBusinessen zegt meer dan alleenOrganization. - Auteur als Person. Het artikel verwijst naar een echte persoon met een eigen pagina en een
sameAs. - Datums met tijdzone.
datePublishedendateModifiedstaan in ISO 8601-formaat.
Op een echte site laat je de organisatie en de website op elke pagina staan, of in elk geval op de homepage, en wisselen de pagina-, broodkruimel- en artikelentiteiten per URL.
Welke valkuilen kom je het vaakst tegen?
De meeste problemen met schema markup ontstaan doordat de markup iets anders beweert dan de pagina, of doordat hij technisch niet te lezen is.
Markup die niet overeenkomt met de zichtbare content. Google zegt in de algemene richtlijnen voor structured data dat je geen content mag markeren die lezers niet zien, en dat structured data een getrouwe weergave van de pagina moet zijn. Een prijs, beoordeling of openingstijd in JSON-LD die nergens zichtbaar staat, is een fout. Bij overtreding kan een pagina via een handmatige actie zijn geschiktheid voor rich results verliezen.
Syntaxfouten. Eén ontbrekende komma of een aanhalingsteken te veel maakt het hele blok onleesbaar. Let ook op komma's na het laatste item in een lijst, die zijn in JSON niet toegestaan.
Alleen een homepage-schema. Veel sites hebben een Organization-blok op de homepage en verder niets. Artikelen zonder auteur en datum en productpagina's zonder prijs laten dan de meest concrete feiten onbenoemd.
Ontbrekende sameAs. Zonder sameAs is je organisatie een naam zonder verwijzing. Vooral bij een veelvoorkomende bedrijfsnaam maakt een koppeling naar je LinkedIn-, KvK- of Wikidata-pagina het verschil tussen herkend worden en verward worden.
Markup die alleen via JavaScript verschijnt. Google kan JSON-LD lezen die met JavaScript wordt toegevoegd. Je kunt er niet van uitgaan dat elke AI-crawler dat ook doet. Zet markup daarom bij voorkeur direct in de HTML die de server levert, met server-side rendering.
Verwachten dat valide markup alles oplost. Google schrijft in dezelfde richtlijnen dat het niet garandeert dat structured data in zoekresultaten verschijnt, ook niet als de test slaagt. Markup is een hulpmiddel om feiten eenduidig te maken. Een bestand als llms.txt is dat evenmin: het zijn aanvullingen op goede, toegankelijke content.
Hoe valideer je schema markup?
Je valideert schema markup met twee gratis tools: de Rich Results Test van Google en de Schema Markup Validator van schema.org. Ze controleren verschillende dingen, dus gebruik ze allebei.
| Tool | Wat het controleert |
|---|---|
| Rich Results Test | Of je markup in aanmerking komt voor de rich results die Google ondersteunt, met fouten en waarschuwingen per type. |
| Schema Markup Validator | Of je markup klopt volgens de schema.org-woordenschat, ook voor types waarvoor Google geen rich result heeft, zoals Person of WebSite. |
Google noemt in de introductie tot structured data ook de URL-inspectie in Search Console om te controleren of Google je structured data heeft gevonden, en de rich-result-rapporten om fouten na publicatie te volgen.
Zo controleer je dit op je eigen site
- Open de broncode van je homepage (niet de inspector, maar "paginabron weergeven") en zoek op
application/ld+json. Staat er niets, dan levert je server geen JSON-LD in de ruwe HTML. - Controleer of er een
Organization- ofLocalBusiness-blok staat met naam, logo, adres en eensameAs-lijst. - Open een artikel en een productpagina. Kijk of
Articleeen auteur en beide datums heeft, en ofProducteen prijs in euro bevat die gelijk is aan de zichtbare prijs. - Plak de URL's in de Rich Results Test en de Schema Markup Validator en los alle fouten op.
- Vergelijk elke waarde in de markup met de zichtbare tekst. Wat niet op de pagina staat, haal je uit de markup.
De gratis scan van Flowproof controleert welke JSON-LD-types je pagina's bevatten, of sameAs aanwezig is en of de content in de ruwe HTML staat, naast de andere technische GEO-onderdelen.