GA4 conversion tracking is the foundation everything else stands on, bidding, attribution, budget decisions. It's also the thing most sites get subtly wrong, which is worse than getting it obviously wrong, because subtly wrong data still looks like data.
The mental model: everything is an event
GA4 has no "goals," no session-based conversions, just events with parameters. A key event (the artist formerly known as "conversion") is any event you've flagged as one. The whole game is: fire the right events, with the right parameters, exactly once, and flag the right ones as key events.
The setup, in order
- 1. One data stream per site. Multiple streams for one site (a classic migration leftover) fragments users and double-counts sessions.
- 2. Fire events through GTM, not hardcoded snippets. One management layer, versioned, debuggable. Mixed hardcoded + GTM tags are the #1 source of double-fires.
- 3. Name events deliberately. Use recommended names where they exist (
purchase,generate_lead,sign_up), GA4 attaches special reporting to them. Invent names only for genuinely custom actions. - 4. Send parameters that matter:
value,currency,transaction_idon purchases. No value = Smart Bidding treats a $500 order like a $5 one. No transaction_id = refresh-duplicates inflate revenue. - 5. Mark key events sparingly. Three to five that map to money. Marking scroll-depth as a key event is how agencies report success while businesses lose money.
The step everyone misses: the Google Ads link
GA4 tracking and Google Ads optimization are separate systems until you connect them properly:
- Link GA4 ↔ Google Ads (admin panel, two clicks, frequently forgotten after migrations).
- Import GA4 key events into Google Ads, or better, tag conversions directly with the Google tag and use GA4 for analysis. Pick ONE as the bidding source. Importing both = double-counted conversions = Smart Bidding optimizing toward fiction.
- Turn on Enhanced Conversions and consent mode if you serve EU/UK traffic; without them, modeled conversions vanish and your data develops holes exactly where iOS users live.
Test with real money on the line: place a real order, submit a real lead. DebugView is nice; a reconciled bank statement is truth.
The five failure modes I find weekly
- Double-counting, GTM tag + hardcoded tag + GA4 import all firing. Symptom: platform reports ~2x backend reality.
- Thank-you-page tracking on a page users can bookmark/refresh, fire on the transaction event, dedupe with transaction_id.
- Cross-domain leaks, checkout on a different domain without cross-domain config = every purchase attributed to "referral," your ads get zero credit, and someone concludes ads don't work.
- Consent banner blocking all tags for all users regardless of choice, check fire rates before vs after banner deploys.
- Nobody reconciles. Platform vs backend, monthly, in a spreadsheet. A stable 15% gap is fine (that's the modern web, shrink it with server-side tracking). A gap that changed suddenly is a broken tag screaming quietly.
The 30-minute monthly ritual
Check: key event counts vs backend, any new "(not set)" spikes, tag fire rates by browser, and whether anyone added rogue tags. Thirty minutes a month keeps the textbook your bidding AI learns from honest, and honest data is the entire ballgame.