Common example. A client showed me a GA4 funnel report: 70% “viewed a product,” 50% added to cart", 5% begin checkouts. Numbers are not precise but "the issue’s probably at checkout,” they said.

I double-checked the raw data. Turned out: view_item wasn’t firing when someone opened a product page — it triggered when a product block loaded in the code. Sometimes during a scroll on the homepage, sometimes in the background. Users never saw the product — but GA4 counted it as a view.

GA4 funnels are based on events. But GA4 doesn’t verify:

• If the user actually saw the element
• If it was visible — or just rendered in the DOM
• If it was triggered by a script, scroll, or auto-load
• If there were duplicate events
• If the step sequence made sense — or just happened by chance

So the funnel looks behavioral — but it’s often just frontend logic. It assumes: event = action. But in reality, that's not always true.

In this case, the client:

• Spent two weeks fixing checkout UX
• Ran A/B tests — even though most users never made it that far
• The real issue? People bounced before ever engaging with product pages

The funnel looked “correct.” But it reflected scripts — not people.

Now, I treat GA4 funnels differently:

• Export data to BigQuery before any analysis
• Check how each event was triggered (manual, auto, scroll, etc.)
• Review timing between steps — was it a real journey?
• Look for duplicate events in one session
• Use heatmaps or click maps to validate actual behavior

GA4 is powerful. But its funnels aren’t true behavior tracking — just event sequences.

If you don’t check what’s behind the events, you’ll end up optimizing for scripts, not users.

Want to get all my top Linkedin content? I regularly upload it to one Notion doc.

Go here to download it for FREE.