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.
A 20-minute GA4 audit finds the exact trigger causing the duplication — no guesswork.
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."