2026-07-10
Het iDEAL-attributiegat: waarom je GA4-data liegt (2026)
Je GA4 zegt dat "Direct" je beste verkoopkanaal is. Dat klopt niet. iDEAL maakt je meting kapot: ruim 70% van je Nederlandse checkout loopt via de bank-app, en die redirect breekt precies de sessie waaraan Meta en Google Ads hun conversie zouden koppelen. Je beste kanalen zien er slechter uit dan ze zijn, omdat iDEAL hun omzet stilletjes doorschuift naar Direct.
In Nederland is dit geen randgevalletje, het is de norm. iDEAL is met een online marktaandeel van rond de 70% verreweg de meestgebruikte betaalmethode[1][2]. Elke keer dat een klant naar zijn bank-app springt om te betalen, verlaat hij je site. Bij terugkomst ziet GA4 vaak een nieuwe sessie zonder herkomst. De aankoop landt dan onder Direct of onder de bank als verwijzende bron[3]. Browser-side pleisters lossen dat op een mobiele bank-app-hop meestal niet op. De echte fix zit op je server.
In het kort
- iDEAL is de norm. Rond de 70% van alle online betalingen in Nederland loopt via iDEAL, met meer dan een miljard transacties per jaar[1][2].
- De bank-app-redirect breekt je GA4-sessie. De klant springt naar de app van ING, Rabobank of ABN AMRO; bij terugkeer is de sessie- en cookiecontext weg.
- GA4 verzint dan een bron. De aankoop wordt toegeschreven aan Direct of aan de bank als referral in plaats van aan de klik die hem veroorzaakte[3].
- Browser-side pleisters overleven de hop niet. Referral-uitsluiting en de
_gl-linker helpen bij een gewone gateway-redirect, maar niet betrouwbaar bij de sprong naar een aparte bank-app[5]. - De echte fix is server-side. Sla bij checkout de GA4 client_id, gclid en fbp op bij de order; stuur de aankoop via de Mollie- of Adyen-webhook terug met die identifiers, zodat de conversie aan de oorspronkelijke klik blijft plakken[7][8].
iDEAL is de norm — en je attributie weet dat niet
Eerst de schaal, want die maakt dit een specifiek Nederlands probleem. iDEAL heeft een online marktaandeel van rond de 70% en is daarmee de meestgebruikte betaalmethode van het land[1][2]. Grofweg zeven op de tien checkouts lopen erlangs, goed voor meer dan een miljard transacties per jaar[1]. Elders in Europa domineert de kaart of PayPal, en daar valt dit gat kleiner uit. Hier raakt het je grootste betaalstroom.
En dat is precies het venijn. Analyticssetups en tutorials komen vaak uit landen waar creditcard de standaard is. Die scenario's houden geen rekening met een betaalmethode die de gebruiker fysiek uit je site en in een aparte bank-app trekt. Jij draait dat model wél op je grootste kanaal.
Je "beste kanaal" in GA4 is geen kanaal. Het is een verzamelbak voor conversies die hun herkomst kwijtraakten in een bank-app.
Wat er echt gebeurt als iemand met iDEAL betaalt
Het breekt stap voor stap, en elke stap ziet er onschuldig uit. Iemand klikt op je Meta- of Google Ads-advertentie, landt op je productpagina, legt iets in de mand en gaat afrekenen. Tot hier klopt alles: GA4 heeft de klik, de bron en de sessie netjes vast.
Dan kiest hij iDEAL en zijn bank. En daar knapt het. De betaling opent de app van ING, Rabobank of ABN AMRO — een aparte app, buiten je browser. Je site is op dat moment weg uit beeld. Na het bevestigen stuurt de bank de klant terug naar je bedankpagina, maar vaak in een nieuwe browsercontext of nieuwe sessie[3]. GA4 ziet iemand "opnieuw binnenkomen" zonder herkomst, opent een nieuwe sessie en schrijft de aankoop toe aan Direct — of aan de bank als verwijzende bron[3][4]. De oorspronkelijke advertentieklik? Die staat in de vorige sessie, en die is losgekoppeld.
Het kapotte pad van klik tot miscredit bij een iDEAL-betaling. Source: Snifflytics, 2026[3].
Waarom je Meta- en Google Ads-cijfers te laag lijken
Zie je waar dit heen gaat? Elke conversie die naar Direct of de bank verhuist, wordt afgepakt van het betaalde kanaal dat hem eigenlijk leverde. Google Ads en Meta krijgen minder omzet toegewezen dan ze veroorzaakten. Je ROAS in het platform ziet er slechter uit dan de werkelijkheid.
En dan neem je de verkeerde beslissing. Je ziet een campagne die "onder de 2x ROAS" scoort en zet hem uit — terwijl die campagne in werkelijkheid gewoon presteerde, maar de helft van zijn iDEAL-omzet bij Direct zag belanden. Je snijdt in wat werkt. Dat is de dure fout: niet dat de data ontbreekt, maar dat je erop stuurt alsof ze klopt.
Dit is ook precies waarom losse platformcijfers je in Nederland zo snel misleiden, en waarom slimme webshops sturen op omzet over álle advertentie-uitgaven samen. Over dat verschil tussen ROAS en MER schreven we eerder in van ROAS naar MER voor webshops. Het iDEAL-gat is een van de grootste redenen dat je platform-ROAS en je werkelijke marge uit elkaar lopen.
Reken hieronder zelf uit hoeveel betaalde conversies bij jou maandelijks risico lopen om verkeerd toegeschreven te worden.
De browser-side pleisters — en waarom ze niet genoeg zijn
Als je dit googelt, krijg je drie standaardadviezen: zet betaal-gateways op je referral-uitsluitingslijst, zorg dat de _gl-linkerparameter de redirect overleeft, en schakel cross-domain tracking in[5]. Prima adviezen, voor het probleem waarvoor ze bedacht zijn. Dat probleem is een redirect binnen de browser, naar het domein van een gateway en weer terug.
iDEAL is dat niet. De klant springt naar een aparte bank-app, buiten de browser. En daar sneuvelen die pleisters. De _gl-parameter reist mee in een URL, maar de bank-app opent zijn eigen context en geeft die parameter niet gegarandeerd terug. Cookies die aan de browsersessie hingen, zijn bij terugkeer niet betrouwbaar aanwezig[3][5]. Een referral-uitsluiting voorkomt dat de bank als bron verschijnt, maar het herstelt de oorspronkelijke klik niet — dan valt de conversie gewoon terug op Direct[4].
| Pleister | Wat het doet | Waarom het bij iDEAL vaak faalt |
|---|---|---|
| Referral-uitsluiting | Houdt de gateway/bank van je bronnenlijst[5] | Voorkomt de bank-referral, maar de klik is al losgekoppeld — conversie valt terug op Direct[4] |
_gl cross-domain linker | Draagt de client-context mee in de redirect-URL[5] | De bank-app opent zijn eigen context en geeft de parameter niet gegarandeerd terug[3] |
| Cross-domain tracking | Deelt cookies tussen je site en de gateway[5] | Werkt tussen domeinen in dezelfde browser, niet over een sprong naar een aparte app[3] |
Browser-side pleisters zijn gebouwd voor een redirect binnen de browser, niet voor een mobiele bank-app-hop. Source: OptimizeSmart, 2026[5].
Doe ze toch. Referral-uitsluiting van je gateways en banken is gratis en houdt je bronnenrapport schoner. Zie het als het minimum — niet als de oplossing. Op de bank-app-hop knappen ze, en dat is precies waar je iDEAL-verkeer doorheen gaat.
De echte fix: server-side webhooks
De oplossing is om de conversie niet meer afhankelijk te maken van de browser die terugkomt. Je legt de identiteit van de klik vroeg vast en speelt hem later server-to-server terug. Concreet, in volgorde:
1. Vang de identifiers bij checkout. Op het moment dat de klant afrekent — vóór de redirect — lees je uit de _ga-cookie de GA4 client_id en session_id[8], plus de gclid (Google Ads), de fbp en fbc (Meta). Dat kan nog netjes, want de browser is op dat moment gewoon aanwezig.
2. Sla ze op bij de order. Schrijf die identifiers als metadata weg bij de bestelling in je backend[8]. Nu hangt de klik-identiteit aan de order, niet aan een vluchtige browsersessie die zo de bank-app in verdwijnt.
3. Laat de webhook de conversie sturen. Wanneer Mollie of Adyen de betaling bevestigt, vuurt hun webhook server-side af naar jouw backend. Dat is je trigger. Je stuurt dan het purchase-event via het GA4 Measurement Protocol (en Meta CAPI) mét de opgeslagen client_id, session_id, gclid en fbp[7][8].
4. De conversie plakt terug aan de oorspronkelijke klik. Omdat je de client_id en session_id meestuurt, koppelt GA4 het event aan de sessie waarin de advertentieklik zat — niet aan een nieuwe Direct-sessie[8]. Google Ads en Meta krijgen hun credit terug.
Je repareert de meting niet in de browser die wegvalt. Je verplaatst hem naar de webhook die altijd afvuurt.
Dit is meteen de aanbevolen aanpak voor betrouwbare e-commerce-meting in het algemeen: het purchase-event server-side sturen via webhook en Measurement Protocol geeft schonere checkout-data dan een event dat afhangt van of de bedankpagina wel volledig laadt[7].
Waarom een webhook betrouwbaarder is dan de browser
Het grote voordeel is simpel: de webhook vuurt server-to-server af, los van de browser van de klant. Geen afgebroken sessie, geen gemiste bedankpagina, geen adblocker die het event tegenhoudt. De betaling is bevestigd, dus het event kómt — punt.
Maar wees eerlijk over de keerzijde, want die is de reden dat stap 1 en 2 hierboven niet optioneel zijn. Op het moment dat de webhook afvuurt, is de browser van de klant onbereikbaar. De webhook heeft geen _fbp-cookie, geen echte User-Agent en geen betekenisvol client-IP meer[6]. Vuur je "kaal" af, dan mist je event precies de identiteit die attributie mogelijk maakt.
De nuance die het maakt of breekt: een webhook is alleen zo goed als de identifiers die je erin stopt. Sla je bij checkout niet vooraf de client_id, gclid en fbp op, dan levert de webhook een conversie zonder herkomst — net zo blind als de browser die je probeerde te vervangen[6]. Vastleggen en terugspelen: dat is de hele truc.
Dit is trouwens dezelfde server-side aanpak die een ander datalek dicht: het verlies door cookieweigeringen onder de AVG. Ander gat, zelfde medicijn. Daarover schreven we apart in AP-proof tracking zonder conversieverlies. Ga je toch server-side bouwen, dan pak je die twee lekken het slimst in één keer aan.
Hoe begin je
Geen half jaar aan bouwwerk. Dit is een gerichte ingreep van zo'n 30 dagen, in vijf stappen die op elkaar voortbouwen.
Stap 1: audit je self-referrals in GA4. Kijk in je bronnenrapport of banken en gateways (mollie, adyen, ideal, ing, rabobank) als source/medium opduiken[4]. Zie je die, dan lekt je iDEAL-attributie aantoonbaar. Twijfel je of je meting überhaupt klopt, draai dan eerst een gratis tracking checker voordat je op deze cijfers gaat sturen.
Stap 2: zet gateways op de referral-uitsluiting. Voeg je banken en betaal-gateways toe aan de uitsluitingslijst[5]. Dit is het minimum, geen eindstation — het houdt de bank uit je bronnen, maar redt de klik nog niet.
Stap 3: leg de identifiers vast bij checkout. Lees vóór de redirect de client_id en session_id uit de _ga-cookie, plus gclid en fbp, en sla ze op bij de order[8].
Stap 4: koppel de Mollie/Adyen-webhook aan Measurement Protocol en Meta CAPI. Laat de payment-confirmed-webhook het purchase-event server-side sturen mét de opgeslagen identifiers[7][8].
Stap 5: valideer in GA4 DebugView. Doe een testaankoop met iDEAL en controleer dat het purchase-event binnenkomt op de juiste sessie en bron, niet op Direct. Meet je het niet, dan weet je niet of het werkt.
FAQ
Bronnen
- iDEAL (Currence/EPI) — Latest & kerncijfers: jaarlijks worden circa 1,3 miljard transacties via iDEAL verwerkt (primaire bron voor het transactievolume); marktaandeel ~70% cf. Statista. ideal.nl; statista.com
- Betaalvereniging Nederland — Online payment methods (iDEAL de meestgebruikte online betaalmethode in NL, rond de 70% marktaandeel). betaalvereniging.nl
- Snifflytics — PayPal, Stripe and checkout attribution leaks: auditing GA4 for the 4 gateway patterns that break tracking (off-domain redirect start een nieuwe sessie en schrijft de gateway/bank als bron; de echte bron verliest credit), 2026. snifflytics.com
- OptimizeSmart — Self-referral in GA4 & referral exclusion (sessiebreuken/redirects fragmenteren sessies en verstoren attributie; betaal-gateways zijn een klassieke oorzaak). optimizesmart.com
- OptimizeSmart — Setup cross-domain tracking in Google Analytics 4 (referral-uitsluiting van betrokken domeinen, de
_glcross-domain linkerparameter en het delen van de client_id-cookie tussen domeinen). optimizesmart.com - Sweetcode — WooCommerce Conversion API quality (bij het afvuren van de gateway-webhook is de browser onbereikbaar: geen
_fbp-cookie, geen User-Agent, geen betekenisvol client-IP; identifiers moeten eerder zijn opgeslagen). sweetcode.com - Tracklution — Server-side tracking for GA4 (purchase-event server-side sturen via webhook + Measurement Protocol geeft betrouwbaardere checkout-data dan browser-load-events), 2026. tracklution.com
- Analyzify — Server-side tracking for GA4 (server-side purchase-setup vereist de GA client_id en session_id om het event aan de juiste sessie/bron te koppelen). docs.analyzify.com