Why your bounce rate and time on page data from Google Analytics is pants

Keystone CopySEO

google pants


Let’s start with showing some love:

I really appreciate all that Google Analytics offers for free. I love using it – and you are pretty much lost without some kind of Analytics to guide you through the minotaur’s labyrinth that is your website.


And now let’s be a hater:

The way Google Analytics calculates bounce rate and time on page can completely misrepresent the real picture and leave any analysis, especially of content marketing, so inaccurate as to be as useful as the wings of Icarus as he approached the sun.


And now let’s get specific:

Single-page visits are Google Analytics Achilles heel.


Enough Greek myths – let’s cut through this Gordian knot.



Google Analytics and the single-page visit


The fact is that single-page visits are a fairly typical outcome of content marketing – they are actually to be expected – but they leave your overall metrics looking like they’ve taken a severe nosedive.

Let’s see what Google Analytics understands by a bounce and how it measures the time on page of a single-page visit, before we go on to suggest a Google Tag Manager solution to work around this pants situation.


First some Google Analytics housekeeping


The examples I use all relate to a single-page visit to a piece of content on your site from organic search (although the solution I describe will work just as well with social or native traffic referrals).


Let’s think about what happens during such visits from the initial search onwards:

  1. A user searches for a topic of interest
  2. They see your meta description and title in the SERP and this inspires them to clickthrough to your site
  3. They spend a couple of minutes on your site reading the whole article
  4. That’s pretty good engagement – but they leave without visiting another page


This is how Google reports such visits:

As a bounce with zero time on page.


What the…


This clearly engaged user who has read your entire article – perhaps with a good degree of positive sentiment toward your brand – is reported in exactly the same way as someone who arrived and left your site instantly as if it was contaminated with poison.


This is not good!

Let’s be honest, this is total pants.


google pants


How exactly does Google Analytics understand a visit that’s a bounce and how is it recording its time on page metrics?


How Google Analytics understands bounce rate and time on page


This how the Big G defines bounce rate:


‘A bounce is a single-page session on your site.

In Analytics, a bounce is calculated specifically as a session that triggers only a single request to the Analytics server, such as when a user opens a single page on your site and then exits without triggering any other requests to the Analytics server during that session.

Bounce rate itself is calculated by single-page sessions divided by all sessions, or the percentage of all sessions on your site in which users viewed only a single page and triggered only a single request to the Analytics server.’


What’s more these bounces – or single-page sessions – are recorded as having a session duration of zero seconds since there are no subsequent hits after the first one that Analytics requires to calculate the length of a session.


(You can explore why Google calculates session duration in this way here.)


What this means is that all of the following highly valuable visits would be counted as worthless bounces that don’t even register in terms of session or page time:

  • When a user lands on a page, reads it all and then clicks the back button
  • When a user lands on a page, reads it all and then closes the browser window/tab
  • When a user lands on a page, reads it all and then manually types a URL or search query into the browser
  • When a user lands on a page, reads it all and then clicks on an external link
  • When a user lands on a page, reads it all but does nothing else and their session times out after 30 minutes


To spell it out: with Google Analytics’ default set up, every visit is viewed as a zero time on the page bounce if the user does not move on to a second page or interact with the site itself in any other way.


Let’s just dig into this zero time on page issue a bit further.


The problem with time on page is that Google can not apply it to an exit page.

But, where we have a single page visit – which is pretty damn common when it comes to bottom of the funnel content marketing – we have a single entrance and exit page.


The Big G defines time on page like this:


‘The time (in seconds) users spent on a particular page, calculated by subtracting the initial view time for a particular page from the initial view time for a subsequent page.

This metric does not apply to exit pages of the property.

Time on page is calculated as the difference between the initiation of successive pageviews: pageview 3 – pageview 2 (14:31 – 14:02 = 00:29).’


Let’s remove the convoluted language and break this down plain and simple.

Google records time on page as the time spent between a first-page view and a new page view. This leaves all exit pages as effectively having zero time spent on them.


This is not good!

Let’s be honest, this is total pants.


google pants


A better way to measure content marketing via Google Analytics


If you are trying to understand how your content is engaging your readers you are going to struggle with the default Analytics set up.

Content marketing aims to attract and engage an audience. Conversion may well be a lot further down the funnel.

Without being able to properly understand what pieces of content first attract and engage an audience you are in effect shooting in the dark in assessing what works and what doesn’t.


So, let’s add in some sense into this nonsensical situation.

How to improve the bounce rate reporting of your Google Analytics


Here’s an easy fix to your pants bounce rate settings.

Simply add the following line to your Universal Google Analytics code:


setTimeout(“ga(‘send’, ‘event’, ‘nobounce’, ’30_sec’)”, 30000);


This will create an event after 30 seconds that will set this as a non-bounced visit. The event is told to fire at 30,000 milliseconds e.g. 30 seconds.

The exact time you use here will depend on what you want to classify as a bounce for your content.


If you are using Google Tag Manager you should add your Analytics code using a Custom HTML Tag rather than the standard Analytics Tag, so you can edit the code to how you want it.


How to improve the time on page reporting of your Google Analytics


Good old Google Tag Manager can sort out your time on page misreporting too.


And it’s a pretty easy fix: here’s how it’s done.


  1. Create a trigger to send the event at your preferred time interval


  • Set your trigger as the timer type
    (At the bottom of the list Other => Timer)


  • Configure your trigger as follows:

Event Name can be left as default (gtm.timer)


Interval is the interval value of the event in milliseconds.

15000 or 30000 for 15 or 30 seconds should do it but you can set this according to how precise you want to measure time on page

Limits are sensible to add to avoid artificially inflated values from extreme cases – again the choice is yours as to where you draw the line.

If you had set your intervals at 15 seconds (15000 milliseconds) then 40 instances of these would be 10 minutes, and so on

Enable this trigger when is the option to determine when the trigger fires.

You can get super smart and use different triggers for different types of pages – but I’d simply start by using the following:

Page URL
Matches REgEx

(This uses .* which is the regular expression that matches all pages – and sets your trigger to fire on every single page of your site)


  1. Create a custom event tag that shows the user is still on the page


  • You need to label this event so it can easily be identified in your analytics reports as this event tag will be fired by your custom trigger.
  • Create a Tag and set the Tag type to Universal Analytics(I’m assuming this is what you are using – if you are not there are many good reasons to switch)
  • Configure the Tag as follows: 

    (This is an example – feel free to adapt to your own tracking model/practice)

Track Type – Event

Category – e.g. Engagement

Action – e.g. timeonpage15s

(Depending on your Trigger settings)

Label – e.g. 15 seconds

(Depending on your Trigger settings)

Select a trigger – select the trigger you just set up above

Non-interaction hit – False

This setting determines whether the event affects bounce rate. If it is set at False then this classes as a non-bounce visit

(If you use this GTM solution there is no need to follow the instructions in the previous section for altering how bounce rate is recorded)


Problem solved!