Full Answer
The core mechanic is simple: when both a browser pixel and a server-side API send the same conversion event, the ad platform needs a way to recognise they describe the same action. Meta's Conversions API solves this by requiring a matching event_name and event_id on both the pixel event and the server event. If both arrive within 48 hours carrying the same pair, Meta merges them into a single conversion (Meta for Developers — Deduplicate Pixel and Server Events). Google Ads and TikTok follow the same principle using transaction_id as the deduplication key.
For WooCommerce stores, the natural shared identifier is the order ID. It's generated at checkout, available to both the browser dataLayer and the server-side hook (woocommerce_payment_complete or woocommerce_thankyou). A well-configured tracking setup passes the same order ID to both channels. The failure mode is when the browser pixel generates its own random event ID while the server sends the order ID — the platform sees two different identifiers, treats them as two separate purchases, and conversion counts double.
The practical implication is that deduplication isn't automatic — it's a configuration decision. Every tracking implementation that runs both browser and server-side events needs a shared ID strategy agreed before launch, not patched after the numbers look wrong. For a deeper look at how plugin-based tracking compounds this problem, see Why Plugin-Based WooCommerce Tracking Undercounts 30–40% of Conversions.