Plenty of WooCommerce shops have GA4 installed. Far fewer have GA4 revenue that matches the orders in WooCommerce. The gaps nearly always come from the same handful of causes.
Plugin or Tag Manager.
There are two broad ways to get ecommerce events from WooCommerce into GA4.
A plugin. WooCommerce's own Google Analytics for WooCommerce plugin, and several others, add the GA4 tag and send ecommerce events such as view_item, add_to_cart and purchase. It's quick, and fine for a simple shop that only needs GA4.
A dataLayer and GTM. The shop pushes each ecommerce event, with its items, into the dataLayer, and Google Tag Manager sends it to GA4, Google Ads, Meta and anything else. It's more work up front, but one set of data feeds every platform, and you decide exactly what each one receives.
Whichever you choose, choose one. The plugin's own FAQ warns that duplicate Google Analytics code causes a conflict in tracking. A plugin sending GA4 events alongside a GTM container doing the same is the most common cause of doubled revenue on WooCommerce.
The purchase event and the order received page.
WooCommerce shows its order confirmation on the "Order received" endpoint, /order-received/ on the checkout page. The endpoint names are set under WooCommerce, Settings, Advanced. That page knows the order, so it's where the purchase event should come from.
- Use the WooCommerce order number as
transaction_id. It's what finance and the order screen use, so reconciling GA4 with WooCommerce becomes a matter of matching IDs. - Take values from the order, not the basket. Discounts, delivery and tax are final only once the order exists.
- Clear the previous ecommerce data before each push. With GTM, Google's own code does this with
dataLayer.push({ ecommerce: null }). - Leave out failed and cancelled orders. Google Analytics for WooCommerce was changed to stop sending purchases for them, and a GTM setup needs the same check.
Duplicates on refresh.
Customers reload the order received page, bookmark it, or come back to it from the confirmation email. Each visit can send the purchase again.
GA4 deduplicates purchase events with the same transaction ID from the same user, but only on web streams, and only when the ID is filled in. Google warns against sending an empty transaction ID.
It's better not to rely on GA4 alone. Mark the order once its purchase has been sent, for example in the order's own data, and don't send it again. Google Ads, Meta and the rest have their own rules, so a purchase pushed twice may still count twice there.
Payment gateways that leave the site.
Some gateways take the customer away to pay. PayPal Standard, for example, takes customers to PayPal's site and then back to the receipt page. WooCommerce has hidden it for new installs since version 5.5.0, but older shops still use it, and other gateways and 3-D Secure checks work the same way.
Two problems follow. When the customer comes back, GA4 can start a new session credited to the payment provider rather than the campaign that brought them. And customers who pay but never return don't load the order received page, so no purchase is sent at all.
- Add each payment domain to GA4's unwanted referrals, in the web stream's tag settings, which Google describes for exactly this case
- Compare GA4 orders by payment method with WooCommerce's to see which gateway loses purchases
- For shops that lose many, send the purchase from the server once WooCommerce marks the order paid
Consent with WordPress cookie plugins.
Most WooCommerce shops handle consent with a WordPress cookie plugin. Complianz, for example, supports Consent Mode v2 and works with Google Tag Manager. The WP Consent API plugin lets a cookie plugin share the visitor's choice with other plugins in five categories, from functional to marketing, so tracking plugins can respect it.
The common failures are timing and overlap. The GA4 tag loads before the consent default is set, a tracking plugin ignores the cookie plugin's choice, or the cookie plugin and GTM both set consent defaults that disagree. Test with consent refused as well as accepted, and look for the purchase in both cases.
What to check.
- List every plugin and script that sends data to GA4, and keep only one source
- Place a test order and find the
purchaseevent in GA4's DebugView - Reload the order received page and check the purchase isn't sent again
- Pay with each gateway and check the session keeps its original source
- Compare a week of GA4 transactions with WooCommerce orders
For more on doubled purchases, see how to fix duplicate conversions in GA4. Marc Alexander sets up GA4 for ecommerce, WooCommerce included, and the GA4 mini audit checks what an existing shop sends.
Sources.
- WooCommerce: Understanding WooCommerce endpoints
- WordPress.org: Google Analytics for WooCommerce
- Google Analytics Help: Duplicate key events and transaction IDs
- Google Analytics Help: Identify unwanted referrals
- WooCommerce: PayPal Standard
- WordPress.org: WP Consent API
Checked on 31 October 2026.