Google Ads kan een conversie voor een Shopify-bestelling tonen zonder te verklaren waar het cijfer vandaan komt. Drie verschillende pipelines voeden hetzelfde account, en alle drie eindigen als een conversieactie met een vergelijkbare naam.
Deze gids vergelijkt ze op mechanismeniveau: wat de conversie afvuurt, wie de actie bezit, hoe een bestelling wordt gededupliceerd, hoe consent wordt gerespecteerd en wat elk kan bewijzen tegen een Shopify-orderexport. Er wordt geen winnaar gekozen, er worden geen leverancierskosten genoemd — bekijk de vermelding van de Google & YouTube-app — en de opties worden niet gerangschikt.
Wat stuurt de Google & YouTube-app naar Google Ads?
De Google & YouTube-app is een door Google ontwikkelde verkoopkanaal-app van Shopify. Hij laadt Google-tags op de winkel, mapt de standaardevents van Shopify naar bestemmingen die jij kiest en — wanneer je een Google Ads-account koppelt — maakt hij een purchase-conversieactie voor je aan. Google en Shopify onderhouden de mapping.
Je verbindt het Google-account, koppelt een Google Ads-account en bekijkt de Shopify-events en bestemmingen. Met een gekoppeld account zijn purchase, add to cart en checkout started de voorgestelde standaardwaarden. Controleer per actie de primaire of secundaire instelling en de bieddoelen van de campagne, in plaats van aan te nemen dat acties buiten purchase alleen ter observatie dienen. Per event kun je een actie aanmaken, een bestaande kiezen, overslaan of een aangepaste AW-CONVERSION_ID/CONVERSION_LABEL of Floodlight-bestemming invoeren.
Google Analytics verbinden staat los hiervan: de app kan ook Shopify-events naar een GA4-property sturen, en een Google Ads-conversie die uit een GA4 purchase key event is gemaakt is een eigen actie. Deduplicatie op transaction ID werkt binnen één actie, dus de twee voegen niet samen — twee acties die één bestelling tellen zijn twee conversies.
Deduplicatie is het deel dat over het hoofd wordt gezien. Google documenteert een Data Manager-verbinding waarin Shopify purchase-conversies server-naar-server stuurt, gededupliceerd tegen de events van de Google-tag binnen de conversieactie vóór attributie. Die ondersteunt alleen het event Checkout completed.
De beperkingen zijn structureel, geen bugs. De app ondersteunt standaard event- en tagconfiguratie; Google stelt dat sommige aangepaste instellingen en op code gebaseerde aanpassingen niet beschikbaar zijn, en dat privacy- of functie-instellingen in de code niet worden gerepliceerd. Google stelt ook dat Tag Manager niet via de app kan worden ingesteld en dat slechts één Google Ads-account direct kan worden gekoppeld — extra accounts voeg je handmatig toe op ID en label.
Wat doet een conversietag die je zelf bezit eigenlijk?
Een conversietag is code die de conversie afvuurt met parameters die jij kiest. Op Shopify draait hij als een webpixel die zich abonneert op de customer-events van Shopify en de identifier en value van de bestelling uit het checkout-event leest. In Tag Manager bouw je de Ads-tag, verwijs je naar die dynamische transaction_id en voeg je een Conversion Linker toe.
Shopify laadt webpixels in een sandbox in de browser van de bezoeker, en het standpunt van Google is expliciet: Google-tags draaien binnen de custom-pixelfunctie van Shopify is geen ondersteunde implementatie. Data kan nog steeds stromen terwijl functies falen, en de support van Google zal het niet debuggen. Wat mogelijk niet werkt vanuit de pixel-sandbox: Preview mode, veel trigger- en variabeletypen, Enhanced Conversions en Consent Mode URL passthrough.
De belangrijkste regel is het transaction ID. Google Ads bewaart de eerste conversie voor een bepaalde conversieactie en transaction ID en telt een tweede met hetzelfde ID niet mee. Het ID moet dynamisch per bestelling zijn, uniek, maximaal 64 tekens en zonder persoonsgegevens. Een vast ID hergebruiken leidt tot ondertelling; een leeg ID mist deze bescherming tegen duplicaten. Een ID dat tussen twee routes niet exact overeenkomt, kan ze niet als dezelfde conversie identificeren.
window.dataLayer = window.dataLayer || [];
// Hypothetisch voorbeeld: waarden komen uit de bestelling, nooit uit een vast bedrag.
window.dataLayer.push({
event: 'purchase',
transaction_id: order.id, // dynamic, unique per order, no personal data
value: order.total, // dynamic: the order's own value
currency: order.currency // dynamic: the store's currency
});
In plaats van een eigen tag kun je de conversie in Google Ads aanmaken vanuit een Google Analytics key event. Dat vereist gekoppelde accounts en auto-tagging, en de gclid mag niet door redirects worden gewijzigd of wegvallen. Deze conversies beginnen als secundair, en hun doelcategorie en actie-optimalisatie zijn alleen in Google Ads te bewerken, niet in de Analytics-interface. Importeren vanuit Analytics brengt ook geen view-through conversies mee, die de native meting van Google Ads nodig hebben.
Consent is het andere dat je zelf bezit: je configureert de standaard consentstatus voor ad_storage, analytics_storage, ad_user_data en ad_personalization — standaard stelt Google geen consent mode-waarden in — en werkt die bij nadat de bezoeker heeft gekozen. Basic mode blokkeert Google-tags tot consent; advanced mode laadt ze en stuurt cookieloze metingen zolang consent is geweigerd. Enhanced Conversions vereisen genormaliseerde first-party data die met hexadecimale SHA-256 is gehasht. (Dit betreft technische implementatie, geen juridisch advies.)
Wat meet een offline conversie-import dat de browser niet kan?
Een offline conversie-import registreert een conversie op basis van een identifier die je eerder hebt opgeslagen, niet op basis van een request op het moment van de conversie. Je legt de klik-identifier vast op de landing, bewaart die bij de bestelling of het leadrecord, en uploadt het resultaat later met datum, tijd, value en order-ID.
Het mechanisme is gedocumenteerd: auto-tagging moet aanstaan, de gclid wordt aan de landing-URL toegevoegd, en Google raadt aan hem op elke pagina vast te leggen en bij de bestelling op te slaan. Hij is hoofdlettergevoelig, en een bestandsimport gebruikt hem als sleutel. De conversieactie, datum en tijd zijn verplicht; order-ID, value en currency zijn optioneel, waarbij value terugvalt op het getal dat op de actie is gedefinieerd. Google documenteert GBRAID-ondersteuning voor imports met externe attributie, dus controleer de identifierondersteuning van jouw interface in plaats van aan te nemen dat de identifiers uitwisselbaar zijn.
Dat is wat deze route bewijst en een browser niet kan: een resultaat buiten de site — een telefonische verkoop of een ondertekend contract — en evengoed een purchase waarvan het browsersignaal nooit aankwam, mits de identifier is opgeslagen. Zonder identifier is er geen klik om te matchen.
De uploadplanning is belangrijk: de huidige instructies van Google verwijzen bestandsimports naar Data Manager en API-uploads naar de Data Manager API. De klassieke offline conversie-import is een verouderde functie. Wacht volgens Google 4–6 uur na het aanmaken van een conversieactie voordat je de eerste upload doet. Neem bij elke import een extra dag aan data mee, omdat conversies binnen een dag na de klik mogelijk nog niet zijn geregistreerd; verwerking kan 24–48 uur duren. Houd nieuwe conversies en aanpassingen in aparte bestanden. Herhaalde identifier, conversienaam, datum en tijd worden als duplicaten behandeld.
Terugbetalingen worden afgehandeld met conversieaanpassingen, niet met een tag — en niet alleen bij offline imports: elke online conversie die met een transaction ID is vastgelegd kan worden geherformuleerd of ingetrokken, inclusief een purchase uit de app of een tag. Een RESTATE verandert de value en laat het aantal staan; een RETRACT haalt de conversie uit de telling en zet de value op nul, en kan daarna niet opnieuw worden aangepast. Aanpassingen worden gesleuteld op de order-ID samen met de naam van de conversieactie, of op gclid en conversietijd wanneer de conversie geen order-ID had; met een gbraid werkt alleen de order-ID. Google adviseert aanpassingen minstens 24 uur na het origineel te uploaden, geeft tot 7 dagen nadat een conversie is vastgelegd zodat automatisch bieden hem kan lezen (54 dagen daarbuiten), en raadt aan elke bestelling te uploaden, omdat Ads niet kan weten welke bestellingen uit zijn klikken kwamen, dus rijen met fouten zijn te verwachten. Enhanced Conversions for leads is de opvolger die Google voorstelt, die ook gehashte door de gebruiker aangeleverde data matcht.
Naast elkaar
De app kost het minste werk en is het minst configureerbaar; een tag die je zelf bezit koopt parameters, consentcontrole en deduplicatie ten koste van onderhoud; een offline import is de enige route die een resultaat vastlegt dat buiten de site plaatsvindt. Alle drie volgen dezelfde regels voor transaction ID en consent, en geen enkele vervangt reconciliatie tegen je bestellingen.
Vergelijkingstabel — scrol horizontaal om alle kolommen te bekijken
| Criterium | Google & YouTube-app | Conversietag die je zelf bezit (GTM of custom pixel) | Offline conversie-import |
|---|---|---|---|
| Eventbron | Shopify-events, gemapt door de app | Jouw abonnementen, tag en triggers | Een opgeslagen klik-identifier |
| Purchase en terugbetalingen | Purchase voor je gemapt; terugbetalingen vragen een aparte aanpassing | Purchase die jij definieert; terugbetalingen vragen een aparte aanpassing | Registreert resultaten buiten de site; terugbetalingen via een aanpassing |
| Deduplicatie | Binnen de actie, inclusief server-naar-server | Jouw transaction_id, één actie | Order-ID, of identifier plus tijd |
| Consent | Pixel-privacy-API van Shopify | Jouw Consent Mode-standaardwaarden en -poort | Verplichtingen reizen mee met de upload |
| Data-eigenaarschap | Mapping door Google en Shopify; events belanden in het gekoppelde Ads-account | Tag, parameters en bestemming die jij beheert | Vastlegging, opslag en uploadbestemming onder jouw controle |
| Afhankelijkheid | De app, het verkoopkanaal, de mapping van Google | De sandbox van Shopify, GTM, jouw code | Jouw backend plus de upload naar Ads |
| Onderhoud | De leverancier onderhoudt de mapping | Jij onderhoudt schema’s en tests | Jij onderhoudt vastlegging en planning |
| Voor wie het past | Minimale code, standaardevents | Parameters die de app mist | Resultaten buiten de site |
Beslistabel
Kies de app voor standaard purchase-meting met minimale code, een tag die je zelf bezit wanneer je een parameter of consent-poort nodig hebt die de app mist, en een offline import wanneer het resultaat buiten de site of lang na de klik plaatsvindt. Terugbetalingen zijn altijd een aparte aanpassingsupload, en een rapportageverschil is een reconciliatieprobleem, geen schakelaar.
Vergelijkingstabel — scrol horizontaal om alle kolommen te bekijken
| Als je situatie is … | Kies … |
|---|---|
| Je wilt purchase-meting zonder code om te onderhouden | Google & YouTube-app |
| Je hebt een value, parameter of consent-poort nodig die de app mist | Een conversietag die je zelf bouwt |
| De conversie is een lead buiten de sandbox van Shopify | GTM-tag, of een geïmporteerd GA4 key event |
| Het resultaat vindt buiten de site of lang na de klik plaats | Offline import, of Enhanced Conversions for leads |
| Terugbetalingen moeten stoppen met het opblazen van de gerapporteerde value | Conversieaanpassingen, gesleuteld op order-ID |
| Je draait de app en overweegt een tweede tag | Verwijder eerst één route en verifieer daarna |
| Het symptoom is dat Google Ads en Shopify het oneens zijn | Geen van beide — begin bij reconciliatie |
Wanneer je elke optie beter niet gebruikt
De app is verkeerd wanneer je configuratie nodig hebt die hij niet blootlegt; de tag is verkeerd wanneer niemand hem kan onderhouden; de import is verkeerd wanneer er nooit een identifier is opgeslagen.
Grijp niet naar de Google & YouTube-app wanneer:
- Je een refund-event, een aangepaste value-formule of een parameter nodig hebt die de mapping niet meedraagt.
- Je Google-tags in Tag Manager op checkoutpagina’s nodig hebt, die Google volgens eigen zeggen niet via de app kan instellen en niet in een custom pixel ondersteunt.
- Je elke bestemming op één plek wilt configureren: de app koppelt één Google Ads-account direct, en extra accounts worden handmatig toegevoegd op conversie-ID en label of Google-tag.
Grijp niet naar een conversietag die je zelf bezit wanneer:
- Niemand hem gaat beheren: elke schemawijziging van Shopify wordt iets dat opgemerkt en gerepareerd moet worden.
- Je vertrouwt op Preview mode, Tag Assistant of conversiediagnose binnen de pixel-sandbox, waar Google documenteert dat sommige niet zullen werken.
- Je de door Google ondersteunde configuratie op checkoutpagina’s wilt.
Grijp niet naar een offline conversie-import wanneer:
- De identifier nooit vóór de bestelling is vastgelegd of opgeslagen; er is niets om te matchen.
- Je wilt dat hij de meting op de site vervangt; hij vult een werkende tag aan in plaats van een kapotte te repareren.
- Niemand de planning beheert; een import buiten cadans drijft weg van de actie die hij voedt.
Hoe ik dit verifieer in echte implementaties
Ik verifieer door te tellen en door de oorzaak van elk verschil te benoemen: één bestelling, één conversie per actie die je wilt tellen, met een niet-lege transaction ID die op elke route identiek is.
- Som elke conversieactie op die een purchase kan tellen. Lees de actie-optimalisatie, de standaarddoelen waartoe die acties behoren en eventuele aangepaste doelen. Primaire acties bieden wanneer hun standaarddoel biedt; secundaire acties verschijnen nog steeds in Alle conversies, en een actie in een aangepast doel biedt zelfs wanneer die secundair is.
- Identificeer elke route die een purchase stuurt. Bekijk Customer events en de app-instellingen in Shopify, en elke Ads-conversietag in Tag Manager. Eén route zou de purchase moeten bezitten.
- Volg één live testbestelling van begin tot eind. Tag Assistant en GTM Preview waar die werken, GA4 DebugView voor het event en zijn
transaction_id, conversiediagnose voor de status van de actie. Test meer dan één checkoutroute. - Controleer de sleutel tegen de bestelling. Niet leeg, uniek voor die bestelling, identiek waar hij ook voorkomt.
- Lees de instellingen die het cijfer vormen. Telwijze, attributievenster, value-bron en primaire of secundaire status bepalen wat het cijfer betekent; uit Analytics geïmporteerde conversies kunnen andere, bewerkbare instellingen dragen.
- Test een terugbetaling. Verwerk er één, upload de aanpassing en controleer in het uploadrapport of de rij overeenkwam. Een ingetrokken conversie kan niet opnieuw worden aangepast en een verwijderde websiteconversie kan niet in de rapporten worden teruggezet. Voor offline imports met de telinstelling ‘elke conversie’ beschrijft Google opnieuw uploaden met een iets later tijdstip. Ik test dit met een bestelling die ik kan missen.
- Reconciliëer een afgesloten periode. Vergelijk Ads-conversies van een afgerond venster met een Shopify-orderexport en noteer waarom ze verschillen, naast orderreconciliatie.
Veelvoorkomende faalpatronen
De meeste fouten zijn alledaags: twee actieve routes, een lege sleutel, een value die aan elke kant anders is gedefinieerd, of een upload buiten cadans.
- Twee routes, één bestelling. De instructies van Google zeggen dat je op dubbele tags moet controleren en verouderde moet verwijderen; twee acties in één campagne kunnen een bestelling twee keer tellen.
- Een transaction ID dat tussen routes verschilt. Prefixen, suffixen en losse spaties maken deduplicatie ongedaan, en een hergebruikt ID over bestellingen telt te weinig.
- Een identifier die is vastgelegd maar niet opgeslagen. Een gclid die op de landing is gelezen en nooit aan de bestelling is gekoppeld, laat niets over om later te uploaden.
- Uploads voordat de actie of data klaar is. Wacht 4–6 uur na het aanmaken van een conversieactie voordat je de eerste upload doet en neem bij elke import een extra dag mee. Upload aanpassingen minstens 24 uur na de oorspronkelijke conversie. Verwerking kan 24–48 uur duren; een geaccepteerd bestand bewijst niet dat elke rij is toegeschreven.
- Sandbox-aannames. Tags die Preview mode, een volledige triggerset of URL passthrough binnen een custom pixel van Shopify verwachten, gedragen zich anders.
- Consent behandeld als omweg. In basic consent mode zou niets Google mogen bereiken vóór consent; in advanced mode laden tags en sturen daarna cookieloze metingen zolang consent is geweigerd. Controleer de consentstatus die de tags ontvangen, niet alleen of er een request de browser verlaat.
Beperkingen
Alle drie de routes vertrekken vanuit dezelfde beperking: er moet een identifier zijn, en die moet van de klik tot het vastgelegde resultaat overleven.
De app draait zowel een Google-tag op de winkel als een server-naar-server-integratie voor het checkout-event; een tag die je zelf bezit wordt vanuit de browser geleverd, en de import hangt af van vastlegging, opslag en een planning die jij onderhoudt. Geen van de drie zorgt ervoor dat Google Ads en Shopify het eens worden: Ads rapporteert toegeschreven, view-through en gemodelleerde conversies binnen zijn eigen vensters en modellen, terwijl Shopify bestellingen uit elke bron telt, dus het verschil reconciliëren is een methode en geen instelling. Transaction ID’s worden niet in Google Ads gerapporteerd, dus reconciliatie blijft geaggregeerd. Het zijn bovendien bewegende doelen: de checkoutmigratie van Shopify en de overstap van Google naar Enhanced Conversions for leads hebben het gedocumenteerde pad veranderd.
Alternatieven
Als het verlies dat je aangaat geblokkeerde of afgekapte requests zijn en niet de mapping, is het antwoord transport — zie de server-side trackinggids.
Als het purchase-event zelf kapot is, bouw het dan opnieuw op met Het GA4 purchase-event op Shopify oplossen, en als de consentconfiguratie de open vraag is, begin dan bij Consent Mode v2. Voor de accountkant — conversieacties, value-definities en gclid-hygiëne — zie Google Ads-conversietracking, en voor resultaten die de site nooit raken, offline conversietracking. Als het symptoom de mismatch is, begin dan bij Google Ads-conversies die niet overeenkomen of kapotte Shopify-checkouttracking.