← Alle resources Product

Server-side tracking voor Shopify met de Measurebase-app

Shopify is waar normale tagging-setups stilletjes stuklopen. De checkout is een afgesloten omgeving waar je geen eigen scripts kunt plaatsen, pixels draaien in een sandbox die de verkeerde pagina-URL rapporteert, en tegen de tijd dat een betaalprovider de shopper heeft rondgestuurd zijn de sessie en de attributie vaak weg. De Measurebase Shopify-app bestaat om precies die gaten te dichten: hij verbindt je winkel met je eigen Measurebase tagging-host en meet de hele funnel server-side · storefront, checkout en de order zelf.

Drie vlakken, één stroom

De app meet je winkel vanaf drie plekken tegelijk, en elk daarvan rapporteert aan dezelfde tagging-host met dezelfde identifiers:

Elk event dat de app verstuurt

Alle events gebruiken de standaardnamen en -vormen van GA4, dus ze werken zonder vertaalslag met je bestaande tags, doelgroepen en rapporten. Storefront-events, vanuit de thema-embed:

EventVuurt wanneer
view_itemEen productpagina wordt bekeken · met de prijs van de gekozen variant
view_item_listEen collectie- of zoekresultatenpagina wordt bekeken · items met lijstnaam en positie
select_itemEen product wordt aangeklikt in een collectie- of zoeklijst · werkt met alle kaartlayouts, ook thema's die de kaart niet in een link wikkelen
add_to_cartElke toevoeging aan de winkelwagen · quantity is het zojuist toegevoegde aantal, nooit het lopende winkelwagentotaal
remove_from_cartElke verwijdering of aantalverlaging · berekend door de winkelwagen te vergelijken
view_cartDe winkelwagenpagina wordt bekeken, met de volledige inhoud
searchEen zoekresultatenpagina wordt bekeken · met search_term en search_results
Je eigen eventsAlles wat op Shopify's analytics-bus wordt gepubliceerd · een quiz, een verlanglijst, het event van een app · gespiegeld naar de dataLayer onder een naam die jij kiest

Checkout-events, vanuit de app-pixel:

EventVuurt wanneer
begin_checkoutDe checkout wordt geopend
add_shipping_infoDe verzendstap wordt afgerond
add_payment_infoDe betaalstap wordt afgerond
apply_discount_codeEen kortingscode wordt toegepast · met de code en het kortingsbedrag
purchaseDe order wordt geplaatst · het event-ID is het order-ID, herhalingen van de bedankpagina worden onderdrukt
nc_purchase / rc_purchaseOptionele metgezellen van de purchase voor nieuwe en terugkerende klanten · nooit geteld als tweede conversie, alleen verstuurd wanneer Shopify het segment echt kent

Server-events, vanuit order-webhooks:

EventVuurt wanneer
purchaseDe order wordt aangemaakt · als het eigenaar-event of als gededupliceerde kopie, afhankelijk van de purchase-modus die je hieronder kiest
refundEen terugbetaling wordt uitgevoerd · geclassificeerd als volledig of gedeeltelijk door het terugbetaalde bedrag te vergelijken met het ordertotaal, zodat een refund van alleen verzendkosten nooit de hele order terugdraait
subscription_startedDe eerste order van een abonnement wordt geplaatst (opt-in)
subscription_renewedEen terugkerende abonnementsorder wordt gefactureerd (opt-in) · als annotatie-event, of als telbare purchase als je verlengingen in je omzet wilt

Elke parameter, en waarom die er is

Het e-commerce-object

Elk commerce-event draagt het volledige GA4-e-commerce-object: currency, value, transaction_id, tax, shipping, coupon en het orderbrede discount, plus een items array met item_id, item_name, item_brand, item_category, item_variant, price, quantity en per item discount. De bron van het item-ID is instelbaar · product-ID, variant-ID, SKU of barcode · en dezelfde keuze geldt op elk vlak, zodat je productfeed matcht van de eerste view_item tot de server-side purchase. Bedragen zijn altijd een schoon getal, nooit een opgemaakte tekst en nooit floating-point-ruis.

Identiteit en matching

Events dragen klantidentifiers in Googles user-provided-data-schema, en altijd uitsluitend als SHA-256-hashes · e-mail, telefoon of adres komen nooit onversleuteld in de dataLayer en verlaten nooit de winkel:

Identiteit wordt in de dataLayer gezet voordat GTM laadt, op de storefront én in de checkout · zo draagt de allereerste hit van de Google-tag al het user-ID en de matchsleutels, in plaats van alleen de events die toevallig vuren nadat alles geladen is. In de checkout verversen de hashes bij elke stap zodra de shopper meer velden invult, dus advanced matching wacht niet op de purchase.

Click-ID's die de conversie halen

Click-identifiers van Google, Microsoft, Meta en TikTok · gclid, gbraid, wbraid, msclkid, ttclid, plus de _fbp/_fbc cookies · worden vastgelegd op de landingspagina, op de winkelwagen gestempeld en meegestuurd met checkout- en server-events. De iOS-varianten gbraid en wbraid doen er het meest toe: ze bestaan juist voor de bezoeken waar elke andere identifier al is gestript, en de meeste setups laten ze volledig vallen.

Context op elk event

Boekhouding die de tellingen eerlijk houdt

Eén aankoop, nooit twee

Met drie vlakken die dezelfde order kunnen zien, is het allerbelangrijkste dat je rapporten hem maar één keer tellen. De app geeft elke aankoop één event-ID · het order-ID zelf · op alle drie de vlakken, en laat je kiezen wie de purchase bezit:

Herladen bedankpagina's, dubbel geplakte pixels en opnieuw afgespeelde webhooks worden allemaal onderdrukt · verdediging in de diepte op elk vlak, geen aanname dat er nooit iets misgaat.

Waarom dit zo'n sterke opzet is

Elk onderdeel hierboven is op zichzelf nuttig; de kracht zit in wat ze samen optellen. Een paar claims die de meeste Shopify-tracking niet kan maken, en waarom deze opzet dat wel kan:

Gebouwd voor jouw GTM-setup, niet eromheen

Je houdt je eigen web- en servercontainers. Het dashboard genereert een kant-en-klaar te importeren GTM-template in Shopify-modus: elk e-commerce-veld expliciet gemapt (de checkout-sandbox negeert de gebruikelijke "lees uit de dataLayer"-route), een user-provided-data-variabele gekoppeld aan de gehashte velden, en de echte pagina-URL ingemapt zodat checkout-events de checkoutpagina rapporteren in plaats van Shopify's interne sandbox-adres.

Shopify Markets wordt per storefront afgehandeld: een winkel met meerdere domeinen tagt elk domein via zijn eigen host, automatisch bepaald · één app, één pixel, elke markt first-party.

Alles wat je winkel publiceert via Shopify's eigen analytics-events · een afgeronde quiz, een toevoeging aan een verlanglijst, het custom event van een app · kan naar de dataLayer worden gespiegeld onder een naam die jij kiest, vanuit het Events-tabblad van de app. En Enhanced Ad Blocker Protection werkt door tot in de checkout: containerverkeer vertrekt ook daar gemaskeerd.

Zien wat er gebeurt

Het Test-tabblad van de app toont elk event dat je tagging-host in de laatste 30 minuten bereikte · welk vlak het stuurde, de waarde, de producten stuk voor stuk, en elke parameter die het droeg, inclusief verkeer dat via de adblocker-maskering vertrok. Een console-debugmodus en een server-preview-header zijn één schakelaar verwijderd, en beide schakelen zichzelf na 24 uur automatisch uit, zodat een debugsessie nooit stilletjes je productiedata kan aantasten. De Setup-pagina controleert doorlopend elk onderdeel · embed, pixel, webhooks · en vertelt je wanneer iets aandacht nodig heeft.

Aan de slag

  1. Installeer de Measurebase-app op je winkel en verbind hem met je Measurebase-domein.
  2. Zet de thema-embed aan in je thema-editor voor storefront-events.
  3. Importeer de gegenereerde GTM-template vanuit je dashboard, of map de events in je bestaande containers.

De checkout-pixel installeert zichzelf met de app, en order-webhooks worden automatisch geregistreerd. Van de eerste paginaweergave tot de purchase en de bijbehorende refund loopt alles via je eigen domein · first-party, gededupliceerd en gehost in de EU, zoals alles op Measurebase.

Verder lezen

Klaar om je tagging naar Nederland te verhuizen?

Gratis starten, geen creditcard nodig. Binnen een kwartier live.

Gratis starten