Using A Google Tag Manager Listener To Get Your Real Bounce Rate

Frustrated by your bounce rate? Does it stay stubbornly high at 60% or more?

I was frustrated, too — until I realized that Google Analytics doesn’t track bounce rate fairly.

A bounce is any visit for which the visitor only looks at one page and does not interact with it. If you’re publishing a blog, this is truly unfair as someone may spend minutes reading a post, and still be counted as a bounce.

This is what I call the Boing Fallacy.

My friend and fellow Converterati, Bryan Eisenberg, pointed me to a simple solution by Aris Abramian on the eWeb Marketing blog. This solution creates an event that triggers when a visitor has been on a page for 15 seconds or longer. Since Google Analytics considers an event to be an “interaction,” a visit of 15 seconds or longer therefore won’t count toward your bounce rate.

However, this solution uses calls for a version of Google Analytics that predates Universal Analytics. Since our Conversion Scientist blog uses the new Universal Analytics and Google Tag Manager, the calls that Aris uses in his solution won’t work for us.

Google Tag Manager (GTM) is supposed to make things like this easy, right? Well, it depends on how you define “easy.” GTM is new and changing.

For you, I’m offering a quick how-to that will allow you to achieve the same thing as Aris’ solution. It’s a good exercise for those who are just getting up to speed on Google Tag Manager.

Google Tag Manager Event Listeners

Fortunately, GTM has implemented event listeners. These tools place some Javascript on your pages that listen for certain events, including:

  • Click Listener: tells GTM when someone clicks on something in your site that doesn’t generate a new page
  • Form Submit Listener: tells GTM when someone submits a form
  • Link Click Listener: tells GTM when someone clicks on a link that takes them to another site
  • Timer Listener: this is the one we want; it tells GTM when a certain amount of time has passed

Before these listeners, we had to put special code on each of our buttons, forms and links to record things in GA. Not anymore.

Using The Timer Listener To Time The Visit Duration

The timer listener simply starts a clock ticking when it gets placed on a page. It’s a tag, a bit of Javascript that gets inserted on the page at our whim.

If the visitor leaves the page before the timer goes off, nothing happens. However, if the visitor stays long enough, the timer fires, and we can use GTM to create a Google Analytics Event celebrating the occasion.

My approach is simple:

  1. Place a timer listener on every page that goes off in 15 seconds.
  2. If the timer goes off, use GTM to set an event in Google Analytics. This marks all of the visits for which the visitor stayed for more than 15 seconds. For a blog, this qualifies as “not a bounce.”
  3. Create an Advanced Segment in GA to show what percentage of visitor sessions were less than 15 seconds (i.e., your true bounce rate). Goodbye, Boing Fallacy!

Step 1: Set The Timer Listener

First, create a Tag. I called mine the “15 Second Timer.” It has Tag Type “Timer Listener.”

GTM assigned the name “gtm.timer.” OK, that works.

I set the interval to 15000 milliseconds, or 15 seconds.

Finally, I added this to all pages in my blog with the Firing Rule “All pages.”

Setup a Timer Listener in Google Tag Manager.

Setup a Timer Listener in Google Tag Manager.

Step 2: Create A Rule To Tell Us When The Timer Goes Off

Now, I create a new Rule that watches the timer and tells me when it goes off.

I call this the “15 Second Timer” rule. It goes off when it intercepts an event generated by the Timer Listener, which GTM called “gtm.timer.”

We can now insert a Tag on the page that goes off after 15 seconds by attaching itself to this rule.

Setup a rule that tells us when the timer goes off.

Set up a rule that tells us when the timer goes off.

Step 3: Create A Tag That Writes An Event To Google Analytics Using Our New Rule

Now, we just create another tag that sends an event to Google Analytics when this rule is true — that is, when 15 seconds have passed on any page.

I call this the “15 Second Visit Event.”

Its Tag Type is “Universal Analytics” because that’s what we use, but you could choose “Google Analytics” if you’re on the synchronous version.

Our Tracking ID was taken from Google Analytics.

The Track Type is an Event. A Google Analytics Event has four possible parameters:

  1. The Category groups events of a certain type
  2. The Action is what happened. In our case, the visitor just stayed on the page
  3. The Label is a description of the integer value that comes next
  4. The Value is some number that gives information

To keep it simple, I put this event in the “visit” category and called the action “15 seconds.” This implies that I could create events for different times, tracking people who stay for 30 seconds, 1 minute, etc.

Finally, I attach this tag to the Timer Listener rule I created called “15 Second Timer.”

Sending an event to Google Analytics in Google Tag Manager.

Sending an event to Google Analytics in Google Tag Manager.

Step 4: Publish Your Modified Container

We’ll cover how you QA a Google Tag Manager setup in another column. For now, let’s assume everything is working fine.

Create a new version of your container, and click the Publish button.

Create a Version and Publish your new container.

Create a Version and Publish your new container.

Google Analytics Sees Your Event As A User Engagement

You should see a marked drop in bounce rate. Boy, I sure did.

The difference in bounce rate when the 15 second event is added.

The difference in bounce rate when the 15 second event is added.

Adding the Event changes the way Google Analytics calculates bounce rate. When the Event is sent, Google Analytics sees this as a visitor engagement, just as it would if the visitor had clicked on something. Therefore, anyone who stays on your site for more than 15 seconds is no longer counted as a bounce, even if they don’t take any additional actions.

My bounce rate went from over 70% to about 16% overnight. Man, I’m good.

Before and after the bounce rate change.

Before and after the bounce rate change.

Naturally, you can select a different timer — say 30 seconds — to track bounces more conservatively.

Recording your bounce rate more fairly makes you feel better, since your bounce rate should go down. This exercise will give you some experience in playing with GTM’s new listeners.

Opinions expressed in the article are those of the guest author and not necessarily Marketing Land.

Related Topics: Analytics | Analytics & Marketing Column | Channel: Analytics | Google | Google: Analytics | How To Guides | How To Guides: Marketing Analytics


About The Author: is the Conversion Scientist at Conversion Sciences and author of Your Customer Creation Equation: Unexpected Website Forumulas of The Conversion Scientist. Follow Brian at The Conversion Scientist blog and on Twitter @bmassey

Sign Up To Get This Newsletter Via Email:  


Other ways to share:

Read before commenting! We welcome constructive comments and allow any that meet our common sense criteria. This means being respectful and polite to others. It means providing helpful information that contributes to a story or discussion. It means leaving links only that substantially add further to a discussion. Comments using foul language, being disrespectful to others or otherwise violating what we believe are common sense standards of discussion will be deleted. You can read more about our comments policy here.
  • Pat Grady

    What if you’re clear and concise and provide an answer to the reader in 3 seconds… or you serve a audience of speed readers… or your design fills the screen well, and they needn’t interact or even scroll… :-). Bounce rate is a horrid way to measure success. I do like your idea though! I’d shorten it to 7 seconds, but now we’re talking about the degree of how great your idea is. :-)

    If you’re a local weather site, bounce rate is inversely proportional to how well your site is organized for the viewer.

    Some folks break the info up and paginate it (they do it for other reasons too), and I super dislike that.

  • Pat Grady

    I saw an organic listing at Google today, for an article on the LA Times. When I went there, the first sentence was readable, but the rest was barred out, and they prompted me to sign up. I bounced. I also learned to never visit the LA Times site again. And I bet others will do the same. The question is, will some analyst there conclude: early on, our content masking caused BR to increase, but it didn’t stay high for long.

  • Garfield_Disliker

    This is an awesome idea for GTM. Thanks for sharing this.

    Feel obliged to point out that setting the event category as “visit” seems really sloppy, though.

    Essentially you’re labeling an event category, which is a dimension, as a metric (“visits”)… The content type (e.g, “landing pages,” “blog post,” etc.) might need to be taken into account there, and would make a much more appropriate event category.

    On top of that, considering GA recently switched their terminology from visits to sessions, using “visit” as an event category would get really confusing. If you do anything with custom reporting it would be a mess, because you could potentially end up reporting on “visits” against something like “visits with event”—”visits with visits” in other words.

    Context is the key when implementing something like a timer event. I would recommend to anybody who does this to tweak the firing rules and make them really specific.

    For instance, 5, 10, 15, even 30 seconds might be fine on a lot of pages, but on a blog post, you probably want the reader to hang around a little longer.

    I would couple firing rules to only fire on particular pages/sections rather than site wide.

    The other thing is that if you have a single page, scroll-heavy website, firing scrolling events would probably be preferable for measuring your bounce rate than time on page.

  • ɯɐɥƃıq ןǝoɾ

    Why not just build a segment that measures all one-page visits with a session less than 15 seconds (or whatever your time is)? Events are good for measuring those on-page interactions that GA is not already counting, but GA is already counting these criteria.

    I also agree that bounce rate is a horrible way to measure success, but the trending of that number can be an important indicator. In that case, either measurement (any measurement) of bounce rate works well enough to show you trending information.

  • Yehoshua Coren

    I don’t like this methodology at all. I don’t believe it describes user behavior very well as an arbitrary amount of time on a page doesn’t mean that the user interacted with the content. I do not use the above method in any of my implementations.

  • Garfield_Disliker

    Yehoshua, I think it could be useful with tighter constraints or in a more specific context… It’s a useful event to fire, but at the same time, might want to set non-interaction to “true” on it. Personally, I thought the most objectionable aspect of it was setting the event category to “visit.”

  • Piotr Sobczyk
  • sharithurow

    Bounce rate isn’t a very good analytic, IMHO. A person who does a “quick fact” query in a search engine, sees your search listing and clicks on it, and gets the answer on your page?

    That’s a good user experience, not a bad one.

    Bounce rates need to be measured in context in order to be accurate.

  • Brian Massey

    As with all analytics, accuracy really isn’t our goal. Precision and consistency, however, are.

    Bounce rate is a “predictive” metric. It doesn’t tell us who bought or who became a lead. However, it is very informative in terms of identifying content, products and pages that consistently don’t engage a visitor.

    We can learn a lot about our site from the bounce rate.

  • Brian Massey

    The major thrust of this column was to demonstrate the use of the tools. I don’t pull reports on this event. It only serves to make GA believe the visitor interacted at 15 seconds, because a 15 second visit for a blog can be considered an interaction.

    The actual timer setting should reflect the context, absolutely.

    I can see how the name could be misconstrued. How would you label this event?

  • Brian Massey

    That’s why analytics need stories. Interesting scenario.

  • Brian Massey

    “Bounce rate is a horrid way to measure success.” True.

    Bounce rate is NOT a horrid way to diagnose a page, a product or an item of content.

  • sharithurow

    But if the page answers a quick-fact query, then the page served its purpose. It’s good for the brand, it’s good for the user, and it’s good for the search engine.

    I make sure that my quick-fact pages do their job…answer questions. And since quick-fact queries are a very common mobile-searcher goal…I think it’s a mistake to ignore or brush off user goals. They have been a ranking factor for many years…and for good reasons.

    Website owners can learn a lot about searcher goals, too, and accommodate them.

  • Garfield_Disliker

    It’s definitely a good demonstration of the tool. I would imagine a lot of people are going to implement it exactly as outlined in the post and completely distort their entire site’s bounce rate.

    I would probably structure the event like for blog posts, like so:

    Category: Blog posts
    Action: On page for X
    Label: {{URL}}

    Then change the category for other content types like “PPC landing pages,” etc. The other thing is I would probably also encourage people to only set the event to fire once.

  • Garfield_Disliker

    I think you’re mistaken there. Most of the analytics community would agree bounce rate is one of the truly indispensable metrics. If your site is a Q&A site, sure, whatever, don’t put as much emphasis on bounce rate I guess.

    However, very few sites are Q&A websites, so to throw bounce rate in the garbage just because it’s not useful for you is self-centered and misguided. For ecommerce websites, bounce rate is a crucial metric, because a bounce = lost revenue.

    You’re also underestimating the complexity of how search engines evaluate a bounce. They evaluate bounces on several different levels. They look at factors like pogo sticking, i.e., whether or not the user returns to the results, how quickly they return to the results, and how many results they have to click through before they stop, etc. So if somebody goes to your page and leaves by closing out the tab or whatever, that’s a bounce but it’s not necessarily a bad bounce.

    In that case, it’s in your best interest to encourage users who have their query answered quickly to leave your site in any way other than returning to the results.

  • Brian Massey

    Then let’s see how we would implement your quick-fact pages.

    We could eliminate them in Google Tag Manager by adding an exclusion rule that would include your quick-fact pages.

    Unfortunately, this would make all of your quick-fact visitors bounces.

    We could create a different rule with a 2 second timer and only apply it only to these quick-fact pages.

    Both would work to better model your bounce rate.

  • Brian Massey

    I’m making the changes to my site now. Good advice.

  • Brian Massey

    I’m going to try that, but then everyone involved has to have that segment enabled. Inconsistency can occur.

  • sharithurow

    With all due respect, Q&A sites are not the only sites (or page types) that can provide quick facts.

    Maybe you guys might see my point of view more clearly if you were involved in searcher behaviors and usability testing. These help me keep numbers/data in context.

  • Kirsten Keefe

    I implemented this on a couple of my clients’ sites, but left the limit (maximum number of times to fire the event) blank, so that GA would be able to record the full length of visitors’ sessions (or at least to the closest 15 second interval). Now, after implementation, pageviews have gone way up. They used to average around 1400/day and they are up to 16k/day. It seems that each time GTM gets a hit, it is counting it as another pageview. Is anyone else seeing this? Is there any other solution other than setting the limit at 1 and dealing with less accurate time on site data?

  • Sataris

    Great write-up Brian!

    As Brian mentioned the 15 seconds is (somewhat) arbitrary. We chose 15 because it was the average time it takes to read a sample of our pages.

  • Paula Lay

    Hey Brian,

    Thank you (and Bryan Eisenberg) for sharing Aris’ post ;)

    We’ll update the post on E-Web Marketing to share your work around for GTM users.

    Many can argue about the importance of the bounce rate, but from my experience working in content strategy, measuring bounce rate (combined with time on site) on content-rich pages in a funnel can make a significant difference. Just my 2c!

  • Brian Massey

    Thanks, Paula. I totally agree about the bounce rate (naturally).

  • Brian Massey

    The audio version of this article is here:


Get Our News, Everywhere!

Daily Email:

Follow Marketing Land on Twitter @marketingland Like Marketing Land on Facebook Follow Marketing Land on Google+ Subscribe to Our Feed! Join our LinkedIn Group Check out our Tumblr! See us on Pinterest


Click to watch SMX conference video

Join us at one of our SMX or MarTech events:

United States


Australia & China

Learn more about: SMX | MarTech

Free Daily Marketing News!

Marketing Day is a once-per-day newsletter update - sign up below and get the news delivered to you!