Sessions are pretty arbitrarily defined, all too easily inflated, and far more complex than most realise. It’s possible for apparent step-changes in Google Analytics reports to have little real-world relevance, and common for reports to show numerous mysterious and apparently inexplicable landing pages and traffic sources.
And yet, we put a lot of stock in these concepts - businesses are sold on how many visits their site received in a year. We optimise for conversion rate, a metric calculated using session count. SEOs, ad agencies, consultants and marketing managers can all have targets of a growth in organic sessions. Distilled’s own creative pieces are often judged by clients in terms of how many visits they received. It is therefore essential for Google Analytics users to understand what they’re actually talking about when they reference a “session”, and that’s what this post is all about.
Google Analytics imposes a vocabulary on traffic that your site receives. That schema is hits, sessions and users. This classic post by Avinash Kaushik outlines the importance of understanding this schema, but the short version is that:
- A hit is a single interaction (commonly an event, pageview or transaction)
- A session is a group of hits
- A user is a group of sessions
Each of these levels of analysis has its own set of dimensions and metrics.
What I want to discuss here is how Google Analytics chooses to group hits into sessions. And this is very much a choice - it implies assumptions that Google has about how people use websites. And these choices do make a difference. They can generate multiple sessions where you might expect only one, or merge sessions that you might expect to be separate. This can hugely skew your session-level reporting, which includes anything to do with bounce rates or conversion rates, and anything you’re attributing based on source, medium or landing page. In fact, it includes pretty much all the metrics that people care most about.
Have you ever scrolled down far enough in your landing page report to find an e-commerce checkout page? Typically it will be sitting there, taunting you, with a conversion rate of close to 100%, and inexplicably including some degree of “new sessions”. If you haven’t ever seen this, you’re in the lucky minority of Google Analytics practitioners - this is a really common, and often really irritating phenomenon that is endemic to the platform. Obviously people don’t really find your site via the checkout page, so whenever you see this, the sensible implication is that there must have been some previous session.
Someone came to your site, through some marketing channel that you invested in, and they decided to make a purchase. Fantastic! - you want more sessions like that one. Except that the session is recorded as having abruptly ended without a conversion, its landing page and possibly its channel receiving zero credit, and indeed having their conversion rate lowered by it. Meanwhile, the second session, starting half way through your checkout funnel, receives full credit. Perhaps it’s a self-referral, perhaps it’s listed as “direct”, perhaps you got lucky and it inherited the previous session’s attribution.
So, let’s take stock. When you look at your dashboards and reports at the end of the month, the effect of this converting “session” (or, as Google Analytics sees it, pair of sessions) will be:
- A lower conversion rate for the channel and landing page responsible for the conversion
- A lower pages / session metric for the channel and landing page responsible for the conversion
- An increase in the drop-out rate for some page in your funnel
- An inflation of your total sessions count
So how does this happen? There are a few main ways in which a group of hits can be grouped into multiple sessions, many of which have some surprising or unfortunate implications. I’ll go through each in turn.
By default, Google Analytics sessions timeout after 30 minutes. You can see this in the web interface under Admin > Property > Tracking Info > Session Settings:
That means that if your customer stepped away from their computer to make a cup of tea or take a phone call, their session has been split in two, leaving your attribution data muddled, and your landing page report compromised.
However, this doesn’t mean that one should ramp up the timeout as high as it’ll go. If you did that, you’d end up merging two sessions if a user returns to the site via a bookmark or typed URL later that day (because direct visits are treated differently in this way - more on that later).
Nonetheless, 30 minutes between interactions is far too round a number to be anything other than an entirely arbitrary cut-off point. There’s no pretence here that Google has studied the maximum time between interactions in a single “visit” in your industry, or whether your site has lengthy videos, or anything of that sort.
This unassuming configuration option has far reaching implications. Bizarrely, a session in Google Analytics cannot cross over midnight in the chosen time zone. So if your customer lands on your site at 23:55 and makes their purchase at 00:05, yep, that’s two sessions and a landing page in the middle of your conversion funnel.
A new session will be triggered if it spans multiple dates.
Again, there’s not a great deal that you can do about this, and it does seem arbitrary at best. The only other thing that this option affects is the times shown in time-based reports:
To make the best of a bad situation, users can either make a choice between picking their “real” timezone to maximise the usefulness of reports like the one above, or picking a timezone that minimises the number or split sessions (for Distilled that’d be 3 hours behind our real timezone).
What happens if during a visit to a website, you open a new tab to Google something else on the site, and click through to it again? Well, you’ve ended the first session, and started a new one. This is because Google Analytics starts a new session whenever the “campaign” is updated. This means any of:
- Arrival via search engine
- Arrival via another site (unless you have analytics.js tracking code and the site in question is excluded in your referral exclusion list)
- Navigating to any campaign tagged URL (including any you’ve errantly placed on your own site)
Note that this list does not include arrival via “direct”, because direct sessions always inherit the user’s previous campaign data (within the campaign timeout period). So arriving via a typed URL will not set a new campaign, and as such will only trigger a new session if there is some other reason, such as a 30-minute period of inactivity.
Distilled.net excludes its own domain as a referring domain.
It used to be the case that, with classic Google Analytics, referrals would also not trigger a new session, for the benefit of sites with 3rd party payment providers like Paypal. However, these days you need to manually exclude them in your referral exclusion list to avoid any problems.
Unlike the other cases I’ve discussed so far, it does at least seem like there’s some logic to this. Although the cynical among you might see the “last non-direct” methodology as rather favourable towards Google’s acquisition products (AdWords, GDN and organic Google Search).
New cookie or clientId
It might sound obvious to say that having a different cookie will cause you to start a new session. However, there are a number of entirely avoidable ways in which this can happen accidentally. The most obvious and common of these is when your Google Analytics property spans multiple domains - in this case the data normally transferred with the cookie has to be transferred with a cross-domain linking - see my guide here on how to implement this. The most common cause of this is sites with international versions - for example, Momondo.com, Momondo.co.uk, Momondo.de, etc.
Another similar issue can come about if you have manually named trackers on parts of your site, to ensure that multiple properties can function simultaneously, or in some cases where both ga.js and analytics.js tracking code is used inconsistently between different pages. In these cases the key is consistent implementation across your site(s).
One of the big ongoing trends in how people behave online is cross-device browsing. In general usage, a “session” on a website could well mean switching rapidly between a phone, a tablet and a desktop, and it’s important to remember that we’re conveniently ignoring this in our analytics efforts. UserId was Google’s nod to this problem back when Universal Analytics was launched, and while it’s effective, it’s only applicable when your users is actually logging in on multiple devices, which is a pretty rare use case for most businesses we work with.
Last and probably least, and mostly for the sake of exhaustiveness, there are a really niche factors that only really apply to Measurement Protocol users - I wrote a little more about this stuff here. The first is the session control parameter, which allows you to manually override Google Analytics’s default session handling on a per-hit basis. Second is non-interaction events that are isolated (by more than 30 minutes) from any other interaction, which have the distinction of being hits that belong to users but do not belong to any session.
What to do next
Hopefully this post has taught you a little about how Google Analytics interprets your data, and if it has, you might be a little distressed by how unreliable it all seems. While I’ve proposed some solutions and problems to look out for above, there’s no getting around the arbitrary nature of sessions and, consequently, attribution in Google Analytics. However, if you’re not doing so already, then this should definitely push you to explore the Multi-Channel Funnels and Model Comparison tool in Google Analytics - these reports, by taking into account all the sessions leading up to a conversions, are less sensitive to some of the arbitrary “splitting” that’s discussed above. Or, if you need further help, you could always get in touch.
If you’ve any tips for handling sessions and session-level metrics, please do share them in the comments below!