Temps passé par page sur Google Analytics

Un indicateur parfois trompeur

Le temps passé par page peut-être un indicateur très important, malheureusement il est dans certains contextes assez mal renseigné sur Google Anaytics.

En effet, le temps passé sur une page est calculé de la manière suivante : Google Analytics retient le moment précis ou une page est affichée. Aucun hit ne part par défaut lorsque l'internaute quitte la page. De de ce fait, si l'internaute quitte la page initiale mais reste sur le site (via clic sur un lien dans le menu de navigation...), Google Analytics va considérer que le temps passé est le temps entre les deux affichages de pages (entre les deux envois de hits de page vue).

En revanche, si vous quittez le site, Google Analytics va regarder le temps passé entre le chargement de la page et la dernière interaction sur la page mesurée avec Google Analytics (événement déclenché lors de la lecture de vidéo...). Le temps passé sur la page de sortie, est donc la plupart du temps considéré comme étant de 0 seconde. Cela peut-être très gênant lors de l'analyse des stats d'un blog par exemple.

Les avantages de la  solution proposée dans ce post

Afin d'avoir une visite plus claire du comportement de l'internaute et du temps réellement passé, différentes méthodes sont possibles. En voici une première : sans impacter le temps de rebond, vous serez en mesure d'avoir une meilleure vision du temps passé sur les pages par les internautes. Vous aurez également la possibilité de connaitre la proportion de la page qui a été visible pour l'internaute (à la manière d'une scroll heatmap).

Le côté négatif en revanche c'est que l'indicateur officiel de temps passé par page sera laissé intact, et restera mal renseigné. Aussi, cela ne fonctionne pas tout le temps , ni avec l'ensemble des navigateurs. Cela donnera tout de même une vision plus précise du comportement des internautes.

Les explications seront associées à GTM mais il est facile d'utiliser cette méthode avec d'autres gestionnaires de tags (et même sans TMS).

La méthode en elle même

Stockage du moment où la structure de la page est chargée

La balise suivante devra être exécutée lors de l'événement "gtm.dom" (DOM ready), en quelques sortes lorsque le navigateur aura téléchargé le code HTML, mais pas forcément toutes les ressources (images...).

<script>
window.dinatam=window.dinatam|| {};  
(function(){
  window.dinatam.DOMLoadedTime = new Date().getTime();
})();
</script>

Envoi d'un hit  lors la sortie de page

La balise suivante devra être exécutée sur toutes les pages. Ce code repose notamment sur l'événement "beforeunload", déclenché lors d'une sortie de page (clic sur un lien, fermeture onglet, fermeture navigateur ...).

<script>
window.dinatam=window.dinatam|| {};  
 
(function(){
 window.dinatam.scrollTopMax = 0;
 var storeMaxScroll = function(){
  var p = window.pageYOffset | document.body.scrollTop;
  window.dinatam.scrollTopMax = Math.max(p,window.dinatam.scrollTopMax); 
 }
 
 var sendTimeSpentOnPage = function(){
  var t = (new Date().getTime() - window.dinatam.DOMLoadedTime);
  var s1 = Math.round(
   (100*(window.dinatam.scrollTopMax + window.innerHeight)) 
   / 
   Math.max(window.dinatam.scrollTopMax, document.body.scrollHeight)
  );
  var s2 = (10 * Math.floor(s1/10));
  var s = (s2>0?Math.min(s2,90):'00') + '-' + Math.min(s2+10,100) +'%';
  if (t < (30 * 60 * 1000)){
   ga(
    'send', 
    'timing', 
    'Time spent on page', 
    {{page.category}}, 
    t, 
    s, 
    {'transport':'beacon'}
   );
  }          
 }
 
 window.addEventListener("scroll", storeMaxScroll);
 window.addEventListener("beforeunload", sendTimeSpentOnPage);
})();
</script>

Lorsque cet événement survient, on envoie un hit de type "user timing" de catégorie "User spent on page", la variable contient le type de page ("fiche produit", "article", "home page"....). La variable {{page.category}} dans le code devra être modifiée en conséquence, et être remplacé par votre variable contenant le type de page. Le libellé lui contiendra la part de la page visible (profondeur de scroll) sous la forme "30-40%" (lorsque par exemple 33% de la page a été affichée).

Les informations seront disponibles dans Google Analytics dans "Comportement" > "Vitesse du site" > "Temps utilisateur".

Attention à l'impact sur l'échantillonnage

Idéalement, afin d'éviter de nuire à la précision, la facilité de lecture via l'augmentation de l'échantillonnage, il faut éviter de multiplier inutilement les hits envoyés par page. Je recommande donc de ne pas déclencher cette balise systématiquement mais plutôt par exemple, sur 1% des pages (à adapter en fonction du nombre de sessions quotidiennes).

Par contre, il peut-être intéressant dans certains cas de ne pas mettre d'échantillonnage, notamment sur des types des pages peu visités, mais critiques sur le plan "business" (process de commande). Cela permettra d'avoir une meilleure précision.

Des améliorations sont possibles

Le code est imparfait. Il n'y a pas de gestion des erreurs. Il n'y a pas de gestion de l'inactivité (un internaute qui partira en pause sera considéré comme ayant passé un temps important sur la page). N'hésitez donc pas à m'envoyer vos retours ou à me proposer des améliorations. Ce n'est pas forcément la solution la plus adaptée à vos besoins. D'autres solutions seront proposées sur ce blog.

Publié le Étiquettes

A propos de Antoine Tissier

Diplômé ingénieur en informatique par l’Ecole Centrale de Lille, Antoine a travaillé plus de 10 ans au sein l’agence web altima° ou il a occupé différentes fonctions : ingénieur d’étude, chef de projet technique, ingénieur d’exploitation et Consultant Analytics pendant plus de 6 ans. Il a eu l’occasion de travailler pour de nombreux clients : Petit Bateau, le groupe SEB, le groupe L’Oréal, 3 suisses International, Axa, Cofidis Belglique, ING Direct… sur des missions d’implémentation, d’analyses, d’audit, et de dashboarding / reporting.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *