Google Tag Manager
Most themes, plugins and agencies already fill the dataLayer for GA4. Add one Custom HTML tag in Google Tag Manager and every one of those events also goes out from a first-party server, where ad blockers and Safari can't stop it.
- GTM dataLayer
- Browser SDK
- Meta CAPI
- TikTok
- GA4
What you get
One tag
A single Custom HTML tag on All Pages loads the SDK with dataLayer: true. No triggers or variables per event.
GA4 format, both styles
Reads dataLayer.push({ event, ecommerce }) and gtag('event', …) calls: view_item, add_to_cart, remove_from_cart, view_cart, begin_checkout, add_payment_info, purchase, generate_lead, sign_up, login and search.
No double purchases
A purchase becomes event purchase_{transaction_id}: the same id your server or WooCommerce plugin sends, so they merge into one. A purchase pushed twice on reload is sent once.
Earlier pushes included
Events pushed before the SDK finishes loading are read too, so the first page's view_item isn't lost.
Where browser-only tracking loses the sale
Pick a situation your shoppers are in and watch one order take both paths.
Today's deliveries
Purchase #1043
Chrome, ad blocker on · Meta CAPI · 0.4 s
The ad blocker stops the browser Pixel on its way to facebook.com. The same purchase leaves your server, reaches Meta through the Conversions API and is counted.
Sample deliveries. Pick a row to watch its route.
Shopper, Sent to, Took
Set up in minutes
- In Tag Manager, add a tag of type Custom HTML with the snippet from Developers → Install, and add dataLayer:true to its init options.
- Set the trigger to Initialization - All Pages (or All Pages) and publish the container.
- Place an order and open the Debugger: the purchase shows source browser with your transaction id as the order id.
- Also send the order from your server (plugin or SDK) with the same order id, for purchases that ad blockers would stop.
Platform rules from Google: Measure ecommerce (Tag Manager).
track.yourstore.comTrakeroYour store → your domain → Meta, Google, TikTok
Questions
Do I need a server-side GTM container?
No. Trakero is the server. You don't need to host or pay for a separate server container.
What if my purchase push has no transaction_id?
It isn't sent from the dataLayer, because it couldn't be matched with the server copy. Add transaction_id (your order number) to the push.
I already call trakero() in my theme. Should I turn this on?
No: keep one of the two, or you would send each event twice.
Start counting every order today
Create a free account, connect your store and watch a test order arrive in Meta Events Manager.
Free plan · No card needed · Set up in one afternoon