Rating Fields Excerpt

What if a CMS could track how important every piece of content in the system is at any given time? Most obviously, it would allow sites to order content items by importance, rather than simply by date. But it also makes many other things possible. For instance, content above a certain importance threshold could automatically trigger a tweet or email alert, or be pulled out of the regular list of content elements and into a “featured” spot in the template.[1]

The benefits are clear, so only question is how to implement something like this. My solution requires two basic fields for each piece of content:

  1. A Initial Rating that measures how valuable the content is to your target audience at the time it’s added to the system.
  2. A Decay Rate which indicates how quickly the content loses value.

The Initial Rating and the Decay Rate are both stored in the database as numbers between 0 and 1, but might be presented visually in the CMS with a star rating system or simple sliders. They are combined to form a Generated Rating, which describes the content’s importance right now and is automatically re-calculated each time a new piece of content is added.

Mathematically, I’ve usually implemented this as an exponential decay function like so: Generated Rating = Initial Rating * e-time x Decay Rate. Time is measured as the number of content items posted since this content was posted, which prevents a long gap in posting from disproportionately shrinking the rating of your older posts.

And just like that, the system can know how important each piece of content is at any given time. Further, the system can get a better sense of each piece of content by looking at its component scores. In a news context, for example, if you want the system to list the biggest, “turning point” stories about a topic, just pick the stories from that topic with the highest initial rating. Want to find the “evergreeen” ones? Take those with the lowest decay rate.

In addition to these two basic components, it’s easy to factor in more information. For instance, you might add in a score capturing the business value of the content or the users’s response to it (from analytics data like pageviews, time on page, social sharing, etc.). This score likely wouldn’t have to be set manually for each story. For example, the system could use the content’s type (e.g. news story vs. whitepaper) or category (e.g. sports vs. politics) to determine its business value score.

The score of a piece of content should also be able to increase if something happens that suddenly makes it relevant again. One way to do this would be to have the rating of a piece of content be influenced by the ratings of newer pieces of content that claim it as related. For instance, if Big Company X announces a new CEO, the profile written about that person six months ago is suddenly relevant. So the story about the announcement would mark the old profile as being related and the higher importance score of the announcement would “rub off” on the score of the profile piece.

Another option would be for an editor to give each topic a temporary rating boost when it becomes relevant in the news again, and that boost would cascade down to each story in the topic and would automatically expire after a certain amount of time (so the editor doesn’t have to remember to automatically remove it).

Conversely, the ratings of the content items could cascade up. Want to find topics to feature? Calculate the rating for each topic based on the rating of the stories in it.


  1. This would also be much more powerful than, say, having an “Is featured story?” checkbox that an editor could use to make the story show up in a featured area. Using a checkbox like that, once a story gets pushed out of the featured area by new content, it likely falls back into the chronological list of stories, where it may now be behind many stories that the editor thinks are less important. And even if the story is boosted up a couple spots in the list because the system knows it was a featured story at one point, that’s hardly fine-grained control. When multiple channels are involved, these problems get even worse. In order to preserve the editor/content creator’s judgement about a piece of content’s importance across templates and channels, a more nuanced solution really is needed.