1

J'étais précédemment responsable process & qualité analytics dans une grande agence web internationale.

Voici les pires soucis auxquels j'ai été confronté. J'espère que mon témoignage évitera à certains des mes lecteurs de connaitre les mêmes horreurs.

...continuer la lecture de "Témoignage – Incidents liés à la gestion de tags"


Le tracking de formulaire permet d'obtenir des informations cruciales relatives à la conversion de vos formulaires. Cela permet de mettre en lumière leurs défauts et de prioriser les actions à mener. Cette présentation propose une implémentation efficace axée vers la recherche d'enseignements pouvant déboucher sur des actions d'optimisation à mettre en oeuvre.

C'était la première session que j'animais lors d'un Measure Camp. Measure Camp est une non-conférence ouverte est gratuite axée sur le web analytics. Je la recommande fortement.

Si je devais définir une morale à mes slides : il est je pense crucial que les consultants analytics qui s'occupent de l'implémentation effectuent aussi les analyses. Il peut-être très tentant pour un profil technique d'effectuer un développement qui lui plait, mais parfaitement inutile. Et, au contraire, si un tel consultant participe aux analyses, il pourra avoir de nouvelles idées, réellement utiles, et saura probablement les mettre en oeuvre.

PS : Dans ma présentation, j'ai spécifié que j'avais rejoint une équipe analytics de deux personnes chez altima°. Aujourd'hui, cette équipe a largement grandi, et est présente dans plusieurs villes, dans plusieurs pays. Un rapprochement avec Accenture est prévu.

Si vous utilisez Python 3 et les API de Google (dont Google Analytics) derrière un proxy, vous rencontrez peut-être un problème.

Et cela, même si vous avez convenablement renseigné les variables d'environnements "http_proxy" et "https_proxy".

En cause : si avec Python 3, vous utilisez la bibliothèque httplib2 utilisée par défaut dans l'API de Google Analytics, pour vous connecter, votre proxy ne sera pas pris en compte. Vous obtiendrez donc une TimeoutError: [WinError 10060].

Il est tentant d'utiliser Python 2 pour contourner le problème, mais avouez que c'est assez frustrant...

Une solution qui m'a semblé viable et d'utiliser la bibliothèque "httplib2shim".

Pour installer via "pip", vous pouvez exécutez la ligne de commande suivante :

pip install urllib3[secure] httplib2shim

Renseignez convenablement les variables d'environnement "http_proxy" et "https_proxy".

Ces variables doivent être renseignées sous la forme suivante:
http://user:password@server:port pour http_proxy
et
https://user:password@server:port pour https_proxy

Maintenant il reste à utiliser "httplib2shim" à la place de "httplib2". La manipulation est très simple. Ainsi, sur ce tutorial Google indiquant comment se connecter via Python depuis un serveur aux APIs de google, il suffit de remplacer le code :

from httplib2 import Http
http_auth = credentials.authorize(Http())

par :

import httplib2shim
http_auth = credentials.authorize(httplib2shim.Http())

Suite à cette manipulation, le proxy est correctement pris en compte.

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).

...continuer la lecture de "Temps passé par page sur Google Analytics"

Qu'est ce que le payload sur Universal Analytics ?

Le script d'Universal Analytics analytics.js envoie les informations aux serveurs de Google en chargeant des images transparentes.

La liste des paramètres transmises à Google Analytics est écrite dans une chaîne de caractères : le payload, qui a cette forme :

v=1&_v=j56&a=818215533&t=pageview&_s=1&dl=http%3A%2F%2Flinuxfr.org%2F&ul=fr&de=UTF-8&dt=Accueil%20-%20LinuxFr.org&sd=24-bit&sr=1600x900&vp=1583x780&je=0&fl=26.0%20r0&_u=SCCAAMIJI~&jid=1856264349&gjid=1156765483&cid=2131200365.1498342667&tid=UA-12345-19&_gid=423688839.1498342667&_r=1&ti=T12345&ta=Google%20Store%20-%20Online&tr=37.39&tt=2.85&ts=5.34&tcc=SUMMER2013&pa=purchase&pr1id=P12345&pr1nm=Android%20Warhol%20T-Shirt&pr1ca=Apparel&pr1br=Google&pr1va=black&pr1pr=29.20&pr1cc=APPARELSALE&pr1qt=1&z=739145618

Si cette chaîne est de petite taille, vous pouvez la trouver dans l'URL de récupération de l'image transparente. Les détails sur les paramètres présents sur la document officielle de Google Analytics.

Quelle est la limite ?

Au delà de 8192 caractères, le hit ne part plus. Cela peut-être catastrophique, car il peut s'agir de la page d'arrivée (perte de la source de trafic...), voire d'une page de confirmation de commande.

Le risque est accru pour les sites en alphabet non-latin

Le risque est surtout important si vous devez traquer de façon avancée un site n'utilisant pas l'alphabet romain (mais du cyrillique, du mandarin...) car les chaines sont url-encodées avant d'être envoyées à Google.

Ainsi, en écriture latine, "dark knight" ne prend que 11 caractères.

En revanche, sa traduction russe : "темный рыцарь" sera traduite par "%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%B9%20%D1%80%D1%8B%D1%86%D0%B0%D1%80%D1%8C" ce qui prendra 75 caractères, soit près de sept fois la taille de la version originale.

Le cas du e-commerce amélioré

Sur "enhanced ecommerce", il est possible de traquer la liste des miniatures produits affichées sur une page liste.

Si votre page liste comporte de nombreux produits, que vous ne souhaitez pas uniquement afficher les produits présents au-dessus de la zone de flottaison, que vous ne remontez pas que le nom des produits mais également les catégories, la marque... cela peut représenter énormément d'informations.

La simplicité est la sophistication suprême

Afin d'éviter d'atteindre ces limites, il est intéressant de se limiter volontairement dans la collecte des données.

En effet, inutile de collecter des dimensions personnalisées pour chacune des vignettes produits vues si elles ne seront pas affichées. Inutile également probablement, de remonter les informations de 50 vignettes produits vues si elles sont bien en-dessous de la ligne de flottaison.

Utilisation de flux

Il peut également être envisagé également de remonter une partie des informations (normalement remontées via des dimensions personnalisées notamment) via des flux et non via Javascript.

Cela vous permet de remonter des informations détaillées sans pour autant risquer des pertes dans la collecte.

Utilisation d'un hit dédié au e-commerce amélioré

Afin d'éviter que la limite soit trop facilement atteinte, il est possible de remonter les informations associés au e-commerce amélioré dans un événement distinct. De cette manière, dans tous les cas, les hits de page vues seront envoyés, et les informations de type source de trafic, pages consultées seront convenablement collectées.

Attention, cependant, ce hit supplémentaire sera comptabilisé dans les quotas, et aura donc potentiellement un impact sur l'échantillonnage.  Les chiffres présentés dans Google Analytics dans certaines conditions seront donc moins précis.

Et si vous détectiez la limite automatiquement ?

Il est possible de détecter que cette limite est atteinte, et de réduire automatiquement votre payload en conséquence. Cela doit cependant être considéré comme une protection de dernier recours, et non comme la norme.

Dans le code ci-dessous, dans le cas ou la limite est atteinte, je ne remonte les informations relatives qu'aux neufs premiers produits.

ga(function(tracker) {	
  var originalBuildHitTask = tracker.get('buildHitTask');	
  tracker.set('buildHitTask', function(model) {			
    originalBuildHitTask(model);
    var payload = model.get('hitPayload');
    if (payload.length > 8192) {
      // on doit faire perdre du poids au hit
      var payloadNew ='';
      payload.split('&').forEach(function(part){		
        if ((!/^pr([0-9]{2,})/.test(part))&&(!/^il([0-9]*)pi([0-9]{2,})/.test(part))){
	  if(payloadNew!==''){payloadNew=payloadNew+'&';}
	  payloadNew=payloadNew+part;
 	}
      });			
      model.set('hitPayload', payloadNew, true);
     }				
  });
});

C'est très "bourrin", et uniquement destiné à de la démonstration. N'hésitez pas à l'adapter à votre cas.

Idéalement, si j'étais amené à mettre réellement en place ce type de code, je déclarerais l'incident dans une dimension personnalisée afin de pouvoir suivre ce phénomène, et de pouvoir optimiser au mieux la correction.

Le cas de Google Tag Manager

Dans Google Tag Manager, le dataLayer est normé de sorte qu'il soit possible à un non technicien de poser un tag "enhanced e-commerce".

Le problème, c'est que les besoins de Google Analytics ne sont pas nécessairement les besoins des autres solutions.

Ainsi, il n'est pas aisé de déclarer dans le dataLayer officiel que l'on souhaite uniquement remonter les 3 premiers produits pour "enhanced ecommerce" mais les dix premiers produits pour une autre solution.

Les tags standard Universal Analytics vont donc collecter l'ensemble des informations produits présents dans le dataLayer et les transmettre à Universal Analytics.

Comme évoqué dans mon précédent article, le problème peut également être résolu en redéfinissant la variable "customTask".

Il faut donc créer pour cela une variable dans GTM de type "Custom Javascript". Vous pouvez la nommer "GA buildHitTask payload workaround" par exemple :

function(){
  return function(tracker){
    var originalBuildHitTask = tracker.get('buildHitTask');	
    tracker.set('buildHitTask', function(model) {
      originalBuildHitTask(model);
      var payload = model.get('hitPayload');
      if (payload.length > 8192) {
        // on doit faire perdre du poids au hit
        var payloadNew ='';
        payload.split('&').forEach(function(part){		
   	  if ((!/^pr([0-9]{2,})/.test(part))&&(!/^il([0-9]*)pi([0-9]{2,})/.test(part))){
	    if(payloadNew!==''){payloadNew=payloadNew+'&';}
	    payloadNew=payloadNew+part;
	  }
        });			
       model.set('hitPayload', payloadNew, true);
      }				
    });
  }
}

Une fois la variable crée, vous pouvez modifier la variable de configuration d'Universal Analytics de sorte que customTask soit associé à la fonction précédemment définie dans la variable.

Paramètres analytics pour éviter les problèmes liés à la taille du payload
Paramètrage analytics pour se protéger contre les dépassements de taille de payload

Maintenant, les hits seront dans tous les cas envoyés même si le dataLayer contient de nombreux produits.

Ce que je n'ai pas fait

Il est peut-être possible de faire sauter réellement la limite de 8192 octets via l'API task. Je n'ai pas cherché à le faire pour différentes raisons :

  • éthique / politesse : je ne veux pas contourner les règles que l'éditeur a mis en place
  • fiabilité : rien ne m'indique que même si j'arrive à faire sauter cette limite côté client / javascript, un autre contrôle n'est pas présent côté serveur. Et s'il n'existe pas aujourd'hui, il n'est pas impossible qu'il soit mis en place demain.

 

 

Qu'est-ce qu'une propriété analytics de roll-up ?

Imaginez que vous devez-suivre les performances des sites web d'une marque présentes dans plusieurs pays. Chaque site dispose de son propre nom de domaine et de sa propre propriété analytics.

Il est bien-sûr intéressant de suivre les performances dans chacun des pays, mais il est également pertinent d'étudier la progression globale dans le monde, et de comparer facilement les performances entre chaque pays.

C'est précisément à cela que sert une propriété de roll-up. Une propriété de roll-up sur Google Analytics est une propriété qui permet de regrouper les données de plusieurs propriétés sources.

roll-up
Pour un site décliné pour plusieurs pays d'Europe, il peut-être intéressant de créer une propriété analytics de roll-up aggrégeant les données de plusieurs pays européens

 

La propriété de roll-up permettra d'avoir une vision globale de l'audience et des performances dans l'ensemble des pays. Les données sont en quelques sortes "dupliquées".

Bien sûr, les roll-up ne sont pas propres à Google Analytics. Elles existent également sur d'autres solutions telles qu'Adobe Analytics par exemple.

La mise en place d'une propriété de roll-up est expliquée en détail dans la documentation officielle de Google Analytics.

Pourquoi mettre en place une roll-up en Javascript ?

Sur Google Analytics, il n'est normalement possible de mettre en place une roll-up que sur un compte Google Analytics 360. Les utilisateurs de la version gratuite ne peuvent donc pas mettre en place ce type de propriété.

Aussi, les propriétés de roll-up ne peuvent agréger que les données issues des propriétés issues du même compte.

...continuer la lecture de "Implémenter une propriété Google Analytics de roll-up via Javascript"