AdsPlatform
Module 6 · Les 3 van 7 · 11 min

Google Tag Manager: tags, triggers, variabelen en de dataLayer

Bouw conversietracking in GTM op een manier die schaalbaar en testbaar is, met een correct dataLayer-event als fundament en Preview-modus plus Tag Assistant als controle.

Waarom Tag Manager

Google Tag Manager (GTM) scheidt marketingtags van de code van de website. Je beheert alle tags op één plek, kunt versies terugdraaien en test wijzigingen voordat ze live gaan. Voor conversiemeting is GTM de standaard, tenzij je een server-side setup of een platformintegratie (bijvoorbeeld Shopify's native Google & YouTube-app) gebruikt.

De drie bouwstenen:

BouwsteenWat het doetVoorbeeld
TagStuurt data naar een toolGoogle Ads Conversion Tracking-tag
TriggerBepaalt wanneer de tag vuurtCustom Event purchase
VariabeleLevert dynamische waardenData Layer Variable ecommerce.value

Stap 1: de Google-tag

Sinds de samenvoeging tot de Google-tag (voorheen conversion linker + global site tag) plaats je één Google-tag op alle pagina's. Deze tag:

  • slaat de GCLID op in first-party cookies,
  • activeert conversion linking voor cross-domain scenario's,
  • vormt de basis voor GA4 én Google Ads-conversies.

In GTM: Tags → Nieuw → Google-tag, vul je tag-ID in (G-XXXXXXX of AW-XXXXXXX; ze zijn via Google Tag-instellingen te combineren), trigger: Initialization - All Pages.

Stap 2: de dataLayer als bron van de waarheid

De dataLayer is een JavaScript-array waarin de website gestructureerde informatie plaatst. GTM leest die uit. Vertrouw nooit op DOM-scraping (elementen uit de HTML lezen) voor bedrijfskritische conversies: één CSS-wijziging en je meting valt om.

Vraag de developer om bij een aankoop het volgende event te pushen, conform het GA4 e-commerce schema:

<script>
  window.dataLayer = window.dataLayer || [];
  window.dataLayer.push({ ecommerce: null }); // vorige e-commerce data wissen
  window.dataLayer.push({
    event: "purchase",
    ecommerce: {
      transaction_id: "ORD-2026-48213",
      value: 249.90,
      tax: 43.37,
      shipping: 4.95,
      currency: "EUR",
      coupon: "ZOMER10",
      items: [
        {
          item_id: "SKU-8841",
          item_name: "Warmtepomp boiler 200L",
          item_brand: "Thermo",
          item_category: "Verwarming",
          price: 244.95,
          quantity: 1
        }
      ]
    },
    user_data: {
      email: "klant@voorbeeld.nl",
      phone_number: "+31612345678",
      address: {
        first_name: "Sanne",
        last_name: "de Vries",
        postal_code: "3511AB",
        country: "NL"
      }
    }
  });
</script>

Voor een leadformulier volstaat een eenvoudiger event:

window.dataLayer.push({
  event: "generate_lead",
  lead_type: "offerte",
  form_id: "offerte-warmtepomp",
  user_data: { email: "klant@voorbeeld.nl" }
});

Het user_data-object gebruik je later voor enhanced conversions. Zorg dat de push gebeurt na succesvolle verwerking (bijvoorbeeld bij de serverrespons), niet bij het klikken op de verzendknop.

Stap 3: variabelen aanmaken

Maak Data Layer Variables aan voor elke waarde die je nodig hebt:

  • DLV - ecommerce.value → Data Layer Variable Name: ecommerce.value
  • DLV - ecommerce.transaction_id
  • DLV - ecommerce.currency
  • DLV - user_data (het hele object, voor enhanced conversions)

Maak daarnaast een Constant-variabele Google Ads Conversion ID met je AW-ID zodat je die niet in elke tag hoeft te herhalen.

Stap 4: trigger

Triggers → Nieuw → Aangepaste gebeurtenis, gebeurtenisnaam purchase. Voor leads: generate_lead. Vermijd triggers op "Pagina weergeven" van een bedankpagina als je een dataLayer-event kunt gebruiken; een event vuurt precies één keer per transactie, een paginaweergave niet.

Stap 5: de conversietag

Tags → Nieuw → Google Ads Conversion Tracking:

  • Conversion ID: {{Google Ads Conversion ID}}
  • Conversion Label: het label uit Google Ads
  • Conversion Value: {{DLV - ecommerce.value}}
  • Transaction ID: {{DLV - ecommerce.transaction_id}} (voorkomt dubbele telling bij herladen)
  • Currency Code: {{DLV - ecommerce.currency}}
  • Trigger: CE - purchase

Zet Enhanced conversions aan en kies "User-provided data variable" met de DLV - user_data-variabele (meer daarover in de volgende les).

Tip: gebruik een consistente naamgeving zoals GAds - Conv - Purchase, CE - purchase, DLV - ecommerce.value. Bij een container met honderd items is dat het verschil tussen overzicht en chaos.

Stap 6: testen met Preview en Tag Assistant

  1. Klik in GTM op Voorbeeld en voer de URL van je site in. Tag Assistant opent een debugsessie.
  2. Doorloop de volledige flow: product bekijken, toevoegen, afrekenen (gebruik een testbetaalmethode of een coupon van 100%).
  3. Controleer in Tag Assistant bij het purchase-event: vuurt GAds - Conv - Purchase? Klik op de tag en check onder Variables of value, transaction_id en currency gevuld zijn.
  4. Bekijk het tabblad Data Layer om de exacte payload te controleren.
  5. Controleer in Google Ads na 3–6 uur onder Conversies → Diagnostiek of de tag "Actief" is en of enhanced conversions data ontvangt.
  6. Publiceer de container met een duidelijke versienaam: 2026-09 Purchase conversie + EC.

Aanvullend kun je de Chrome-extensie Tag Assistant Companion gebruiken, en voor GA4 het DebugView-rapport.

Wanneer server-side tagging

Server-side GTM draait de container op een eigen (sub)domein, bijvoorbeeld gtm.jouwdomein.nl. Voordelen: minder verlies door adblockers en browserbeperkingen (Safari ITP), langere cookie-levensduur, controle over welke data je doorstuurt. Kosten: een Cloud Run-instantie vanaf circa € 40–120 per maand plus implementatietijd. Voor accounts boven € 10.000 maandbudget is het vrijwel altijd rendabel.

Veelgemaakte fouten

  • Triggeren op de klik van de verzendknop: telt ook mislukte verzendingen en validatiefouten.
  • Geen transaction_id meegeven: een refresh van de bedankpagina telt als nieuwe aankoop.
  • Twee Google-tags in de container (één in GTM, één hardcoded op de site): dubbele pageviews en conflicten.
  • Testen in de live container in plaats van Preview: iedere bezoeker ziet de gevolgen van je fouten.
  • Geen versiebeschrijving bij publiceren, waardoor terugdraaien giswerk wordt.
  • Elke tag apart configureren in plaats van constanten en herbruikbare variabelen gebruiken.

Onderhoud

Plan elk kwartaal een containeropschoning: verwijder gepauzeerde tags die ouder zijn dan zes maanden, controleer of alle triggers nog vuren en documenteer in de map-structuur van GTM welke tags bij welk meetplan-item horen.

Belangrijkste inzichten
  • GTM bestaat uit tags (versturen), triggers (wanneer) en variabelen (welke waarden); de dataLayer is de betrouwbare bron voor die waarden.
  • Plaats één Google-tag op alle pagina's als basis voor GCLID-opslag, GA4 en Google Ads-conversies.
  • Laat de developer gestructureerde dataLayer-events pushen na succesvolle verwerking, conform het GA4 e-commerce schema, inclusief user_data.
  • Geef altijd een transaction_id mee aan aankoopconversies om dubbele telling bij herladen te voorkomen.
  • Test elke wijziging in Preview met Tag Assistant en controleer daarna de diagnostiek in Google Ads voordat je publiceert.
  • Server-side tagging loont bij grotere budgetten door minder dataverlies en meer controle.
Kennischeck

Toets je kennis

5 vragen · slaag met 70% of hoger om de les af te ronden

  1. 1.Waarom trigger je een aankoopconversie liever op een dataLayer-event dan op een paginaweergave van de bedankpagina?
  2. 2.Welke rol speelt het veld transaction_id in een Google Ads-conversietag?
  3. 3.Wat controleer je in Tag Assistant tijdens een Preview-sessie?
  4. 4.Wat is een belangrijk voordeel van server-side Tag Manager?
  5. 5.Wat is het risico van een conversietrigger op het klikken van de verzendknop?