Understanding Sessions in Google Analytics 4

December 2, 2021 | Samantha Barnes
google analytics 4

Editor's Notes: Google has announced that all Universal Analytics properties must migrate to Google Analytics 4 by July 2023. Companies using Universal Analytics 360 properties have until July 2024, but encouraged to start immediately due to complexity.

When discussing the differences between Google Analytics 4 (GA4) and Universal Analytics (UA), teams will be faced with changing strategy in addition to measurement due to the new data model. With this next evolution of Google Analytics tracking, there are a lot of significant shifts in interpreting the data, and the concept of sessions holds one of the top slots of UA vs.GA4 property differences. As an analyst, marketer, or data advocate, you may be faced with questions like:

  • What's different? 
  • How does it affect reporting? 
  • How do I explain this to teams and executives?
  • How does this affect strategy?

Below is information on the state of sessions in Google Analytics 4. You'll also find information on sessions in Universal Analytics as well as what we don’t see regarding processing. An understanding of the previous behavior of sessions is helpful to see the value in the current performance of what's considered a session.

Sessions in Google Analytics 4

Let's take a look at how session measurement is done in Google Analytics 4.

Keep Calm and Sessionize On

Even though the previous session-scope concept is shifted, sessions themselves are still analyzed and used in reports. However, it's not a "case closed" situation for continuing business as usual. The considerations involve reporting, setting measurement objectives, and recognizing that traditional session behavior will be different. 

Exploring GA4 more, it makes sense why sessions are now events and why some session-based metrics have changed.

Out of the main widgets on the GA4 home page, you’ll be able to see the hint that tracking is user-first. Even the Acquisition reports prioritize users at the top. The tables look familiar, but it's noticeable that Bounce Rate is missing even though it was a key metric for session analysis. 

Campaign Behavior & Analysis

The automatic session_start event name is the new main measurement for sessions. In Google Analytics 4, the sessions should be expected to be fewer than Universal Analytics data. This is because sessions do not break in situations where they used to, like when the traffic source or campaign information changes, or when midnight comes around and the user is still on the site. This of course has implications for analysis.

A situation that can occur is the following:

Someone remembers a jacket that they saw in an email promotion and clicks to your website. After browsing, they are closer to making a decision but want to check their email for any other interests or promotions first. One of the emails shows another jacket they like, so they click on the link and continue through to buy both. Those are two different emails, so two differently tagged campaign links.

In Universal Analytics, this would be two separate sessions, even though the customer hadn't left the site. When the traffic information changed, the user had essentially entered the front door twice, so the first session breaks. 

In Google Analytics 4, it would still just be one session and both traffic sources would be in the same session. To clarify, when referring to sessions here for GA4, I'm referring to the parameters ga_session_id and ga_session_number, which are parameters that are sent with every event.

For more information on attribution and campaign information, see this FAQ post from Sean Power.

Note: Using UTM tagging for links on your site is still not best practice. Even though the concept of a session doesn’t break, your conversion would still go to whatever the most recent traffic source/UTM was on an event. Google Analytics events should always be used instead.

Scope Regarding Custom Dimensions

If you choose to make a custom dimension session-scoped in Universal Analytics, it will apply to every pageview and event even if it’s just sent with one of those hits within the session. This is not true for Google Analytics 4 currently. The solution is to send the parameter that you would like to behave as a session-level dimension on every event—not just the session_start event. Implementing a unique session ID (in addition to Google’s default) also gives the opportunity to analyze visits that included a parameter value at some point in the visit.

Bounce Rate

In Universal Analytics, a bounced session refers to a visit with only one pageview (if no interaction events are fired as well). 

In GA4 properties, the closest equivalent is looking at session_starts compared to engaged_sessions. The new engaged_session event happens when a user is on the site for more than 1 pageview or 10 seconds have passed. This is a great replacement for bounce rate because it seemed a little unfair that if a user stays on a page reading or watching a video without event tracking, they’re going to count as a bounce no matter how much time they spent consuming content. 

It’s especially good news for blogs, informational websites, and publishers, where the user may have had a positive experience searching for what they needed, clicking on a link to the site, finding and reading the information, and leaving (hopefully with the site becoming top-of-mind in the future). As an alternative to the default engagement time length measurement, it can be adjusted in Data Stream > More Tagging settings for up to 60 seconds.

Session Timeout

By default in Universal Analytics, there’s a session timeout that also breaks and ends a session if the user is inactive for over 30 minutes. If that time has passed, a separate session would start once the user began triggering pageviews and events again. There's no default timer, so duration is based on comparing timestamps of pageviews and/or custom events that you may have implemented on your site. 

In Google Analytics 4, default session timeout is also 30 minutes. Beyond that default, session timeout can be adjusted to up to 7 hours and 55 minutes. However, the definition of "timeout" is slightly different. There's a new default user_engagement event that acts as a timer by sending events to GA4 periodically. However, if the site or app isn't in the foreground, those events do not fire. If no timing events or others are sent after 30 minutes, the session has expired. With this new default behavior, the concept of timeout is more accurate.

Summary of Session Analysis Comparison

Universal Analytics Google Analytics 4
Change in traffic source or campaign breaks sessions. Changes in traffic source (i.e., a user clicks a link in an email and in the same session clicks an organic link to the site) do not break the session for the same user.
Sessions metric count. session_start event count.
Inflated count of sessions. Closer to a more accurate count of site visits.
Bounce Rate key metric. Engaged Session key event.
Number of Sessions per User includes bounces. Engaged Sessions per user does not include quick bounces that are less than 10 seconds.
Sessions that extend between days at midnight break and start a new session the next day. Sessions can extend across days and still be considered the same session.
Custom dimensions can be session-scoped (like "logged-in"). Custom parameters will not be automatically applied to other hits beyond the user's session_start event.
Real-Time traffic data will change once it is processed. This is because of the default campaign timeout setting. Real-Time traffic data will not change once it is in the standard reports.
Default 30 minute session timeout. Same behavior of the default 30-minute timeout.

More Flexibility and Better Behavior Analysis

With everything considered, the new way of session measurements lends more flexibility and better behavior analyses with the new timing hits and additional events. Even though the concept of session-based dimensions and session-based conversions is a shift that will take getting used to, it can be more useful in many contexts and it's optimized for the new data model.