Dans Google Analytics, les rapports de géographie / géolocalisation ne permettent que de descendre au niveau de détail de la région et pas du département. C’est principalement dû au fait qu’à l’origine, Urchin et Google Analytics ont été conçus pour le marché américain qui dispose en plus des états du système DMA qui permet de descendre au niveau d’une agglomération prédéfinie.
Comment donc obtenir un rapport sur les départements dans Google Analytics? Je vous livre ici une méthode qui n’est pas parfaite (elle sous-entend que vous acceptez la géolocalisation sur votre site) mais qui devrait vous satisfaire.
ATTENTION: Si vous n’êtes pas familier avec la technique, vous pouvez dès à présent demander de l’aide à un développeur.
Prêt(e)? Accrochez-vous, ca décoiffe!
Rappel sur le mécanisme de géolocalisation
Tout d’abord, il faut savoir que les informations de géolocalisation sont collectées une fois par visite en examinant l’adresse IP du visiteur. Cette adresse IP est utilisée dans une opération de correspondance (lookup) qui fait un lien entre cette IP et (dans l’ordre):
- Le fournisseur d’accès à Internet (et le nom du réseau d’entreprise le cas échéant)
- une latitude et une longitude
- Un état/province et (USA et Canada uniquement) une agglomération
- Une région
- Un nom de commune
Cette association a lieu dans la phase de traitement avant que les filtres associés à chaque vue soient traités. Pour autant, les filtres ne permettent pas de gérer efficacement nos départements. Nous allons en revanche capturer un code postal et en faire plein de choses rigolotes. Si vous n’avez pas tenu compte de l’avertissement en début de billet, je ne réponds plus de votre santé mentale à partir de ce point.
Récupérer un code postal avec une API de géolocalisation
Par défaut, on l’a vu, Google Analytics ne récupère pas de code postal. Nous allons donc devoir passer par l’API de géolocalisation HTML5 présente dans tous les navigateurs modernes (hors IE8 et antérieurs donc).
Cette API vous permet de récupérer des coordonnées en tant que longitude et latitude. C’est tout mais ca permet de transformer cette information vers une autre API qui va transformer ces coordonnées en code postal.
Commencez par créer un compte sur une API de géolocalisation comme Geonames.
Pour ne pas ré-inventer l’eau tiède, je vais m’inspirer du code de mon confrère Sayf de Lunametrics.
Je vais donc placer le code Javascript suivant sur mes pages (ou l’appeler via GTM par exemple):
// Par Julien Coquet
// Inspiré par Sayf Sharif de Lunametrics
// www.lunametrics.com/blog/2014/07/08/street-level-insight-google-analytics
// N'utilise pas jQuery!
function getLocation() {
if (navigator.geolocation) {
/*
* Si votre navigateur gère la géolocalisation HTML5,
* on utilise la fonction showPosition comme callback
*/
navigator.geolocation.getCurrentPosition(showPosition);
} else {
// Géolocalisation non gérée par le navigateur
console.log("Votre navigateur est moisi, changez-en.");
}
}
/*
* Dans cette fonction de callback, on utilise le combo longitude/latitude
* comme paramètre d'API Geonames afin de récupérer le code postal
*/
function showPosition(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
var utilisateur = "juliencoquet"; // à remplacer par votre identifiant Geonames
// On compose l'URL d'appel à l'API Geonames
var URL = "https://secure.geonames.org/findNearbyPostalCodesJSON?lat=";
URL += latitude + "&lng=" + longitude + "&username=" + utilisateur;
// On envoie la requête à l'API Geonames
request = new XMLHttpRequest();
request.open('GET', URL, true);
request.onload = function() {
if (request.status >= 200 && request.status < 400) {
/*
* Super, on a accédé au flux de géolocalisation pour récupérer le code postal le plus proche.
* On va maintenant le passer à la dataLayer GTM comme paramètre d'un événement personnalisé
*/
data = JSON.parse(request.responseText);
window.dataLayer.push({
'event': 'geoloc',
'codePostal': data['postalCodes'][0]['postalCode']
});
} else {
// Connexion au flux réussie mais erreur (pas de flux, URL mal formée, etc)
}
};
request.onerror = function() { // Déclencher une alerte si la connexion à échoué
console.log('Impossible de se connecter à l'API de géolocalisation');
// et un event GTM
window.dataLayer.push({
'event': 'eventGenerique',
'eventCategory': 'Geographie',
'eventAction': 'Erreur géoloc',
'eventLabel': ''
});
};
request.send();
}
// On exécute tout le code ci-dessus
getLocation();
Dans cet exemple, on pousse un événement GTM geoloc et une variable codePostal.
On passe le code postal à Google Analytics via GTM
Il faut donc créer une variable (macro) qui contiendra le code postal pour l’utiliser dans Google Universal Analytics:
On prévoit le tag Google Analytics qui déclenchera un événement de capture on y utilise la macro, ainsi que la dimension personnalisée 13 qu’on a crée pour stocker le code postal:
On déclenche ce tag sur une page donnée lors du déclenchement de l’événement « geoloc »:
On publie le tout et hop! Des événements! Avec mon code postal (26200, Montélimar)
Ok, donc on capture le code postal, et maintenant? On va donc prendre ce code postal et le faire correspondre à un nom de département.
Oui je sais je peux faire tout ca directement dans GTM mais à ce stade on a déjà suffisamment fait travailler le navigateur; c’est au tour de Google Analytics de prendre le relais.
Correspondance avec les départements
Pour retrouver nos noms de départements français (Ain, Aisne, Allier, etc.), nous allons devoir commencer par établir une liste des codes postaux et leur nom de département associés. Nous utiliserons ensuite cette liste dans la fonction d’import de données de Google Analytics.
Pour trouver la liste des codes postaux de France ainsi que la liste des départements, rien de mieux que le site de l’INSEE. Un petit coup d’Excel, d’espiéglerie (et de remplacement de caractères spéciaux), c’est la vie de Can.. euh du web analyste. Comme je suis super sympa, je vous ai mâché le boulot.
Le problème de la fonction d’import c’est qu’elle ne peut pas (au 21 octobre 2014) influer sur les données de géolocalisation, sinon un import basé sur le nom des villes aurait réglé le problème depuis longtemps. C’est pourquoi nous avons capturé notre code postal dans une dimension personnalisée.
Enfin, nous avons notre fichier contenant des paires de codes postaux et de noms de département. C’est l’heure de faire travailler un peu Google Universal Analytics.
Dans l’administration de notre propriété Analytics, créons de nouvelles dimensions personnalisées:
Je vais en créer 2: une pour le code postal et une pour le nom du département, toutes deux avec une portée au niveau de la session:
Retournons dans l’admin et créons un nouvel import de données:
On va choisir la vue concernée et sur quelles données l’import va porter:
Vous aurez vu que pour intégrer les départements dans Google Analytics, on va utiliser comme provenance la dimension personnalisée 13 (le code postal) et la 14 (le département).
Sauvegardez et vous pourrez obtenir un schéma d’import (modèle pour CSV Excel) pour y stocker vos codes postaux et noms de département. Encore une fois, profitez de mon fichier, il est tout prêt. Vous avez juste à remplacer les en-têtes par:
Importez le fichier dans votre zone d’import:
Personne n’est parfait et vous aurez probablement des erreurs d’encodage ici et là.
Félicitations, vous n’avez plus qu’à créer un rapport personnalisé pour afficher vos données:
Cela vous permettra d’explorer de la région vers le département vers le code postal en contournant la limitation actuelle de Google Analytics.
Comment allez vous utiliser/modifier cette technique de tracking des départements dans Google Analytics? Des questions? Des remarques? Faites le moi savoir dans les commentaires!
Et un grand merci à Sandrine de m’avoir fait sauter ma pause déjeuner 😀
Retour de ping : Best of Digital : fraude Facebook, Adblock & géolocalisation dans Google Analytics