Article Tracking: Analysis and Solutions

The traditional way of measuring engagement for blog posts is deeply flawed. Here’s a helpful, free(!) solution to help you ultimately discover what content visitors are likely to deeply engage with.

In the world of digital analytics, tracking media is a standard request. This includes videos, audio, and articles. The data this provides is extremely useful. From this information, we can learn. who is engaging with our content and what kind of content our viewers prefer. For most media milestones, tracking has been standard, but this isn’t the case for written media. Here is a method I propose to track the written word the same as we do other forms of media.

The problem

The ways in which we track articles today are simple, but they don’t give us the information to know how to compare engagement across articles when articles are of different lengths. There are three main ways articles are tracked today. We use page views, time on page, and page scroll depth.

Page views
A user views the page with the blog, and we count that. The issue here is that we can’t be sure the content was ever truly viewed by the user. Furthermore, we have no idea how truly engaged the user is with the content.

Time on page
Similar to page views, a user visits the site, and we count that. We also record how long they were on the page. The benefit here is we have an idea how engaged the user is. The problem is each post is different in length and complexity, so there’s no “standard” engagement time.

Page scroll depth
Like page views, we add a measure of how engaged a user is with the content, this one being how far on the page the user made it. The problem here is the same as the time on page method. Each page is different. We also have the issue of user behavior. Many users scroll the length of the page to assess the length of the article before committing to reading it. Alternatively, some articles may not be long enough to necessitate scrolling.

The Solution

I propose a solution where we measure each article like a video. Based on length, we can ascertain the percentage of an article a user could have engaged with, based on their time viewing it. This takes into account differences in length of articles and normalizes them so they can be compared to each other.

The Method

To do this we need to do three things. First we need to count the number of words in each article. There’s a difference in a 200 word piece and a 700 word piece. Once we have an idea of how many words there are, we can begin to normalize articles. Next, we should establish a baseline of how many words a user is reading. The average words-read-per-minute hovers between 200 – 250 (use the lower end). This baseline will help us create our milestones and normalize engagement across different length articles. Finally, we mark when a user has passed a predefined milestone and fire off an event.

The Code

The first step is to find the article in question on the page via DOM scraping. Once we have the entire article, we can use regex to create an array of all of the words in an article. We then can take our baseline words-per-minute (that we decided on earlier) and divide word count by it. This gives us the reading time of the article in minutes. You will probably want to convert this to milliseconds for the next step.

Screen Shot 2020 09 04 at 11.49.15 AM
Next, we apply our milestones that we want to use. Here I am using [25, 50, 75, 100], and we create an array. Now, calculate the milestone values as the percent of seconds it takes to reach each. Below, I use (milestone / 100) * readingTimeInMilliSec. Finally, we want to set a timer whenever a user first views the article using an “enters viewport” (“element visibility” for Adobe), and we fire an event when a milestone is triggered.

Screen Shot 2020 09 04 at 11.50.07 AM

The Benefit

We now have milestone events for each user that views an article. Now our articles can be analyzed the same way a video or audio is, and we have a measure of engagement that we don’t get with just page views. The milestones provide a normalized way of comparing posts of different lengths, unlike with time on page. In contrast to the page scroll depth method, we start our timer only after the article is visible for a particular amount of time, so we take into account user behavior.

An Example

Reporting Before:

Screen Shot 2020 09 04 at 12.12.18 PM

Reporting After:

Screen Shot 2020 09 04 at 12.16.41 PM


Once you have deployed this solution to your own site, you can ask (and hopefully answer!) questions about your content more accurately, or—for some— for the first time. Instead of asking what content are users likely to view, take it a step further and ask what content they are likely to deeply engage with (50% completion or higher). Extend this even further through topic analysis, and start discovering not only what topics drive clicks, but what topics drive true engagement.

If you have any comments or neat ideas for extending this project, we’d love to hear your thoughts.

Fill out the form below or email me at

Related Posts

Search Discovery
Education Community

Join Search Discovery’s new education community and keep up with the latest tools, technologies, and trends in analytics.




Scroll to Top


Catch the latest industry trends we’re watching and get new insights from our thought leaders delivered directly to your inbox each month.