Partager la publication "Comment nettoyer le spam dans Google Analytics avec les segments."
Comme beaucoup d’entre vous le savent, Google Analytics est l’une des solutions les plus populaires pour analyser le trafic de son site Web.
A ce jour, BuiltWith estime à près de 27 millions le nombre de sites web qui utilisent cette solution, dont près de 450.000 en France.
Malheureusement, Google Analytics, victime de son succès, est la cible de spammeurs qui viennent polluer vos statistiques pour faire leur promotion.
Il suffit, par exemple, de regarder les langues de vos visiteurs pour voir qu’il y a des choses curieuses :
Véritable plaie pour les analystes Web, ce spam est si important qu’il est parfois impossible d’avoir confiance en ses données.
Dans cet article, nous verrons comment vous débarrasser de ces données inexploitables avec l’outil SEGMENT de Google Analytics.
Il existe aussi une possibilité de filtrage mais cette solution ne permet pas de nettoyer l’historique de vos données. Le filtre ne s’applique qu’à partir du jour ou vous le mettez en place. C’est ballot 🙂 !
Afin d’illustrer mon propos, je prendrai les données d’une association à laquelle je participe : Networking Morbihan, pour ne rien vous cacher. Remarque: le jeu de données de Networking Morbihan sera utilisé dans différents articles.
L’intérêt de cette association est que nous avons des données depuis 2011, ce qui a laissé le temps aux spammeurs de nous repérer :-(.
Dans cet article nous nous intéresserons aux pages vues du 1er juillet 2011 au 31 décembre 2018 soit 7 an 1/2.
Pages vues brutes
Le graphique des pages vues brutes (non filtrées) présente une curiosité fin 2016 : pour obtenir ce graphique : Comportement -> Vue d’ensemble (et choisir une durée longue pour identifier les anomalies potentielles.)
Notez en mémoire : le nombre de pages vues brutes total est de 82559 sur la période.
Nettoyage des langues
Comme nous l’avons vu précédemment, il y a des curiosités dans les langues. Nous allons donc procéder dans un premier temps au nettoyage de ces langues.
Pour mémoire celles-ci doivent être sous la forme : fr, fr-FR, fr/fr …
Création d’un segment
La procédure de création d’un segment est toujours la même. Pour cela aller dans l’administration en cliquant sur le pictogramme « engrenage » ou « molette » en bas à gauche de l’écran de Google Analytics :
Il faut bien sûr être administrateur pour créer des segments.
Dans Google Analytics il y a 3 niveaux d’administration : soit au niveau du « compte » qui peut comporter plusieurs sites, soit au niveau de la « propriété » ou du site, soit au niveau de la « vue ».
Ici la vue de départ ne doit pas du tout être filtrée et doit comporter tout le trafic. Nous l’avons nommée « Global View ».
Cliquez sur « Segments » en bas de l’administration « Vue » :
Si vous n’avez jamais créé de segment, la section de droite est vide.
La page de création d’un segment apparait. Privilégiez plutôt la création de segment « Avancé -> Conditions » qui permettra par la suite de cumuler des conditions de différentes natures.
Création du segment Clean Language
On va créer le filtre pour le segment. Pour cela on va utiliser une expression régulière. Une expression régulière est une chaîne de caractères, qui décrit, selon une syntaxe précise, un ensemble de chaînes de caractères possibles.
Ici l’expression régulière pour le filtrage des langues qui nous intéresse est : ^[a-zA-Z]{2,3}([-/][a-zA-Z]{2,3})?$
Donc on donne un nom au segment, ici « Clean Language » puis on filtre ou plutôt ici on inclut sur la variable « langue » qui doit correspondre à l’expression régulière : ^[a-zA-Z]{2,3}([-/][a-zA-Z]{2,3})?$
Visualisation du segment Clean Language
On enregistre puis on va voir ce que cela donne : pour cela on retourne sur Comportement -> Vue d’ensemble.
Et cliquez sur + Ajouter un segment.
Remarque : pour plus de visibilité sélectionnez l’option « Personnalisés » pour ne voir que vos segments et non pas tous les segments proposés par défaut par Google Analytics :
Choisissez « Clean Language » et Appliquer :
Comme vous pouvez le constater, l’anomalie de fin 2016 a disparu. Nous avons nettoyé à peu près 6000 pages vues ! Le total fait maintenant 76733 pages vues.
Nettoyage des « Ghostnames »
On va supprimer les « Ghostnames » c’est à dire les « hostnames » fantômes.
Concrètement nous n’allons conserver que les noms d’hôtes qui sont légitimes pour recevoir le code de suivi de Google à savoir dans nos données :
- Le nom de domaine et les sous domaines de votre site : « monsite.com » (attention s’il y a des sous domaines qui ne doivent pas avoir le code de suivi il faut les exclure un à un par exemple « ghost.monsite.com »).
- Les services de traduction, de cache et de test pour mobile de Google : : « translate.googleusercontent..com », « webcache.googleusercontent.com », « networking-morbihan.com.googleweblight.com »
- Le service d’archives Web « web.archive.org ».
Pour cela on va faire un nettoyage sur la variable « Nom d’hôte », et on va regrouper tous les sites précédents dans une seule expression régulière pour ceux que l’on garde (inclure) :
« monsite\.com|translate\.googleusercontent\.com|webcache\.googleusercontent\.com|monsite\.com\.googleweblight\.com|web\.archive\\.org »
Et un autre expression régulière pour les sous domaines que l’on ne garde pas (exclure) :
« ghost\.monsite\.com »
NB : le point doit être « échappé » par un « \ » car il correspond à un symbole spécial.
Le caractère « | » veut dire « ou ».
Appliquons le segment Clean Language + Ghostnames à nos données :
Nous avons nettoyé à peu près 600 pages vues ! Le total fait maintenant 76160 pages vues. C’est moins que précédemment, mais tout de même.
Suppression des robots
Nous avons identifié quelques curiosités dans la variable « « Navigateur » » ainsi que des robots qui en général contiennent le mot clé « bot ».
Nous avons regroupés celles-ci dans une expression régulière qu’il faudra exclure (NB : il se peut que vous trouviez vous mêmes vos propres curiosités) : « not set|Google\.com|en-us|GOOG|PagePeeker\.com|bot »
Voyons le résultat :
Nous en sommes à 76127. Dans notre cas le gain n’est pas énorme à peine une trentaine de pages.
Suppression des « crawlers spammers » variable source.
Concrètement il faut supprimer tous les faux sites référents.
Ces sites étant souvent connus, on peut trouver des listes de sites à proscrire sur le Web, comme par exemple cette liste disponible à l’adresse : https://perishablepress.com/blacklist/ultimate-referrer-blacklist.txt
A partir de cette liste et d’autres, ainsi que de nos propres observations nous avons pu dresser notre propre liste de sites à blacklister.
Vous pouvez récupérer cette liste sur notre Github à l’adresse https://github.com/Anakeyn/blacksites/archive/master.zip
Ce fichier .zip contient un fichier blacksites.xlsx qui comprend la liste des sites à blacklister. Il y a 2 variables :
- blacksites : la liste des sites ou partie de nom de sites sous la forme d’une chaîne de caractères.
- blacksitesregex : la liste sous forme d’expression régulières.
Comme il y a plus de 8000 sites, il ne va pas être possible de les donner à Google Analytics sous la forme d’une ou plusieurs expressions régulières. En effet il semble (après plusieurs tests) que la taille des segments ne doit pas dépasser 30000 caractères.
Avec 8000 sites on risque de dépasser allègrement les 80000 caractères, sans compter ceux que l’on a utilisés pour les autres suppressions.
Afin de diminuer la taille de l’expression régulière nous n’allons prendre que les spammers effectifs pour notre site. Pour cela nous allons tester la variable source et enlever les sources qui correspondent à nos spammers.
Nous aurions pu faire un petit programme en R ou Python pour faire cela, mais comme cet article s’adresse au plus grand monde, nous allons procéder avec Excel :
Etape 1 : récupérer le fichier Excel avec la variable « source »
Dans Google Analytics aller dans Acquisition -> tout le Trafic -> source support. Comme on ne veut que la variable source ajouter « source comme dimension secondaire ».
Comme vous pouvez le voir nous avons 484 sources différentes :
Exportez les données au format Excel en cliquant sur le bouton « EXPORTER » en haut à gauche :
Le fichier importé comporte 3 feuilles Excel :
- Récapitulatif
- Ensemble de données1
- Ensemble de données2
C’est la feuille « Ensemble de données1 » qui nous intéresse. Profitons-en pour lui donner un nom plus court, par exemple « données1 » ce qui nous servira par la suite.
Etape 2 : tri de la variable « source » dans la feuille « données1 ».
Pour cela vous allez sélectionner la 1ere ligne avec le nom des variables et les filtrez (à droite). Vous verrez ensuite s’afficher un carré avec un petit triangle pour chacune des variables. Triez la variable source (colonne B) par ordre alphabétique de A à Z.
Etape 3 : Création d’une nouvelle feuille « blacksites » avec les données du fichier blacksites.xlsx.
Créez la feuille blacksites puis faire un copier/coller du contenu de blacksites.xslx.
Etape 4 : Identification des blacksites présents dans nos données.
Pour cela on va créer une variable « trouvé » dans la feuille blacksites qui va compter le nombre de fois ou la chaine de caractère dans blacksites est trouvée dans la liste des sources.
Ici la formule est =NB.SI(données1!$B$2:$B$485; »* »&A2& »* ») pour la première ligne.
On peut ensuite les trier du plus grand au plus petit pour mettre en évidence les sites blacklistés trouvés (i.e. trouvé >0)
Etape 5 : Création de l’expression régulière.
L’expression régulière sera construite à partir de l’ensemble des sites trouvés. Nous utiliserons les données de la variable blacksitesregex que nous avons repérés et que nous concaténerons avec des « | » ce qui correspond à ou.
Pour faire cela nous sommes obligé de créer un variable « ou » et puis 2 autres variables de concaténation pour faire les concaténations en ligne (ex: E2=C2&D2) pour ajouter le « | » et par colonne + dernière ligne (ex:F3=F2+E3) pour concaténer les différentes expressions régulières.
On récupèrera la dernière ligne de concaténation :
Retour aux segments dans Google Analytics
On va sélectionner ici la variable source et exclure les sites avec l’expression régulière que l’on vient de créer.
Voyons le résultat :
Cette partie a permis de nettoyer environs 2000 enregistrements. Nous en sommes à 74364.
Suppression des fausses pages référentes sur des sites légitimes. Variable : Chemin du site référent
Comme si cela ne suffisait pas, ces personnes mal intentionnées ont décidés de pourrir vos stats en mettant cette fois en avant des pages et des articles sur des sites légitimes. Soit pour se venger de Google qui leur ont fait des procès (pour le spam précédent) soit pour mettre en avant leur candidat lors d’élections (par exemple Trump pour ne pas le nommer !).
Pour éviter de sanctionner ces sites globalement, il faut cette fois comparer ces pages à la variable « Chemin du site référent ».
Nous avons pu repérer ces pages dans nos données, l’expression régulière à prendre en compte est la suivante :
« google-wins-legal-battle-against-pro-trump-spammer-over-the-letter-g|this-pro-trump-russian-is-spamming-google-analytics|heres_a_secret_%C9%A2ooglecom_is_not_googlecom|lifehacC4%B8ercom_original_idn_fake_safe_best_on_ff|the-electoral-college-is-poised-to-pick-trump-despite-push-to-dump-him|a-russian-trump-fan-is-celebrating-by-hacking-google-analytics|message-secret-%C9%A2oogle-com-showing-in-google-analytics-language-column »
Voyons le résultat :
Il reste maintenant 73918, environ 200 enregistrements on été nettoyés.
Suppression des visites effectuées par les administrateurs
On procèdera en 2 temps, on éliminera tout d’abord les pages visitées et qui sont censées être dans l’administration, puis ensuite les pages qui proviennent d’un lien dans l’administration.
NB : Ces données varient d’un site à l’autre et selon l’outil que vous utilisez pour votre site (WordPress, Joomla, Drupal, Prestashop, Magento …).
Il faudra donc que vous fassiez un travail d’investigation sur vos données.
Suppression des pages visités dans l’administration, variable Page
Dans notre cas Le site étant sous WordPress toutes les pages avec /wp-login.php ou /wp-admin/ ou /cron/ devront être supprimées.
On peut aussi trouver des URLs avec / ?p=1234 ou / ?p=1234&preview=true qui correspondent à des visualisations de pages via l’administration.
Dans notre cas (WordPress) l’expression régulière à prendre en compte est la suivante :
« /wp-login|/wp-admin/|/cron/|/?p=\d »
Voyons le résultat :
Nous somme maintenant à 71953 pages vues. Environ 2000 pages on été nettoyées.
Suppression des pages visités depuis l’administration, variable Page de destination
Comme précédemment on s’intéressera aux pages avec /wp-login.php, /wp-admin/, / ?p=1234 ou / ?p=1234&preview=true
Dans notre cas l’expression régulière est la même que précédemment.
« /wp-login|/wp-admin/|/cron/|/?p=\d »
Voyons le résultat :
Nous somme toujours à 71953 pages vues. Dans notre cas ce dernier nettoyage n’apporte rien.
Conclusion :
Comme vous pouvez le constater, nous avons près de 10000 pages « fausses » dans notre trafic. Ce qui correspond à peu près à 15% de celui-ci, ce qui n’est pas négligeable et pourrait fausser nos analyses.
Si vous avez d’autres pistes pour nettoyer les données, n’hésitez pas à mettre un commentaire.
Merci de votre attention,
Pierre