Blog

SEO 8 min leestijd

JSON-LD gestructureerde data: kant-en-klare voorbeelden en een PHP-generator

JSON-LD is het formaat dat Google aanbeveelt voor gestructureerde gegevens. In deze handleiding wordt uitgelegd wat u moet markeren, worden voorbeelden getoond van de meest bruikbare schema.org typen en het kleine PHP-patroon dat we gebruiken om geldige markeringen op elke pagina te genereren zonder JSON met de hand te schrijven.

Omslagillustratie: JSON-LD gestructureerde data: kant-en-klare voorbeelden en een PHP-generator

In het kort

  • JSON-LD is een <script type="application/ld+json"> blok op de pagina dat het voor machines beschrijft, met behulp van schema.org-vocabulaire.
  • Markeer alleen wat gebruikers op de pagina kunnen zien. Opmaak die niet overeenkomt met de inhoud riskeert een handmatige actie en levert niets op.
  • Begin met Organization, BreadcrumbList en Article of Product; voeg FAQPage, Service of LocalBusiness toe waar ze passen.
  • Genereer JSON in PHP uit arrays met json_encode, één @graph per pagina, met stabiele @id-waarden.
  • Valideer sjablonen met de Rich Results Test en de Schema Markup Validator en controleer de verbeteringenrapporten Search Console.

Gestructureerde JSON-LD gegevens zijn een manier om zoekmachines in een machineleesbare vorm te vertellen wat een pagina is: een artikel, een product met een prijs, een bedrijf met contactgegevens, een lijst met vragen en antwoorden. Het is onzichtbaar voor bezoekers, het vervangt geen goede inhoud en het verhoogt op zichzelf de ranking niet. Het zorgt ervoor dat een pagina in aanmerking komt voor rijke resultaten, helpt motoren uw pagina's aan de juiste entiteit te koppelen en geeft op AI gebaseerde zoekopdrachten een schonere bron om te lezen. We genereren het op elke pagina van integrono.com en onze andere sites, en deze gids is de praktische versie van dat werk.

JSON-LD versus Microdata versus RDFa

De woordenschat van Schema.org kan in drie syntaxis worden ingebed. Microdata en RDFa plaatsen attributen in uw HTML-tags, waardoor markeringen in de war raken met sjablonen. JSON-LD bevindt zich in één scriptblok, los van de lay-out, waardoor het gemakkelijker is om te genereren, testen en wijzigen. Google zegt dat het JSON-LD aanbeveelt, en dat gebruiken we overal.

Principes vóór voorbeelden

  • Beschrijf zichtbare inhoud. Als de prijs, beoordeling of veelgestelde vragen niet op de pagina staan, plaats deze dan niet in de opmaak.
  • Gebruik absolute URL's en de canonieke URL van de pagina.
  • Wees volledig voor de vereiste eigenschappen en voeg aanbevolen eigenschappen toe als u over echte gegevens beschikt.
  • Gebruik @id om entiteiten te koppelen. De auteur van het artikel is de organisatie die eenmaal is gedefinieerd met een @id, en niet elke keer een nieuwe kopie.
  • Gebruik datums in ISO 8601 (2026-10-28 of met een tijd en zone).
  • Verzin geen recensies of beoordelingen. Valse AggregateRating gegevens zijn een veelvoorkomende oorzaak van handmatige acties.

Voorbeeld 1. Organisatie (en website)

Zet dit op de startpagina of in een grafiek voor de hele site. Het definieert de entiteit waarnaar andere markeringen verwijzen.

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://example.com/#organization",
  "name": "Example Studio",
  "url": "https://example.com/",
  "logo": "https://example.com/images/logo.png",
  "email": "[email protected]",
  "sameAs": [
    "https://github.com/example",
    "https://www.linkedin.com/company/example"
  ]
}

Voorbeeld 2. Broodkruimellijst

Met broodkruimelmarkeringen laat Google het paginapad in de resultaten zien in plaats van een onbewerkte URL. Het moet overeenkomen met de zichtbare broodkruimels.

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {"@type": "ListItem", "position": 1, "name": "Home", "item": "https://example.com/"},
    {"@type": "ListItem", "position": 2, "name": "Blog", "item": "https://example.com/blog"},
    {"@type": "ListItem", "position": 3, "name": "JSON-LD guide", "item": "https://example.com/blog/json-ld-guide"}
  ]
}

Voorbeeld 3. Artikel

Voor blogposts en handleidingen. De eigenschappen die ertoe doen: kop, datums, auteur, uitgever, afbeelding en de pagina-URL.

{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "JSON-LD structured data: examples",
  "description": "Short summary of the article.",
  "url": "https://example.com/blog/json-ld-guide",
  "mainEntityOfPage": "https://example.com/blog/json-ld-guide",
  "inLanguage": "en",
  "datePublished": "2026-08-23",
  "dateModified": "2026-10-28",
  "author": {"@id": "https://example.com/#organization"},
  "publisher": {"@id": "https://example.com/#organization"},
  "image": {"@type": "ImageObject", "url": "https://example.com/images/blog/json-ld.webp", "width": 1200, "height": 630}
}

dateModified gewijzigd als de inhoud daadwerkelijk verandert. Het bij elke inzet tegen het lijf lopen is een stille manier om het vertrouwen te verliezen.

Voorbeeld 4. Product met aanbieding

Voor productpagina's met een zichtbare prijs. Inclusief beschikbaarheid en valuta; voeg alleen aggregateRating of review toe als er echte recensies op de pagina worden weergegeven.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Example product",
  "description": "What it is and who it is for.",
  "image": ["https://example.com/images/product.webp"],
  "sku": "EX-001",
  "brand": {"@type": "Brand", "name": "Example"},
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/product/ex-001",
    "priceCurrency": "EUR",
    "price": "49.00",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition"
  }
}

Voorbeeld 5. Dienst met aanbieding

Voor betaalde diensten, zoals een audit tegen een vaste prijs of een adviesgesprek op uurbasis. Wij gebruiken dit patroon op onze eigen servicepagina's.

{
  "@context": "https://schema.org",
  "@type": "Service",
  "name": "Architecture review",
  "serviceType": "Software architecture analysis",
  "provider": {"@id": "https://example.com/#organization"},
  "areaServed": "Worldwide",
  "offers": {
    "@type": "Offer",
    "price": "200",
    "priceCurrency": "EUR",
    "url": "https://example.com/services/architecture-review"
  }
}

Voorbeeld 6. FAQ-pagina

FAQ-opmaak beschrijft een lijst met vragen en antwoorden die zichtbaar zijn op de pagina. Houd er rekening mee dat Google sinds 2023 alleen rijke resultaten met veelgestelde vragen toont voor een beperkt aantal gezaghebbende sites, dus verwacht geen uitbreidbare antwoorden in de resultaten. De opmaak is nog steeds geldig, nog steeds leesbaar door andere zoekmachines en AI-systemen, en zorgt ervoor dat de FAQ gestructureerd blijft op een manier waarop machines kunnen citeren.

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Do I need structured data to rank?",
      "acceptedAnswer": {"@type": "Answer", "text": "No. It is not a ranking requirement, but it can make pages eligible for rich results."}
    }
  ]
}

Combineer alles in één @graph

Een pagina heeft zelden slechts één entiteit. Plaats ze allemaal in één script met @graph en verwijs naar gedeelde entiteiten met @id:

{
  "@context": "https://schema.org",
  "@graph": [
    {"@type": "Organization", "@id": "https://example.com/#organization", "name": "Example Studio"},
    {"@type": "Article", "headline": "...", "author": {"@id": "https://example.com/#organization"}},
    {"@type": "BreadcrumbList", "itemListElement": []},
    {"@type": "FAQPage", "mainEntity": []}
  ]
}

JSON-LD veilig genereren in PHP

Voeg JSON niet handmatig samen. Een citaat in een titel verbreekt het hele script en de zoekmachine negeert het stilzwijgend. Bouw een PHP-array en codeer deze. Twee vlaggen zijn van belang: houd Unicode leesbaar en bescherm de HTML-context door slashes en tags te ontwijken.

function jsonLdScript(array $graph): string
{
    $data = ['@context' => 'https://schema.org', '@graph' => $graph];
    $json = json_encode(
        $data,
        JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP | JSON_THROW_ON_ERROR
    );
    return '<script type="application/ld+json">' . $json . '</script>';
}

$graph = [
    ['@type' => 'Organization', '@id' => $site . '/#organization', 'name' => 'Example Studio', 'url' => $site . '/'],
    [
        '@type'         => 'Article',
        'headline'      => $title,
        'url'           => $canonical,
        'datePublished' => $published,
        'dateModified'  => $modified,
        'author'        => ['@id' => $site . '/#organization'],
    ],
];
echo jsonLdScript($graph);

JSON_HEX_TAG verandert < en > in escape-reeksen, zodat gebruikersinhoud de scripttag nooit vroegtijdig kan sluiten. Voed de generator met dezelfde gegevens die de pagina weergeven (titel, prijs, datums), zodat markup en zichtbare inhoud niet uit elkaar kunnen drijven. Op een meertalige site vertaalt u tekstvelden en stelt inLanguage per landinstelling in; dit is hoe de artikelen van deze blog en de opmaak van veelgestelde vragen worden geproduceerd.

Valideren en monitoren

  1. Rich Results Test of de uitgebreide resultaattypen van Google in aanmerking komen.
  2. Schema Markup Validator voor algemene schema.org-syntaxis van elk type.
  3. Verbeteringsrapporten Search Console (broodkruimels, producten, veelgestelde vragen, enzovoort) voor fouten en waarschuwingen op grote schaal, nadat Google uw pagina's heeft gecrawld.
  4. Een unit-test die elke sjabloon weergeeft en controleert of de JSON-LD de vereiste sleutels parseert en bevat, voorkomt regressies na refactoren.

Fouten die je kosten

  • Opmaak voor inhoud die niet op de pagina staat (verborgen FAQ, verzonnen beoordelingen, prijzen die afwijken van de zichtbare prijs).
  • Verschillende conflicterende blokken van een plug-in en een sjabloon, elk met een andere Organization.
  • Relatieve URL's, verkeerde datums of een ontbrekende @id.
  • Kapotte JSON door handmatige tekenreeksopbouw en aanhalingstekens zonder escapecodes.
  • Schema behandelen als een rankingtruc. Het is een hulpmiddel voor duidelijkheid; de pagina moet nog steeds verdienen om te rangschikken.

Hoe wij kunnen helpen

Gestructureerde gegevens vormen een onderdeel van ons technische SEO-werk: we ontwerpen het schema voor uw sjablonen, implementeren de generator in uw stapel en zorgen voor validatie zodat deze ook na de release correct blijft. Als u een overzicht wilt van wat er mis is op uw site, begin dan met onze technische SEO-auditchecklist of boek een consultatie.

Veelgestelde vragen

Wat zijn gestructureerde JSON-LD gegevens?

JSON-LD is een scriptblok dat gegevens van schema.org in JSON-indeling bevat en dat de inhoud van een pagina beschrijft voor zoekmachines, bijvoorbeeld een artikel, product, organisatie of veelgestelde vragen.

Verbetert gestructureerde data de rankings?

Niet direct. Het helpt zoekmachines de pagina te begrijpen en kan ervoor zorgen dat deze in aanmerking komt voor rijke resultaten, wat de klikfrequentie kan verbeteren, maar het is geen rankingvereiste.

Waar plaats ik het JSON-LD script?

Overal in de HTML-header of body van de pagina; de meeste sites stoppen het in het hoofd. Het moet aanwezig zijn in de weergegeven HTML die Google ophaalt, dus generatie op de server is de veiligste aanpak.

Is FAQPagina-opmaak nog steeds de moeite waard om toe te voegen?

Google toont nu alleen voor een beperkt aantal sites uitgebreide resultaten met veelgestelde vragen, maar geldige opmaak voor veelgestelde vragen blijft leesbaar voor andere zoekmachines en AI-systemen. Voeg het alleen toe voor vragen en antwoorden die zichtbaar zijn op de pagina.

Hoe test ik gestructureerde gegevens?

Gebruik Rich Results Test van Google voor geschikte rijke resultaten, de Schema Markup Validator voor de algemene syntaxis en de Search Console-verbeteringsrapporten om fouten op de hele site bij te houden.

Gratis ontdekkingsgesprek

Breng een rommelige stack of vastgelopen integratie - Integrono schetst de slimste eerste zet.

U krijgt een senior blik op budgetvallen, afhankelijkheden en of u moet kopen, lijmen of bouwen - voordat betaald werk start. De CEO blijft in the loop.