06 - Conversie-meting en datakwaliteit
Account: Skin for Skin (IV-Company) | Valuta: EUR | Periode: afgelopen 30 dagen
Bedrijfsmodel: abonnementsmodel (collageen supplement + skincare)
Conclusie vooraf: de meting klopt niet. Eén actie draagt alle gerapporteerde omzet, het abonnement-signaal staat op nul, vijf meegetelde acties produceren geen data en de drie aankoop-bronnen zijn onderling 38% inconsistent.
1. Totaalbeeld: hoeveel acties, hoeveel meegeteld, hoeveel actief
| Maatstaf | Aantal |
|---|---|
| Totaal conversie-acties in account (config) | 61 |
| include_in_conversions = True (telt mee in "Conversies"-kolom) | 7 |
| Met daadwerkelijk volume in 30 dagen (conversions > 0) | 1 |
| Met daadwerkelijk volume in all_conversions > 0 | 15 |
Van de 7 meegetelde acties levert er precies 1 iets op. De overige 6 staan op nul. Het smart-biddingalgoritme werkt dus op signaal van 1 bron.
De 7 meegetelde acties op een rij:
| Actie | Categorie | Status | conversions | conv_value |
|---|---|---|---|---|
| Transactie (Google Ads pixel) | PURCHASE | ENABLED | 150,5 | EUR 9.508,66 |
| Nieuwe klant - Abonnement | PURCHASE | ENABLED | 0,0 | 0,00 |
| Afrekenen (Gefilterde weergave) | BEGIN_CHECKOUT | HIDDEN | 0,0 | 0,00 |
| Bestelling (Gefilterde weergave) | DEFAULT | HIDDEN | 0,0 | 0,00 |
| Contactaanvraag (Ongefilterde weergave) | CONTACT | HIDDEN | 0,0 | 0,00 |
| Contact - Bedankpagina (Gefilterde weergave) | SUBMIT_LEAD_FORM | HIDDEN | 0,0 | 0,00 |
| E-book download (Gefilterde weergave) | DEFAULT | HIDDEN | 0,0 | 0,00 |
Vijf van de zeven zijn HIDDEN (gecombineerde UA-doelen die Google automatisch verbergt bij migratie naar GA4) en registreren nul hits. Ze zijn meegeteld maar staan feitelijk dood.
Alle 15 acties met volume in all_conversions (niet-primaire bronnen inclusief):
| Actie | Categorie | include | all_conversions | all_conv_value |
|---|---|---|---|---|
| Google Shopping App Page View | PAGE_VIEW | False | 10.508,49 | EUR 9.874,10 |
| Google Shopping App View Item | PAGE_VIEW | False | 4.413,09 | EUR 4.138,18 |
| Google Shopping App Add To Cart | ADD_TO_CART | False | 700,66 | EUR 0,00 |
| Google Shopping App Begin Checkout | BEGIN_CHECKOUT | False | 255,79 | EUR 15.428,27 |
| Google Shopping App Purchase | PURCHASE | False | 202,0 | EUR 11.932,59 |
| Google Shopping App Add Payment Info | DEFAULT | False | 151,72 | EUR 136,74 |
| Transactie (Google Ads pixel) | PURCHASE | True | 150,5 | EUR 9.508,66 |
| Skin for Skin - GA4 (web) purchase | PURCHASE | False | 124,87 | EUR 7.595,34 |
| Google Shopping App Search | PAGE_VIEW | False | 118,91 | EUR 110,91 |
| Aanmelding nieuwsbrief (pop-up) | SIGNUP | False | 89,75 | EUR 448,75 |
| Local actions - Directions | GET_DIRECTIONS | False | 25,0 | EUR 25,00 |
| Click-to-Call | CONTACT | False | 23,0 | EUR 23,00 |
| Lokale Aktionen - Websitebesuche | PAGE_VIEW | False | 19,0 | EUR 19,00 |
| Local actions - Other engagements | ENGAGEMENT | False | 14,0 | EUR 14,00 |
| Skin for Skin - GA4 (web) widget_booking_completed | DEFAULT | False | 1,73 | EUR 138,80 |
De Shopping App-reeks (Page View, View Item, Add To Cart etc.) is afkomstig van het Google Shopping App-kanaal en telt niet mee in de primaire conv.-kolom. Ze zijn bruikbaar als funnel-indicator maar vertegenwoordigen geen extra omzet bovenop de pixel-aankopen.
2. De actie die alles draagt
Transactie (Google Ads pixel) is de enige bron van conversiesignaal.
| Parameter | Waarde |
|---|---|
| Conversies (30 dagen) | 150,5 |
| Conv. waarde | EUR 9.508,66 |
| Gemiddelde orderwaarde (conv_value / conversions) | EUR 63,18 |
| Counting mode | MANY_PER_CLICK |
| always_use_default | False (echte orderwaarde uit Shopify) |
| default_value (fallback) | EUR 29,95 |
| Type | WEBPAGE (Google Ads pixel op bedankpagina) |
De waardedoorgifte werkt: always_use_default = False betekent dat Shopify de echte orderwaarde meestuurt. De gemiddelde orderwaarde van EUR 63,18 is daarmee betrouwbaar als individuele transactiemaat.
Het probleem is niet de waardedoorgifte per order, maar de configuratie eromheen: verkeerde counting mode, nul abonnement-signaal en inconsistentie met andere aankoop-bronnen (zie secties 3 en 6).
3. Het dubbeltelling-risico: drie aankoop-trackers voor dezelfde orders
Er zijn drie actieve trackers die elk dezelfde Shopify-aankopen meten, maar elk op een andere manier en met een andere uitkomst.
| Tracker | Type | include_in_conversions | all_conversions | all_conv_value |
|---|---|---|---|---|
| Transactie (Google Ads pixel) | WEBPAGE (pixel op bedankpagina) | True | 150,5 | EUR 9.508,66 |
| Skin for Skin - GA4 (web) purchase | GOOGLE_ANALYTICS_4_PURCHASE | False | 124,87 | EUR 7.595,34 |
| Google Shopping App Purchase | WEBPAGE (Shopping App) | False | 202,0 | EUR 11.932,59 |
Observaties:
- Google Shopping App Purchase meldt 202 aankopen, de pixel 150,5 - een verschil van 51,5 transacties (+34%). De Shopping App-tracker vuurt via het Google Shopping-kanaal en telt mogelijk deels overlappende sessies of attributie-vensters anders. Beide meten dezelfde fysieke orders.
- GA4 meldt 124,87 aankopen - 25,6 minder dan de pixel (-17%). GA4 gebruikt een ander attributiemodel (standaard data-driven vs. last-click op de pixel) en filtert retours/annuleringen soms eerder.
- Alleen de pixel staat op include_in_conversions = True. GA4 en Shopping App zijn uitgesloten van de "Conversies"-kolom. Dat is de juiste keuze voor voorkomen van dubbeltelling, maar het betekent ook dat de pixel de enige gezaghebbende bron is voor smart bidding, terwijl de waarden 34% uiteen kunnen lopen afhankelijk van kanaaltoeschrijving.
- Als ooit een tweede tracker op include = True wordt gezet naast de pixel, verdubbelen de gerapporteerde conversies onmiddellijk. Dit risico is aanwezig zolang alle drie actief blijven zonder duidelijke eigenaar.
Wat klopt: GA4 is de meest betrouwbare referentie voor het werkelijke aantal unieke transacties (filtert beter, dedupliceert). De pixel zit 20% hoger dan GA4, vermoedelijk door herlaadbare bedankpagina's of gedeeld cookie-venster met terugkerende klanten.
4. Het abonnement-gat: de grootste strategische blinde vlek
Nieuwe klant - Abonnement staat op include_in_conversions = True, primary_for_goal = True, ENABLED, default_value EUR 50,00, always_use_default = True.
Volume in 30 dagen: 0 conversies, EUR 0,00.
Dit is de kernbevinding van dit rapport.
Waarom dit fataal is voor een abonnementsmodel
Skin for Skin verkoopt collageen supplementen als abonnement. De LTV van een abonnementsklant is structureel hoger dan die van een eenmalige koper: bij maandelijkse levering gaat een klant die 6 maanden blijft van EUR 63 (eenmalig) naar EUR 380+. Smart bidding weet dit niet.
Gevolg 1 - CPA-target is onderschat.
Als het algoritme alleen de initiële transactiewaarde van EUR 63,18 ziet, leert het dat een klant EUR 63 waard is. De werkelijke LTV van een abonnee is een veelvoud. Het systeem biedt te laag op prospecting-zoekwoorden omdat de eerste aankoop er "weinig waard" uitziet.
Gevolg 2 - Prospecting wordt ondergewaardeerd ten opzichte van retargeting.
Nieuwe abonnees hebben initieel dezelfde conv_value als eenmalige kopers. Het algoritme geeft daardoor voorkeur aan makkelijk te converteren retargeting-verkeer boven duur, maar waardevol prospecting-verkeer.
Gevolg 3 - De "Abonnement (huid)" advertentiegroep biedt op de verkeerde waarde.
Er bestaat een advertentiegroep "Abonnement (huid)" in campaign "2. Zoek - Supplementen" met assets die expliciet abonnement-korting communiceren. Die groep genereert klikken maar haar conversiessignaal is identiek aan reguliere aankopen - het model maakt geen onderscheid.
Waarom vuurt de actie niet?
Mogelijke oorzaken (buiten scope van dit rapport om te bevestigen zonder pixel-audit):
- De tag vuurt op dezelfde bedankpagina als de reguliere pixel maar met andere triggercondities (bv. een parameter subscription=true) die niet correct doorgegeven worden door Shopify.
- De trigger in GTM is verkeerd geconfigureerd of uitgeschakeld.
- De actie is aangemaakt maar de tag is nooit geimplementeerd.
Ongeacht de oorzaak: zolang deze actie op nul staat ontbreekt het abonnement-signaal volledig.
5. Verkeerd geconfigureerde primaire acties
De volgende acties staan op include_in_conversions = True maar zijn geen echte aankoop. Ze zouden secundair moeten zijn (informatief signaal, niet bidding-signaal).
| Actie | Categorie | Type | Status | Volume | Probleem |
|---|---|---|---|---|---|
| Afrekenen (Gefilterde weergave) | BEGIN_CHECKOUT | UA Goal | HIDDEN | 0 | Begin-checkout is geen aankoop; verhoogt gerapporteerde conv. zonder omzet |
| Bestelling (Gefilterde weergave) | DEFAULT | UA Goal | HIDDEN | 0 | Vage "DEFAULT" categorie, onduidelijke trigger; HIDDEN = dode actie |
| Contactaanvraag (Ongefilterde weergave) | CONTACT | UA Goal | HIDDEN | 0 | Contact = lead, geen aankoop; stuurt bidding richting soft conversies |
| Contact - Bedankpagina (Gefilterde weergave) | SUBMIT_LEAD_FORM | UA Goal | HIDDEN | 0 | Idem; bedankpagina contact is geen omzet |
| E-book download (Gefilterde weergave) | DEFAULT | UA Goal | HIDDEN | 0 | Gratis e-book download meetellen als primaire conv. verdunt ROAS |
Alle vijf zijn HIDDEN (Universal Analytics-doelen die door Google zijn verborgen na UA-sunset). Ze produceren geen volume maar staan formeel mee in de bidding-optimalisatie. Als er ooit conversies door binnenkomen (bv. bij heractivering van een UA-tag) blaast dat het conv-getal op zonder omzetwaarde.
Bijkomend probleem: "Afrekenen" als primaire maatstaf trekt het algoritme richting mensen die afrekenen starten maar niet betalen. Het is een funnel-stap, geen bedrijfsdoel.
6. Het MANY_PER_CLICK-probleem op de aankoopactie
"Transactie (Google Ads pixel)" staat op counting = MANY_PER_CLICK.
Wat MANY_PER_CLICK doet
MANY_PER_CLICK telt elke aankoop binnen hetzelfde klikvenster (30 dagen standaard) als een afzonderlijke conversie. Als iemand na 1 klik op een advertentie twee orders plaatst, telt dat als 2 conversies.
Waarom dat voor aankopen problematisch is
Bij e-commerce is ONE_PER_CLICK de standaard aanbeveling voor aankoopconversies, tenzij het bedrijf expliciet meerdere orders per sessie wil stimuleren (bv. hoge-frequentie impulskopen). Voor een abonnement-supplement geldt:
- Een nieuwe abonnee plaatst typisch 1 initieel order. MANY_PER_CLICK voegt hier niets toe.
- Een bestaande abonnee die retargetingadvertenties ziet en via dezelfde klikattributie een vervolgorder plaatst, telt als extra conversie. Dat blaast de bijdrage van branded/retargeting campagnes op.
- Brand-campagnes (S01. Branded) worden onevenredig beloond: terugkerende klanten klikken op een merkterm en kopen vervolgens hun abonnementsverlening. Die herhaalorders worden aan de brand-klik toegeschreven en tellen als extra conversies. Het algoritme overschat daardoor het rendement van branded search.
Kwantificering van het risico
150,5 gerapporteerde conversies zijn niet gelijk aan 150,5 unieke aankopen. GA4 rapporteert 124,87 aankopen. Het verschil (25,6) is grotendeels verklaarbaar door MANY_PER_CLICK dat herhaalde orders binnen het attributievenster als apart event telt.
7. Herstelplan
Gewenst eindbeeld (controleerbaar)
- Precies 1 aankoopbron op include_in_conversions = True: de Google Ads pixel, gecorrigeerd naar ONE_PER_CLICK.
- De abonnement-actie vuurt en produceert conversies. Aantallen zijn te verifiëren tegen Shopify "Subscriptions" bestellingen in dezelfde periode.
- Alle niet-aankoop acties staan op secundair (include_in_conversions = False), maar blijven zichtbaar in all_conversions voor funnel-analyse.
- Gerapporteerde conversies in Google Ads komen binnen 10-15% overeen met het Shopify-ordervolume in datzelfde datumbereik.
Acties per conversie-actie
| Actie | Huidige status | Actie | Counting | Reden |
|---|---|---|---|---|
| Transactie (Google Ads pixel) | include=True, MANY_PER_CLICK | BEHOUDEN - PRIMAIR | Wijzig naar ONE_PER_CLICK | Enige werkende aankoop-bron; ONE_PER_CLICK sluit beter aan op unieke orders en voorkomt opblazen via retargeting |
| Nieuwe klant - Abonnement | include=True, 0 conversies | ACTIVEREN (pixel repareren) | Behoud MANY_PER_CLICK of ONE_PER_CLICK | Tag vuurt niet; debuggen in GTM/Shopify. Bij activering: PRIMAIR houden; waarde EUR 50 is conservatief, overweeg LTV-gebaseerde waarde |
| Skin for Skin - GA4 (web) purchase | include=False | BEHOUDEN - SECUNDAIR | - | Betrouwbare referentie voor GA4-aantallen; niet meerekenen om dubbeltelling te voorkomen |
| Google Shopping App Purchase | include=False | BEHOUDEN - SECUNDAIR | - | Shopping-kanaal referentie; niet meerekenen (34% hoger dan pixel, andere attributie) |
| Afrekenen (Gefilterde weergave) | include=True, BEGIN_CHECKOUT, HIDDEN | NAAR SECUNDAIR (include=False) | - | Begin-checkout is geen bedrijfsdoel; beïnvloedt bidding richting niet-betalende bezoeker |
| Bestelling (Gefilterde weergave) | include=True, DEFAULT, HIDDEN | VERWIJDEREN of SECUNDAIR | - | HIDDEN, nul volume, categorie DEFAULT, naam dubbelzinnig; geen toegevoegde waarde |
| Contactaanvraag (Ongefilterde weergave) | include=True, CONTACT, HIDDEN | NAAR SECUNDAIR (include=False) | - | Contact-lead is geen aankoop; vermengt lead- en transactiesignaal |
| Contact - Bedankpagina (Gefilterde weergave) | include=True, SUBMIT_LEAD_FORM, HIDDEN | NAAR SECUNDAIR (include=False) | - | Idem; duplicate van bovenstaande in andere vorm |
| E-book download (Gefilterde weergave) | include=True, DEFAULT, HIDDEN | NAAR SECUNDAIR (include=False) | - | Gratis download is geen omzet; verdunt ROAS-rapportage |
| Shopify Purchase - CODE - GOOGLE TAG | include=False, PURCHASE | EVALUEREN | - | Tweede pixel-achtige tag; controleer of dit dubbelganger is van hoofdpixel. Zo ja: uitschakelen |
Volgorde van uitvoering
-
Direct: zet Afrekenen, Bestelling, Contactaanvraag, Contact-Bedankpagina en E-book download op include_in_conversions = False. Dit heeft geen negatief effect op actieve dataverzameling (ze zijn toch HIDDEN en produceren nul volume) maar reinigt de conversie-definitie.
-
Binnen 48 uur: debuggen waarom "Nieuwe klant - Abonnement" niet vuurt. Check in GTM de trigger-configuratie en verifieer of Shopify het abonnement-event correct doorgeeft. Testorder plaatsen in preview-modus.
-
Na bevestiging dat abonnement-tag vuurt: wijzig counting op "Transactie (Google Ads pixel)" van MANY_PER_CLICK naar ONE_PER_CLICK. Let op: dit verlaagt gerapporteerde conversies direct (verwacht daling naar dichter bij GA4-niveau van ~125). Communiceer dit als meetcorrectie, niet als prestatiedaling.
-
Week 2+: monitor of gerapporteerde conversies aansluiten op Shopify. Acceptabele afwijking: minder dan 15%. Grotere afwijking vereist verdere pixel-audit.
Verwacht effect op rapportage na herstel
| Metric | Voor herstel | Na herstel |
|---|---|---|
| Gerapporteerde conversies | 150,5 (MANY_PER_CLICK) | Verwacht 120-130 (ONE_PER_CLICK, dichterbij GA4) |
| Abonnement-conversies | 0 | Meetbaar (aantal afhankelijk van Shopify abonnement-orders) |
| Primaire conv. bronnen | 7 (5 dood, 1 werkend, 1 nul) | 2 (pixel aankoop + abonnement) |
| Afstemming met Shopify | Onbekend (onderschat bij ONE_PER_CLICK) | Less-than 15% afwijking |
| Smart bidding-signaal | Alleen transactiewaarde, geen LTV | Transactie + abonnement-signaal gecombineerd |
Analyse gebaseerd op Python-berekeningen uit iv-company-deepdive-skin-for-skin.json. Alle bedragen in EUR. Datumperiode: 30 dagen.