Content engagement meten en analyseren met de Content Quality Score

Hier is iets waar we het beiden over eens kunnen zijn:

Actiegerichte evaluatie van website content is geen walk in the park.

Bounce % en Avg. Time on Page, om de belangrijkste usual suspects te noemen, zijn absoluut gebrekkige graadmeters van engagement.

Daarom maken we gebruik van een unieke metric genaamd Content Quality Score. Het houdt rekening met aandacht aan je content, visibiliteit van je content en interesse erin.

De onderdelen van de Content Quality Score metric

FaseMetricUitleg
Aandacht% Read of Reading Time TargetHebben bezoekers genoeg actieve tijd doorgebracht. Stel dat het 3 minuten 20 seconden duurt om dit blogartikel te lezen. En u verblijft hier 1 minuut 40 seconden, dan is uw % Read of Reading Time Target 50%
VisibiliteitAverage Scrolling RateEn hebben ze de hele pagina bekeken. M.a.w. wat is de maximaal bereikte scrolling rate.
InteresseContent EngagementEn zijn ze met de inhoud aan de slag gegaan. Actief opengeklikt, doorgeklikt op links of CTA’s etc

Configuratie

Google Tag Manager-configuratie

Stap 1. Scroll Depth activeren

Dit artikel van Simo Ahava over Scroll Depth uitvoeren. Met 1 belangrijk verschil: we willen de stappen in scroll tracking veel fijnmaziger hebben. Simo doet het per 25%, wij per 5%. Zodat het gemiddelde dat we gaan berekenen correcter is.

Dus de trigger als volgt aanpassen (voor uw copieergemak: 5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100 )

Uiteindelijk hebben we enkel de variabele {{Scroll Depth Threshold}} nodig.

Stap 2. Tag: HTML – Tracking word count

WatUitleg
TypeTag
Tag TypeCustom HTML
TriggerAll Pages
Tag contentsVervang #main door de id of de class die de contentsectie van uw pagina aanduidt en geef dit mee in document.QuerySelector onderaan het stuk script.

<script>
function getWordCount(e) {
	function getText(el) {
        var ret = "";
        var length = el.childNodes.length;
        for (var i = 0; i < length; i++) {
            var node = el.childNodes[i];
            if(node.nodeType != 8) {
                ret += node.nodeType != 1 ? node.nodeValue : getText(node);
            }
        }
        return ret;
    }
	return getText(e).split(/\S+/).length;
}
    
function getWordCountRange(e) {
    var groupingSize = 50; // Als uw contentsectie 320 woorden heeft, rond het systeem af naar het dichtsbijzijnde 50-tal. Verander dit gerust.
    
    var wordCount = getWordCount(e);
  	wordCount--;
    var lower = (wordCount - (wordCount % groupingSize));

    var range = lower + " - " + (lower + (groupingSize - 1));
  
  	window.dataLayer = window.dataLayer || [];
	window.dataLayer.push({
      'event': 'custom_words',
      'dlWordsRange': range,
      'dlWords': wordCount
   	});
}
  
var content = document.querySelector('#main');
getWordCountRange(content);
</script>

Stap 3: Tag: HTML – Listener – BeforeUnLoad

<script>
  
  // If mobile, use Page Visibilty API

// device detection
if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) 
    || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0,4))) { 

  // query current page visibility state: prerender, visible, hidden
  var pageVisibility = document.visibilityState;

  // subscribe to visibility change events
  document.addEventListener('visibilitychange', function() {
    // fires when user switches tabs, apps, goes to homescreen, etc.
      if (document.visibilityState == 'hidden') { 
		window.dataLayer = window.dataLayer || [];
        window.dataLayer.push({
          event: 'beforeunload'
        });
      }

      // fires when app transitions from prerender, user returns to the app / tab.
      if (document.visibilityState == 'visible') {  }
  });

  // On desktop use
} else {

  window.addEventListener('beforeunload', function() {
    window.dataLayer.push({
	  event: 'beforeunload'
	});
  });
}
</script>
MetricUitleg
% Read of Reading Time TargetStel dat het 3 minuten 20 seconden duurt om dit blogartikel te lezen. En u verblijft hier 1 minuut 40 seconden, dan is uw % Read of Reading Time Target 50%
Average Scrolling RateWat is je maximaal bereikte scrolling rate.

We gaan aan de slag met Google Analytics custom dimensies en custom metrics voor marketing- en blogcontent en hoe dat technisch gegeven omzetten in actiegerichte rapportering.

Het denkkader:

Hypothese: een langere actieve leestijd is een indicatie van engagement en draagt bij aan het behalen van doelen.

Uitdaging:

  1. bestaande metrics vertellen een onvolledig of misleidend verhaal
  2. Individuele pagina’s evalueren is te wispelturig, we willen evaluatie op geaggregeerd niveau
  3. Elke pagina heeft zijn eigen doel volgens de funnel. Op z’n minst inspireren, informeren of activeren

KPI: % Read of Expected Reading Time

Volwassenen lezen gemiddeld 180 woorden per minuut op een scherm. Als een tekst 450 woorden lang is. Is de verwachte leestijd 00:02:30. Als iemand 1 minuut op de pagina blijft. Dan krijgen we een verhouding die een leestijdpercentage aanduidt

Evaluatie van betalende campagnes

Horizon: de Content Engagement Matrix

We streven naar de volgende content engagement matrix die dienstdoet als targetmatrix.

 

Aangepaste dimensie 1: Word Range
Aangepaste Dimensie 2: TemplateBerekende Metric 1: Active Reading Time / Expected Reading Time

 

 

  1. Dimensie 1: Elke pagina heeft in z’n body een aantal woorden, de Word Range. Vb: [0-49], [50-100], …, [600-649]
  2. Elke Word Range kent een Expected Reading Time; hoe lang doet een volwassene erover à rato van 300 woorden per minuut. Dit zetten we af tegen zijn actieve tijd op de pagina, de Active Reading Time zodat we een Leesconversie % krijgen
  3. Dimensie 2: Template. Vb: Homepage, Category page, Detail page, Blog post, …

 

Door te sturen naar uw marketeers

Voorbereidingen in Google Analytics

De custom dimensions

Volgende custom dimensions moeten worden aangemaakt

Aangepaste dimensieBereik
Word-RangeHit
TemplateHit
Expected Reading TimeHit

Custom metrics

GTM is using a “set” command for a custom metric, which means that the value will persist for the same tracking object.
Cost per active minute

Aangepaste statistiekBereikOpmaaktype
Total Engaged TimeHitTijd
Achieved Scrolling DepthHitGetal
Target expected reading timeHitTijd

 

De Calculated Metrics

Berekende statistiekFormuleOpmaaktype
Average Engagement Time per Page{{Total Engaged Time}} / {{Paginaweergaven}}Tijd
Average Scrolling Depth( {{Achieved Scrolling Depth}} / {{Paginaweergaven}} ) / 100Percentage
% Read of Reading Target( {{Total Engaged Time}} / {{Paginaweergaven}} ) / ( {{Target expected reading time}} / {{Paginaweergaven}} )Percentage

Voorbereidingen in Google Tag Manager

  1. Activeer

De dimensies

Dimensies bepalen welk stuk van de datataart je uitlicht en naartoe kijkt: wat is de performantie van marketingkanalen, van mobiel vs desktop, etc.

In deze oefening spelen custom dimensions een erg belangrijke rol. Het zijn custom (door ons aangemaakte) dimensies op onze data. Een typisch voorbeeld is: userStatus (ingelogd vs niet ingelogd), publicatieDatum, template (homepagina, categoriepagina, blog post)

Echter, binnen die dimensies bestaat er ook zo iets als scope (of bereik in het Nederlands).
Herkenbaar effect: het is de reden waarom je geen doelen (sessie-scope) kan zien op je paginarapport (hit-scope).

Het is het eenvoudigst zo te begrijpen als u zich een nieuwe bezoeker inbeeldt:

  1. User-scope dimensies: zijn eigen aan de bezoeker en veranderen in principe per bezoek bijna tot nooit. Bijvoorbeeld geslacht (waarde M of V), of gebruikersstatus (waarde nieuw of terugkerend);
  2. Session-scope dimensies: kunnen veranderen per bezoek, zoals leeftijd, via welk kanaal je de site bezoekt, via welke toestel je komt;
  3. Hit-scope dimensies: binnen 1 bezoek verandert dit, zoals welke pagina’s je bezoekt.
ScopeDimensies
User-levelNew & Returning visitor, Geslacht of favouriteFood*
Session-levelCampagne, Medium, Landingspagina of UserStatus*
Hit-levelPagina, gebeurteniscategorie, -actie, -label of Template*

* = custom dimensions die we zelf aanmaken.