// GA4

Why your GA4 conversions don't match reality

// GA4Why your GA4 conversionsdon't match reality

If you've ever compared your GA4 "purchases" count to what actually landed in your order system and found GA4's number sitting comfortably higher, you're not imagining it — and you're not alone. In almost every account I audit, the gap traces back to one of three defaults nobody ever went in and changed.

1. The refreshed confirmation page

The most common offender. A customer completes checkout, lands on /thank-you, and then — out of habit, or a flaky connection, or just curiosity — refreshes the page. If your purchase event fires on page load rather than being gated by a one-time trigger, GA4 logs a second sale that never happened.

The fix is to fire the event once, tied to the transaction ID, and suppress repeats:

// Only send the event once per transaction, even across refreshes
const sentTransactions = JSON.parse(sessionStorage.getItem('sm_sent_tx') || '[]');
 
if (!sentTransactions.includes(transactionId)) {
  gtag('event', 'purchase', {
    transaction_id: transactionId,
    value: orderTotal,
    currency: 'EUR',
  });
  sessionStorage.setItem(
    'sm_sent_tx',
    JSON.stringify([...sentTransactions, transactionId])
  );
}

2. Cross-tab, cross-device double counting

Open the confirmation page in a second tab (common on mobile, where a payment redirect sometimes opens a new tab instead of returning to the original one) and — same story — a second event, same transaction ID, no dedication logic to catch it. The sessionStorage check above handles same-tab refreshes, but a true fix needs the transaction ID checked server-side too, not just client-side, if you're sending events via the Measurement Protocol as a backup.

3. A stale default event carried over from Universal Analytics

If your GA4 property was set up by migrating tags rather than starting clean, it's common to find a legacy enhanced_conversion tag and a newer GA4 native tag both firing on the same trigger. Two tags, one action, one very confused conversion count.

Not sure which of these is happening in your account?

A 20-minute GA4 audit finds the exact trigger causing the duplication — no guesswork.

Get a GA4 audit

None of these are exotic bugs. They're default behaviors nobody revisited once the initial GA4 setup shipped — which is exactly why they're worth checking even on accounts you consider "done."