{"id":69075,"date":"2026-04-23T08:59:02","date_gmt":"2026-04-23T08:59:02","guid":{"rendered":"https:\/\/taggrs.io\/waarom-je-ga4-roas-onnauwkeurig-is-en-2-structurele-oplossingen-die-helpen\/"},"modified":"2026-04-23T09:21:42","modified_gmt":"2026-04-23T09:21:42","slug":"how-to-fix-ga4-roas-inaccuracies","status":"publish","type":"post","link":"https:\/\/taggrs.io\/nl\/how-to-fix-ga4-roas-inaccuracies\/","title":{"rendered":"Waarom je GA4 ROAS onnauwkeurig is (en 2 structurele oplossingen die helpen)"},"content":{"rendered":"\n<p>\"Mijn ROAS is 500% maar ik ben eigenlijk niet winstgevend. Wat zie ik over het hoofd?\" Die vraag komt voortdurend terug in paid search communities. De campagnes halen de doelstellingen, het dashboard ziet er goed uit, maar de financi\u00ebn weerspiegelen het niet.  <\/p>\n\n<p>Het punt is: het probleem zijn meestal niet de campagnes. Het zijn de gegevens waarvan ze leren.   <\/p>\n\n<p>De discrepantie in de gegevens komt meestal door 2 hiaten die niet zichtbaar zijn in de standaardrapportage:<\/p>\n\n<ol class=\"wp-block-list\">\n<li>E\u00e9n daarvan is <strong>waar de conversiegegevens ophouden<\/strong>. GA4 houdt browsergebeurtenissen bij zoals het invullen van formulieren, het voltooien van een checkout en het laden van een pagina. Wat niet wordt vastgelegd, zijn resultaten die plaatsvinden nadat de browsersessie is afgelopen: een lead die telefonisch wordt afgesloten, een deal die wordt getekend na een vervolggesprek, een klant die de winkel binnenloopt nadat hij op een advertentie heeft geklikt. Deze uitkomsten bestaan buiten het zicht van GA4 en de campagnes die ze hebben veroorzaakt krijgen geen waardering.   <\/li>\n\n\n\n<li>Het andere is <strong>wat \"conversiewaarde\" eigenlijk betekent<\/strong>. Wanneer een aankoop wordt gedaan in GA4, is de waarde die wordt doorgegeven aan Google Ads het orderbedrag - wat de klant heeft betaald, niet wat het bedrijf heeft gehouden. Een product met 60% kostprijs en nog eens 13% aan verzendkosten, retourzendingen en kosten laat een brutomarge van 27% over. Bij een ROAS van 500%, waarbij 20 cent van elke omzet naar advertenties gaat, blijft er ruwweg 7% over voor overhead. Voor het biedalgoritme zien een product met een marge van 70% en een product met een marge van 20% er hetzelfde uit. Beide zijn gewoon dollarbedragen.     <\/li>\n<\/ol>\n\n<p>GA4 heeft twee structurele blinde vlekken waardoor ROAS er beter uitziet dan het in werkelijkheid is. Geen van beide is een configuratiefout. Beide zijn te verhelpen. In dit artikel leggen we uit wat de oorzaken zijn, hoe het Google Ads Smart Bidding verstoort en wat je nodig hebt om het gat te dichten.   <\/p>\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n<h2 id=\"blind-spot-1-offline-conversions-that-never-get-reported\" class=\"wp-block-heading\">Blinde vlek 1: offline conversies die nooit gerapporteerd worden<\/h2>\n\n<h3 id=\"the-problem\" class=\"wp-block-heading\">Het probleem<\/h3>\n\n<p>Het probleem is het duidelijkst bij B2B-leadgeneratie. Een campagne zorgt ervoor dat contactformulieren worden ingevuld. GA4 registreert ze allemaal. Als we naar de gegevens van vorige maand kijken, levert de campagne 20 leads op.   <\/p>\n\n<p>Wat je niet ziet: 12 van die leads werden offline afgesloten. Een verkoper volgde op, stuurde een voorstel, voerde verschillende gesprekken en ondertekende de deal. Die inkomsten worden nooit toegeschreven aan de campagne die het gesprek op gang bracht. GA4 toont nog steeds 20 leads. Voor het biedalgoritme ziet de campagne eruit alsof deze <strong>8 conversies<\/strong> heeft gegenereerd <strong>zonder bijbehorende inkomsten<\/strong>.    <\/p>\n\n<p>Biedingen worden verlaagd. Het budget verschuift naar campagnes die schonere conversiegegevens laten zien, wat meestal campagnes betekent waarbij het hele pad zich binnen een browsersessie afspeelt. Je beste leadbron wordt als een zwakke bron behandeld omdat de <strong>sluitende helft van de trechter onzichtbaar is<\/strong>.  <\/p>\n\n<p>Dit is niet alleen een B2B-probleem. Telefonische bestellingen, aankopen in de winkel die worden aangedreven door betaalde advertenties, transacties die dagen na de eerste klik via een ander kanaal plaatsvinden - dit alles valt buiten het attributiebeeld zonder een doelbewuste oplossing. GA4 heeft geen mechanisme om gegevens te ontvangen nadat de sessie is afgelopen. Om de lus te sluiten is een pijplijn nodig die uw CRM- of verkoopsysteem terug verbindt met Google Ads met behoud van de oorspronkelijke klik-ID.   <\/p>\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n<figure class=\"wp-block-image size-full has-custom-border\"><img decoding=\"async\" width=\"1598\" height=\"1396\" src=\"https:\/\/taggrs.io\/wp-content\/uploads\/2026\/04\/image-22.webp\" alt=\"\" class=\"wp-image-69048\" style=\"border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px\" title=\"\"><\/figure>\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n<p>Als je je huidige installatie nog niet hebt gecontroleerd, is deze gids over <a href=\"https:\/\/taggrs.io\/nl\/tracking-signal-loss\/\">het traceren van signaalverlies<\/a> een goed startpunt.<\/p>\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n<h3 id=\"how-the-bidding-algorithm-is-affected\" class=\"wp-block-heading\">Hoe het biedalgoritme wordt be\u00efnvloed<\/h3>\n\n<p><a href=\"https:\/\/support.google.com\/google-ads\/answer\/7065882?hl=en\" target=\"_blank\" rel=\"noopener\">Smart Bidding van Google Ads<\/a> leert van de conversiesignalen die het ontvangt. Het past biedingen aan op basis van welke campagnes, zoekwoorden en doelgroepsegmenten conversies hebben opgeleverd en hoeveel waarde deze conversies hebben. Dit betekent dat als een aanzienlijk deel van je echte resultaten nooit wordt gerapporteerd, het algoritme werkt vanuit een <strong>onvolledig beeld<\/strong>.  <\/p>\n\n<p>De meeste accounts realiseren zich niet hoeveel volume ze missen. Consequent lage conversieaantallen zijn ook een van de belangrijkste redenen waarom Smart Bidding ondermaats presteert: het algoritme heeft genoeg signalen nodig om een leerpatroon vast te stellen. Voeg offline conversies toe en die drempel wordt haalbaar.  <\/p>\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n<h3 id=\"how-taggrs-fixes-it-closing-the-loop-with-offline-conversions\" class=\"wp-block-heading\">Hoe TAGGRS het oplost: de cirkel sluiten met offline conversies<\/h3>\n\n<p>De oplossing vereist een pijplijn die je <strong>CRM of back-end verkoopsysteem terug<\/strong> verbindt <strong>met Google Ads<\/strong>, waarbij de oorspronkelijke klik-ID intact blijft. Zo werkt het in de praktijk: <\/p>\n\n<ul class=\"wp-block-list\">\n<li>Leg de GCLID vast bij het indienen van een formulier. Wanneer een bezoeker landt via een Google-advertentie, zit de klik-ID (GCLID) als parameter in de URL. JavaScript op je landingspagina leest het en slaat het op in een first-party cookie. Een verborgen formulierveld pikt het op en geeft het door aan je CRM, samen met de contactgegevens van de lead.   <\/li>\n\n\n\n<li>Sla het op in het leadrecord. Je CRM slaat de GCLID op als een aangepast veld. HubSpot doet dit rechtstreeks via zijn formulieren. Salesforce en Pipedrive doen dit via aangepaste velden en formulierintegraties. Zonder deze vastlegstap op het moment van indiening is er geen match key voor de import later.    <\/li>\n\n\n\n<li>Stuur een webhook wanneer de deal wordt gesloten. Wanneer een deal als gewonnen wordt gemarkeerd in je CRM, wordt een webhook geactiveerd en worden de conversiegegevens (inclusief de opgeslagen GCLID- en toestemmingswaarden) naar je GTM-container aan de serverzijde verzonden. <\/li>\n\n\n\n<li>Importeer naar Google Ads met de klik-ID. Je sGTM-container stuurt de gegevens door naar Google Ads. Het platform koppelt de gesloten deal terug naar de exacte campagne, het zoekwoord en de advertentie waarmee de deal is gestart.  <\/li>\n<\/ul>\n\n<p>E\u00e9n belangrijke beperking om rekening mee te houden. Google Ads accepteert alleen offline conversie-importen binnen 90 dagen na de oorspronkelijke klik. Voor lange verkoopcycli is de standaardaanpak om een tussenliggende conversiegebeurtenis te importeren (een gekwalificeerde leadfase of een ondertekend voorstel) in plaats van te wachten op de uiteindelijke afsluiting. Hierdoor blijft de attributie binnen het toegestane venster terwijl het algoritme toch een zinvol signaal krijgt over welke campagnes echte pijplijn genereren.   <\/p>\n\n<p>Met <a href=\"https:\/\/taggrs.io\/nl\/offline-conversions-prove-real-roas\/\">TAGGRS Offline Conversion<\/a> handelt u de volledige offline conversiepijplijn af, van de sGTM-container tot de Google Ads import, zodat u de infrastructuur niet zelf hoeft op te bouwen en te onderhouden.<\/p>\n\n<p>De setup is schaalbaar voor meerdere klantaccounts zonder elke keer helemaal opnieuw te hoeven beginnen.<\/p>\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n<figure class=\"wp-block-image size-large has-custom-border\"><img decoding=\"async\" width=\"1024\" height=\"516\" src=\"https:\/\/taggrs.io\/wp-content\/uploads\/2026\/04\/image-21-1024x516.webp\" alt=\"\" class=\"wp-image-69043\" style=\"border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px\" title=\"\"><\/figure>\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n<p>Op deze manier stopt het algoritme met het zien van 8 conversies en begint het met het zien van 20, met werkelijke inkomsten gekoppeld aan de conversies die zijn afgesloten. Biedingen worden overeenkomstig aangepast en de campagnes die geen budget hadden, beginnen te concurreren op de juiste voorwaarden. <\/p>\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n<h2 id=\"blind-spot-2-revenue-%e2%89%a0-profit\" class=\"wp-block-heading\">Blinde vlek 2: omzet \u2260 winst<\/h2>\n\n<h3 id=\"the-problem\" class=\"wp-block-heading\">Het probleem<\/h3>\n\n<p>Zelfs met volledige conversietracking kan ROAS berekend op basis van orderwaarde ernstig misleidend zijn.<\/p>\n\n<p>Een campagne die over twee productcategorie\u00ebn loopt, kan identieke ROAS-cijfers laten zien terwijl de ene een sterke marge genereert en de andere nauwelijks kostendekkend is. Google Ads kan hier geen onderscheid tussen maken, tenzij je verschillende conversiewaarden stuurt. Zonder margegegevens in het signaal, schaalt het algoritme beide gelijk en geeft het de voorkeur aan het product dat de hoogste totalen genereert.  <\/p>\n\n<p>Voor bureaus die accounts beheren voor meerdere klanten of productlijnen is dit patroon gebruikelijk. De cijfers op het dashboard zien er goed uit. De ROAS-doelstellingen worden gehaald. Ondertussen concentreert het budget zich op producten die inkomsten genereren terwijl ze de winstgevendheid uithollen. Het standaardrapport heeft geen manier om dat aan het licht te brengen.    <\/p>\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n<h3 id=\"how-it-distorts-bidding\" class=\"wp-block-heading\">Hoe het het bieden verstoort<\/h3>\n\n<p>Smart Bidding optimaliseert naar de conversiewaarde die je stuurt. Als die waarde het transactiebedrag is, optimaliseert het naar inkomsten. Producten die een sterke marge genereren en producten die nauwelijks kostendekkend zijn, zien er identiek uit in het signaal.  <\/p>\n\n<p>Het algoritme doet niets verkeerd. Het leert van de gegevens die het heeft. Het probleem is dat de gegevens niet weergeven wat echt belangrijk is voor het bedrijf.  <\/p>\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n<figure class=\"wp-block-image size-full has-custom-border\"><img decoding=\"async\" width=\"1600\" height=\"1163\" src=\"https:\/\/taggrs.io\/wp-content\/uploads\/2026\/04\/image-23.webp\" alt=\"\" class=\"wp-image-69050\" style=\"border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px\" title=\"\"><\/figure>\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n<h3 id=\"how-taggrs-fixes-it-profit-based-conversion-values\" class=\"wp-block-heading\">Hoe TAGGRS het oplost: op winst gebaseerde conversiewaarden<\/h3>\n\n<p>De oplossing ligt op het niveau van het conversiesignaal. De waarde die tijdens de conversie naar Google Ads wordt gestuurd, moet de marge weerspiegelen, niet de prijs. <\/p>\n\n<p>TAGGRS Profit Tracking haalt de margegegevens uit Firestore en geeft deze via de servercontainer door aan Google Ads als conversiewaarde. In plaats van het transactiebedrag dat de klant heeft betaald, <strong>ontvangt het platform de werkelijke marge <\/strong>voor die bestelling. <\/p>\n\n<p>Goed om te weten voordat je dit instelt: het vereist een server-side container. Een browsergebaseerde tag kan geen verbinding maken met Firestore.  De data bevindt zich aan de server-side en moet daar worden verwerkt. <a href=\"https:\/\/taggrs.io\/nl\/gtm-server-side-tagging-hosting\/\">TAGGRS verzorgt die serverinfrastructuur<\/a>, waardoor de margedata beschikbaar is op het moment van conversie. <\/p>\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/taggrs.io\/docs\/server-side-tracking\/profit-tracking\">Bekijk de volledige installatiedocumentatie<\/a><\/div>\n<\/div>\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n<p>Zodra de margewaarden door het signaal stromen, concurreren campagnes op werkelijke winst. Producten die op basis van inkomsten alleen winnaars leken, worden nu beoordeeld op wat ze daadwerkelijk opleveren. <\/p>\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n<h2 id=\"what-accurate-roas-actually-looks-like\" class=\"wp-block-heading\">Hoe nauwkeurige ROAS er eigenlijk uitziet<\/h2>\n\n<p>Wanneer beide oplossingen zijn toegepast, verandert het beeld dat Google Ads bereikt drastisch.<\/p>\n\n<p>Google Ads ontvangt offline conversierecords die zijn gekoppeld aan oorspronkelijke klikken via GCLID, samen met voor marge gecorrigeerde waarden in plaats van ruwe ordertotalen. Campagnes waarop te weinig werd geboden omdat hun offline deals onzichtbaar waren, beginnen budget terug te winnen. Producten met echte marges trekken meer bestedingen aan.  <\/p>\n\n<p>Campagnes die sterk leken qua inkomsten, maar met een kleine marge draaiden, kregen geen prioriteit. Het algoritme veranderde niet. Het kreeg alleen nauwkeurige gegevens om mee te werken.  <\/p>\n\n<p>Er is ook een volume-effect. Smart Bidding heeft voldoende conversiegegevens nodig om goed te werken - de meeste accounts halen die drempel niet als offline conversies ontbreken. Voeg ze weer toe en campagnes beginnen betere geautomatiseerde biedstrategie\u00ebn te ontsluiten. De leercyclus wordt korter.   <\/p>\n\n<p>Voor agencies zit hier ook een reporting-kant aan. <a href=\"https:\/\/taggrs.io\/nl\/google-ads-server-side-tracking\/\">Server-side conversietracking<\/a> maakt het mogelijk om Google Ads-uitgaven te koppelen aan echte bedrijfsresultaten in plaats van browsergebeurtenissen. De infrastructuur schaalt over accounts heen zodra die eenmaal is opgezet. <\/p>\n\n<p>Als je huidige ROAS-rapportage geen rekening houdt met offline conversies of productmarge, <a href=\"https:\/\/taggrs.io\/nl\/demo\/\">boek dan een demo<\/a> om te zien waar de gaten zitten en wat er nodig is om ze te dichten.<\/p>\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n<h2 id=\"faq\" class=\"wp-block-heading\">FAQ<\/h2>\n\n<h3 id=\"how-does-a-crm-get-access-to-the-gclid-in-the-first-place\" class=\"wp-block-heading\">Hoe krijgt een CRM \u00fcberhaupt toegang tot de GCLID?<\/h3>\n\n<p>De CRM leest browsercookies niet rechtstreeks. De GCLID moet worden vastgelegd op het moment dat een lead een formulier indient. JavaScript op je landingspagina leest de klik-ID uit de URL-parameter, slaat deze op in een first-party cookie tijdens de sessie en een verborgen formulierveld stuurt het door naar je CRM, samen met de naam, het e-mailadres en andere leadgegevens van de contactpersoon. De CRM slaat het op als een aangepast veld in het leadrecord. Als de deal later wordt gesloten, haalt de webhook de opgeslagen GCLID van de lead op en stuurt deze naar TAGGRS. Zonder deze capturestap bij het indienen van het formulier is er geen match key voor de offline conversie-import. De meeste CRM's ondersteunen dit out of the box of via een lichtgewicht script. HubSpot heeft native GCLID-tracering ingebouwd in zijn formulieren. Andere zoals Salesforce en Pipedrive doen dit via aangepaste velden en formulierintegraties.        <\/p>\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n<h3 id=\"what-if-the-deal-closes-more-than-90-days-after-the-original-click\" class=\"wp-block-heading\">Wat als de deal meer dan 90 dagen na de oorspronkelijke klik wordt gesloten?<\/h3>\n\n<p>Google Ads <a href=\"https:\/\/support.google.com\/google-ads\/answer\/15081888?hl=en\" target=\"_blank\" rel=\"noopener\">accepteert alleen offline conversie-uploads binnen 90 dagen<\/a> na de oorspronkelijke klik. Als een deal na die periode wordt gesloten, kan de conversie niet worden gematcht en wordt de import geweigerd. Voor lange verkoopcycli is de standaardaanpak om een tussenliggende conversiegebeurtenis te importeren - een gekwalificeerde leadfase, een ondertekend voorstel of een vastgelegde opportunity - in plaats van te wachten op de uiteindelijke sluiting. Hierdoor blijft de attributie binnen het venster terwijl het algoritme toch een zinvol signaal krijgt over welke campagnes de echte pijplijn genereren.   <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Twee structurele gaten in GA4 zorgen ervoor dat je ROAS er beter uitziet dan het ...<\/p>\n","protected":false},"author":15,"featured_media":69065,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[324],"tags":[682],"class_list":["post-69075","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-google-analytics","tag-roas-in-ga4"],"acf":[],"_links":{"self":[{"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/posts\/69075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/comments?post=69075"}],"version-history":[{"count":3,"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/posts\/69075\/revisions"}],"predecessor-version":[{"id":69078,"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/posts\/69075\/revisions\/69078"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/media\/69065"}],"wp:attachment":[{"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/media?parent=69075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/categories?post=69075"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/taggrs.io\/nl\/wp-json\/wp\/v2\/tags?post=69075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}