Schema.org biedt websitebeheerders een uitgebreid vocabulaire voor het structureren van data. De database bevat ongeveer 600 types, die met meer dan 860 properties nader kunnen worden gespecificeerd.
Bij de keuze van geschikte datatypes kun je twee strategieën volgen:
- Theoretisch staat het je vrij om alle reeds geselecteerde content met de beschikbare datatypes van het Schema.org-vocabulaire te benoemen en steeds het specifieke datatype voor het betreffende contentelement te kiezen. Zo’n methode is tijdrovend en doorgaans onnodig.
- In de praktijk beperken websitebeheerders zich meestal tot een deel van de Schema.org-datatypes: wanneer je met de JSON-LD-mark-up alleen maar gestructureerde data beschikbaar wilt stellen voor de zoekmachine is het voldoende om je eerst te beperken tot de datatypes die op dit moment door Google worden ondersteund en in Google Developer uitgebreid worden beschreven.
Wij raden strategie b. aan, en wel hierom: Google biedt voor alle datatypes die door de zoekmachine worden ondersteund een uitgebreide documentatie. Voor elk datatype wordt een mark-upvoorbeeld gegeven.
Tip: Gebruik de voorbeelden die Google Developer geeft als basis voor je eigen JSON-LD-mark-up.
Om je website uit te rusten met gestructureerde data hoef je het wiel niet opnieuw uit te vinden. Vooral als je nog geen ervaring hebt met de syntaxis van JSON-LD bespaar je veel tijd en energie door gebruik te maken van voorbeelden, in plaats van de mark-up voor elk datatype helemaal nieuw te schrijven.
In de documentatie van Google staat het volgende mark-upvoorbeeld voor evenementen:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Event",
"name": "Jan Lieberman Concert Series: Journey in Jazz",
"startDate": "2017-04-24T19:30-08:00",
"location": {
"@type": "Place",
"name": "Santa Clara City Library, Central Park Library",
"address": {
"@type": "PostalAddress",
"streetAddress": "2635 Homestead Rd",
"addressLocality": "Santa Clara",
"postalCode": "95051",
"addressRegion": "CA",
"addressCountry": "US"
}
},
"image": [
"https://example.com/photos/1x1/photo.jpg",
"https://example.com/photos/4x3/photo.jpg",
"https://example.com/photos/16x9/photo.jpg"
],
"description": "Join us for an afternoon of Jazz with Santa Clara resident and pianist Andy Lagunoff.
Complimentary food and beverages will be served.",
"endDate": "2017-04-24T23:00-08:00",
"offers": {
"@type": "Offer",
"url": "https://www.example.com/event_offer/12345_201803180430",
"price": "30",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"validFrom": "2017-01-20T16:20-08:00"
},
"performer": {
"@type": "PerformingGroup",
"name": "Andy Lagunoff"
}
}
</script>
De scripttags definiëren het element van de eerste tot en met de laatste regel als script van het type “application/ld+json”. De informatie die eronder staat is dus geschikt voor programma’s die in JSON-formaat linked data kunnen uitlezen.
Op het eerste niveau staan de keywords “@context” en “@type” met de waardes “https://schema.org” en “Event” (regel 03 en 04). Een parsend programma ontvangt hier de aanwijzing dat de volgende informatie moet worden toegewezen aan het schema “Event” volgens Schema.org. Het gaat dus om specifieke eigenschappen van het beschreven evenement die worden weergegeven in de vorm van naam-waardeparen.
Op het eerste niveau staan ook de eigenschappen “name”, “startDate”, “location”, “image”, “description”, “enddate”, “offers” en “performer” die als waarde zijn toegewezen aan de betreffende informatie over het evenement. Een zoekmachinecrawler kan de informatie “Jan Lieberman Concert Series: Journey in Jazz” daardoor meteen identificeren als naam van het evenement (name) en “2017-04-24T19:30-08:00” als exacte starttijd (StartDate).
Net als RDFa en microdata, ondersteunt ook de JSON-LD-syntaxis nesting. Daarbij wordt aan een eigenschap geen waarde, maar een (sub)schema toegewezen dat wederom nader kan worden bepaald met specifieke eigenschappen. Zo’n situatie is te zien op het tweede niveau van het codevoorbeeld in de regels beginnende met: “@type”.
De eerste keer dat dit voorkomt wordt bijvoorbeeld de Event-eigenschap “location” gedefinieerd als (sub)schema van het type “Place” en voorzien van de eigenschappen “name” en “address”. De eigenschap “address” wordt wederom als (sub)schema van het type “PostalAddress” gedefinieerd en met de schemaspecifieke eigenschappen “streetAddress”, “addressLocality”, “postalCode”, “addressRegion” en “addressCountry” gemarkeerd.
Elk nested niveau wordt tussen accolades geplaatst en zo afgegrensd van het bovenliggende niveau.
Fragment:
"location": {
"@type": "Place",
"name": "Santa Clara City Library, Central Park Library",
"address": {
"@type": "PostalAddress",
"streetAddress": "2635 Homestead Rd",
"addressLocality": "Santa Clara",
"postalCode": "95051",
"addressRegion": "CA",
"addressCountry": "US"
}
},
Schema.org stelt aan websitebeheerders dus datatypes beschikbaar in de vorm van een hiërarchische boomstructuur die, uitgaande van het meest algemene datatype “Thing”, steeds specifieker wordt.
In de volgende stap laten wij zien hoe je het Googlevoorbeeld van het datatype “Event” kan aanpassen aan de hierboven beschreven evenementaankondiging.