Analytics & Conversietracking

Meet in Google Analytics en Google Tag Manager precies wat bezoekers in de widget doen: welke aanvraagmodule ze gebruiken, of ze een aanvraag voltooien, én waar ze afhaken als ze dat niet doen.


Hoe het werkt

Twee dingen die vaak door elkaar lopen:

  1. Het marketingkanaal kent Google Analytics al zelf. GA4 legt bij binnenkomst automatisch de bron vast (organisch, Google Ads, social, e-mail, een UTM-campagne, enzovoort). Je hoeft de widget dus niet te laten vertellen waar de bezoeker vandaan komt — GA koppelt elke conversie vanzelf aan het juiste kanaal.
  2. Wat GA mist, is wat er in de widget gebeurt. De widget draait in een afgeschermde Shadow DOM: er is geen "succespagina" als losse URL en geen element op de pagina dat je van buitenaf kunt uitlezen. Daarom levert de widget die informatie zelf aan via events.

Bij elk belangrijk moment vuurt de widget twee dingen tegelijk af: een JavaScript-CustomEvent op window (voor wie zonder GTM werkt) én een push naar de dataLayer (voor Google Tag Manager). Jij kiest welke je gebruikt.

De events

Een bezoeker doorloopt een traject. Elke aanvraagmodule kan uit één of meerdere stappen bestaan. De widget meldt elke stap, zodat je een complete trechter kunt bouwen.

Event Wanneer Belangrijkste velden
constell_widget_opened Widget gaat open widgetSessionId, venue
constell_module_started Bezoeker kiest een module module
constell_step_viewed Bij elke stap/pagina in de module module, stepId, stepIndex, stepName, totalSteps
constell_request_submitted Succespagina — aanvraag voltooid module, requestId, eventType, guestAmount, budget
constell_widget_closed Widget sluit module, lastStepId, lastStepIndex, completed

De aanvraagmodules

Elk event bevat het veld module met een vaste slug per module:

Module Slug
Offerte contactformulier contact_form
Online host (geleide offerteaanvraag) quote
Zelf offerte maken self_quote
Arrangementen packages
Afspraak maken appointment
Private dining private_dining

Let op: de module "Private dining" is gereserveerd maar nog niet actief in de widget. De overige vijf modules vuren wel events af.

Voor een conversie kijk je naar constell_request_submitted en lees je module uit. Zo meet je per module een eigen conversie — bijvoorbeeld "afspraken" los van "arrangementen".

Waar haakt een bezoeker af? (trechter & afhaakpunt)

Omdat de widget bij elke stap een constell_step_viewed afvuurt, weet je altijd de laatst bereikte stap van een bezoeker. Wie de succespagina niet haalt, is afgehaakt op die laatste stap. Je leest dit op twee manieren:

  1. Trechter-rapport in GA4. Bouw een Funnel exploration met de stappen op volgorde (stepIndex) en splits uit op module. GA4 laat per stap zien hoeveel bezoekers doorgaan en hoeveel afvallen.
  2. Direct afhaak-event. Sluit een bezoeker de widget zonder te voltooien, dan vuurt constell_widget_closed met completed: false. Het veld lastStepId is dan letterlijk het afhaakpunt.
⚠️ Belangrijk over het afhaak-event

Een afhaak-event kan alleen vertrekken zolang de pagina nog open is. Sluit iemand de browser-tab abrupt, dan komt het er soms niet meer doorheen. De constell_step_viewed-events vormen daarom de betrouwbare basis (die staan al vast op het moment dat de stap laadde); het afhaak-event is de directe extra.

Google Tag Manager (aanbevolen)

De widget pusht alles naar de dataLayer. Per event maak je in GTM een Custom Event trigger.

Maak hiervoor Data Layer Variables aan: module, step_id, step_index, step_name, request_id, last_step_id, completed.

Zonder GTM (gtag.js)

Werk je rechtstreeks met GA4, luister dan op de CustomEvents en stuur ze door:

<script>
  // Conversie
  window.addEventListener('constell_request_submitted', function (e) {
    gtag('event', 'generate_lead', {
      module: e.detail.module,
      transaction_id: e.detail.requestId,   // voorkomt dubbeltellingen
      event_type: e.detail.eventType || undefined,
      value: e.detail.budget || undefined,
      currency: 'EUR'
    });
  });

  // Trechterstappen
  window.addEventListener('constell_step_viewed', function (e) {
    gtag('event', 'constell_step', {
      module: e.detail.module,
      step_id: e.detail.stepId,
      step_index: e.detail.stepIndex,
      step_name: e.detail.stepName
    });
  });

  // Afhaakpunt
  window.addEventListener('constell_widget_closed', function (e) {
    if (!e.detail.completed) {
      gtag('event', 'constell_abandon', {
        module: e.detail.module,
        last_step_id: e.detail.lastStepId,
        last_step_index: e.detail.lastStepIndex
      });
    }
  });
</script>

Een trechter bouwen in GA4

  1. Ga naar Verkennen → Funnel exploration.
  2. Voeg stappen toe op basis van het constell_step / constell_step_viewed event, geordend op step_index.
  3. Voeg constell_request_submitted toe als laatste stap (de conversie).
  4. Zet module als uitsplitsing (breakdown) om per aanvraagmodule te vergelijken.
  5. GA4 toont nu per stap het doorloop- en uitvalpercentage — je ziet direct waar bezoekers afhaken, per module.

Testen & verifiëren

Plak dit in de browserconsole op een pagina met de widget en doe een test-aanvraag:

['constell_widget_opened','constell_module_started','constell_step_viewed',
 'constell_request_submitted','constell_widget_closed']
  .forEach(function (n) {
    window.addEventListener(n, function (e) { console.log(n, e.detail); });
  });

Bij een voltooide aanvraag zie je de reeks: openen → module gestart → één step_viewed per stap → request_submittedwidget_closed (completed: true). Breek je af, dan zie je dezelfde reeks tot een bepaalde stap, gevolgd door widget_closed met completed: false en het afhaakpunt in lastStepId.

In GTM controleer je hetzelfde via de Preview-modus; in GA4 via DebugView.

💬 Hulp nodig?

Lukt het niet of zie je geen events? Mail support@constell.com met de venue-UUID erbij.