- Server-side tracking voor WooCommerce stuurt elke betaalde bestelling vanuit de eigen bestelgegevens van de webshop naar Meta, TikTok en andere advertentieplatforms, zodat een aankoop meetelt ook als de browserpixel nooit afgaat.
- ROASaurus beschouwt een WooCommerce-bestelling als betaald wanneer de status processing of completed is, wat bestellingen met betaling bij levering en bankoverschrijvingen omvat zodra je ze bevestigt.
- De ROASaurus-plugin slaat bij de checkout het bezoeker-id en de cookies van de advertentieklik op bij elke bestelling, zodat de bestelling exact aan zijn advertentieklik wordt gekoppeld.
- Zonder de plugin leveren webhooks nog steeds elke betaalde bestelling af, maar is er geen koppeling via de bedankpagina: bestellingen worden alleen gekoppeld via een e-mailadres dat eerder op de site is opgegeven of via een uniek IP-adres en browser.
- Op WooCommerce volgt het ROASaurus-script toestemmingsplugins die de WP Consent API gebruiken, zoals Complianz en CookieYes, en de banners van Cookiebot, OneTrust en IAB TCF.
Server-side tracking voor WooCommerce stuurt elke betaalde bestelling vanuit de bestelgegevens van je webshop naar Meta, TikTok en andere advertentieplatforms, in plaats van alleen te vertrouwen op een pixel in de browser van de shopper. De aankoop wordt gerapporteerd ook als een adblocker de pixel tegenhoudt of de shopper de bedankpagina nooit bereikt.
Deze gids behandelt waarom WooCommerce-webshops conversies verliezen, welke bestelgegevens WooCommerce je geeft en de twee manieren om ROASaurus te koppelen: de WordPress-plugin of webhooks. Daarna komen matching, toestemming, instellen en testen aan bod. Voor het algemene idee lees je wat server-side tracking is.
Waarom verliezen WooCommerce-webshops conversies?
Een browserpixel rapporteert een aankoop alleen als het pixelscript laadt, de shopper de bedankpagina bereikt en de browser het event verstuurt. Elke stap kan mislukken. De bestelling zelf staat nog steeds in je database, omdat WooCommerce die op de server opslaat.
| Wat er gebeurt | Browserpixel | Bestelgegevens in WooCommerce |
|---|---|---|
| De shopper betaalt via een redirect (bijvoorbeeld PayPal of een bankapp) en sluit het tabblad | Geen bedankpagina, geen aankoopevent | Betaalde bestelling, status processing |
| Een adblocker of privacy-instelling blokkeert het pixelscript | Geen aankoopevent | Betaalde bestelling |
| De bezoeker weigert marketingcookies | De pixel mag niet laden | Betaalde bestelling |
| Een bankoverschrijving wordt drie dagen later bevestigd | Op dat moment is er geen browser open | Status verandert van on hold naar processing |
| Een cache- of scriptoptimalisatieplugin vertraagt de pixel | Het event kan te laat komen of ontbreken | Betaalde bestelling |
Ontbrekende aankopen doen op twee manieren schade. Het advertentieplatform optimaliseert op minder conversies, en je rapporten tonen een lager rendement dan je echt haalt. Hier is het tweede effect in cijfers, voor een voorbeeldwebshop met een break-even-ROAS van 2.2:
| Voorbeeldwebshop, één maand | Alleen pixel | Elke betaalde bestelling |
|---|---|---|
| Advertentiekosten voor Meta | $8,000 | $8,000 |
| Aankopen uit Meta-klikken | 260 | 320 |
| Omzet bij $60 per bestelling | $15,600 | $19,200 |
| ROAS | 15,600 ÷ 8,000 = 1.95 | 19,200 ÷ 8,000 = 2.40 |
| Ten opzichte van break-even (2.2) | Lijkt een verlies | Winstgevend |
Wat WooCommerce je geeft: bestellingen, webhooks en de REST API
Welke bestelstatussen tellen als betaald?
WooCommerce omschrijft processing als betaling ontvangen, waarbij de bestelling nog moet worden afgehandeld. ROASaurus verstuurt bestellingen met de status processing of completed en slaat bestellingen met pending payment, on hold, failed, cancelled en refunded over. Twee betaalmethoden verdienen aandacht:
- Betaling bij levering. WooCommerce zet deze bestellingen op processing totdat de betaling is geïnd, dus ROASaurus verstuurt ze zodra ze zijn geplaatst. Bestellingen met een downloadbaar product zijn de uitzondering: die gaan op on hold. Zie bestellingen met betaling bij levering tracken voor wat dat betekent voor retouren en weigeringen.
- Bankoverschrijving. WooCommerce zet deze bestellingen op on hold terwijl je de betaling controleert. ROASaurus verstuurt ze zodra je ze naar processing verplaatst.
Webhooks
Een webhook is een bericht dat WooCommerce naar een ander systeem stuurt wanneer er iets verandert. Je maakt hem aan onder WooCommerce › Settings › Advanced › Webhooks. Bij een topic voor bestellingen is de payload hetzelfde bestelobject dat de REST API teruggeeft. Elke levering bevat een X-WC-Webhook-Signature-header: een base64 HMAC-SHA256-hash van de payload, gemaakt met de geheime sleutel die je kiest. ROASaurus controleert die handtekening voordat het een bestelling accepteert.
Twee details zijn in de praktijk belangrijk. WooCommerce levert webhooks op de achtergrond af, standaard met WP-Cron, dus een levering kan vertraging oplopen als die wachtrij achterloopt. En WooCommerce schakelt een webhook uit na meer dan vijf mislukte leveringen achter elkaar.
REST API
Met de REST API kan ROASaurus zelf bestellingen opvragen. Met een alleen-lezen API-sleutel vraagt ROASaurus elke 5 minuten de processing- en completed-bestellingen op die sinds de vorige controle zijn gewijzigd, met 30 minuten overlap. Bestellingen die het al heeft, worden genegeerd. Zo wordt elke bestelling opgevangen die een webhook heeft gemist.
| Bestelveld | Wat ROASaurus ermee doet |
|---|---|
id | Wordt het event-id order-1042, gedeeld door de server- en browserevents |
total | De aankoopwaarde: het eindtotaal, inclusief btw en verzendkosten |
| E-mailadres, telefoonnummer, naam, plaats, staat, postcode en land van de facturering | Gehasht met SHA-256 en verstuurd als klantgegevens |
customer_ip_address, customer_user_agent | Meegestuurd met het event en gebruikt om de bestelling aan een bezoeker te koppelen |
line_items | Product-id's (het variatie-id als er een is), aantallen en prijzen |
date_paid_gmt | De eventtijd voor bestellingen uit een webhook of de REST API (de aanmaakdatum als er geen betaaldatum is) |
meta_data | Met de plugin: het bezoeker-id en de Meta- en TikTok-cookies |
Plugin of webhooks: twee manieren om te koppelen
Beide koppelingen sturen elke betaalde bestelling. Ze verschillen in hoe goed elke bestelling wordt gekoppeld aan de advertentieklik die de shopper binnenbracht.
| ROASaurus-plugin | Alleen webhooks | |
|---|---|---|
| Wat je installeert | Een WordPress-plugin (PHP 7.4 en WooCommerce 6.0 of nieuwer) | Niets: een webhook in de WooCommerce-instellingen |
| Hoe bestellingen binnenkomen | De plugin stuurt elke betaalde bestelling naar de orders-API van ROASaurus | WooCommerce stuurt Order updated; optionele REST API-controle elke 5 minuten |
| Trackingscript | Door de plugin op elke pagina geladen | Je voegt het zelf toe, bijvoorbeeld met de WPCode-plugin of in je thema |
| Bezoeker-id en klikcookies op de bestelling | Ja, opgeslagen bij de checkout (klassieke checkout en block checkout) | Nee |
| Aankoop in de browser op de bedankpagina | Ja, met hetzelfde event-id als het serverevent | Nee |
| Koppeling via de bedankpagina | Ja | Nee |
Je kunt beide tegelijk gebruiken. De plugin slaat het bezoeker-id als meta data op bij de bestelling, en de webhook-payload neemt het mee. ROASaurus slaat elke bestelling één keer op, op basis van het bestel-id van WooCommerce, dus de plugin en de webhook maken nooit twee aankopen aan. De plugin geeft ook aan High-Performance Order Storage van WooCommerce te ondersteunen.
Hoe wordt een WooCommerce-bestelling aan de advertentieklik gekoppeld?
Een advertentieplatform kan een aankoop alleen aan een advertentie toeschrijven als het die twee kan verbinden. ROASaurus doet dit door de bestelling te koppelen aan de bezoeker die op de advertentie klikte, en die bezoeker draagt de click-id's (zoals fbclid en ttclid) en UTM-parameters van de landing met zich mee. Het probeert deze methoden in volgorde en stopt bij de eerste die werkt:
- Het bezoeker-id dat bij de bestelling is opgeslagen. Alleen met de plugin. Dit is een exacte koppeling.
- De aankoop in de browser op de bedankpagina, die hetzelfde bestel-id heeft. Alleen met de plugin.
- Een gehasht e-mailadres dat de bezoeker eerder op je site heeft opgegeven, bijvoorbeeld in een popupformulier van Klaviyo, Attentive of Wisepops, of via een Identify-aanroep.
- Hetzelfde IP-adres en dezelfde browser, gezien van 3 uur vóór tot 15 minuten na de bestelling, maar alleen als precies één bezoeker past. Op gedeelde netwerken, zoals kantoren en mobiele providers, delen vaak meerdere bezoekers één IP-adres, en dan gokt ROASaurus niet.
ROASaurus wacht kort voordat het elke aankoop verstuurt, zodat het event van de bedankpagina eerst kan binnenkomen. Is de bestelling dan nog niet gekoppeld, dan probeert het op het moment van verzenden opnieuw. De pagina Orders toont het resultaat per bestelling in de kolom Matched by. Bestellingen die via het bezoeker-id van de plugin zijn gekoppeld, tonen cart, hetzelfde label dat Shopify-bestellingen krijgen.
| Naar Meta verstuurd voor bestelling 1042 | Gekoppeld (plugin) | Niet gekoppeld (alleen webhooks) |
|---|---|---|
Event-id order-1042 | Ja | Ja |
| Gehasht e-mailadres, telefoonnummer, naam en adres | Ja | Ja |
| IP-adres en browser van de bestelling | Ja | Ja |
Click-id en browser-id van Meta (fbc, fbp) | Ja | Nee |
Gehasht bezoeker-id (external_id) | Ja | Nee |
| De advertentieklik in de attributie van ROASaurus | Campagne en advertentie van de klik | Getoond als direct of onbekend |
Die click-identifiers verhogen het matchpercentage van Meta voor het event. Event Match Quality legt uit hoe Meta ze beoordeelt.
Toestemming bij WooCommerce
Elke webshop in ROASaurus heeft de instelling Respect visitor consent, die standaard aan staat. Op WooCommerce leest het ROASaurus-script de keuze van de bezoeker uit de WP Consent API, die toestemmingsplugins zoals Complianz en CookieYes vullen. Het leest ook Cookiebot, OneTrust, IAB TCF-banners en Google consent mode. Totdat de bezoeker marketingcookies accepteert, zet het script geen bezoeker-id en laadt het geen browserpixels.
Weigert een bezoeker, dan zet het script geen bezoeker-id, bewaart het geen click-id's en gaan er geen browserpixels af, en slaat de plugin geen trackingcookies op bij de bestelling. De betaalde bestelling wordt nog wel vanaf de server naar je gekoppelde advertentieplatforms gestuurd, met gehashte klantgegevens uit de bestelling en het IP-adres en de browser van de bestelling. Als je juridisch advies zegt dat ook aankoopevents voorafgaande toestemming nodig hebben, neem dan contact op met ROASaurus voordat je server-side aankopen inschakelt. De helppagina over toestemming geeft de details, en het artikel over Consent Mode v2 en de AVG behandelt de juridische achtergrond.
Server-side tracking voor WooCommerce instellen
Dit zijn de stappen voor de pluginroute:
- De webshop toevoegen
Ga in ROASaurus naar Add a store, kies WooCommerce en voer het domein in dat je klanten bezoeken.
- Maak een API-sleutel aan
Open Store settings en klik onder Orders API op Create API key. Kopieer de sleutel meteen: die wordt maar één keer getoond, naast je webshopsleutel. Het endpoint is het adres vóór
/api/v1/ordersop die pagina. - De plugin installeren
Download de plugin en upload de zip in WordPress onder Plugins › Add New Plugin › Upload Plugin. Activeer de plugin daarna.
- De sleutels invoeren
Voer onder WooCommerce › ROASaurus het endpoint, de webshopsleutel en de API-sleutel in en sla op.
- Koppel je advertentieplatforms
Gebruik op Tracking & platforms Connect with Facebook of Add pixel voor Meta, TikTok en de andere. Vink de optie aan om ook de browserpixel te laden, zodat de aankoop op de bedankpagina wordt ontdubbeld met het serverevent.
- Toestemming instellen en testen
Blokkeer het script in je toestemmingstool totdat de bezoeker marketingcookies accepteert en plaats dan een testbestelling.
Voeg zonder de plugin de scripttag van Tracking & platforms toe aan elke pagina en maak dan de webhook aan. Op het tabblad Connection van je webshop staat je webhook-URL. Houd die privé: iedereen met de URL kan bestellingen naar je webshop sturen.
WooCommerce › Settings › Advanced › Webhooks › Add webhook Status Active Topic Order updated Delivery URL (your webhook URL from the Connection tab) Secret (a secret of your choice; paste the same one in ROASaurus) API version WP REST API Integration v3
Maak voor de back-up een sleutel aan onder WooCommerce › Settings › Advanced › REST API met leestoegang. Plak de consumer key en consumer secret op het tabblad Connection, sla op en klik op Test connection. Fetch orders now haalt meteen recente betaalde bestellingen op. De WooCommerce-integratiepagina toont alle opties op één plek.
Hoe test je server-side tracking voor WooCommerce?
Test eerst de browserkant, plaats daarna een bestelling en volg die naar de advertentieplatforms.
- Open je webshop met
?roasaurus=connectedin het adres. Een melding bevestigt dat het script draait. Met?roasaurus=debuglogt het script in de browserconsole wat het verstuurt. - Onder Collected events in de Event log moeten paginaweergaven een bezoeker-id tonen.
- Plaats een testbestelling. Betaling bij levering is het snelst, omdat de bestelling meteen op processing staat.
- Op het tabblad Connection toont Last order received het tijdstip van de laatste bestelling.
- In de Event log krijgt onder Server deliveries elk gekoppeld platform een regel met de status sent en het antwoord van het platform.
PageView visitor 3f9c2a1eScript geladen met toestemmingPurchase order-1042Bedankpagina, browserpixels afgegaanorder 1042 processingOntvangen van de pluginMeta Purchase sentZelfde event-id, ontdubbeldTikTok CompletePayment sentZelfde event-id, ontdubbeldOm het event in Meta te zien, plak je de code uit Events Manager › Test events in het veld Test event code van je Meta-pixel in ROASaurus. Verwijder de code als je klaar bent, want hij is alleen bedoeld om te testen. Kan de plugin een bestelling niet afleveren, dan voegt hij in WooCommerce een bestelnotitie toe die begint met "ROASaurus: order not sent", gevolgd door de fout.
Fouten die je moet vermijden
- Het topic Order created gebruiken. Bestellingen die via een redirect worden betaald, worden aangemaakt als pending payment. ROASaurus negeert onbetaalde bestellingen, en er volgt geen tweede "created"-bericht wanneer de betaling binnenkomt. Gebruik Order updated.
- Een geheime sleutel die niet overeenkomt. ROASaurus weigert een levering waarvan de handtekening niet overeenkomt met de geheime sleutel die het heeft. Na meer dan vijf mislukkingen achter elkaar schakelt WooCommerce de webhook uit. Herstel de geheime sleutel, zet de webhook terug op Active en voeg de REST API-sleutel toe, zodat bestellingen uit de tussenliggende periode alsnog worden opgehaald.
- Twee tools die dezelfde pixel versturen. Als een andere plugin ook je Meta- of TikTok-pixel verstuurt, gebruikt die eigen event-id's en telt het platform elke verkoop dubbel. Schakel die voor deze pixel uit. Zie dubbeltelling voorkomen en dubbele aankoopevents.
- Events voor toevoegen aan winkelwagen verwachten. Bij WooCommerce trackt het script zelf paginaweergaven. Productweergaven en toevoegingen aan de winkelwagen worden alleen bij Shopify automatisch gedetecteerd. Een developer kan ze versturen met een
tlqtrack-aanroep. - Google Ads-conversies verwachten. ROASaurus verstuurt aankoopconversies voor Google Ads alleen vanuit de Shopify-checkout. Vanuit WooCommerce verstuurt het aankopen naar Meta, TikTok, Snapchat, Pinterest, Reddit, X, Microsoft Ads, Taboola, LinkedIn en de andere advertentieplatforms die je koppelt.
- Late bankoverschrijvingen. Meta accepteert serverevents tot 7 dagen na het tijdstip van het event. De plugin verstuurt de bestelling met de datum waarop die is aangemaakt, dus Meta weigert een overschrijving die meer dan 7 dagen na de checkout wordt bevestigd. Bestellingen die via een webhook of de REST API binnenkomen, gebruiken in plaats daarvan de betaaldatum. Houd er ook rekening mee dat de bedankpagina de aankoop in de browser afvuurt bij de checkout, voordat de overschrijving is betaald. Wordt de betaling meer dan 48 uur later bevestigd, dan kunnen Meta en TikTok de kopieën van de browser en de server niet samenvoegen, en een overschrijving die nooit wordt betaald houdt zijn browseraankoop.
Zodra bestellingen binnenkomen, laten de attributierapporten zien uit welke campagnes en advertenties ze kwamen.
Bronnen
- WooCommerce: Webhooks Documentation
- WooCommerce REST API Documentation - WP REST API v3
- WooCommerce: Order Statuses Documentation
- WooCommerce: Cash on Delivery Documentation
- Meta for Developers: Server Event Parameters