Begrippenlijst · Structured data

ProductGroup-schema

Ook wel: ProductGroup, variant markup, hasVariant, variesBy

Definitie

ProductGroup is het Schema.org-type voor een product met varianten, zoals maten of kleuren. Elke variant krijgt een eigen Product met eigen GTIN, prijs en voorraad.

Wat is ProductGroup-schema?

ProductGroup beschrijft de ouder van een set varianten: de wandelschoen Trail Pro, die bestaat in drie kleuren en tien maten. Google ondersteunt het sinds 2024 voor product-rich results en merchant listings.

De belangrijkste properties zijn productGroupID (je eigen ID voor de groep), variesBy (waarin de varianten verschillen, bijvoorbeeld https://schema.org/size en https://schema.org/color) en hasVariant (een lijst Product-objecten). Elke variant kan via inProductGroupWithID naar de groep terugwijzen.

Gedeelde eigenschappen zoals merk, materiaal of beschrijving zet je één keer op de ProductGroup. Wat per variant verschilt, zoals GTIN, SKU, prijs, voorraad, afbeelding en maat, staat op de variant zelf.

Waarom het ertoe doet voor webshops

Zonder ProductGroup kiezen veel shops voor één Product met een prijsrange of met de gegevens van de eerste variant. Dan weet Google niet dat maat 46 uitverkocht is en maat 42 niet, en ontbreekt de GTIN van negen van de tien varianten.

Met ProductGroup kan Google elke variant koppelen aan dezelfde variant bij andere winkels, de juiste prijs tonen en zien welke combinaties beschikbaar zijn. Dat sluit ook beter aan op je productfeed in Merchant Center, waar varianten via item_group_id al als groep worden aangeleverd.

Google raadt aan dat elke variant een eigen URL heeft die de variant voorselecteert, bijvoorbeeld met een parameter. De canonical blijft dan meestal op de hoofd-URL staan.

Voor AI-shoppingsystemen die producten vergelijken op maat, kleur en beschikbaarheid geldt hetzelfde principe. Data die per variant klopt, is makkelijker te gebruiken dan een samenvatting met een prijsrange. Hoe zwaar die systemen markup meewegen ten opzichte van feeds, maken de aanbieders niet openbaar.

Magento, Shopify en Laravel

Een configurable product in Magento 2 is een ProductGroup met simple products als varianten. Standaard heeft een variant geen eigen URL; de keuze gebeurt in de browser. Wie per variant een voorselecterende URL wil, bouwt dat zelf of gebruikt een extensie. In een Hyvä-template kun je de children van het configurable product ophalen en als hasVariant uitschrijven, met per variant de juiste EAN uit je attribuut.

Shopify werkt al met varianten en heeft per variant een URL met ?variant= en een vast ID. Het barcode-veld per variant is je GTIN. De standaard thema-markup schrijft lang niet altijd alle varianten uit; controleer dat met de Rich Results Test.

In Laravel bepaal je het datamodel zelf. Houd het simpel: één tabel voor de groep, één voor de varianten, en genereer de JSON-LD uit precies dezelfde query als de variantkiezer op de pagina.

Veelgemaakte fouten

variesBy die niet klopt met de varianten, bijvoorbeeld color opgeven terwijl alleen de maat verschilt. Varianten zonder eigen prijs of voorraad. Een GTIN op groepsniveau terwijl elke maat een eigen EAN heeft. En honderden varianten in één blok, wat de HTML onnodig zwaar maakt; bij heel grote groepen kun je per variantpagina markeren in plaats van alles op één pagina.

Test drie gevallen: een product met één variant, een product met kleur én maat, en een product waarvan een deel uitverkocht is.

Controleer in Search Console het rapport Verkopersvermeldingen. Daar zie je per variant-URL of Google de Offer herkent en of velden als GTIN of beschikbaarheid ontbreken. Werk je met een productfeed, vergelijk dan ook de item_group_id in de feed met de productGroupID in de markup; die horen naar dezelfde groep te verwijzen.

ProductGroup met twee maten

{
  "@context": "https://schema.org",
  "@type": "ProductGroup",
  "name": "Wandelschoen Trail Pro zwart",
  "productGroupID": "TP-ZW",
  "brand": { "@type": "Brand", "name": "Voorbeeldmerk" },
  "variesBy": ["https://schema.org/size"],
  "hasVariant": [
    { "@type": "Product", "sku": "TP-42-ZW", "gtin13": "8712345678906", "size": "42",
      "offers": { "@type": "Offer", "url": "https://www.voorbeeldshop.nl/trail-pro-zwart?maat=42",
        "price": "129.95", "priceCurrency": "EUR", "availability": "https://schema.org/InStock" } },
    { "@type": "Product", "sku": "TP-46-ZW", "gtin13": "8712345678944", "size": "46",
      "offers": { "@type": "Offer", "url": "https://www.voorbeeldshop.nl/trail-pro-zwart?maat=46",
        "price": "129.95", "priceCurrency": "EUR", "availability": "https://schema.org/OutOfStock" } }
  ]
}

Verder lezen

Veelgestelde vragen

Vervangt ProductGroup het gewone Product-schema?+

Nee, het bouwt erop voort. Elke variant blijft een Product met een Offer; ProductGroup is de laag erboven.

Heb ik ProductGroup nodig als mijn producten geen varianten hebben?+

Nee. Voor een product zonder maten of kleuren is een gewoon Product met Offer genoeg.

Meer begrippen over structured data

Liever dat iemand het voor je uitzoekt?

Wij controleren je webshop op deze punten en voeren de fixes zelf door in Magento, Shopify of Laravel. Je praat direct met het team dat het bouwt.