WooCommerce Orders Not Tracking? The 12-Point Purchase Tracking Checklist

WooCommerce purchase tracking broken? Follow one order through 12 checks: thank-you page, gateways, caching, consent, transaction_id, GA4 and Meta.

On this page
  1. How does WooCommerce purchase tracking work?
  2. First, how big is your gap?
  3. The 12-point WooCommerce purchase tracking checklist
  4. Symptom, cause, fix: the quick table
  5. How do you stop losing orders when the thank-you page never loads?
  6. Keep a repeatable test log
  7. How can Tagioo help?
  8. Sources and further reading
  9. Related questions

WooCommerce says you sold 52 orders this week. GA4 says 38. Meta says 31.

Your first instinct? Reinstall the plugin. Maybe swap it for a different one.

Please don't. Not yet.

Because until you know where the order stopped, a new plugin is just a new guess.

Why are WooCommerce orders not tracking? WooCommerce orders usually go missing from GA4 or Meta because WooCommerce purchase tracking fires only once, in the browser, on the thank-you page. If the shopper never reaches that page, a script is blocked or delayed, the page is cached, or two plugins clash, the purchase is never sent or is sent wrong, even though WooCommerce recorded the order.

The good news: every one of those causes leaves a trace. You just have to follow one order through the chain.

In this guide you'll find a quick way to read your gap, the 12-point checklist itself, a symptom-to-fix table, and answers to questions like "Why are PayPal orders missing?" and "Why don't my WooCommerce orders match GA4 revenue?"

So, why the wait? Let's begin.

How does WooCommerce purchase tracking work?

Here's the chain every tracked order has to pass through:

  1. The order is created and paid. WooCommerce stores it on your server.
  2. The shopper lands on the order-received page. Often called the thank-you page.
  3. A plugin pushes a purchase event to the data layer with the order details.
  4. Your tags fire. GTM (or the plugin itself) sends the purchase to GA4, the Meta Pixel and others.
  5. The platform accepts it and, later, attributes it.

WooCommerce only owns step 1. Steps 2 to 4 all happen in the shopper's browser, and step 5 happens on each platform's side.

So when an order is "missing," it went missing at one of those steps. The checklist below tests them in order.

Flowchart for one missing WooCommerce order: check that the order is paid, that a purchase event fired once, that the server container received it and that the platform accepted it, with the fix area for each no
Follow one missing order from top to bottom, and stop at the first no.

First, how big is your gap?

Before you fix anything, take a 10-minute baseline. You'll need it to know whether your fix worked.

  1. Pick a date range of 7-14 days, ending a few days ago (so reports have finished processing).
  2. Count paid orders in WooCommerce: Processing plus Completed. Leave out Pending, Failed and Cancelled.
  3. Count GA4 purchases for the same dates, ideally with the transaction_id dimension in an Exploration.
  4. Count Meta purchases in Ads Manager or Events Manager.

Then compare them:

Illustrative bar chart: 100 paid WooCommerce orders, 82 GA4 purchases and 64 Meta purchases, with gap A between orders and GA4 labelled as collection problems and gap B between GA4 and Meta labelled as partly expected attribution differences
Illustrative numbers. The gap between WooCommerce and GA4 usually means collection problems. The gap between GA4 and Meta is partly expected.
What you seeWhat it usually meansStart with
GA4 and Meta both far below WooCommerceCollection problem: the purchase never firesChecks 4-9
GA4 close to WooCommerce, Meta much lowerAttribution, consent or Meta setupChecks 7, 11, 12
GA4 or Meta above WooCommerceDouble countingChecks 2 and 12
Right count, wrong revenueValue definition, currency or cached dataCheck 8
Only some payment methods missingGateway redirectCheck 4

The 12-point WooCommerce purchase tracking checklist

Here's the whole thing at a glance. Then we'll go through each check.

#CheckWhere to lookPass looks like
1Pick one order to followWooCommerce → OrdersOrder number, time, value, method noted
2List every purchase senderPlugins, theme, GTMOne owner per platform
3Confirm the order statusOrder screenProcessing or Completed
4Thank-you page loadsTest checkout per gatewayLands on order-received URL
5Checkout type matches the pluginCheckout page editorPlugin supports block or classic checkout
6Caching excludedCache plugin, CDNCheckout and thank-you not cached
7Consent behaves as designedConsent banner + Tag AssistantTags fire after accept
8Purchase payload completeGTM PreviewID, value, currency, items
9Purchase fires onceReload the thank-you pageNo second purchase
10Server receives itServer preview / event logRequest arrives with the order ID
11Platform accepts itDebugView, Test EventsEvent shows, no errors
12No duplicatesGA4 Exploration, MetaOne purchase per order

1. Pick one order to follow

Use a test order you're allowed to inspect, or a real order that's missing from your reports.

Write down its order number, completion time, payment method, currency and total. You'll search for that order number at every step.

Don't copy customer details into a shared sheet. You need enough to find the event, not the customer's profile.

2. List every purchase sender

Open Plugins and list everything that might send a purchase: GTM plugins (such as GTM4WP), pixel plugins (PixelYourSite, Meta for WooCommerce), Google's own plugins (Google Analytics for WooCommerce, Site Kit), and any tracking app.

Then check your theme's header and footer for hard-coded tags, and your GTM container for purchase tags.

The rule: one owner per event, per platform. If two plugins send Purchase to Meta with different IDs, Meta counts two sales.

3. Confirm the order status

Not every order should count as a purchase.

WooCommerce's order status guide defines Processing as payment received, and On hold as awaiting payment confirmation (bank transfer is the classic example).

  • Card and PayPal orders usually move to Processing straight away.
  • Bank transfer orders sit on hold until you confirm the payment.
  • Pending and Failed orders shouldn't be tracked as purchases at all.

Make sure your tracking and your comparison use the same definition.

4. Check the thank-you page actually loads

Run a test checkout with each payment method you offer.

Watch the URL at the end. You should land on your store's order-received page, usually /checkout/order-received/ followed by the order ID and a key.

Watch out for:

  • Gateways that don't redirect back, or only do so after a "Return to merchant" click.
  • Shoppers closing the tab on the gateway's success screen.
  • Plugins that redirect the thank-you page to a custom URL your trigger doesn't know.

If one gateway accounts for most missing orders, this is your culprit.

5. Check your checkout type

Since WooCommerce 8.3, new stores use the Cart and Checkout blocks by default (WooCommerce's blocks status page).

Older tracking code that hooks into the classic checkout may not fire on the block checkout. The same goes for page-builder thank-you templates that skip WooCommerce's standard thank-you hook.

Check your tracking plugin's documentation for block checkout support, and test after every checkout change.

6. Exclude checkout pages from caching

WooCommerce's caching guide says to exclude Cart, Checkout and My Account from page caching. That usually covers the thank-you page too, since it lives under the checkout URL.

Also check:

  • "Delay JavaScript" or "load JS on interaction" settings, which can stop tags firing.
  • Script combining or minifying, which can break the inline purchase push.
  • CDN or host-level caching that ignores your plugin's rules.

A cached thank-you page is nasty. It can fire the previous customer's order, or an empty one.

Open your store in a private window and test both choices.

  • Accept all: purchase tags should fire.
  • Decline: tags should respect that choice.

If tags don't fire even after accepting, the banner may be blocking them by mistake. If they fire after declining, that's a compliance problem, not a tracking win.

With Google's advanced Consent Mode, tags send cookieless pings while consent is denied, which Google can use for conversion modeling (Google's consent mode help).

8. Inspect the purchase payload

Open GTM Preview (Google's preview guide), place the test order, and click the purchase event on the thank-you page.

Annotated example of a GA4 purchase event in the WooCommerce data layer, with notes on event_id, transaction_id, value and currency, items, and firing once
Compare your purchase push with this. Field names follow Google's GA4 ecommerce reference.

Check each field against Google's GA4 ecommerce reference:

  • transaction_id matches the order number, and is never empty.
  • value matches your chosen definition (with or without tax and shipping).
  • currency is a valid three-letter code, such as USD.
  • items lists real products with prices and quantities.

Empty value or items on the thank-you page often points to caching, or a script running before the data exists.

9. Make sure it fires once

Reload the thank-you page. Then open it again from the order email link, if your store has one.

Neither should create a new purchase.

If it does, the tag is probably triggered on page view instead of the purchase event, or the plugin doesn't remember that this order was already tracked.

10. Confirm your server received it

Using server-side GTM? Open the server container's Preview at the same time and check the purchase request arrived with the right order ID.

On Tagioo, search for the order in Purchase Inspector. Use the transaction ID, not the amount, because two customers can spend the same amount in the same minute.

A repeated request for the same transaction ID can be a retry, not a new sale.

If the order isn't there, check the tracking domain, DNS and whether the server container is published before you touch any tags.

11. Confirm the platform accepted it

A request leaving your server is one checkpoint. It doesn't prove the platform accepted it.

  • GA4: use DebugView for your test order (Google's DebugView help).
  • Meta: use Test Events in Events Manager, then check the Diagnostics tab.
  • Google Ads and TikTok: use each platform's tag diagnostics.

Remember the timing:

WhereWhen the test order should appearSource
GTM Preview (web and server)Right away—
GA4 DebugView and RealtimeWithin minutesGoogle's data freshness help
GA4 standard reportsProcessing can take 24-48 hoursGoogle's data freshness help
Meta Test EventsWithin minutes, while testingEvents Manager
Ad platform attributionDepends on the attribution windowEach platform

So don't panic if yesterday's orders aren't in the GA4 standard reports yet.

12. Check for duplicates

Now look the other way: is anything counted twice?

  • GA4: Google says it deduplicates purchases that share the same transaction ID (Google's help article). Still, build an Exploration with transaction_id and purchase count and look for any ID above 1.
  • Meta: browser and server copies merge only when the event name and event_id match within 48 hours (Meta's deduplication docs).
  • Watch for blank IDs. Google warns that purchases with an empty transaction_id all get deduplicated together, which can quietly hide sales.

PixelYourSite has a short video on the most common purchase tracking problems:

Video: WooCommerce: Is there a problem with Purchase tracking? (PixelYourSite)

Symptom, cause, fix: the quick table

Bookmark this one.

SymptomLikely causeFix
Orders missing for one payment methodGateway doesn't redirect backTest the return URL; add a backend purchase hit
Orders missing on mobile mostlyShoppers leave on the gateway screenBackend purchase hit
Purchases fire with old or empty dataCached thank-you pageExclude checkout from cache
Purchases stopped after a theme or checkout changeBlock checkout or custom thank-you pageUse a plugin that supports your checkout
Purchases stopped after a speed plugin updateDelayed or combined JavaScriptExclude tracking scripts
Every reload adds a saleTag fires on page viewTrigger on the purchase event
Meta shows double the salesTwo senders or mismatched event_idOne owner; same event_id on both copies
GA4 revenue doesn't match WooCommerceTax, shipping, refunds or currencyOne value definition; send refunds
Your own test orders never showPlugin excludes logged-in adminsTest in a private window as a guest
Bank transfer orders never showTracking counts Processing; order is On holdConfirm payment, or track offline

How do you stop losing orders when the thank-you page never loads?

Here's the honest answer: you can't fix that in the browser.

If the shopper never reaches the thank-you page, no browser plugin, no GTM trick and no server container relay will see that purchase. Server-side GTM only forwards what the browser actually sends.

What does work is a backend purchase hit: your WordPress site sends the purchase itself when WooCommerce records the payment.

Several tools can do this:

  • PixelYourSite Pro has Advanced Purchase Tracking, which sends the purchase from the server when an order reaches a status you choose.
  • The Tagioo for WooCommerce plugin sends the purchase to your own server container when WooCommerce records the payment (or the order moves to Processing), as a background job that retries if the server is busy. It's on paid plans.
  • Custom code using order hooks, if you have a developer.

Whichever you use, the backend copy must carry the same transaction_id and event_id as the browser copy. Otherwise you've traded missing orders for duplicate ones.

Keep a repeatable test log

A screenshot proves something worked once. A log proves it keeps working.

After every change to checkout, plugins, theme or payment methods, place one test order and fill in a row:

DateOrder #MethodValueFired once?Server received?GA4MetaNotes
Oct 204821Card$84.00YesYesYesYes, dedupedBaseline
Oct 204822PayPal (tab closed)$36.50NoYes (backend)YesYesBackend hit only

It takes five minutes, and it turns "I think tracking works" into "here's proof."

Loves Data's WooCommerce walkthrough is a good refresher on the GA4 side:

Video: Google Analytics on WooCommerce – Complete Tutorial (Loves Data)

How can Tagioo help?

Tagioo gives your store a dedicated server GTM container on your own tracking subdomain. The WooCommerce plugin builds the data layer, sends a backend purchase hit on paid plans, and keeps the order ID identical on both copies.

For this checklist, the useful bits are:

  • Event Logs show every request that reached your server container.
  • Purchase Inspector finds a single order by transaction ID, including retries.
  • Run tracking test checks your GA4 server container is published and your Meta CAPI credentials work.
  • Purchase gap alert flags a day when tracked purchases drop well below your 7-day average.

The Free plan includes 15,000 events per 30 days, with no card. See pricing or the setup docs. Not sure what your store runs today? Try the free Website Tracking Checker.

Sources and further reading

Why is my WooCommerce conversion tracking not working?

Usually because the purchase only fires in the browser on the thank-you page, and something stops it: the shopper never gets there, a gateway doesn't redirect back, the page is cached, a script is blocked, or two plugins clash.

Follow one order through the 12 checks above to find which one.

How do I check if WooCommerce purchase tracking is working?

Place a test order with GTM Preview open and confirm one purchase event fires with the right transaction_id, value, currency and items.

Then check it arrived in GA4 DebugView and Meta Test Events. Repeat with each payment method you offer.

Why don't my WooCommerce orders match GA4 revenue?

Common reasons: different value definitions (tax and shipping), refunds that aren't sent to GA4, currency differences, missing purchases from the thank-you page problem, and GA4's 24-48 hour processing time.

Compare paid orders only, over the same dates, using the same value rule.

Why are PayPal orders missing from GA4?

Often because the shopper finishes on PayPal and never returns to your thank-you page, or returns as a new session credited to PayPal.

Test the return flow, and consider a backend purchase hit so the order is sent when WooCommerce records the payment.

Does WooCommerce have built-in analytics?

Yes. WooCommerce includes Analytics reports, such as Orders and Revenue, under WooCommerce → Overview (WooCommerce Analytics docs).

They count orders on your server, so they're your source of truth for sales. They don't send anything to GA4 or ad platforms.

Why are my WooCommerce purchases counted twice?

Two senders (for example a pixel plugin and a GTM tag), a tag that fires on every thank-you page view, or browser and server copies with different IDs.

Pick one owner per platform, trigger on the purchase event, and use the order number as transaction_id and the same event_id on both copies.

Will server-side tracking fix missing WooCommerce orders?

Only if it includes a backend purchase hit. Server-side GTM on its own relays what the browser sends, so it can't recover a purchase whose thank-you page never loaded.

Even then, consent choices and attribution rules still decide what your ad reports show.

See your own events, server-side.

Tagioo hosts your server-side GTM container on your own domain and generates the GA4, Google Ads, Meta and TikTok setup for you. Free for 15,000 events a month, no card needed.

Start free →See pricing
hello@tagioo.com