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.
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 case | Schema | Waarom |
|---|---|---|
| Mono-SKU item (één maat, één kleur) | Product | Geen variantenmatrix — ProductGroup is overdreven. |
| Apparel met alleen maatvarianten | ProductGroup + variesBy: size | AI-shoppingqueries zijn maatgebonden. |
| Apparel met alleen kleurvarianten | ProductGroup + variesBy: color | AI-queries zijn kleurgebonden. |
| Apparel met maat × kleur matrix | ProductGroup + beide variesBy | Cartesiaans product van varianten; elke hasVariant is een unieke SKU. |
| Bundel / kit (meerdere ouders) | Product per item + custom isRelatedTo | ProductGroup 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.
{
"@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"
}
}
]
} BreadcrumbList JSON-LD
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.
{
"@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)
-
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.
-
AggregateRating gebruiken zonder reviewwidget. Toon de reviews zichtbaar (Shopify Reviews-app) of laat het schema-veld weg. Niet verzinnen.
-
Inconsistentie van currency, prijs of beschikbaarheid tussen schema en zichtbare productpagina. Koper ziet
$79maar schema declareert89.00— AI-engines pakken het schema-nummer, citeren het, koper voelt zich bedrogen. Erger: Google flagt het schema als onbetrouwbaar. -
Dezelfde
skuhergebruiken over varianten. Shopify genereert unieke SKUs maar merchants overschrijven ze vaak. Dubbele SKUs inhasVariantlaten AI-engines varianten onjuist samenvoegen. -
ProductGroupenProductzo mengen dat variantspecifieke namen verloren gaan. Als je beide voor hetzelfde item uitzendt, zorg dat deProduct-instantie de ouder is (geen variantdetails) enProductGroup.hasVariantde varianten bevat. NietProductvoor elke variant buiten de groep emitteren. -
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.
-
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), moethasVariant[].offers.urlnog steeds wijzen naar de variant- specifieke URL — daar landen kopers (en AI-agenten).
Hoe te verifiëren
- Plak de gedeployde product-URL in
Google Rich Results Test
. De Product- en BreadcrumbList-items moeten valideren. - Loop de validatiechecklist hierboven veld voor veld door.
- Open de pagina in een incognitovenster en controleer dat zichtbaar product H1, prijs, beschikbaarheid en breadcrumb allemaal overeenkomen met wat het schema declareert.
- 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
Fashion-Shopify llms.txt-sjabloon
Combineer dit Product-schema met een llms.txt content map — beide signalen werken samen voor AI-shoppingcitatie.
Beauty-Shopify llms.txt-sjabloon
Zustervertcale — dezelfde JSON-LD-principes gelden voor beauty Product-schema, maar met ingrediënt-context-velden in plaats van maat/kleur.
Electronics-Shopify llms.txt-sjabloon
Zustervertcale — voor electronics gebruik je ProductGroup met modelnummer + compatibiliteitsvelden in plaats van maat/kleur-varianten.
Shopify AI Visibility Optimizer
De volledige AI-zichtbaarheidsstack — schema, content map, crawlerbeleid, citation-monitoring.
llms.txt voor Shopify — volledige gids
Achtergrond over het content-map signaal dat gepaard gaat met het schema-signaal in dit voorbeeld.