Naar hoofdinhoud springen
🇳🇱

Product-schema-voorbeeld voor Shopify-apparel

Direct kopieerbare JSON-LD Product en ProductGroup schema-voorbeelden voor Shopify-apparel — dekt maat- en kleurvarianten, offers, breadcrumbs en de AggregateRating-regels die bepalen of AI-zoekmachines je productpagina echt citeren.

4 min read

Apparel-productpagina’s op Shopify worden door AI-shoppingengines geciteerd op basis van hoe precies de JSON-LD het variantenlandschap beschrijft. Een koper die op ChatGPT, Perplexity of Gemini vraagt naar ‘linnen shirt dat echt op maat valt in medium’ heeft een AI nodig die herkent dat de specifieke variant bestaat, op voorraad is, een prijs heeft en duidelijk onderscheiden is van de L- en XL-zustervarianten. Generiek Product-schema zonder variantdetails dwingt de AI tot raden; ProductGroup met hasVariant geeft het de data om met vertrouwen te citeren.

Dit voorbeeld levert twee kopieerklare JSON-LD-blokken: een ProductGroup voor de variantenmatrix en een BreadcrumbList voor categoriecontext. Beide zijn gekalibreerd om Google Rich Results Test schoon te passeren en om de zichtbare pagina-inhoud te spiegelen (de regel die AI-engines in de praktijk daadwerkelijk handhaven).

Wanneer Product vs ProductGroup gebruiken

Use caseSchemaWaarom
Mono-SKU item (één maat, één kleur)ProductGeen variantenmatrix — ProductGroup is overdreven.
Apparel met alleen maatvariantenProductGroup + variesBy: sizeAI-shoppingqueries zijn maatgebonden.
Apparel met alleen kleurvariantenProductGroup + variesBy: colorAI-queries zijn kleurgebonden.
Apparel met maat × kleur matrixProductGroup + beide variesByCartesiaans product van varianten; elke hasVariant is een unieke SKU.
Bundel / kit (meerdere ouders)Product per item + custom isRelatedToProductGroup beschrijft productvarianten, geen multi-product bundels.

Shopify’s standaard Liquid-templates emitteren Product ongeacht het aantal varianten. De upgrade naar ProductGroup voor elke apparel-store met meerdere maten is een eenmalige theme-edit (of een Shopify-app die het automatisch doet); de AI-shoppingcitatie-lift is de moeite waard.

ProductGroup JSON-LD (apparel met varianten)

Plak in een productpagina-template en vervang de placeholder-waarden. Het voorbeeld toont een 2-variantenstubdeel; in productie heb je één hasVariant-entry per echte SKU.

ProductGroup JSON-LD (apparel-varianten) json
{
  "@context": "https://schema.org",
  "@type": "ProductGroup",
  "name": "Linen Relaxed Shirt",
  "description": "A breathable linen shirt in three colors, sizes XS–XL. 100% European linen, pre-washed for softness.",
  "brand": {
    "@type": "Brand",
    "name": "Example Apparel"
  },
  "productGroupID": "linen-shirt-001",
  "variesBy": ["https://schema.org/size", "https://schema.org/color"],
  "hasVariant": [
    {
      "@type": "Product",
      "sku": "LINEN-SHIRT-WHITE-M",
      "name": "Linen Relaxed Shirt — White / M",
      "color": "White",
      "size": "M",
      "material": "Linen",
      "image": "https://example.com/products/linen-shirt-white.jpg",
      "offers": {
        "@type": "Offer",
        "url": "https://example.com/products/linen-shirt?variant=white-m",
        "priceCurrency": "USD",
        "price": "79.00",
        "availability": "https://schema.org/InStock",
        "itemCondition": "https://schema.org/NewCondition"
      }
    },
    {
      "@type": "Product",
      "sku": "LINEN-SHIRT-BLACK-S",
      "name": "Linen Relaxed Shirt — Black / S",
      "color": "Black",
      "size": "S",
      "material": "Linen",
      "image": "https://example.com/products/linen-shirt-black.jpg",
      "offers": {
        "@type": "Offer",
        "url": "https://example.com/products/linen-shirt?variant=black-s",
        "priceCurrency": "USD",
        "price": "79.00",
        "availability": "https://schema.org/InStock",
        "itemCondition": "https://schema.org/NewCondition"
      }
    }
  ]
}

Combineer de ProductGroup met een BreadcrumbList zodat AI-engines de categoriehiërarchie begrijpen waarin je product leeft. De breadcrumb-URLs moeten exact overeenkomen met de zichtbare breadcrumb van de pagina.

BreadcrumbList JSON-LD json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://example.com/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Shirts",
      "item": "https://example.com/collections/shirts"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Linen Relaxed Shirt",
      "item": "https://example.com/products/linen-shirt"
    }
  ]
}

Veelgemaakte fouten (op frequentie)

  1. Varianten markeren die niet zichtbaar of selecteerbaar zijn op de pagina. Schema moet zichtbare realiteit weerspiegelen. Als je productpagina alleen S / M / L toont maar de JSON-LD XS tot XXL declareert, zullen AI-engines uiteindelijk een 404-variant proberen citeren en de store downweighten.

  2. AggregateRating gebruiken zonder reviewwidget. Toon de reviews zichtbaar (Shopify Reviews-app) of laat het schema-veld weg. Niet verzinnen.

  3. Inconsistentie van currency, prijs of beschikbaarheid tussen schema en zichtbare productpagina. Koper ziet $79 maar schema declareert 89.00 — AI-engines pakken het schema-nummer, citeren het, koper voelt zich bedrogen. Erger: Google flagt het schema als onbetrouwbaar.

  4. Dezelfde sku hergebruiken over varianten. Shopify genereert unieke SKUs maar merchants overschrijven ze vaak. Dubbele SKUs in hasVariant laten AI-engines varianten onjuist samenvoegen.

  5. ProductGroup en Product zo mengen dat variantspecifieke namen verloren gaan. Als je beide voor hetzelfde item uitzendt, zorg dat de Product-instantie de ouder is (geen variantdetails) en ProductGroup.hasVariant de varianten bevat. Niet Product voor elke variant buiten de groep emitteren.

  6. Medische of niet-ondersteunde claims toevoegen aan apparel- beschrijvingen. ‘Houdings-corrigerend’ / ‘verbetert de circulatie’ / ‘antibacteriële stof voorkomt huidziekten’ — dit zijn gereguleerde claims in de meeste markten en triggeren AI-downweighting zelfs als juridisch OK. Blijf bij pasvorm- en materiaalbeschrijvingen.

  7. Schema-URLs naar niet-canonieke variant-URLs laten wijzen. Als de pagina één canonieke product-URL gebruikt (bv. /products/linen-shirt) en varianten via query-param worden geselecteerd (?variant=white-m), moet hasVariant[].offers.url nog steeds wijzen naar de variant- specifieke URL — daar landen kopers (en AI-agenten).

Hoe te verifiëren

  1. Plak de gedeployde product-URL in

    Google Rich Results Test

    . De Product- en BreadcrumbList-items moeten valideren.
  2. Loop de validatiechecklist hierboven veld voor veld door.
  3. Open de pagina in een incognitovenster en controleer dat zichtbaar product H1, prijs, beschikbaarheid en breadcrumb allemaal overeenkomen met wat het schema declareert.
  4. Voer de Schema-generator opnieuw uit als je de productstructuur verandert (nieuwe kleur, verwijderde maat) en deploy opnieuw.

JSON-LD is één signaal in de AI-shoppingstack. Combineer met het fashion llms.txt-sjabloon voor de content-map-kant, en verifieer met de Robots-analyzer dat GPTBot de productpagina kan bereiken.

Validatiechecklist

  • Productnaam in schema komt overeen met zichtbare H1

    Het `name`-veld van ProductGroup komt exact overeen met de H1 op de productpagina (hoofdletters + interpunctie). AI-engines downweighten mismatches als laag-vertrouwen signaal.

  • Elke variant heeft een unieke SKU

    Geen twee `hasVariant[].sku`-waarden botsen. Shopify genereert automatisch SKUs maar merchants overschrijven ze vaak — dubbele SKUs in schema laten AI-engines varianten onjuist samenvoegen.

  • Variantnamen identificeren maat / kleur / materiaal

    Elke `hasVariant[].name` leest als een echt productlabel (bv. 'Linen Relaxed Shirt — White / M'), geen placeholder. AI-shoppingantwoorden citeren dit veld direct.

  • productGroupID stabiel tussen deploys

    De `productGroupID` moet een stabiele interne identifier zijn (Shopify product GID of eigen slug), geen willekeurige build-time UUID. AI-engines gebruiken het om hetzelfde product te ontdubbelen tussen pagina-reloads.

  • Elke Offer heeft currency + price + availability + URL

    Het `offers`-blok van elke variant heeft `priceCurrency`, `price`, `availability`, `url`. Ontbrekende currency is reden nr. 1 waarom Google Rich Results Test een Product-resultaat verlaagt.

  • AggregateRating alleen aanwezig als echte reviews zichtbaar zijn

    Als je `aggregateRating` uitzendt, moet dezelfde rating + reviewcount zichtbaar zijn op de productpagina. AI-engines vergelijken schema met zichtbare inhoud; verzonnen ratings triggeren downweighting.

  • BreadcrumbList komt overeen met zichtbare breadcrumb

    De `itemListElement`-URL-keten van het schema komt exact overeen met de zichtbare breadcrumb (zelfde pad, zelfde labels). Afwijkingen verwarren AI-engines die breadcrumb-context voor categoriebegrip gebruiken.

  • Rich Results Test geeft geen kritieke fouten

    Na deploy plak je de product-URL in https://search.google.com/test/rich-results — de Product- en BreadcrumbList-items moeten beide valideren zonder kritieke fouten.

Open in Schema-generator

Vooringevuld met apparel-store-placeholders voor productnaam, beschrijving, brand, prijs, beschikbaarheid en ratings. Vervang placeholders met je echte productdata en download een Shopify-klare JSON-LD-blok.

Veelgestelde vragen

Moet een Shopify-apparel-product Product of ProductGroup gebruiken?

Gebruik `Product` voor een simpel item zonder varianten. Gebruik `ProductGroup` zodra maat-, kleur- of materiaalvarianten bestaan — het laat AI-engines de juiste variant citeren voor een specifieke query ('linnen shirt in maat M') in plaats van ze door elkaar te halen. Shopify's standaard Liquid-templates emitteren alleen `Product`; de upgrade naar `ProductGroup` is handmatig maar de moeite waard voor elke apparel-store met meerdere maten.

Mag ik AggregateRating uitzenden zonder dat reviews zichtbaar zijn op de pagina?

Nee. Schema moet zichtbare inhoud weerspiegelen. Als je `aggregateRating: 4.7 from 32 reviews` uitzendt maar de productpagina geen review-widget toont, flaggen zowel AI-engines als Google dit als onbetrouwbaar. Render de reviews zichtbaar (Shopify-apps zoals Judge.me of native Shopify Reviews) of verwijder het schema-veld.

Moet elke kleurvariant een aparte hasVariant-entry zijn?

Ja als de variant een eigen SKU, kleur, maat, afbeelding, prijs of beschikbaarheid heeft. AI-shoppingengines die 'is het zwarte linnen shirt nog op voorraad' beantwoorden, hebben elke variant nodig als afzonderlijk adresseerbaar Product-node met eigen `offers.availability`. Alleen kleur → één `hasVariant` per kleur; alleen maat → één per maat; maat+kleur → cartesiaans product.

Vervangt ProductGroup-schema de Shopify-productfeeds?

Nee. JSON-LD op de pagina vult feeds aan (Shopify's auto-gegenereerde `/products.json`, Google Merchant feed, Meta Catalog). AI-shoppingengines crawlen pagina's direct *en* lezen feeds — beide signalen tellen mee. Laat niet één voor de ander vallen.

Verwante bronnen