GA4 session redefinition gaps
GA4 redefined the session. Instead of Universal Analytics' rules that broke a session at midnight and on each new campaign source, GA4 starts a session with a session_start event, keeps it alive within a timeout window (default 30 minutes), and does not split it on a new campaign or at midnight. Teams migrating from UA see session counts and per-session metrics shift because of this redefinition.
What changed from Universal Analytics
Universal Analytics ended a session at midnight in the property time zone and started a new session whenever the campaign source changed mid-visit. GA4 dropped both behaviors. A GA4 session begins with the session_start event and continues as long as the user is active within the session timeout; a new campaign or crossing midnight does not, by itself, start a new session.
Timeout, engagement, and counting gaps
The session timeout defaults to 30 minutes and is adjustable. Activity within the window keeps the session alive; a gap longer than the timeout starts a fresh session on the next event. Because GA4 also introduced session_start as an event and counts sessions from it, and because of estimation, GA4 session totals will not line up with UA for the same period.
The practical gap for migrators: per-session metrics (pages/session, session duration) are not comparable across the two models, and dashboards that assumed UA's midnight/campaign splits need rebuilding.
- Session starts with the session_start event
- Default 30-minute timeout, configurable
- No midnight reset; no split on new campaign mid-session
- UA and GA4 session counts are not directly comparable
How it appears in analytics and logs
Fewer sessions in GA4 than the old UA property often reflects the redefinition: no midnight split and no new-campaign split, not lost traffic.
Diagnostic use case
Explain why GA4 session counts differ from Universal Analytics for the same traffic, and why a mid-session campaign change no longer starts a new session.
What WebmasterID can help detect
WebmasterID derives sessions from your first-party events with a documented timeout, so you can reason about visit boundaries without comparing UA and GA4 rule sets.
Common mistakes
- Expecting GA4 sessions to match Universal Analytics counts.
- Assuming a new campaign mid-visit starts a new GA4 session.
- Comparing per-session metrics across UA and GA4 as like-for-like.
Privacy and accuracy notes
Session timing is derived from event timestamps within a visit, not from cross-site identity. This page is educational, not legal advice.
Related pages
- Session fragmentation and inflation
A session is meant to represent one continuous visit, but several rules can split one journey into many. A timeout during a pause, a campaign parameter mid-visit, crossing midnight, or a self-referral each starts a fresh session. The result inflates session counts and shrinks per-session metrics. This page explains the fragmentation rules and how to read counts affected by them.
- Engaged session edge cases
GA4's engaged session is the basis for engagement rate and the inverse bounce rate. A session counts as engaged if it lasts longer than the engagement-time threshold (default 10 seconds), records a key event, or has at least two pageviews/screenviews. The edge cases — fast single-view satisfactions, a changed threshold, background time — quietly move engagement and bounce numbers. This page documents them.
- Why two analytics tools disagree
It is normal for two analytics tools to report different numbers for the same site. The differences are structural, not bugs: each tool defines a session differently, filters bots differently, samples or does not, attributes on different windows, and fires its tag at a different moment. This page explains the recurring causes and how to reconcile them.
- Web analytics
First-party sessions with documented boundaries.
Sources and verification notes
Last reviewed 2026-06-24. Facts are checked against primary/official sources where available; uncertain specifics are marked “Data not yet verified” rather than guessed.