Average Session Duration in GA4 vs Universal Analytics: What Changed
Your session duration numbers look completely different in GA4 than they did in Universal Analytics. Here's why — and which number you should actually be tracking.
Posted by
Related reading
How to Track AI Traffic in GA4 (ChatGPT, Perplexity & More)
AI assistants like ChatGPT and Perplexity are sending real traffic to your site — but GA4 doesn't label it automatically. Here's how to find and measure it.
GA4 Engagement Rate Explained: What It Means and Why It Matters
GA4 replaced bounce rate with engagement rate — but most people aren't using it correctly. Here's what engagement rate actually measures and how to benchmark it.
If you migrated from Universal Analytics to GA4 and compared the average session duration numbers, you probably did a double-take. The numbers are different — sometimes drastically so. Some sites see GA4 reporting half the session duration of UA; others see more. It's not a configuration error. It's a fundamental change in how session duration is calculated.
Understanding the difference matters because it affects how you interpret trends, how you benchmark against past performance, and how you explain the numbers to stakeholders who remember the old data.
How Universal Analytics Calculated Session Duration
In Universal Analytics, session duration was calculated as: time of last hit minus time of first hit. A "hit" in UA was any tracked interaction — a pageview, an event, a transaction.
This created a well-known problem: the last page of a session was never counted toward duration. If a user visited three pages and spent four minutes on the third page before leaving, that four minutes was not included in the session duration because there was no subsequent hit to mark the end of it. UA could only measure time between hits — it had no way to measure time after the last hit.
Bounce sessions (single-page sessions) therefore always had a duration of 0 seconds in UA, regardless of how long the user actually spent on the page.
How GA4 Calculates Session Duration
GA4 uses a different metric: average session duration is derived from userEngagementDuration, which is the total foreground time GA4 measures across a session. GA4 fires a user_engagement event periodically while a page is in the foreground — typically every 30 seconds and on page unload — capturing the actual time spent on the page including after the last navigation.
In the GA4 API, averageSessionDuration = userEngagementDuration ÷ sessions. The duration is measured in seconds.
This solves UA's final-page problem. If a user spends four minutes on the last page, GA4 captures most of it through the periodic user_engagement events fired during that time.
Why the Numbers Look Different
Depending on your site and traffic mix, GA4 session duration can be higher or lower than UA — and both directions are explainable:
- GA4 is lower if your UA implementation had many events firing on each page, which artificially inflated UA session durations by providing many "last hits" to measure against.
- GA4 is lower if you have high traffic from mobile users who frequently switch apps, since GA4 stops recording foreground time when the page is backgrounded.
- GA4 is higher if you have significant single-page sessions. UA reported these as 0 seconds; GA4 captures the actual foreground time.
- GA4 is higher if you have content-heavy pages where users spend significant time on the final page of a session.
Which Metric Should You Actually Track?
GA4's averageSessionDurationis a more accurate representation of actual time spent on your site. But the transition means you can't directly compare your GA4 numbers to your historical UA data — they're measuring different things.
Practically speaking, this means:
- Don't benchmark against pre-migration UA data as if the numbers are comparable. Establish a new baseline from your GA4 data from when you migrated.
- Focus on trends within GA4, not absolute numbers. Is your session duration increasing or decreasing over time, controlling for traffic mix changes? That's the question that matters.
- Segment before you interpret. A blended average session duration across all traffic sources is often meaningless. Organic search, direct, and paid social can have dramatically different durations. Always look at duration by segment.
Session Duration as Part of a Broader Quality Picture
Session duration on its own is an imperfect metric. A long session can mean a user found deeply engaging content, or it can mean they were confused and couldn't find what they needed. A short session can mean a user bounced immediately, or it can mean they found exactly what they wanted in seconds and converted.
Track session duration alongside engagementRate and conversion rate for the most complete picture. A high duration + high engagement rate + low conversion rate is a different problem than high duration + low engagement rate + low conversion rate — even though the session duration looks the same in both cases.
If you manage multiple GA4 properties, tracking these metrics across all of them simultaneously helps you catch deviations early. Perch Analytics surfaces average session duration and engagement rate for every property in your account in one dashboard — so you can see at a glance which properties are tracking normally and which warrant a closer look.