NieuwProduct Score, 4T Segmentation, Price War en Broken Size zijn live.Bekijk wat er nieuw is
Feedance
E-commerce

De complete gids voor productvariantfeeds

Alles over variantfeeds: item_group_id, color, size en andere attributen, voorbeelden in XML, CSV en JSON, eisen per kanaal en de 12 meest gemaakte fouten.

Cagdas PolatCagdas Polat
26 min. leestijd
De complete gids voor productvariantfeeds

De meeste feedproblemen zien er niet uit als feedproblemen. Ze zien eruit als een afkeuring in Google Merchant Center die je niet kunt verklaren, een Advantage+-campagne die haar budget opmaakt aan één zwart T-shirt, of een Shopping-advertentie die een klant die schoenmaat 42 zoekt naar een pagina stuurt waar alleen maat 38 nog over is.

Onder bijna al deze problemen zit hetzelfde: varianten.

Een variant is elke versie van een product die op één zichtbare, koopbare manier verschilt: maat, kleur, materiaal, capaciteit, afwerking. In retail zijn ze heel gewoon en in feeds ongewoon lastig, omdat elk kanaal ze anders modelleert en omdat fouten ermee stilletjes misgaan. Er gaat niets kapot. Je advertenties presteren gewoon ongemerkt ondermaats, en de diagnose ligt vier lagen diep in een databestand dat niemand opent.

Deze gids behandelt het hele onderwerp: wat echt als variant telt, hoe item_group_id werkt en waar mensen het verkeerd gebruiken, elk variantbepalend attribuut met zijn echte limieten, werkende feedvoorbeelden in XML, CSV en JSON, hoe Google, Meta, TikTok, Pinterest, Amazon en regionale marktplaatsen elk verwachten dat varianten zijn opgebouwd, en een diagnosetabel voor de fouten die het vaakst voorkomen.

Hij is lang omdat het onderwerp dat is. Gebruik de inhoudsopgave om te springen.

1. Wat een variant eigenlijk is

Een variant is een koopbare versie van een product die van de andere versies verschilt in ten minste één attribuut waartussen een klant kiest, terwijl het hetzelfde product blijft.

Die laatste bijzin doet veel werk. Een blauw T-shirt in medium en een zwart T-shirt in large zijn hetzelfde product. Een blauw T-shirt en een blauwe hoodie zijn dat niet, zelfs niet van hetzelfde merk en in dezelfde stof.

Het standaardmodel bij de meeste kanalen is parent/child:

  • De parent is het conceptuele product: "Merino Crew Neck Sweater". Die is meestal niet los te koop.
  • De children zijn de varianten, elk met een eigen SKU, een eigen voorraadniveau en soms een eigen prijs en afbeelding.

In een productfeed wordt dit bijna altijd plat uitgedrukt: elke variant is een eigen rij of <item>, en een gedeelde groeperingssleutel verbindt ze. Er is geen nesting. Een trui in 4 kleuren en 5 maten bestaat uit 20 rijen die allemaal dezelfde groeps-ID hebben.

Wat geen variant is

Hier gaan feeds al mis voordat er één regel XML is geschreven.

Geen variantWaaromWat je in plaats daarvan gebruikt
Multipacks: een 6-pack tegenover een los exemplaarEen andere hoeveelheid van dezelfde eenheid, geen gekozen attribuutattribuut multipack (Google)
Bundels: camera + lens + tasEen aparte, verkoopbare combinatieattribuut is_bundle; apart product
Gerelateerde producten: bijpassende top en rokVerschillende producten die goed samengaanAparte artikelen; gebruik aanbevelingen
Refurbished tegenover nieuwStaat, geen variatieattribuut condition
Listings van verschillende retailersHetzelfde product, andere verkoperAparte accounts/feeds
Personalisatie: gegraveerde naamOp bestelling gemaakt, geen optie op voorraadMeestal één artikel; vermeld het in de beschrijving

Als je een van deze onder een gedeelde item_group_id groepeert, krijg je een groep waarvan de leden niet uitwisselbaar zijn. Dat verwart de variantkiezer op de bestemmingspagina en leidt op sommige kanalen tot een afkeuring wegens een mismatch.

2. De beslissing die alles bepaalt

Beantwoord, voordat je feedlogica schrijft, voor elk producttype dat je verkoopt één vraag:

Komt een klant die een andere optie kiest op een andere pagina terecht, of op dezelfde pagina in een andere staat?

Dit is de praktische test, en die bepaalt direct hoe je de feed moet opbouwen.

Situatie A: aparte URL's per variant. Elke kleur heeft een eigen productpagina (/merino-sweater-navy, /merino-sweater-charcoal). Stuur elke variant als eigen rij met een eigen link. Dit is de schoonste opzet, levert de beste advertentierelevantie op en heeft de voorkeur van kanalen.

Situatie B: één URL, variant op de pagina gekozen. Alles staat op /merino-sweater en de klant kiest kleur en maat met een selector. Je kunt nog steeds elke variant meesturen, maar je moet dan een deeplinkparameter toevoegen zodat de advertentie op de juiste, vooraf geselecteerde staat landt:

 

https://example.com/merino-sweater?colour=navy&size=m

Zonder die parameter komt een shopper die klikte op een advertentie voor navy medium terecht in een standaardstaat die charcoal small toont. Die mismatch is een van de grootste stille conversiekillers in het adverteren met varianten, en bij Google kan die ook een afkeuring wegens "Mismatched value (page crawl)" opleveren, omdat de crawler een pagina ziet waarvan de zichtbare kleur niet overeenkomt met de aangeleverde color.

Situatie C: varianten die het splitsen niet waard zijn. Sommige variaties beïnvloeden de koopbeslissing niet genoeg om aparte advertenties te rechtvaardigen, bijvoorbeeld de kabellengte van een oplader. Dan kun je bewust één representatieve variant meesturen. Hoofdstuk 7 behandelt wanneer dat de juiste keuze is.

Variantbepalende tegenover beschrijvende attributen

Elk attribuut in je feed valt in een van twee categorieën, en die door elkaar halen is een veelvoorkomende oorzaak van foutieve groepen.

Variantbepalende attributen moeten tussen de leden van de groep verschillen. Dit zijn de dingen waartussen de klant kiest: color, size, material, pattern, plus productspecifieke dimensies zoals capaciteit of afwerking.

Groepsconstante attributen moeten bij elk lid identiek zijn: brand, gender, age_group, item_group_title, google_product_category. Delen twee rijen een item_group_id maar hebben ze verschillende gender-waarden, dan heb je de producten verkeerd gegroepeerd of verkeerd getagd.

Rijspecifieke maar niet-variantbepalende attributen verschillen per rij zonder de variatie te bepalen: id, price, availability, gtin, image_link, link. Twee varianten kunnen terecht verschillende prijzen hebben (een maat 3XL kost vaak meer) zonder dat de prijs is wat ze onderscheidt.

3. item_group_id: het fundament

item_group_id is de gedeelde sleutel die een kanaal vertelt: "deze rijen zijn hetzelfde product." Al het andere aan variantverwerking hangt ervan af dat deze klopt.

De specificatie

EigenschapGoogleMetaTikTok
Veldnaamitem_group_iditem_group_iditem_group_id
Max. lengte50 tekens100 tekens150 tekens
Toegestane tekensUnicode; ASCII aanbevolen: alfanumeriek, underscores, streepjesStringString
HoofdlettergevoeligNiet hoofdlettergevoelig (ABC123 = abc123)HoofdlettergevoeligHoofdlettergevoelig
Verplicht?Verplicht voor gratis listings, en voor Shopping-advertenties in Brazilië, Frankrijk, Duitsland, Japan, het VK en de VS, als er varianten worden aangeleverdNodig voor het groeperen van variantenNodig voor het groeperen van varianten
Herhaald veldNee, één waarde per artikelNeeNee

Omdat Google de waarde niet hoofdlettergevoelig behandelt en Meta en TikTok wel, kies je overal voor kleine letters (of hoofdletters). Een catalogus waarin zowel SWTR-001 als swtr-001 voorkomt, groepeert bij Google correct en valt bij Meta uiteen in twee producten.

De waarde kiezen

De beste item_group_id is de parent-SKU die je al in je ERP of PIM hebt. Die bestaat, is stabiel en is uniek.

Goed:

 

SWTR-MERINO-CREW
12345
parent-8891

Fout, en waarom:

WaardeProbleem
Merino Crew Neck SweaterSpaties en gemengde hoofdletters; overschrijdt de limieten bij lange titels; verandert als marketing het product een andere naam geeft
sweaterNiet uniek: voegt je hele assortiment truien samen tot één groep
SWTR-MERINO-CREW-NAVY-MBevat de variantdimensies, waardoor elke rij een unieke waarde krijgt en er niets groepeert
Een rijnummer of hash die bij elke export opnieuw wordt gegenereerdVerandert tussen exports; kanalen verliezen de continuïteit van de groep en leren weer vanaf nul

Die laatste verdient nadruk. item_group_id moet in de loop van de tijd stabiel blijven. Kanalen bouwen prestatiehistorie op per groep. Genereert je export de ID's opnieuw, dan reset je die historie bij elke synchronisatie, en geen enkele biedoptimalisatie compenseert dat.

De drie regels

  1. Elk lid van een groep deelt dezelfde item_group_id.
  2. Elk lid heeft een unieke id. Een dubbele id ergens in de feed zorgt ervoor dat de latere rij ongemerkt wordt weggelaten.
  3. Elk lid verschilt in ten minste één variantbepalend attribuut. Twee rijen met dezelfde groeps-ID én dezelfde kleur en maat zijn duplicaten, geen varianten.

Een conventie die aan alle drie voldoet:

 

item_group_id: SWTR-MERINO-CREW
id:            SWTR-MERINO-CREW-NAV-M
id:            SWTR-MERINO-CREW-NAV-L
id:            SWTR-MERINO-CREW-CHR-M

Leesbaar, makkelijk te debuggen en afgeleid van data die je al hebt.

item_group_title

Een recenter attribuut van Google, optioneel maar aanbevolen als je item_group_id aanlevert. Het bevat de naam van het parent-product (max. 150 tekens) en moet bij elke variant in de groep identiek zijn.

 

xml

<g:item_group_id>SWTR-MERINO-CREW</g:item_group_id>
<g:item_group_title>Merino Crew Neck Sweater</g:item_group_title>
<title>Merino Crew Neck Sweater — Navy, Medium</title>

Let op het patroon: title is variantspecifiek, item_group_title niet. Dezelfde string in beide sturen verspilt het signaal.

variant_option

Ook nieuwer aan de kant van Google: een gestructureerde manier om aan te geven welke eigenschappen de variatie bepalen, in plaats van het kanaal dat te laten afleiden. Het accepteert maximaal 30 naam/waarde-paren (elk subattribuut maximaal 250 tekens, in totaal 5.000 tekens).

 

xml

<g:variant_option>
  <g:name>Colour</g:name>
  <g:value>Navy</g:value>
</g:variant_option>
<g:variant_option>
  <g:name>Size</g:name>
  <g:value>M</g:value>
</g:variant_option>

Dit is vooral handig voor producten waarvan de variatieassen niet worden gedekt door de standaardattributen voor kleding: opslagcapaciteit, processorklasse, wattage, aantal zitplaatsen. In plaats van "256GB" in size te proppen, geef je het op de juiste manier aan.

4. Variantbepalende attributen in detail

color

Het attribuut met de meeste regels in de specificatie, en het attribuut dat het vaakst wordt afgewezen.

EigenschapWaarde
Max. lengte (Google)In totaal 100 tekens, 40 per afzonderlijke kleur
Max. lengte (Meta / TikTok)200 tekens
Meerdere kleurenScheiden met /, primaire kleur eerst
VerplichtVoor kleding in de hierboven genoemde landen; voor alle gratis listings in Apparel & Accessories

Niet geaccepteerd:

  • Cijfers: Colour 42, RAL 5013
  • Hexcodes: #001F5B
  • Losse letters: N voor navy
  • Verwijzingen naar een afbeelding: see photo
  • Alfanumerieke of aan elkaar geschreven woorden: Navy1, NavyBlue (schrijf Navy Blue)

Omgaan met marketingnamen voor kleuren. Modemerken noemen kleuren zelden "navy". Ze noemen ze "Midnight Regatta". Het kanaal heeft een kleur nodig waarop een shopper zou zoeken; je merk wil zijn eigen naam op de pagina.

Het werkbare compromis:

 

color:       Navy
description: ...available in Midnight Regatta (navy)...

Map marketingnamen in de feed naar standaardnamen en houd de merknaam zichtbaar op de landingspagina en in de beschrijving. Zet niet de marketingnaam in color in de hoop dat het goed gaat: dat verslechtert de matching voor zoekopdrachten met een kleur erin, en die behoren tot de zoekopdrachten met de hoogste koopintentie in kleding.

Producten met meerdere kleuren:

 

color: Navy/White/Grey

Primaire kleur eerst. Google leest de eerste waarde als de dominante kleur.

size

EigenschapWaarde
Max. lengte (Google)100 tekens
Max. lengte (Meta / TikTok)200 tekens
VerplichtVoor kleding en schoenen in de genoemde landen; voor gratis listings
Producten in één maatone_size, OS of OSFA

De regel die ertoe doet: wees specifiek genoeg om eenduidig te zijn, en consistent in de hele catalogus. M is prima als elk product M gebruikt. Een feed die M, Medium, med en M/L door elkaar gebruikt voor hetzelfde begrip, versnippert je variantgroepen en maakt segmentatie op maat onmogelijk.

Voor producten waarbij één dimensie niet volstaat, neem je de onderscheidende dimensies op in de waarde:

 

size: 32/34          (waist/inseam)
size: 15.5/34        (neck/sleeve)
size: 9.5 Wide       (shoe width)
size: 200x140cm      (rugs, bedding)

size_type en size_system

Optioneel, alleen voor kleding, en te weinig gebruikt. Beide verbeteren de matching merkbaar voor shoppers die met deze toevoegingen zoeken.

size_type: maximaal 2 waarden uit: regular, petite, maternity, big, tall, plus.

size_system: een van: US, UK, EU, DE, FR, JP, CN, IT, BR, MEX, AU. Laat je dit weg, dan gaat het kanaal uit van het systeem van het doelland, en dat is de bron van een specifieke en kostbare fout: bij een Turkse retailer die met EU-maten aan Duitsland verkoopt maar geen size_system opgeeft, kunnen maten tegen de verkeerde schaal worden gelezen.

 

xml

<g:size>10</g:size>
<g:size_system>UK</g:size_system>
<g:size_type>regular</g:size_type>

material

Max. 200 tekens bij Google. Primair materiaal eerst, daarna maximaal twee secundaire materialen, gescheiden door /.

 

material: Cotton
material: Leather/Suede
material: Merino Wool/Nylon/Elastane

Alleen verplicht als het je varianten onderscheidt, bijvoorbeeld een tas die in leer en canvas wordt verkocht. Anders optioneel, maar het aanleveren waard: materiaal is een veelgebruikte zoektoevoeging.

pattern

Max. 100 tekens. Vrije tekst die de print of afbeelding beschrijft: Striped, Polka Dot, Paisley, Floral, Herringbone. Dezelfde regel: verplicht als dit is wat varieert.

age_group en gender

Beide zijn groepsconstant. Elke variant in een groep moet dezelfde waarde hebben.

age_group: newborn, infant, toddler, kids, adult, één waarde per product.

gender: male, female, unisex.

Wordt een kledingstuk echt in een heren- en een damesmodel aangeboden, dan zijn dat twee aparte itemgroepen, niet één groep met gemengde gender. De modellen verschillen, de maatvoering verschilt en de shopper kiest tussen producten en niet tussen opties.

Referentietabel

AttribuutLimiet bij GoogleMoet verschillenMoet in de hele groep gelijk zijn
item_group_id50 tekens—✅
item_group_title150 tekens—✅
id50 tekens✅ (altijd uniek)—
title150 tekensAanbevolen—
color100 tekens (40/kleur)Als variatieas—
size100 tekensAls variatieas—
size_type2 waardenOptioneel—
size_systemEnum—Meestal ✅
material200 tekensAls variatieas—
pattern100 tekensAls variatieas—
genderEnum—✅
age_groupEnum—✅
brand70 tekens—✅
google_product_category——✅
price—Mag verschillen—
availabilityEnumMag verschillen—

5. Echte feedvoorbeelden

XML (Google RSS 2.0)

Twee varianten uit een groep van zes. Let op wat verandert en wat niet.

 

xml

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
  <channel>
    <title>Example Store — Product Feed</title>
    <link>https://example.com</link>

    <item>
      <g:id>SWTR-MERINO-CREW-NAV-M</g:id>
      <g:item_group_id>SWTR-MERINO-CREW</g:item_group_id>
      <g:item_group_title>Merino Crew Neck Sweater</g:item_group_title>
      <title>Merino Crew Neck Sweater — Navy, Medium</title>
      <description>Fine-gauge 100% merino wool crew neck. Ribbed cuffs and hem, regular fit. Machine washable on wool cycle.</description>
      <link>https://example.com/merino-crew-sweater?colour=navy&amp;size=m</link>
      <g:image_link>https://cdn.example.com/swtr-merino-navy-1.jpg</g:image_link>
      <g:additional_image_link>https://cdn.example.com/swtr-merino-navy-2.jpg</g:additional_image_link>
      <g:availability>in_stock</g:availability>
      <g:price>89.00 EUR</g:price>
      <g:brand>Example</g:brand>
      <g:gtin>5012345678900</g:gtin>
      <g:mpn>SW-MC-NAV-M</g:mpn>
      <g:condition>new</g:condition>
      <g:google_product_category>1604</g:google_product_category>
      <g:color>Navy</g:color>
      <g:size>M</g:size>
      <g:size_system>EU</g:size_system>
      <g:size_type>regular</g:size_type>
      <g:material>Merino Wool</g:material>
      <g:gender>male</g:gender>
      <g:age_group>adult</g:age_group>
      <g:custom_label_0>core</g:custom_label_0>
      <g:custom_label_1>full-size-run</g:custom_label_1>
    </item>

    <item>
      <g:id>SWTR-MERINO-CREW-CHR-L</g:id>
      <g:item_group_id>SWTR-MERINO-CREW</g:item_group_id>
      <g:item_group_title>Merino Crew Neck Sweater</g:item_group_title>
      <title>Merino Crew Neck Sweater — Charcoal, Large</title>
      <description>Fine-gauge 100% merino wool crew neck. Ribbed cuffs and hem, regular fit. Machine washable on wool cycle.</description>
      <link>https://example.com/merino-crew-sweater?colour=charcoal&amp;size=l</link>
      <g:image_link>https://cdn.example.com/swtr-merino-charcoal-1.jpg</g:image_link>
      <g:availability>out_of_stock</g:availability>
      <g:price>89.00 EUR</g:price>
      <g:brand>Example</g:brand>
      <g:gtin>5012345678931</g:gtin>
      <g:mpn>SW-MC-CHR-L</g:mpn>
      <g:condition>new</g:condition>
      <g:google_product_category>1604</g:google_product_category>
      <g:color>Charcoal</g:color>
      <g:size>L</g:size>
      <g:size_system>EU</g:size_system>
      <g:size_type>regular</g:size_type>
      <g:material>Merino Wool</g:material>
      <g:gender>male</g:gender>
      <g:age_group>adult</g:age_group>
      <g:custom_label_0>core</g:custom_label_0>
      <g:custom_label_1>broken-size</g:custom_label_1>
    </item>

  </channel>
</rss>

Vier dingen die het benoemen waard zijn:

  1. item_group_id en item_group_title zijn identiek; id en title niet.
  2. link bevat deeplinkparameters, zodat de advertentie op de juiste, vooraf geselecteerde staat landt. De & is ge-escaped als &amp;: verplicht in XML en een veelvoorkomende oorzaak van fouten bij het inlezen.
  3. image_link is variantspecifiek. Beide navy-rijen verwijzen naar de navy-foto. Eén hoofdafbeelding voor alle kleuren meesturen is na ontbrekende groeps-ID's de op een na meest voorkomende variantfout.
  4. De uitverkochte rij is getagd via custom_label_1, zodat je hem kunt uitsluiten of er lager op kunt bieden zonder hem uit de feed te verwijderen.

CSV / TSV

Dezelfde data, plat gemaakt. Koprij plus twee varianten:

 

csv

id,item_group_id,item_group_title,title,description,link,image_link,availability,price,brand,gtin,condition,google_product_category,color,size,size_system,material,gender,age_group,custom_label_0
SWTR-MERINO-CREW-NAV-M,SWTR-MERINO-CREW,Merino Crew Neck Sweater,"Merino Crew Neck Sweater — Navy, Medium","Fine-gauge 100% merino wool crew neck.",https://example.com/merino-crew-sweater?colour=navy&size=m,https://cdn.example.com/swtr-merino-navy-1.jpg,in_stock,89.00 EUR,Example,5012345678900,new,1604,Navy,M,EU,Merino Wool,male,adult,core
SWTR-MERINO-CREW-CHR-L,SWTR-MERINO-CREW,Merino Crew Neck Sweater,"Merino Crew Neck Sweater — Charcoal, Large","Fine-gauge 100% merino wool crew neck.",https://example.com/merino-crew-sweater?colour=charcoal&size=l,https://cdn.example.com/swtr-merino-charcoal-1.jpg,out_of_stock,89.00 EUR,Example,5012345678931,new,1604,Charcoal,L,EU,Merino Wool,male,adult,core

Bij CSV gaat in de praktijk het meest mis, omdat komma's in titels en beschrijvingen tussen aanhalingstekens moeten staan en aanhalingstekens binnen zulke velden moeten worden ge-escaped. Bevatten je titels komma's (en producttitels met kleur en maat doen dat bijna altijd), gebruik dan TSV. Tabs komen vrijwel nooit voor in productdata, en een hele categorie inleesbugs verdwijnt.

JSON

Voor verwerking via een API:

 

json

{
  "products": [
    {
      "id": "SWTR-MERINO-CREW-NAV-M",
      "item_group_id": "SWTR-MERINO-CREW",
      "item_group_title": "Merino Crew Neck Sweater",
      "title": "Merino Crew Neck Sweater — Navy, Medium",
      "link": "https://example.com/merino-crew-sweater?colour=navy&size=m",
      "image_link": "https://cdn.example.com/swtr-merino-navy-1.jpg",
      "availability": "in_stock",
      "price": { "value": "89.00", "currency": "EUR" },
      "brand": "Example",
      "gtin": "5012345678900",
      "condition": "new",
      "google_product_category": "1604",
      "variant_attributes": {
        "color": "Navy",
        "size": "M",
        "size_system": "EU",
        "material": "Merino Wool"
      },
      "gender": "male",
      "age_group": "adult"
    }
  ]
}

Een volledige maatreeks

Zes varianten (twee kleuren × drie maten) met het zichtbare ID-patroon:

iditem_group_idcolorsizeavailability
SWTR-MC-NAV-SSWTR-MERINO-CREWNavySin_stock
SWTR-MC-NAV-MSWTR-MERINO-CREWNavyMin_stock
SWTR-MC-NAV-LSWTR-MERINO-CREWNavyLin_stock
SWTR-MC-CHR-SSWTR-MERINO-CREWCharcoalSout_of_stock
SWTR-MC-CHR-MSWTR-MERINO-CREWCharcoalMin_stock
SWTR-MC-CHR-LSWTR-MERINO-CREWCharcoalLout_of_stock

Van charcoal is nog één van de drie maten over. Hoofdstuk 9 behandelt wat je daaraan doet.

6. Per kanaal

Het concept is universeel. De uitvoering niet. Zo verwacht elke grote bestemming varianten, en hier verschilt elk kanaal.

Google Shopping / Merchant Center

Het meest voorschrijvend, en de referentie-implementatie waarvan de meeste andere kanalen lenen.

  • item_group_id is verplicht voor gratis listings, en voor Shopping-advertenties in Brazilië, Frankrijk, Duitsland, Japan, het VK en de VS, zodra er varianten worden aangeleverd.
  • Variantbepalende attributen moeten zijn ingevuld: color en size zijn in die markten verplicht voor kleding.
  • gender en age_group zijn verplicht voor kleding en moeten in de hele groep consistent zijn.
  • De landingspagina moet zichtbaar overeenkomen met de aangeleverde variantwaarden, anders riskeer je een afkeuring wegens Mismatched value (page crawl).
  • Elke variant concurreert zelfstandig in de veiling. Google kiest welk lid van een groep wordt getoond voor een bepaalde zoekopdracht, dus een onvolledige groep betekent een zwakkere pool van kandidaten.
  • image_link moet voor kleding minimaal 500×500 pixels zijn. Dat minimum wordt gehandhaafd vanaf 31 januari 2027, dus het is verstandig dit nu al te controleren in plaats van op het laatste moment.

Praktische opmerking: Merchant Center rapporteert op variantniveau (id), niet op groepsniveau. Om een product goed te beoordelen, moet je zelf aggregeren op item_group_id. Dat is veel makkelijker als de groeps-ID schoon en stabiel is.

Meta (Facebook en Instagram)

Meta gebruikt dezelfde veldnaam met andere beperkingen en een wezenlijk ander weergavemodel.

  • item_group_id staat maximaal 100 tekens toe en is hoofdlettergevoelig.
  • color en size staan maximaal 200 tekens toe.
  • Beschikbaarheidswaarden gebruiken spaties, geen underscores: in stock, niet in_stock. Dit ene verschil breekt meer Meta-feeds dan wat dan ook, vooral als een Google-feed rechtstreeks wordt hergebruikt.
  • In Shops en op productdetailweergaven wordt een correct gegroepeerde set getoond als één product met een variantkiezer, in plaats van als meerdere bijna identieke listings.
  • Advantage+-catalogusadvertenties gebruiken de groep om te voorkomen dat een gebruiker zes versies van dezelfde trui in één carrousel ziet. Een ongegroepeerde catalogus levert zichtbaar repetitieve advertenties en verspilde vertoningen op.
  • Rapportage op variantniveau in Commerce Manager hangt af van correcte groepering.

Praktische opmerking: stuur Meta niet ongewijzigd je Google-feed. Transformeer op zijn minst availability en controleer de tekenlimieten. De meeste feedplatforms, waaronder Feedance, doen dit als transformatie op kanaalniveau, zodat de brondata ongemoeid blijft.

TikTok

  • item_group_id staat maximaal 150 tekens toe.
  • sku_id is de unieke identificatie per variant: elke variantrij heeft een eigen waarde nodig.
  • color en size staan maximaal 200 tekens toe.
  • title staat maximaal 255 tekens toe, description maximaal 10.000; google_product_category wordt verwacht.
  • TikTok is het strengste kanaal als het gaat om variantspecifieke beelden. Productkaarten tonen een variantkiezer, en varianten die één generieke afbeelding delen, presteren aantoonbaar slechter. Als je ergens in je beeldpipeline een hoek afsnijdt, doe het dan niet hier.

Pinterest

  • Volgt het model van Google nauwgezet; item_group_id groepeert varianten.
  • Pinterest toont varianten binnen één Product Pin met selecteerbare opties.
  • Beeldkwaliteit en verticale beeldverhoudingen tellen onevenredig zwaar: Pinterest is een platform voor visuele ontdekking, en variantafbeeldingen die niet onderscheidend zijn, worden simpelweg niet opgeslagen.

Amazon

Amazon gebruikt item_group_id niet, en wie het tegendeel aanneemt, verspilt veel werk.

Amazon gebruikt een expliciet parent/child-relatiemodel:

  • Een parent-ASIN wordt aangemaakt als niet-koopbare listing.
  • Elke child-ASIN verwijst naar de parent via de velden parent_sku / parent_child.
  • Er moet een variation theme worden opgegeven: SizeColor, Size, Color, SizeName-ColorName enzovoort, afhankelijk van de categorie.
  • Het theme moet geldig zijn voor die specifieke categorie; dezelfde themenaam is niet overal beschikbaar.

Exporteer je vanuit één bron naar zowel Google als Amazon, zie dit dan als een echte transformatie en niet als het hernoemen van een veld. Je feedlaag moet de parent-listing opbouwen, het theme toekennen en de children eraan koppelen.

Regionale marktplaatsen en prijsvergelijkers

Turkse kanalen en kanalen in de bredere MENA-regio hebben elk hun eigen conventies, en die maken in deze markten vaak het verschil tussen een werkende en een kapotte catalogus.

  • Trendyol gebruikt een eigen parent/child-model met een verplichte categoriespecifieke attribuutset. Kleur en maat zijn aparte gestructureerde velden, en de lijsten met verplichte attributen verschillen per categorie.
  • Akakçe en Cimri zijn prijsvergelijkers. Ze verwachten doorgaans één rij per koopbare SKU, en dubbele, bijna identieke rijen worden vaak weggefilterd. Een volledige maatreeks zonder onderscheidende data meesturen kan de zichtbaarheid dus eerder verlagen dan verhogen.
  • Hepsiburada en N11 definiëren elk hun eigen sleutels voor variantgroepering en verplichte attributen.

Dit is het gebied waar generieke, wereldwijde feedtools het vaakst tekortschieten, en waar een verkeerd gemapt attribuut ongemerkt een hele categorie van een marktplaats haalt.

Vergelijking

 GoogleMetaTikTokPinterestAmazon
Groeperingssleutelitem_group_iditem_group_iditem_group_iditem_group_idParent-ASIN
Max. lengte5010015050n.v.t.
HoofdlettergevoeligNeeJaJaNeen.v.t.
Syntaxis voor beschikbaarheidin_stockin stockin_stockin stockHoeveelheid
VariantafbeeldingenAanbevolenAanbevolenCruciaalCruciaalVerplicht
Expliciet theme nodigNeeNeeNeeNeeJa
Rapportage op variantniveauJaJaJaBeperktJa

7. Splitsen of samenvoegen?

Elke variant meesturen is de standaardaanbeveling, maar die is niet altijd juist. De echte vraag is of de variatie verandert wat de shopper wil.

Stuur elke variant mee als…

  • De variatie de koopbeslissing is. Kleding, schoenen, alles waarbij de verkeerde maat geen verkoop oplevert.
  • De voorraad per variant flink verschilt. Een product adverteren waarvan alleen maat 3XL nog over is, is verspild budget.
  • De prijs per variant verschilt. €89 tonen terwijl de gekozen optie €119 kost, levert een prijsmismatch en een boze klant op.
  • De zoekvraag variantspecifiek is. Mensen zoeken op "navy merino trui medium". Daarop kun je niet ranken zonder het aan te leveren.

Voeg samen tot één representatieve variant als…

  • De catalogus erg groot en grotendeels homogeen is. Een bouwmarkt met 200.000 SKU's waarvan 60% triviale lengtevariaties zijn, wint weinig bij volledige uitsplitsing en betaalt daarvoor in feedverwerking en campagnecomplexiteit.
  • Het kanaal bijna-duplicaten bestraft. Verschillende prijsvergelijkers filteren repetitieve rijen; een volledige maatreeks kan de zichtbaarheid verlagen.
  • De variatie geen invloed heeft op prijs, afbeelding of beschikbaarheid. Zijn alle twaalf varianten op elk commercieel relevant punt identiek, dan zorgen twaalf rijen voor ruis in plaats van signaal.

Kies bij samenvoegen de representatieve variant bewust: de bestverkopende variant die op voorraad is, niet de eerste rij op alfabet. Juist hier bewijst prestatiedata zijn waarde in de feed: GA4- of platformdata kan de representatieve variant automatisch kiezen in plaats van het aan de sorteervolgorde over te laten.

Een middenweg

Splits op de as die de beslissing bepaalt; voeg samen op de as die dat niet doet.

Bij schoenen betekent dat meestal één rij per kleur, met samengevoegde maten: kleur is de as waarop wordt ontdekt, maat is de pascheck die op de pagina plaatsvindt. Bij een product waarbij capaciteit de prijs bepaalt, splits je op capaciteit en voeg je samen op kleur.

8. De 12 meest voorkomende variantfouten

#SymptoomOorzaakOplossing
1Varianten verschijnen als aparte, losstaande productenitem_group_id ontbreekt of is uniek per rijVul met de parent-SKU; controleer of die in de hele groep terugkomt
2Sommige varianten ontbreken volledig op het kanaalDubbele id-waarden: latere rijen worden ongemerkt weggelatenDwing uniciteit af bij de export; voeg een controle op duplicaten toe
3Afkeuring wegens "Mismatched value (page crawl)"De landingspagina toont een andere kleur/maat/prijs dan aangeleverdVoeg deeplinkparameters toe; zorg dat de pagina de gekozen staat server-side weergeeft
4Alle varianten tonen dezelfde fotoEén hoofd-image_link wordt hergebruiktMap variantspecifieke afbeeldingen; val alleen terug op de hoofdafbeelding als er geen variantafbeelding is
5Klikken op advertenties landen op uitverkochte optiesavailability wordt niet per variant gesynchroniseerdVerhoog de updatefrequentie; sluit out_of_stock uit van actieve campagnes
6color wordt afgewezenHexcode, getal, losse letter of aan elkaar geschreven woordMap naar gewone kleurnamen; scheid meerdere kleuren met /
7Maatfilters werken niet; zoekopdrachten op maat matchen nietInconsistente maatwaarden in de catalogus (M / Medium / med)Normaliseer met een mappingtabel die op feedniveau wordt toegepast
8De groep valt bij Meta uiteen, maar bij Google nietInconsistent gebruik van hoofdletters in item_group_idDwing voor het hele veld één schrijfwijze af
9Meta wijst de hele feed afin_stock gebruikt waar Meta in stock verwachtTransformeer availability per kanaal
10Groep afgewezen wegens inconsistente attributengender of age_group verschilt binnen de groepDeze zijn groepsconstant; splits heren- en damesmodellen in aparte groepen
11Prestatiehistorie wordt bij elke synchronisatie geresetitem_group_id wordt bij elke export opnieuw gegenereerdLeid af van een stabiel bronveld, nooit van de rijvolgorde of een hash
12XML-feed kan niet worden ingelezenNiet-ge-escapete & in deeplink-URL'sEscape als &amp;; valideer de XML vóór het publiceren

Fouten 1, 2, 4 en 11 zijn verantwoordelijk voor het overgrote deel van wat we in echte audits tegenkomen. Geen ervan is moeilijk; ze zijn allemaal onzichtbaar totdat iemand gaat zoeken.

9. Gebroken maatreeksen en voorraadgezondheid

Een gebroken maatreeks is een product waarvan de groep technisch live staat maar in de praktijk onverkoopbaar is: een trui die alleen nog in XS en 3XL verkrijgbaar is, een schoen waarvan nog twee van de negen maten over zijn.

Dat is belangrijker dan het lijkt. Klikt een shopper op een advertentie voor een product en blijkt zijn maat niet beschikbaar, dan heb je betaald voor een klik die niet kon converteren, en heb je daarbij goodwill voor je merk verspeeld. Op schaal kunnen producten met gebroken maatreeksen een flink deel van het budget opslokken, terwijl ze vrijwel niets aan omzet bijdragen.

Opsporen

Bereken per item_group_id:

 

size_availability_ratio = in_stock_variants / total_variants

Handel vervolgens op basis van drempels. Een werkbaar startpunt:

RatioInterpretatieActie
> 0.7GezondNormaal adverteren
0.4 – 0.7Dunner wordendBiedingen verlagen; in de gaten houden
0.2 – 0.4GebrokenUitsluiten van prospecting; alleen retargeting
< 0.2Feitelijk uitverkochtVolledig uitsluiten

Weeg dit naar vraag, niet alleen naar aantal. Het wegvallen van XXS en XXL is veel minder erg dan het wegvallen van M en L, die doorgaans het grootste deel van het volume vormen. Een ratio die alle maten gelijk behandelt, reageert te zwak op het verlies van je kernmaten.

Ernaar handelen

De schoonste implementatie tagt de situatie in de feed in plaats van het product te verwijderen:

 

xml

<g:custom_label_1>broken-size</g:custom_label_1>

Taggen in plaats van verwijderen bewaart de historie van het product in het kanaal en maakt het mogelijk om direct opnieuw te activeren zodra de voorraad terug is. Verwijderen en opnieuw toevoegen reset het leerproces.

Twee verdere verfijningen die het bouwen waard zijn:

  • Koppel terug naar merchandising. Een terugkerende lijst met gebroken maatreeksen is een inkoopsignaal, niet alleen een advertentieprobleem.
  • Controleer bij elke synchronisatie opnieuw. Voorraad beweegt; de tag moet meebewegen. Een statische lijst met gebroken maatreeksen is erger dan geen lijst, omdat die producten onderdrukt die inmiddels zijn aangevuld.

10. Varianten gebruiken voor campagnesegmentatie

Zodra varianten correct zijn opgebouwd, wordt de data een segmentatielaag, misschien wel de toepassing van een schone variantfeed met het hoogste rendement.

Google biedt vijf custom_label-velden (0–4). Ze accepteren willekeurige waarden en bestaan puur voor je eigen campagnelogica. Variantdata is ideale input.

Een werkbaar schema

LabelDimensieVoorbeeldwaarden
custom_label_0Margeklassehigh-margin, standard, clearance
custom_label_1Voorraadgezondheidfull-size-run, thinning, broken-size
custom_label_2Prestatieklassebestseller, steady, long-tail
custom_label_3Seizoenss26, aw25, core, carryover
custom_label_4Prijsklasseunder-50, 50-100, 100-200, over-200

Met deze labels op hun plek wordt de campagnelogica eenvoudig:

  • Bied hoger op bestseller + full-size-run + high-margin
  • Sluit broken-size uit van prospecting
  • Geef clearance een eigen campagne met een agressieve tROAS
  • Isoleer ss26 wanneer het seizoen begint

Performance Max en Advantage+

Beide zijn grotendeels geautomatiseerd, waardoor segmentatie op feedniveau belangrijker wordt in plaats van minder belangrijk. Je hebt geen controle meer over het bieden op zoekwoordniveau, dus de feed wordt je belangrijkste hefboom om uitgaven te sturen.

In Performance Max bepalen custom labels de structuur van assetgroepen en listinggroepen. Eén allesomvattende assetgroep opsplitsen in groepen op basis van marge of voorraadgezondheid is een van de weinige overgebleven structurele hefbomen, en die hangt volledig af van labels die met echte data zijn gevuld.

Bij Advantage+-catalogusadvertenties voorkomt correcte groepering dat de carrousel volloopt met zes tinten van dezelfde trui, en met productsets die zijn gedefinieerd op basis van variantattributen kun je je voorraad voor prospecting en retargeting scheiden.

Labels verrijken met prestatiedata

Statische labels verouderen. Een bestseller-label dat vorig seizoen is toegekend, is dit seizoen misinformatie.

De sterkere implementatie berekent labels bij elke feedsynchronisatie opnieuw op basis van live prestatiedata: GA4-omzet, conversieratio, aantal weergaven. Een product dat niet meer verkoopt, valt automatisch uit bestseller; een product dat gaat verkopen, komt erin. Dit is in de praktijk een kernonderdeel van feedverrijking, en het maakt het verschil tussen labels die budget sturen en labels die alleen het vorige kwartaal beschrijven.

11. Variantprestaties meten

Bij data op variantniveau valt de meeste rapportage ongemerkt uit elkaar.

Het aggregatieprobleem. Merchant Center en Ads rapporteren op id-niveau. Een trui in 20 varianten verschijnt als 20 rijen, elk met een fractie van het volume en geen enkele afzonderlijk significant. Elke conclusie op basis van één variantrij is waarschijnlijk ruis.

Analyseer altijd op twee niveaus:

  1. Groepsniveau (item_group_id): werkt dit product? Tel uitgaven, conversies en omzet van alle leden bij elkaar op.
  2. Variantniveau (id): welke opties werken? Welke kleuren verkopen, welke maten raken het eerst op, welke combinaties lopen nooit?

Op het tweede niveau zitten de interessante bevindingen. Het beantwoordt vragen waar merchandising om geeft: verkoopt navy drie keer zo goed als charcoal? Converteren varianten in maat L beter omdat ze altijd op voorraad zijn? Trekt één kleur het gemiddelde van de groep omlaag?

Metrics die het per groep waard zijn om te volgen:

MetricWaarom
Ratio van beschikbare matenVroege indicator van verspild budget
Variantdekking in het kanaalAangeleverd tegenover daadwerkelijk goedgekeurd: in dat verschil verstoppen zich de problemen
Impression share per variantLaat zien welke opties het kanaal daadwerkelijk bevoordeelt
Conversieratio per kleurSignaal voor merchandising en inkoop
Afkeuringspercentage per groepSpoort systematische attribuutfouten vroeg op

Een opmerking over attributie. Een shopper ziet vaak een advertentie voor de ene variant en koopt een andere: klikt op navy, koopt charcoal. ROAS op variantniveau letterlijk nemen leidt daardoor tot verkeerde toewijzing. Beoordeel producten op groepsniveau; gebruik variantdata om gedrag te begrijpen, niet om biedbeslissingen te nemen op basis van kleine steekproeven.

12. Checklist vóór de lancering

Loop deze na voordat je een variantfeed live zet, en na elke structurele wijziging.

Structuur

  •  Elke variant heeft een unieke id
  •  Elk lid van een groep deelt een identieke item_group_id
  •  item_group_id is afgeleid van een stabiel bronveld en verandert niet tussen exports
  •  item_group_id gebruikt in de hele feed consistente hoofdletters of kleine letters
  •  Elk lid verschilt in ten minste één variantbepalend attribuut
  •  item_group_title is aanwezig en identiek in de hele groep

Attributen

  •  color gebruikt gewone kleurnamen, geen hexcodes, getallen of losse letters
  •  Meerdere kleuren worden gescheiden door /, primaire kleur eerst
  •  size-waarden zijn genormaliseerd in de hele catalogus
  •  size_system is opgegeven waar je in meerdere maatregio's verkoopt
  •  gender en age_group zijn identiek binnen elke groep
  •  material en pattern zijn ingevuld waar ze de variatie bepalen

Links en afbeeldingen

  •  De link van elke variant leidt naar de juiste, vooraf geselecteerde staat
  •  & is in XML ge-escaped als &amp;
  •  image_link is variantspecifiek en geen gedeelde hoofdafbeelding
  •  Afbeeldingen voldoen aan de minimale afmetingen van elk kanaal

Transformaties per kanaal

  •  De syntaxis voor availability is per kanaal aangepast (in_stock tegenover in stock)
  •  Tekenlimieten worden per kanaal gerespecteerd
  •  Exports naar Amazon bouwen parent-listings op en geven een geldig variation theme op
  •  Attribuutsets voor regionale marktplaatsen zijn per categorie gemapt

Operatie

  •  De updatefrequentie past bij hoe snel de voorraad werkelijk beweegt
  •  Detectie van gebroken maatreeksen draait bij elke synchronisatie
  •  De controle op dubbele id's draait vóór de export
  •  De feed valideert als correcte XML/CSV vóór het publiceren
  •  Er zijn waarschuwingen ingesteld voor plotselinge dalingen in het aantal producten

13. Veelgestelde vragen

Moet ik echt elke variant aanleveren? Niet altijd, maar bij kleding en schoenen, waar maat en kleur de koopbeslissing zijn, meestal wel. Bij zeer grote, homogene catalogi of kanalen die bijna-duplicaten wegfilteren, kan één goed gekozen representatieve variant per groep beter presteren. Kies die representatieve variant op basis van verkoopprestaties en voorraad, niet op alfabet.

Wat gebeurt er als ik item_group_id weglaat? Elke variant wordt dan behandeld als een losstaand product. Je verliest de variantkiezer op het bestemmingsplatform, advertenties worden repetitief, rapportage op variantniveau werkt niet meer en bij Google voldoe je mogelijk niet aan een vereiste: item_group_id is verplicht voor gratis listings en voor Shopping-advertenties in verschillende grote markten als er varianten worden aangeleverd.

Mogen varianten verschillende prijzen hebben? Ja. Prijs is geen variantbepalend attribuut, maar mag per variant terecht verschillen: grotere maten kosten vaak meer. De aangeleverde prijs moet overeenkomen met wat de landingspagina voor die specifieke variant toont.

Moeten uitverkochte varianten in de feed blijven? Over het algemeen wel. Laat ze staan met availability: out_of_stock in plaats van ze te verwijderen. Verwijderen en opnieuw toevoegen reset de historie van het artikel in het kanaal. Sluit ze in plaats daarvan uit van actieve campagnes met een regel of custom label.

Kan één product tot twee groepen behoren? Nee. item_group_id accepteert één waarde per artikel. Hoort een product echt bij twee conceptuele groepen, dan heb je een probleem in je merchandisingtaxonomie dat je eerder in de keten moet oplossen.

Heb ik per kanaal aparte item_group_id-waarden nodig? Nee, en dat moet je ook niet doen. Gebruik overal dezelfde logische groepering. Wat per kanaal verschilt, is de transformatie die erop wordt toegepast: tekenlimieten, hoofdletters, syntaxis. Houd één leidende bron aan en pas aan bij de export.

Hoe ga ik om met producten die echt maar één maat hebben? Lever size aan als one_size, OS of OSFA. Laat het veld voor kleding niet leeg in markten waar size verplicht is.

Heren- en damesversies van hetzelfde ontwerp: één groep of twee? Twee. gender moet in een groep identiek zijn. Andere modellen en een andere maatvoering maken het vanuit het perspectief van de shopper verschillende producten.

Wat gaat er in de praktijk het vaakst mis? In onze audits: gedeelde hoofdafbeeldingen voor verschillende kleurvarianten, item_group_id-waarden die bij elke export opnieuw worden gegenereerd, en de syntaxis van availability die ongewijzigd van een Google-feed naar Meta wordt meegenomen. Alle drie zijn onzichtbaar in de interface en komen pas aan het licht als onverklaarbare ondermaatse prestaties.

Waar je nu staat

Variantfeeds belonen precisie op een manier die in de meeste digitale marketing ontbreekt. Er komt geen creatief oordeel kijken bij item_group_id: die is stabiel en gedeeld, of niet. Kleurwaarden volgen de specificatie, of ze worden afgewezen. Afbeeldingen passen bij de variant, of de klik was verspild.

Dat is het goede nieuws: dit is een oplosbaar probleem met een duidelijk antwoord. Het werk zit in het onderhouden, want catalogi veranderen dagelijks, voorraad beweegt elk uur en elk kanaal past zijn specificatie volgens een eigen planning aan.

Bedrijven die dit goed doen, behandelen de variantfeed als infrastructuur en niet als bestand. Ze leiden groeps-ID's af van stabiele brondata, normaliseren attributen één keer aan de bron, transformeren per kanaal bij de export, berekenen de voorraadgezondheid bij elke synchronisatie opnieuw en krijgen een waarschuwing als er iets onverwachts verandert.

Precies voor die laag is Feedance gebouwd: feedregels om attributen aan de bron te normaliseren, Broken Size-detectie die bij elke synchronisatie opnieuw rekent, GA4-verrijking om prestatielabels actueel te houden, en kanaalexports die voor elk van meer dan 200 bestemmingen de juiste transformatie toepassen zonder je brondata aan te raken.

Wil je weten hoe je eigen variantstructuur ervoor staat voordat je iets verandert? Onze gratis tool voor feedaudits beoordeelt een bestaande feed kosteloos op volledigheid, datakwaliteit en technische gezondheid, inclusief de groepering van varianten.

Wil je dat iemand anders ook naar je feed kijkt? We nemen hem samen met je door en laten zien waar de gaten zitten, nog voor je volgende inzending.
Doe een gratis audit
Cagdas Polat
Geschreven door
Cagdas Polat

Medeoprichter van Feedance, waar hij zijn achtergrond als computeringenieur en marketeer inzet om analytische inzichten te leveren. Met een sterke focus op het omzetten van data in concrete strategieën zet hij zich in om merken te helpen aanzienlijk te groeien in het digitale landschap.

LinkedIn

Zie welke
producten opbrengen.

Koppel je feed en GA4. We tonen Product Score, 4T, Price War en Broken Size op je eigen catalogus.