How to track engaged pageviews

Chat showing traffic and engagement rate by page

When you set up Google Analytics, its most basic default metric is the pageview. The pageview is what drives your Content reports and is what people look at when they want to answer questions like “what articles on my website are most popular”. And therein lies the mismatch.

A pageview just means that a user has loaded a page.
Does it mean they found the page useful? No.
Does it mean they read anything on the page? No.

Pageviews are a great metric of seeing what pages on your website get the most traffic but not the most attention. For this you’ll need to do some custom tracking.

There are lots of ways to do this but we like the ‘engaged pageview’, now made super easy with Google Tag Manager (GTM) trigger groups.

An engaged pageview is triggered if the user scrolled at least 50% of the page AND stayed for at least 30 seconds. This is not a perfect metric by any means (and you might need to adjust those numbers for your industry/vertical), but it’s a much better proxy for them reading the content than the pageview.

Here’s how to do it.

Step 1 – In Google Analytics create a new custom metric called Engaged Pageview with the scope of Hit

Here’s how the table should look if you have no other custom metrics:

Note the index, in this case, 1.

Step 2 – in Google Tag Manager, create a new variable of type constant and put the index from the above table.

This is to easily keep track of what dimension/metric you’re referring to, if the list grows having actual numbers in your tags will get unmanaged.

Step 3 – Create a timer trigger executing once after 30 seconds.

Note that there’s an extra condition you have to specify, if you want to measure engaged pageviews on all pages just set it to something super-generic that all pages on your website will pass.

Step 4 – create the scroll trigger

Step 5 – this is the new-ish feature: create a trigger group that combines both of the above triggers into one.

Make sure to have All Conditions set so it only fires when both the scroll AND the timer events fire on the page. If you set it to Any Conditions then it will count an engaged pageview when someone scrolls 50% OR stays 30 seconds which isn’t what you’d want.

Step 6 – create a Google Analytics tag that sends an event:

  • The event action value doesn’t matter, you can just say something simple like “Fired”.
  • If you don’t want this metric to affect the website’s bounce rate you should make it a non-interaction hit as we have in the screenshot. (
  • Whether you want to affect bounce rate or even use it is a thorny topic we’ll have to save for another article.
  • Make sure to always use a Google Analytics settings variable for all tags fired. But for this one you’ll want to override it by sending that custom metric called engaged pageview. The number 1 just tells Google to add 1 to the engaged pageviews metric count (and not say 2).
  • The trigger is the trigger group you just created.

Step 7 – in Google Data Studio, define a custom field that’s the engagement rate:

You can also define this calculated metric in Google Analytics but Google Data Studio gives you a lot more visualisation options. Define this field as a percentage value.

Step 8 – create a table:

Here we’re showing pageviews (to show the most popular pages first) as well as the engagement rate.

Step 9 – now you have a list of pages with their engagement rate so you can easily spot the website average and which pages overperform/underperform.

This is just the start of the journey since you may need to perform more analysis to find out why something is over/underperforming, but this will very easily show which pages are probably being read and which ones are just being skimmed.

Got a question?

For something quick, the best place to ask would be on Twitter or in our Facebook group (you'll need to join the group but it’s a one-click process).