Google Analytics Discrepancies
Overview
Discrepancies between Convert and Google Analytics (GA4) visitor counts are common and usually expected. They stem from fundamental differences in how and when each tool counts visitors.
Convert Counts More Than GA
This is the most common scenario. Convert's tracking script loads synchronously in the <head>, counting visitors almost immediately. GA typically loads later (async, via GTM, etc.).
Why the gap exists:
- Short-session visitors (bounces) may leave before GA fires
- If a visitor closes the tab in the first few seconds, Convert has already counted them but GA has not
- Mobile users on slow connections may abandon before GA loads
- Browser "back" button usage during this window is counted by Convert but missed by GA
- Ad blockers may slow down or block GA while Convert still fires
This is particularly impactful for:
- Mobile users (slower connections)
- Users with ad blockers
- Quick-bounce visitors
- Single-page views where users immediately navigate away
GA Consent Mode and pscdl=denied
pscdl=deniedWhen the project setting "Do not wait for page_view event" is enabled and GA consent is not yet granted, Convert sends experience_impression with pscdl=denied. GA receives the event but filters it out of reports because analytics storage is denied.
Solution: Enable the default setting to wait for the first GA page_view. This ensures impressions are reported only after consent is granted and data flows properly.
Note: On sites using CMPs (Consent Management Platforms), the first GA
page_viewcan still occur before consent is granted. In such cases, the resultingexperience_impressionmay carrypscdl=denied— this is expected CMP timing behavior.
GA Counts More Than Convert
This is rare but can happen:
- GA session timeout — If configured to be very short (e.g., 5 minutes), the same visitor returning after timeout is counted as new by GA, while Convert maintains the true unique count via its cookie
- Network failures — Temporary issues affecting Convert's tracking but not GA (rare since GA is already loaded by the time Convert sends)
Reducing the Gap
| Option | Effect | Trade-off |
|---|---|---|
Move GA/GTM bootstrap inline near top of <head> (keep async) | Shrinks or eliminates the gap | Slightly more bytes in critical path |
Add <link rel="preconnect"> to googletagmanager.com | Cuts DNS/TLS time on mobile | Modest gain — measure first |
Fire GA in an Initialization – All Pages trigger in GTM | Runs as soon as GTM boots | Requires GTM container change |
| Accept the gap, treat Convert as the early-exit indicator | No code change | Must document rationale for stakeholders |
| Align GA session timeout to 20 min | Removes edge case where GA keeps sessions alive longer | Alters GA Avg. Session Duration |
Key Takeaway
The discrepancy indicates Convert's tracking is working correctly — it captures all visitors including ultra-short sessions. GA's delayed tracking misses some visitors due to its loading and consent constraints. This gap can be a valuable early-exit signal in your analytics.
Updated about 1 month ago