Article Completion Rate
It’s time to ditch bounce rates and average time on page in place of meaningful and measurable insights. Enhance how you measure content engagement with these advanced tracking methods to gain real insights into your content and its value against your business objectives. Often content effectiveness is measured using built-in metrics within Google Analytics. Here are some common metrics used for measuring page engagement and quality.
- Pageviews - Okay
- Unique Pageviews - Okay
- Bounce Rate %- Bad
- Entrances - Okay
- Exits - Okay
- Exit Rate % - Okay
- Time on Page - Bad
- Avg. Time on Page - Bad
While these do offer some indication of content effectiveness, they can also be hugely misleading. One of the most misunderstood metrics available in Google Analytics is Bounce Rate. Bounce Rate is the percentage of Users who enter on a particular page and then leave the site without interacting with the page in any way. This is a bounce. As a calculation, the bounce rate is the percentage of single-page sessions which begin and end on the same page. You can read more on this troublesome metric here.
I always try to measure the effectiveness of content in ways which relate to how users behave on a webpage. There are micro-interactions which Google Analytics does not see which indicate how well the page content is performing. Some of the most common interactions an out-of-the-box Google Analytics setup misses:
- Mouse movements
- Clicks (highlighting text and copying the content within a paragraph is a common one here)
- Keyboard usage (space moves you down the page, so do arrow keys)
- Reaching the end of the content section
- Playing a video / podcast
- Sharing the post to social media
To clarify, out of the box, Google Analytics never sees these highly positive interactions. So if you’re content doesn’t necessarily trigger the user to continue on into the website via call to actions just via general interest, according to the Bounce Rate, it’s garbage. Let’s change how we measure content effectiveness to suit its purpose. If you’re looking to measure the effectiveness of your blog posts, I suggest at a very basic level that you implement the following measurement methods:
1. Better Content Engagement Tracking
Requirements: Google Analytics, Google Tag Manager
Simo Ahava has written a top guide for tracking micro-interactions to calculate an accurate Time on Page measurement. I highly recommend you go and check it out. As an example, the graph above shows how inaccurate Google Analytics' Avg. Time on Page metric is vs. a custom implementation. Once implemented, this tracker will send “pulses” to GA in the form of Events to tell GA that the user is interacting with the page in one or many of the following ways, thus mitigating a Bounce from occurring even if they leave without navigating to another page. At the same time it also provides an accurate Time on Page custom metric.
- Mouse Movements
- Keyboard Presses
Track Content Engagement Via GTM
Note: I recommend locking this tracking down to a specific area of your site like /blog/ if you receive a lot of hit volume and don’t want to further increase it.
2. Article Completion Tracking
Requirements: Google Analytics, Google Tag Manager
This one requires some experience with configuring GTM element visibility triggers but can really help you understand how many people are reaching the end of your articles regardless of device and screen height. The premise behind this is to send an Event to Google Analytics when a user has reached the end of the content - simple!
We will achieve this by looking out for the nearest comment site element below your content. In a lot of cases, this is the footer but it could be something else which is more distinct like an “About the author” section which is always present beneath the content piece.
Our blog has a mini author section after any blog post so for this example, I will show you how this is configured for us. The first step is to find out what to rely on for building our Element Visibility Trigger.
In our case, our Author section has a class called byline author vcard . This means I can take the class name .author and use it as our identifier within the Element Visibility Trigger.
A pretty simple visibility trigger. I also only want this to work on blog posts so I am going to add a condition to this trigger so it only fires if the Page URL contains /knowledge/
Save this trigger and name is something sensible. I use an Object-Action framework for naming so for this trigger I would go with ELV - Article Completed
Next up, we need to add a new tag to send Events to GA to record the article completions:
The event details are fairly basic and I threw in a variable to fill the Label field. You could add the Blog Post title instead if you’d prefer something that’s human-friendly since Page is available as a hit-level dimension.
You may also notice that I have added a custom metric value. This is because I want to send each individual completion as a number to Google Analytics as a Custom Metric. By doing this, I can then do some magical things with Calculated Fields!
To know which Index number to use, you’ll need to jump into Google Analytics and head over to the Admin panel, locate the property you’re working on and then add a new Custom Metric. This can be found under Custom Definitions:
Name your custom metric Article Completions or something similar depending on your preference. The scope should be Hit and Formatting Type should be Integer . Save this and then revisit the Custom Metric list to find out the Index Number of your new Metric.
In my case, it’s 2. Use this index number as I have in my Tag’s settings. Set the Metric Value to 1.
Once the Event is ready to fire, jump into GTM Preview Mode and test that the visibility trigger is working as expected. I use Adswerve's dataLayer Inspector for Chrome to test GA Events but you could also use the Realtime > Events report in GA provided you’re using a View which doesn’t filter your traffic from the website.
- Name: Article Completion Rate
- Formatting Type: Percent
- Formula: Article Completions / Unique Pageviews
With the Event firing as intended, we can now look to pull this new data into a custom report within Google Analytics:
I’ve opted for a flat table here just to keep things simple but you could add drilldowns for other custom dimensions if you have things like “Author” or “Category”. Also note that I have filtered this report to only look at our Knowledge section as page engagement won’t be firing anywhere else.
The other option is to pull the data into Google Data Studio like so:
In the above table, I’ve also included Simo’s engagement functionality to give me accurate engagement totals and avg. engagement times per page. Article completion rates are low for now since I only just implemented this a few days prior to writing this article, but when Article Completions and Unique Pageviews are put side-by-side, engagement becomes a lot easier to understand. This data could be split in other ways, especially if you’re recording custom dimensions like Author, Category, Target Audience etc.
Note: Can’t see the new Custom Metrics? Refresh your data source!
Bonus level: Tighten the accuracy of this system by utilising the Micro Engagements timer AND Article Completions so that you only fire a completion event if a user has been on the page and active for more than 30 seconds. You can use Trigger Groups for this.
Boss level: Use JS to count the number of words within your articles, calculate the average read time for an adult of the content piece and then work out if its possible a user has read your content before you allow the Article Completion event to fire.
Auditing your Google Analytics account for query parameters can be tedious but helps keep page reports clear of unwanted row duplication. We talk about the effects of collecting unwanted queries on your reporting and how to fix it. We’ve also built a free tool to make the process easier.
When a form has been successfully submitted to HubSpot, HubSpot propagates an event that we can listen to and use to trigger marketing tags within Google Tag Manager. Below we create a Custom HTML Tag that listens for a form success, trigger a dataLayer event which can then be used to trigger a marketing tag to push this data into Google Analytics.
Service Provider and Network Domain dimensions are no more. Let’s get Service Provider data back online. We’ll show you how to re-enable ISP data using Google Tag Manager and an IP Lookup Service.
Track when users leave your site to visit your social media pages. Understand when your content is driving positive move to your social assets.
The use of social sharing widgets is commonplace. But who’s actually tracking interactions with these? Let’s make a count of how many people are clicking these buttons and record a social share rate to see how many readers amplify content on social media.
Anybody who uses DoubleClick Floodlight knows the slow process of implementing a new tag for each activity for a campaign interaction or conversion. If you’re using Google Tag Manager to add a tag, trigger and maybe some new variables for every new Floodlight – it won’t take long for your container to overfill with almost identical tags. While there’s nothing wrong with this style of implementation, there is another way.