Session
A single visit to a site, bounded by time and inactivity.
A group of interactions by one user within a window, ending after a period of inactivity, which defaults to thirty minutes in GA4 and is adjustable. The definition differs between tools, which is one reason two analytics platforms never agree on traffic.
Key takeaways
- Thirty minutes of inactivity by default, and the timeout is configurable, so two properties can report different traffic from identical visits.
- GA4 does not start a new session when the campaign source changes mid-visit. Universal Analytics did, which is one reason the migration moved the numbers.
- Sessions are stitched by a client identifier. Anything that resets it splits one person visit into several.
- Cleared cookies, a second device, ITP expiry and declined consent all fragment sessions, so counts overstate distinct visits on privacy-restricted browsers.
- When two dashboards disagree on traffic, check the timeout and the campaign-change behaviour before looking for a bug.
Where a session starts and stops
GA4 opens a session with a session_start event and keeps it open while events keep arriving. After thirty minutes with nothing happening, the session ends; the next event starts a new one. That is the whole rule, and every complication below comes from it.
The thirty minutes is a default rather than a fact. It is configurable from five minutes up to just under eight hours, and changing it changes the session count for identical visitor behaviour. Raising it merges visits that were separate; lowering it splits visits that were one.
This is worth checking before comparing two properties or reconciling with a client own dashboard, because the setting is invisible in every report it affects. A property configured with a two-hour timeout will show fewer sessions and a higher average duration than an identical property on the default, and nothing about the traffic differs.
Midnight is the other boundary. A session crossing into a new day is split in the reporting, which is a small effect on most sites and a noticeable one on anything used heavily in the evening.
The change that moved everybody numbers
Universal Analytics started a new session whenever the campaign source changed mid-visit. Somebody who arrived from organic search, left, and came back through an ad twenty minutes later produced two sessions, one credited to each source.
GA4 does not do this. The same behaviour produces one session, and the second touch does not split it. That is a meaningful part of why session counts dropped for many properties at the migration, independently of anything else that changed.
The reasoning is defensible: a person who did one thing should probably count as one visit. The consequence for attribution reporting is that last-click credit within a session behaves differently, and a channel that used to pick up sessions from mid-visit re-entry no longer does.
For agency work the practical point is narrow. If a paid channel appears to have lost sessions across the migration while its clicks and conversions held, this is usually the reason, and it is a reporting change rather than a performance one.
Why one person becomes three sessions
A session belongs to a client identifier, normally a cookie set in the browser. Everything that resets or hides that identifier splits one persons visit into several, and each fragment arrives looking like a new visitor.
The causes have multiplied. Safari Intelligent Tracking Prevention caps the lifetime of client-side cookies, so a returning visitor after the cap looks new. Clearing cookies does the same thing immediately. Moving from phone to laptop produces two identities unless a user ID is set. Declining consent can prevent the identifier existing at all.
The direction of the error is consistent and worth stating plainly to clients: session counts overstate distinct visits, and user counts overstate distinct people, and both errors get worse as privacy protections tighten. A site whose audience skews to Safari and mobile is more affected than one that does not.
A user ID, set when somebody logs in, is the only reliable repair, and it only works for the logged-in portion of an audience. For most marketing sites that is nobody, which means the fragmentation is a permanent property of the data rather than a bug to fix.
When the client dashboard disagrees with yours
This conversation happens on most engagements and it is almost never a tracking fault. Two tools measuring the same site will disagree on traffic because they define a visit differently, and naming the difference ends the conversation in a minute.
The things to check, in order: the session timeout in each tool, whether either restarts sessions on a campaign change, whether one counts server-side and the other client-side, and whether they are filtering internal traffic differently. Any one of those produces a double-digit percentage gap on its own.
Consent is the other half. A platform that fires before the banner and one that fires after are measuring two different populations, and in Europe the difference is not small. Search Console against GA4 is the clearest example: one counts the click on Google side, the other counts a session that survived the banner.
What not to do is try to reconcile them to a single figure. That is a project with no end state. Pick the tool decisions are made on, say so once, and report the other as a cross-check when its movement is informative.
What it means for an agency
When a client dashboard disagrees with yours on traffic, check the timeout setting and the campaign-change behaviour before assuming a tracking fault. It is usually a definition difference, and being able to name it ends the conversation quickly.
Where it goes wrong
- Comparing session counts across the Universal Analytics migration as though the definition had not changed.
- Quoting user counts as people, when identity fragmentation overstates them and does so unevenly by browser.
- Trying to reconcile two analytics tools to a single figure, which is work with no end state.
- Changing the session timeout mid-engagement, which moves the traffic chart with nothing on the site having changed.
In short
A session is a convention rather than an observation, and the convention differs by tool and by setting. Knowing which conventions are in play is what turns a disagreement between two dashboards from an investigation into a sentence.
Frequently asked questions
How long is a session in GA4?
It ends after thirty minutes of inactivity by default, and the timeout is configurable from five minutes to just under eight hours. Because the setting is invisible in every report it affects, two properties tracking identical behaviour can report different session counts, so it is worth checking before comparing them or reconciling with a client dashboard.
Why did my session count fall when I moved to GA4?
Partly because GA4 stopped starting a new session when the campaign source changes mid-visit, which Universal Analytics did. A visitor arriving organically and returning through an ad within the window was two sessions in UA and is one in GA4. If a paid channel appears to have lost sessions while its clicks and conversions held, this is usually the reason.
Why are my session and user counts too high?
Because both are stitched by a client identifier, and anything resetting it splits one person into several. Safari caps the lifetime of client-side cookies, clearing cookies resets them immediately, a second device creates a second identity, and declined consent can prevent the identifier existing. The error runs in one direction: distinct visits and distinct people are both overstated.
Why does my analytics disagree with the client other dashboard?
Usually a definition difference rather than a fault. Check the session timeout in both, whether either restarts sessions on a campaign change, whether one measures server-side and the other client-side, and how each handles consent and internal traffic. Any one of those produces a double-digit gap, and trying to reconcile the two to one number is a project with no end.
Related terms
Sources
Last reviewed
Keplent keeps track of these for you.
It holds what each client agreed to, watches what their campaigns actually did, and tells you in plain sentences what needs you this week.
Join the waitlist