7

Measurement protocol : suivez Googlebot dans Google Analytics

Présentation du Measurement Protocol

Le Measurement Protocol de Google Analytics. Cela permet de pusher des statistiques au sein de Google Analytics via du POST. Grâce aux paramètres vous pouvez pusher toutes les informations que vous souhaitez. C’est particulièrement utile pour injecter dans Google Analytics des datas depuis des supports sur lesquels vous ne pouvez pas insérer de tag Analytics.

Concrètement, si vous copiez collez la ligne suivante dans votre navigateur et que vous faites « entrée », vous verrez dans vos statistiques en temps réel l’écran suivant (en prenant soin de mettre votre bon UA) :


https://www.google-analytics.com/collect?v=1&tid=UA-id-1&cid=58853148&t=pageview&dp=/url-de-test&dt=titre-de-la-page

test-measurement-protocol

Afin de générer vos variables, vous pouvez soit passer par les paramètres listés dans la documentation soit par le Hit Builder de Google.

Application pour intégrer le crawl Google dans Google Analytics

Dans l’exemple ci-dessous, l’objectif va être de capter le passage de Googlebot en PHP (via son IP), de pusher le hit dans Google Analytics, d’ajouter le User-Agent du robot et le code HTTP de la page.

Le User-Agent et le code HTTP seront ajoutés en tant que variables personnalisées. Une vue sans Google Analytics « Googlebot » filtrera le crawl de Google uniquement.

Avec les bases en poche, vous pourrez facilement étendre le principe pour capter d’autres robots comme Bing…

Création de deux variables personnalisées

Rendez-vous sur votre compte Google Analytics, et créez des « dimensions personnalisées » dans le panneau d’administration de votre propriété. Créez alors deux dimensions : Status HTTP et User-Agent. Notez les deux index associés à vos dimensions personnalisées, 1 et 2.

dimensions-personnalisees

Création d’une vue Googlebot

J’ai créé une vue « Googlebot » pour plus de clarté.Pour cette vue, j’ai créé un filtre « IP », qui ne capte que les hits provenant de l’IP commençant par « 66.249 ».

vue-gogolebot-filtre-ip

Tag manager : création des deux variables (ua et rescode)

J’utilise Tag Manager. Je n’ai donc pas ajouté de lignes de code dans mon tag Analytics, mais j’ai rajouté le lien avec mes deux dimensions directement dans mon Tag Analytics sur Tag Manager, en créant deux variables.

On remarque que l’index renseigné ci-dessous doit être identique à celui renseigné dans les dimensions personnalisées sur Google Analytics.

Vue finale de mon Tag Analytics dans Tag Manager :

tag-manager-dimensions-personnalisees

Vue finale de mes variables, j’ai créé deux variables « ua » et « rescode » qui correspondent à « User-Agent » et « Status HTTP » :

variables-tag-manager

Vue détaillée d’une variable de couche de données « Status HTTP » :

variable-couche-donnees-rescode

Paramètres du Measurement Protocol

Le Measurement Protocol requiert des variables obligatoires :

  • v=1 : version du protocole
  • tid=UA-xxxxxxxx-1 : ID de la propriété Google Analytics
  • cid=xxx : un ID « client », je mets une valeur par défaut
  • t=pageview : le type de « hit », pageview dans notre exemple. Il peut avoir les valeurs suivantes : ‘pageview’, ‘screenview’, ‘event’, ‘transaction’, ‘item’, ‘social’, ‘exception’, ‘timing’.

Maintenant, il faut définir ce que l’on veut récupérer comme informations avec Measurement Protocol.

Je souhaite, pour chaque hit de Google capter :

  • cs, cm (source/support) : crawl/googlebot (on pourra par la suite faire du crawl/bing…)
  • cd1 : dimension personnalisée 1 (rescode)
  • cd2 : dimension personnalisée 2 (ua)
  • uip : ip
  • dh : domaine
  • dp : url

Aperçu de l’URL POST finale :


$url = "http://www.google-analytics.com/collect?&v=1&t=pageview&tid=UA-xxxxxxxx-1&cid=666&dh=".$dh."&dp=".$dp."&uip=".$uip."&cd1=".$httpcode."&cd2=".$ua."&cs=crawl&cm=googlebot";

Il ne reste plus qu’à récupérer la valeur des variables, et de faire un curl en PHP pour le POST dans Google Analytics.

Code PHP de détection du crawl et envoi des données dans Google Analytics


<?php

//Récupère l'adresse IP
$ip = $_SERVER['REMOTE_ADDR'];

//Condition sur le User-Agent et l'adresse IP commençant par 66.249
if( $_SERVER['HTTP_USER_AGENT'] &&
stripos($_SERVER['HTTP_USER_AGENT'], 'Googlebot') !== false &&substr($ip, 0, 6) == "66.249"){

//On renseigne alors les variables avec le domaine, l'URL de la page, le User-Agent, le code réponse HTTP
$dh = $_SERVER['HTTP_HOST'];
$dp = $_SERVER['REQUEST_URI'];
$ua = urlencode($_SERVER['HTTP_USER_AGENT']) ;
$httpcode = http_response_code();

//URL complète prête pour le POST
$url = "http://www.google-analytics.com/collect?&v=1&t=pageview&tid=UA-67188949-1&cid=666&dh=".$dh."&dp=".$dp."&uip=".$ip."&cd1=".$httpcode."&cd2=".$ua."&cs=crawl&cm=googlebot";

//On curl alors l'URL avec toutes les variables renseignées
$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_COOKIESESSION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER , true);
curl_setopt($ch, CURLOPT_NOBODY , true);
curl_exec($curl);
curl_close($curl);

}

?>

Résultat

La vue dans le rapport Google Analytics (Comportement/Contenu du site/toutes les pages + dimension secondaire Source/Support ou dimension secondaire UA) :

google-analytics-crawl-google

 

google-analytics-crawl-google-user-agent

La vue dans un rapport personnalisé  de Google Analytics, permet d’observer deux dimensions personnalisées d’un coup :

google-analytics-rapport-personnalise-google

marseo

7 Comments

  1. Ca donne vraiment envie d’essayer et de croiser ainsi les données des sources organic avec celles de googlebot. Tu penses que c’est faisable pour un gros site en termes de charge serveur ? Et on pourrait rajouter les requêtes en bytes et se faire un tableau de bord sympa sur datastudio… tu tiens quelque chose ! Merci pour le partage

  2. Merci 🙂
    Il faudrait faire quelques tests avec / sans en terme de temps de réponse, mais je ne pense pas qu’on perde grand chose.
    Sur du gros volume je conseillerais tout de même les vrais logs serveur, car les pages orphelines n’ayant pas ce tag ne seraient pas visible dans Google Analytics avec cette méthode. C’est vraiment du dépannage.

  3. Heu, je comprends pas du tout pourquoi tu mentionnes GTM . Le bot n’active pas JS et donc pas de GTM, en tout cas, pas les scripts que tu mentionnes. D’autre part, ton filtre semble filtrer sur l’IP de GoogleBot. Or, le hit se fait depuis ton serveur, donc depuis ton IP. De plus, tu ne précises pas qu’il faut créer une propriété spécifique pour ne pas mélanger hit de bot et hit utilisateurs classiques.

    J’utilise cette technique depuis longtemps sur quelques uns de mes sites mais, balancer un CURL à chaque chargement de PHP n’est pas l’idéal pour avoir un serveur qui répond bien vite 😉 Analyses ses logs est une solution + acceptable, en fait, je crois.

    • Bonjour Sébastien,

      Merci de l’intérêt porté à cet article.
      Je suis entièrement d’accord avec toi, Curl n’est pas optimum, mais cet exemple sert principalement à montrer la démarche pour que la majorité des lecteurs comprennent le principe.
      GTM sert simplement à implémenter le tag Analytics sur toutes les pages avec les variables personnalisées. Sans quoi mes variables personnalisées ne fonctionnent pas avec le Measurement Protocole.
      Je parle bien de créer une vue pour Google Bot (on voit le filtre dans le screen), mais le sujet n’est pas là.
      Pour l’IP, je l’envoie bien avec le Measurement Protocol, l’IP de Google arrive bien dans mes stats, et le filtre permet de séparer les hits provenant de Google. Pour rappel, le Measurement Protocol permet d’envoyer des hits vers Google Analytics en GET, ce que je fais avec du PHP grâce à Curl.

Répondre à Patrice Annuler la réponse

Votre adresse e-mail ne sera pas publiée.