hello@newnorth.nl+31 (0) 85 401 31 62
/Journal

De GA4 items-array: verplichte tegenover optionele velden

GidsE-commerce2026.05.25
Freek Kampen
Freek KampenMede-oprichter, New North Digital

Eén parameter bepaalt stilletjes of je e-commercerapporten werken. Wat je moet meesturen, wat de moeite waard is, en de opmaakfouten die we het vaakst zien.

Waar de items-array zit

Elk GA4 e-commerce-event, van view_item via add_to_cart en begin_checkout tot purchase en refund, draagt een items-array in zijn parameters. Het is een lijst met productobjecten, één per regel in de bestelling.

window.dataLayer.push({
  event: 'purchase',
  ecommerce: {
    transaction_id: 'ORD-12345',
    value: 89.95,
    currency: 'EUR',
    items: [
      { item_id: 'SKU-ROOD-M', item_name: 'Rood T-shirt',
        price: 29.95, quantity: 1 },
      { item_id: 'SKU-BLAUW-L', item_name: 'Blauwe jeans',
        price: 60.00, quantity: 1 }
    ]
  }
});

Staat het goed, dan krijg je omzet op itemniveau, productprestaties en detail in je conversiepaden. Staat het net verkeerd, dan verdwijnen de items uit je rapporten terwijl de transactie gewoon wordt vastgelegd. Precies daarom valt het niet op.

Verplichte velden

Officieel eist GA4 er één: item_id, je SKU of productidentificatie, óf item_name, de leesbare productnaam.

Stuur ze in de praktijk allebei. GA4 gebruikt item_id als sleutel om op te koppelen en te aggregeren, terwijl item_name is wat je in je rapporten ziet. Alleen item_id levert rapporten vol onleesbare SKU's op; alleen item_name breekt de koppeling.

Allebei weglaten is het echte probleem. Ontbreken ze op een itemobject, dan gooit GA4 dat item geruisloos weg, en bij sommige events de hele array. De aankoop wordt gewoon geregistreerd, de omzet klopt, en de itemuitsplitsing is leeg.

Velden die je sowieso meestuurt

Niet verplicht, maar elke serieuze opzet stuurt ze mee. Weglaten beperkt je rapporten zonder dat het iets oplevert.

  • price, de stukprijs als getal, niet als tekst. GA4 rekent item_revenue uit als prijs maal aantal.
  • quantity, het aantal van dit item. Ontbreekt het, dan wordt het 1, en dat klopt niet zodra iemand er meerdere koopt.
  • currency, de ISO 4217-code. Zet die op eventniveau, niet per item, tenzij je echt in meerdere valuta afrekent.

Over btw: de specificatie van Google zegt dat value en price exclusief btw en verzendkosten horen te zijn. Vrijwel elke echte implementatie stuurt bedragen inclusief btw door, simpelweg omdat CMS-datalayers zelden schone bedragen per item zonder btw teruggeven. Consistentie over je events heen telt zwaarder dan de specificatie letterlijk volgen.

Optionele velden die hun plek verdienen

De volgende laag maakt segmentatie en productrapportage mogelijk. Stuur wat aansluit op waar je echt op rapporteert, niet alles.

  • item_brand voor catalogi met meerdere merken, zodat je per merk kunt uitsplitsen
  • item_category tot en met item_category5, de niveaus van je taxonomie zoals je CMS ze kent
  • item_variant voor maat, kleur of variant, consistent met hoe je CMS ze opslaat
  • item_list_id en item_list_name, van welke collectiepagina, zoekresultaat of aanbevelingsblok het item kwam
  • affiliation om te zien uit welke winkel de bestelling kwam
  • coupon en discount, de gebruikte code en het kortingsbedrag per stuk als getal
  • location_id, de fysieke winkel bij omnichannel

De fouten die we het vaakst zien

Prijs en aantal als tekst. GA4 accepteert "19,95" maar telt het niet correct op. Stuur getallen zonder aanhalingstekens.

Valuta per item. Mag, maar maakt alles verderop ingewikkelder zonder reden. Zet het één keer op het event.

Verschillende item_id's tussen events. Hetzelfde product moet door de hele klantreis dezelfde id hebben. Stuurt view_item 12345 en purchase SKU-12345, dan ziet GA4 twee producten en klopt je conversiepercentage niet meer.

Geen items-array bij purchase. Veelvoorkomend bij Shopify-thema's die een eigen purchase-push doen zonder array. Transactie en omzet komen binnen, de itemtabel blijft leeg.

Items als object in plaats van array. Een sjabloonfout. Het moet een JSON-array zijn, geen object met nummers als sleutel. In de datalayer-preview lijken die twee sprekend op elkaar en GA4 negeert de tweede.

Hoe je het controleert

De snelste controle is DebugView op een echte testbestelling:

  1. Zet debug mode aan, het makkelijkst met de GA Debugger-extensie.
  2. Open GA4 DebugView in een ander tabblad.
  3. Plaats een testbestelling.
  4. Klik het purchase-event open en bekijk de parameters.
  5. Controleer of items een lijst objecten bevat, elk met item_id, item_name, price en quantity.

Ontbreekt items of is het leeg, dan zit het niet in je push. Staat het er wel maar mist bij elk object hetzelfde veld, dan heb je een gat in je sjabloon gevonden.

Waar het op neerkomt

Verplicht: item_id en item_name. Stuur ze allebei, ook al is er formeel maar één nodig.

Aanbevolen: price, quantity en currency, want zonder die drie blijven je omzetrapporten op itemniveau leeg.

Optioneel: kies uit item_brand, item_category, item_variant en item_list_* op basis van waar je echt op rapporteert. Velden die je nooit gebruikt zijn ruis.

De grootste fout blijft een ontbrekende items-array bij purchase. Dertig seconden in DebugView haalt hem eruit.

Wil je hierover doorpraten?

Praten over jouw data?

Vertel ons over je stack, je doelen en de data die je nu mist.

Duurt 1 minuut