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

Data-integriteit: merken dat je cijfers niet meer kloppen

NaslagData2023.06.04
Freek Kampen
Freek KampenMede-oprichter, New North Digital

Wat data-integriteit in een trackingopstelling stukmaakt, en hoe je een dubbele transactie of een verdwenen dataLayer ontdekt voor je klant het ziet.

Wat data-integriteit betekent

Data-integriteit gaat over de vraag of je cijfers kloppen en of ze blijven kloppen: volledig, consistent en onveranderd tussen het moment van meten en het moment van rapporteren.

In een trackingopstelling is dat geen abstract begrip. Het is het verschil tussen 412 orders in je backend en 412 transacties in GA4, elke dag opnieuw, zonder dat iemand ernaar hoeft te kijken.

De meeste schade ontstaat niet door één grote storing. Het ontstaat doordat iets stil kapotgaat en niemand het drie weken merkt.

Wat het in de praktijk sloopt

  • Een dubbel geplaatste tag. De Google-tag staat in de broncode én in de container, of de bedanktpagina vuurt de purchase opnieuw af bij een refresh. Je omzet verdubbelt, je conversieratio ook, en Google Ads gaat er hard op bieden.
  • Een release waarin de dataLayer verdwijnt. Een developer hernoemt een veld of haalt een push weg bij het opschonen. De pageviews lopen door, de e-commercegegevens niet. Vaak zie je dat eerst terug in een halflege items-array.
  • Een consentbanner die na een update eerder of later afvuurt. Vuurt hij later, dan lekken er hits weg voor de status bekend is. Vuurt hij eerder, dan kan een deel van je tags helemaal niet meer afvuren.
  • Bots en spam. GA4 filtert bekende bots, maar headless browsers en Measurement Protocol-verkeer komen er langs. Herkenbaar aan verkeer zonder taal, met een verdachte referrer of met bouncegedrag op één pagina.
  • Tijdzone en valuta. Staat je property op een andere tijdzone dan je backend, dan schuiven je dagtotalen. Stuur je bij een purchase wel een waarde maar geen currency, dan loop je het risico dat de omzet wordt genegeerd. Een wijziging van de tijdzone werkt bovendien alleen vooruit, niet met terugwerkende kracht.
  • Eén template zonder events. De nieuwe productpaginasoort of het B2B-bestelproces heeft de tags nooit gekregen. Je totalen kloppen bijna, en juist dat maakt het lastig te zien.

Hoe je het merkt voor je klant het merkt

Vergelijk dagelijks je transacties. Zet het aantal orders uit je backend naast het aantal transacties in GA4 van dezelfde dag, en druk het verschil uit in een percentage. Een stabiel verschil van een paar procent is normaal door consent en adblockers. Een sprong naar 0 procent of naar 90 procent is een melding waard.

Werk met een afwijkingsdrempel, niet met een blik. Kies een percentage waarbij je bericht krijgt, bijvoorbeeld meer dan tien procent verschil of twee dagen op rij een groter gat dan gebruikelijk. In GA4 kun je hiervoor aangepaste statistieken aanmaken in het Statistieken-paneel, met een e-mail als er een drempel wordt overschreden. Die zijn grof, maar beter dan niets.

Controleer omzet per kanaal op nulwaarden. Een kanaal dat gisteren omzet had en vandaag precies nul, terwijl de sessies gelijk blijven, wijst op een gebroken koppeling of een verloren parameter.

Draai een terugkerende query op je BigQuery-export. De export bevat elke hit zoals hij binnenkwam, dus dubbelingen staan er gewoon in. Plan hem dagelijks in als scheduled query en laat het resultaat naar een tabel schrijven waar je dashboard op kijkt.

De query voor dubbele transacties

SELECT
  ecommerce.transaction_id,
  COUNT(*) AS aantal_events,
  COUNT(DISTINCT user_pseudo_id) AS aantal_clients,
  SUM(ecommerce.purchase_revenue) AS omzet
FROM `mijn-project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY))
                        AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
  AND event_name = 'purchase'
  AND ecommerce.transaction_id IS NOT NULL
GROUP BY transaction_id
HAVING aantal_events > 1
ORDER BY aantal_events DESC

Staat er één client achter twee events, dan is het een refresh of een dubbele tag. Staan er twee clients achter, dan kijk je naar een transactie-id dat je backend opnieuw uitgeeft, of naar een testbestelling.

Vervang de projectnaam en het property-id door die van jezelf. Het achtervoegsel analytics_ gevolgd door je property-id is de standaardnaam van de dataset die GA4 aanmaakt.

Monitoren in plaats van achteraf ontdekken

Hier zit het verschil tussen een tagging-opdracht en onderhoud. Een implementatie is op de dag van oplevering correct. Of hij dat over vier maanden nog is, hangt af van elke release, elke pluginupdate en elke nieuwe tag die iemand erbij zet.

Wij bouwen daarom controles op de export in plaats van te vertrouwen op de interface: dagelijkse tellingen naast de backend, een query op dubbele transactie-id's, en een signaal als een event dat er altijd was ineens ontbreekt.

Een ontbrekende maand herstel je niet. Je kunt hem hooguit uitleggen.

Wat je hiermee doet

  • Zet één dagelijkse vergelijking op tussen orders in je backend en transacties in GA4, in procenten.
  • Bepaal een drempel waarbij iemand een melding krijgt, en spreek af wie daarop reageert.
  • Plan de query hierboven als scheduled query in BigQuery, dagelijks over de laatste zeven dagen.
  • Controleer de tijdzone van je property en of je bij elke purchase een currency meestuurt.
  • Loop na een release je belangrijkste paginatypen langs in de preview-modus van Tag Manager, of laat een geautomatiseerde test dat doen.
  • Filter testbestellingen en intern verkeer eruit voordat je conclusies aan de cijfers verbindt.

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