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
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.
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 ».
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 :
Vue finale de mes variables, j’ai créé deux variables « ua » et « rescode » qui correspondent à « User-Agent » et « Status HTTP » :
Vue détaillée d’une variable de couche de données « Status HTTP » :
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) :
La vue dans un rapport personnalisé de Google Analytics, permet d’observer deux dimensions personnalisées d’un coup :
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
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.
Très fort, merci pour cet excellent tuyau !
Très bon ça ! Pratique si on ne peut pas forcément avoir les logs sous la main !
Attention à la petite fonction $httpcode = http_response_code(); qui flanche en fonction de la version du php.
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.