Naar de inhoud

GA4 e-commerce van begin tot eind via je servercontainer

Zodra GA4 via je servercontainer loopt, is e-commerce vooral werk in de webcontainer. Je site pusht elke winkelactie naar de dataLayer, één GA4-eventtag stuurt die naar https://k7q2x.example.com, en de server-side GA4-tag die je al hebt stuurt die door met alle producten erin. In deze les stel je de events, de tag en de trigger in, voorkom je dat de aankoop dubbel wordt geteld en controleer je de data onderweg.

Gemiddeld 13 min lezen

Wat je leert

  • Weten welke aanbevolen e-commerce-events GA4 verwacht en welke parameters elk event nodig heeft.
  • Schone e-commercedata naar de dataLayer pushen en eerst het vorige object leegmaken.
  • Elk e-commerce-event versturen met één GA4-eventtag en één Custom Event-trigger.
  • purchase één keer per bestelling laten vuren en dat controleren in server-preview, DebugView en de Monetization-rapporten.

Voordat je begint

  • GA4 in de webcontainer die naar je servercontainer stuurt (les 3).
  • De server-side GA4-tag met als trigger Client Name equals GA4 (les 4).
  • Een developer of een shopplugin die data naar de dataLayer kan pushen op product-, winkelwagen- en checkoutpagina's.

02 Push de data naar de dataLayer

Elke push heeft twee delen: eerst ecommerce: null, dan het event met een nieuw ecommerce-object. De dataLayer voegt objecten samen, dus zonder die reset kunnen de items van het vorige event in het volgende terechtkomen, bijvoorbeeld een product uit view_item dat in add_to_cart belandt.

js
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({
  event: 'view_item',
  ecommerce: {
    currency: 'EUR',
    value: 129.90,
    items: [{ item_id: 'SKU-1', item_name: 'Shoes', item_brand: 'Acme', item_category: 'Footwear', price: 129.90, quantity: 1 }]
  }
});
js
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({
  event: 'add_to_cart',
  ecommerce: {
    currency: 'EUR',
    value: 129.90,
    items: [{ item_id: 'SKU-1', item_name: 'Shoes', price: 129.90, quantity: 1 }]
  }
});

De purchase-push voegt transaction_id en de volledige orderwaarde toe. Render hem op de bedankpagina met de echte bestelgegevens uit je shop.

js
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({
  event: 'purchase',
  ecommerce: {
    transaction_id: 'T-10293',
    value: 129.90,
    currency: 'EUR',
    items: [{ item_id: 'SKU-1', item_name: 'Shoes', price: 129.90, quantity: 1 }]
  }
});

03 Eén GA4-eventtag voor alle e-commerce-events

In de webcontainer heb je geen tag per event nodig. Eén Google Analytics: GA4 Event-tag kan de eventnaam en de e-commercedata uit de dataLayer lezen en het event versturen dat gepusht is.

De trigger matcht elk e-commerce-event met één reguliere expressie:

regex
^(view_item_list|select_item|view_item|add_to_cart|remove_from_cart|view_cart|begin_checkout|add_shipping_info|add_payment_info|purchase|refund)$
  1. 1 Maak een trigger van het type Custom Event. Plak de reguliere expressie hierboven als eventnaam en vink Use regex matching aan.
  2. 2 Maak een tag van het type Google Analytics: GA4 Event. Vul je meet-ID G-XXXXXXXXXX in (of kies je Google-tag) en zet Event Name op de ingebouwde variabele {{Event}}.
  3. 3 Open onder More Settings het onderdeel Ecommerce, vink Send Ecommerce data aan en kies Data Layer als databron.
  4. 4 Koppel de Custom Event-trigger, geef de tag een naam (bijvoorbeeld GA4 - ecommerce) en sla op.

De tag verstuurt alles via dezelfde Google-tag die al server_container_url op https://k7q2x.example.com heeft staan uit les 3, dus elk e-commerce-event bereikt eerst je servercontainer.

04 Wat er verandert in de servercontainer

Niets. De GA4-client pakt de e-commercehits op zoals elk ander GA4-event, en de items reizen mee in de hit. De GA4-tag uit les 4, met als trigger Client Name equals GA4, stuurt ze door naar Google Analytics samen met value, currency en transaction_id.

De servercontainer blijft de juiste plek voor extra bestemmingen. Een Meta Conversions API-tag kan hetzelfde purchase-event lezen, zodat de bestelling met dezelfde data naar Meta gaat (les 7 laat zien hoe je een event_id deelt voor deduplicatie). De Google Ads-conversietag in de volgende les leest het ook.

05 Tel elke aankoop één keer

Google Analytics dedupliceert purchase-events met dezelfde transaction_id voor data uit webstreams. Zie dat als vangnet, niet als oplossing. De gebruikelijke bron van dubbele aankopen is de bedankpagina: een bezoeker ververst hem, komt terug via de browsergeschiedenis of opent de bevestigingslink uit de e-mail, en de purchase-push draait opnieuw.

  • Render de purchase-push alleen bij de eerste weergave van de bedankpagina. Houd een vlag bij op de bestelling in je shop (bijvoorbeeld tracked_at) en sla de push over als die gezet is.
  • Stuur altijd een echte, unieke transaction_id. Nooit een lege string: GA4 behandelt alle aankopen met transaction_id als lege string als één transactie.
  • Zet geen persoonsgegevens zoals het e-mailadres in transaction_id. Gebruik het ordernummer.
  • Stuur refunds met de transaction_id van de oorspronkelijke bestelling, zodat GA4 ze kan koppelen.

06 Controleer de data van begin tot eind

Test op drie plekken, van de server naar buiten. Open Preview in beide containers en loop door de shop: bekijk een product, leg het in de winkelwagen, reken af en plaats een testbestelling.

  • Web-preview: de tag GA4 - ecommerce vuurt bij elk e-commerce-event en niet bij andere.
  • Server-preview: het verzoek gaat naar k7q2x.example.com, en in de eventdata zie je items met item_id, price en quantity, plus value en currency.
  • Server-preview: de GA4-tag staat onder Tags Fired voor purchase.
  • GA4 DebugView: de events komen binnen met hun parameters en items.
  • Het rapport Ecommerce purchases in GA4 (onder Monetization): aankopen en omzet verschijnen. Dit rapport kan 24 tot 48 uur nodig hebben om zich te vullen, dus beoordeel het niet op dezelfde dag.

Veelgestelde vragen

Heb ik een aparte servertag nodig voor e-commerce-events?

Nee. De GA4-tag in de servercontainer stuurt elk event door dat de GA4-client oppakt, inclusief de items. E-commerce vraagt alleen werk in de dataLayer en de webcontainer.

Waarom zie ik aankopen maar geen omzet in GA4?

Meestal ontbreekt currency, of wordt value als string verstuurd. Controleer de eventdata in server-preview: value moet een getal zijn en currency een code van drie letters zoals EUR.

Verwijdert GA4 dubbele aankopen zelf?

Voor webstreams dedupliceert het purchase-events met dezelfde transaction_id. Het loont toch om de aankoop maar één keer te laten vuren, want andere tools die hetzelfde event lezen, zoals advertentieplatforms, kunnen een herhaling als tweede conversie tellen.

Klaar om het in de praktijk te brengen?

Rol in een paar minuten een GTM-servercontainer uit op je eigen domein. Voor het Gratis-abonnement heb je geen creditcard nodig.

Gratis account aanmaken