Naar de inhoud

Problemen oplossenGA4

GA4 purchase-event vuurt twee keer op Shopify: diagnose

Telt GA4 twee aankopen voor één Shopify-bestelling? Vind de tweede afzender — app, pixel, snippet of serverhit — en controleer het transaction_id.

Gepubliceerd
Gecontroleerd

Diagnose

  1. Platform GA4
  2. Gebruikelijke oorzaak Twee afzenders vuren een purchase af voor dezelfde bestelling zonder overeenkomend transaction_id.
  3. Oorzaken, op volgorde 6
  4. Hoe je het diagnosticeert 7
Naar de checks

Eerste antwoord gratis, binnen één werkdag. Beschrijf je situatie

Klinkt bekend?

Het symptoom

Symptoommelding GA4

Er komen echte bestellingen binnen, maar het ecommerce-rapport van GA4 toont meer aankopen dan de winkel daadwerkelijk heeft geregistreerd — soms bijna het dubbele. Het aantal bestellingen van Shopify beweegt niet; het aantal aankopen van GA4 wel.

De afwijking is zelden netjes: sommige bestellingen worden één keer geteld en andere twee keer, waardoor de totalen geleidelijk uiteenlopen. De test die uitsluitsel geeft, is klein: groepeer aankopen op transaction_id en zoek één bestelnummer op twee rijen. Dat onderscheidt duplicatie van elke andere reden waarom een aankoopaantal hoog lijkt.

Eén bestelling die twee identieke purchase-events oplevert, die in de teller als twee in plaats van één belanden
Vink aan wat je ziet

Vink de regels aan die bij je winkel passen.

Mijn situatie beschrijven

De korte versie

Direct antwoord

GA4 telt één Shopify-bestelling twee keer wanneer twee onafhankelijke afzenders elk een purchase voor die bestelling afvuren en GA4 ze niet kan matchen. Matchen vereist hetzelfde, niet-lege transaction_id aan beide kanten. Het waarschijnlijke paar is de Google & YouTube-app en een custom pixel — maar elk tweede pad heeft hetzelfde effect.

GA4 dedupliceert purchase-events die hetzelfde niet-lege transaction_id delen, en voegt events samen die een leeg ID delen. Een ontbrekend ID is niet neutraal: het laat niet-gerelateerde bestellingen samenvallen. Twee afzenders die hun eigen ID genereren, of het leeg laten, worden apart geteld.

Waar je moet kijken

Oorzaken, op volgorde

GA4 telt bestellingen dubbel6 oorzaken

  1. De Google & YouTube-app en een custom pixel sturen allebei purchase

    Beide mappen het checkout_completed-event van Shopify naar een GA4-purchase, dus één bestelling levert twee events op. Elk kiest zijn eigen transaction_id, en wanneer de strings verschillen kan GA4 ze niet matchen.
  2. Een tweede afzender waar je geen rekening mee hield

    Een gewone snippet in een themabestand kan de nieuwe checkout niet zien, maar een app-blok, een theme app extension of een door een app geïnjecteerde tag kan nog steeds draaien op de orderstatuspagina, en code van vóór de migratie kan nog live staan. Twee pixels in Customer Events hebben hetzelfde effect.
  3. De orderstatuspagina die opnieuw afgaat bij herladen of terugkeren

    Als de purchase bij het laden van de pagina afgaat in plaats van één keer per bestelling, stuurt het verversen van de pagina of het opnieuw openen van de orderstatuslink uit een e-mail nog een event. Zonder een “al verzonden”-controle lijkt elk bezoek een nieuwe aankoop.
  4. transaction_id dat niet overeenkomt, of helemaal ontbreekt

    De ene afzender gebruikt misschien het bestel-ID, de andere de bestelnaam of het checkout-token — GA4 matcht op de exacte string, dus dat zijn twee bestellingen. Een leeg ID is erger: GA4 dedupliceert alle aankopen die het delen.
  5. Twee metings-ID’s of twee GTM-containers

    Een tweede Google-tag of container kan dezelfde purchase twee keer naar dezelfde property routeren, of hem van binnenuit de pixel doorsturen naast één op de storefront.
  6. Server-side forwarding plus de browserhit, zonder gedeelde deduplicatie

    Een order-webhook die via een servercontainer of Measurement Protocol wordt doorgestuurd, stuurt een tweede purchase voor bestellingen die de browser al rapporteerde — prima totdat hij een ander transaction_id draagt, of geen.

7 stappen

Hoe je het diagnosticeert

Werk van het event terug naar de afzender: tel hoeveel purchase-events GA4 voor één bekende bestelling ontving, lees het transaction_id op elk ervan en vind dan elk systeem dat er een gestuurd kan hebben. Eén testbestelling bewijst de duplicatie; de lijst met afzenders vertelt je wat je moet uitzetten.

  1. Som elk pixel op dat een purchase kan sturen. Open in het Shopify-beheercentrum Settings → Customer events en lees de geregistreerde pixels. Twee pixels die zich beide abonneren op checkout_completed en purchase sturen, zijn je eerste antwoord.
  2. Controleer of de Google & YouTube-app er één van is. Controleer in Settings → Apps and sales channels of het kanaal Google & YouTube is geïnstalleerd. Als dat zo is en een custom pixel stuurt ook een purchase, dan moet één van de twee worden uitgezet.
  3. Plaats een testbestelling in debug-modus. Open in GA4 Admin → DebugView en rond een echte checkout af op een apparaat in debug-modus. Twee purchase-rijen voor één bestelling zijn de bevestiging; open beide en noteer elk transaction_id. Reports → Realtime toont dezelfde aankomsten zonder debug-modus.
  4. Vergelijk de twee ID’s en herlaad dan de pagina. Klap beide events open in DebugView en vergelijk transaction_id. Identiek en niet leeg betekent dat deduplicatie ze had moeten samenvoegen en dat er iets anders mis is; verschillende of lege waarden betekenen dat GA4 twee bestellingen kreeg. Herlaad daarna de bedankpagina en navigeer terug: een nieuwe purchase bij elk bezoek wijst op een trigger bij paginaladen zonder “al verzonden”-controle.
  5. Tel aankopen per transaction_id in een Exploration. Open in GA4 Explore → Free-form, stel de dimensie in op Transaction ID en de metriek op Event count, en filter op eventnaam gelijk aan purchase. Elk transactie-ID met een telling boven één is gedupliceerd.
  6. Zoek een tweede tag of container. Zoek in de broncode van de storefront naar de identifiers van de Google-tag en de container; meer dan één is het benoemen waard, en GA4 → Admin → Data Streams toont de legitieme bestemming. GTM Preview ziet storefront-tags, maar kan zich niet vastmaken binnen de pixel-sandbox, dus beoordeel de pixel via DebugView.
  7. Reconcilieer een afgesloten dag aan bestellingen. Exporteer een dag via Shopify → Orders → Export en haal event-data van GA4 op met eventnaam en transaction_id uit een Exploration-export of BigQuery. Match per bestelling: een paar verdubbelde bestellingen per dag is dezelfde bug als een verdubbeling in de hele winkel.

Signaal en oplossing

Beslissingstabel

Koppel het signaal uit DebugView aan de afzender die het impliceert, en maak dan de kleinste wijziging die één purchase-pad overlaat.

OorzaakSignaal dat je zietOplossing
Google & YouTube-app plus een custom pixelTwee purchase-events voor één bestelling, met verschillende transaction_id-waardenHoud één pad aan: schakel de purchase van de app of die van de pixel uit en test opnieuw
Achtergebleven snippet of extra pixelMeer dan één pixel in Customer Events, of een door een app geïnjecteerde tag op de orderstatuspaginaVerwijder de overbodige afzender; houd één abonnement dat purchase afvuurt
Herladen van de orderstatuspaginaEen nieuwe purchase telkens wanneer de bedank- of orderstatuspagina laadtVuur één keer af vanuit checkout_completed en registreer dat de bestelling al is gerapporteerd
transaction_id komt niet overeen of is leegVerschillende ID’s op de twee events, of één leegStuur dezelfde niet-lege waarde — het Shopify-bestel-ID — op elk pad
Twee metings-ID’s of containersMeer dan één Google-tag of container in de broncode van de storefrontVerwijder de verouderde tag of container; houd één bestemming per event
Serverhit plus browserhitEen serverpurchase draagt een ander of ontbrekend transaction_idStuur het transaction_id van de browser door, of stop de dubbele serverzending

Een notitie van Daniilvoordat je beslist

Los je het zelf op of schakel je hulp in?

De tweede afzender vinden is meestal beheerwerk: de Customer Events-lijst plus DebugView is genoeg om de oorzaak in de meeste winkels te benoemen. Hem verwijderen is waar code begint, en het risico dat je het pad dat je aanhoudt kapotmaakt.

Welke afzender je aanhoudt is een kwestie van afweging — meestal degene wiens parameters en consent-gedrag je vertrouwt, uitgezet in plaats van verwijderd zodat hij hersteld kan worden. Een overbodige pixel verwijderen, een abonnement herschrijven zodat het niet twee keer kan afgaan, of een gedeeld transaction_id naar een servercontainer laten doorlopen is ontwikkelwerk.

Doe het in die volgorde: stop de duplicatie, draai opnieuw één testbestelling in DebugView om één purchase te bevestigen, en reconcileer de volgende dag tegen Shopify. Als de duplicatie aanhoudt nadat je hebt bevestigd dat precies één pad afgaat, dan overspant de ID-logica meerdere systemen — dat is GA4-implementatiewerk, geen instellingsschakelaar.

— Daniil

Volgende stap

Als de zelfcheck geen uitsluitsel geeft.

De checks hierboven vinden de oorzaak in de meeste winkels. Overlappen er twee of meer, dan is een afstemming per bestelling sneller dan nog een middag dashboards vergelijken.

Tracking Health Check

Prijs
EUR 375
Toegang
Alleen-lezen
Doorlooptijd
oordeel twee werkdagen na de kickoff

Wat de afstemming laat zien voor dit symptoom.

Een Health Check stemt dit symptoom bestelling voor bestelling af met je Shopify-bestellingen, zodat de oorzaak een feit uit je eigen data is en geen gok op basis van een dashboard. Echte cijfers voor dit symptoom zijn nog niet gepubliceerd — vraag om het voorbeeldrapport.

Vraag een Health Check aan · EUR 375

Volg de bestelling. Vergelijk daarna het bewijs.

  1. Echte bestellingBestel-ID, bedrag, valuta
  2. Browser- / servereventsToestemming, event-ID, aflevering
  3. GA4 / advertentieplatformsOntvangen events en rapportage
  4. Gegevens afstemmenVergelijk IDs, perioden en definities
Een voltooide bestelling en een gerapporteerde conversie zijn verschillende registraties. Controleer de route en vergelijk dezelfde criteria voordat je een verschil als ontbrekende data ziet.

Vragen

Vragen die dit symptoom oproept

Waarom toont GA4 meer aankopen dan Shopify bestellingen heeft?

Omdat twee systemen dezelfde bestelling rapporteren en GA4 niet kan zien dat het hetzelfde event is. GA4 dedupliceert purchase-events die hetzelfde niet-lege transaction_id delen, dus wanneer de twee afzenders verschillende waarden kiezen — of één een lege string stuurt — worden beide geteld. Controleer hoeveel purchase-events er voor één bekende bestelling binnenkwamen, niet de totalen van de maand.

Dedupliceert GA4 aankopen niet automatisch?

Jawel, maar alleen onder een voorwaarde die je moet vervullen: de purchase-events moeten hetzelfde niet-lege transaction_id dragen. Automatische deduplicatie is een vangnet voor wanneer hetzelfde ID twee keer aankomt, geen oplossing voor twee systemen die hun ID's onafhankelijk genereren. Een leeg transaction_id is erger dan helemaal geen ID, omdat GA4 niet-gerelateerde aankopen die het delen samenvoegt.

Kan ik beide afzenders laten draaien en op deduplicatie vertrouwen?

Alleen als elk pad altijd exact hetzelfde transaction_id stuurt, wat zeldzaam is wanneer één afzender een door de leverancier beheerde app is waarvan je het ID niet kunt beheren. Eén purchase-pad draaien is het betrouwbare antwoord; een tweede pad is een permanente kans dat de twee ID's na een update uit elkaar lopen.

Laten Tag Assistant of GTM Preview de duplicatie zien?

Niet betrouwbaar. GTM Preview kan zich niet vastmaken binnen de pixel-sandbox van Shopify, dus het toont alleen tags die op de pagina draaien en het pixel-pad blijft onzichtbaar voor de tool. Behandel DebugView en het Realtime-rapport als het primaire bewijs, en gebruik Preview alleen voor de containers die het wél kan zien.

Lees verder, of check een verwant symptoom.

Alle symptomen
Daniil Maximkin

Hoi, ik ben Daniil.

Ik werk met je samen, van probleemdefinitie tot implementatie en overdracht. Je praat met degene die het werk doet. Ik werk in het Engels en het Russisch.

Geprobeerd en kom je er nog niet uit?

Beschrijf je taak

Het eerste antwoord is gratis, binnen één werkdag. Of schrijf rechtstreeks: next@taskfordaniel.com