Full Answer
The order-received page is where most WooCommerce tracking implementations fire purchase events. It loads a dataLayer push containing the transaction_id, order value, and line items — the data GA4, Google Ads, and Meta CAPI rely on for conversion attribution. When a page-level caching plugin (WP Super Cache, W3 Total Cache, LiteSpeed Cache, or similar) caches this page, it serves the same HTML — including the same dataLayer values — to every visitor who lands on that URL pattern.
GA4 uses transaction_id as its deduplication key. If two purchase events carry the same ID within the same property, the second is silently discarded. That means buyer B's real purchase never registers in GA4 because the cached page fired buyer A's transaction_id again. The conversion happened in WooCommerce, the payment processed, but the tracking layer recorded nothing. Seresa's 2026 audit of WooCommerce tracking data found this single misconfiguration responsible for roughly 5–10% of missing purchase events on affected sites (Why Plugin-Based WooCommerce Tracking Undercounts 30–40% of Conversions).
The fix is a one-line caching exclusion. Add /checkout/order-received/* to your plugin's "never cache" URL list. LiteSpeed Cache users set this via the Excludes tab; W3 Total Cache users add it under Page Cache → Advanced → Never cache URLs. Server-side tracking sidesteps the issue entirely by capturing purchases from WooCommerce hooks at the server level, so the browser's cached page is irrelevant to whether the conversion is recorded. Google's own documentation on GA4 event processing confirms that duplicate transaction_id values are deduplicated automatically (GA4 e-commerce implementation). Once deduplicated, the event cannot be recovered.