Analyser les logs pour le SEO avec Dataiku DSS (Guide avancé)

A

Il existe aujourd’hui de nombreuses façons de faire une analyse de logs mais chaque analyse requiert la plupart du temps une longue phase préparatoire : récupération des logs, regroupement, séparation des données en colonnes, nettoyage, etc. Ces traitements, plus ou moins complexe selon les cas, peuvent parfois refroidir, surtout quand ils sont faits à la mano…

Dans ce guide pratique, je vais vous montrer comment faire tout ça rapidement et exploiter les logs d’un hébergement web OVH grâce à Dataiku, un outil de Data Science.

Cet outil est une petite révolution dans le domaine du traitement de la donnée et vous allez vite comprendre pourquoi.

Ah… et j’oubliais…

Dataiku dispose d’une version gratuite qui a en plus l’avantage de s’installer sur votre machine afin que les données restent en local !!!!

Sommaire

PARTIE 1 : Votre première analyse de logs avec Dataiku

Installer Dataiku DSS

Commencez par l’installation de Dataiku DSS sur votre ordinateur : https://www.dataiku.com/dss/trynow/

installer dataiku dss
Dataiku DSS, un outil d’analyse de données utilisé pour la Data Science, ici détourné pour une utilisation SEO

Connecter vos logs OVH à Dataiku

Rendez-vous dans l’administration (picto roue dentée en haut à droite), puis dans l’onglet Plugins.

Cherchez et installez le plugin OVH Logs Importer de Jérémy Grèze.

dataiku ovh logs importer
Il existe des plugins Dataiku pour différents usages : connecteurs aux API d’autres services (OVH, Github, Import.io, etc) et des plugins pour enrichir vos datasets (OpenStreeMap, Enrich from Movies, geo enrichment, etc.)

Retournez sur la page d’accueil et cliquez sur le + en haut à gauche. Choisissez « New Project ».

tuto dataiku

Cliquez sur le bouton « + Import your first dataset » et sélectionnez « OVH logs ».
Une nouvelle page s’affiche.

Remplissez les champs avec vos identifiants OVH, le nom de domaine que vous souhaitez étudier et la période d’analyse qui vous intéresse. Cliquez ensuite sur le bouton « Test & get Schema » pour démarrer la récupération des logs.


Quelle période étudier ?
Je vous conseille d’étudier au minimum les 30 derniers jours pour une analyse représentative. Elle vous permettra par exemple de repérer les pages ignorées par Google Bot.

L’analyse peut prendre quelques minutes selon la période sélectionnée.

Une fois la récupération terminée, un échantillon de vos logs apparait sur l’écran de droite, avec les infos correctement classées : magique ! Donnez un nom à votre dataset et cliquez sur le bouton « Create » en haut de l’écran.

dataiu seo tutorial

Vous allez maintenant pouvoir commencer l’analyse des logs de votre site web : analyser le trafic, étudier les status codes rencontrés par les visiteurs/Bots, etc.

Nous allons commencer par quelques manipulations basiques afin que vous pussiez prendre Dataiku DSS en main rapidement.

Avant-propos : Dataiku DSS utilise un échantillon de 10 000 lignes afin que les traitements s’effectuent en direct. Vous pouvez agrandir l’échantillon selon les capacités de votre machine. Pour cela, cliquez sur 10 000 rows, sous Design Sample en haut à gauche.

Vos premières analyses

Sur votre dataset, cliquez sur le bouton LAB en haut à droite. Une popup s’ouvre, cliquez sur « NEW Prepare data and build models » pour créer votre analyse.

filtrage logs seo

Cliquez sur le bouton vert + ADD A NEW STEP et choisissez la ou les librairie(s) qui vous intéressent.

Cette opération sera à reproduire à chaque fois qu’il sera question de création d’analyse dans ce guide.

Status code rencontrés par les visiteurs

Cliquez sur l’intitulé de colonne « status » puis sur « Analyse… ». Bravo vous venez de faire votre première analyse de logs !

analyse logs status code

Certes très simpliste mais pour autant pas inintéressante : vous avez devant vous la répartition de tous les status codes réellement rencontrés par les visiteurs (humains et bots) de votre site. À vous de jouer pour améliorer conjointement l’expérience utilisateur et le parcours des bots.

Astuce : Un clic sur la roue dentée de chaque ligne vous permettra d’effectuer des traitements dans votre dataset. Par exemple n’afficher que les lignes qui contiennent le status code 404 afin de prioriser votre ménage.

Geolocalisation des IP des visiteurs

Dataiku DSS propose différentes façons d’enrichir vos datasets via des API externes et des bases de données.

Nous allons ici enrichir les adresses IP d’infos géographiques : pays, régions, villes.

Cliquez sur l’intitulé de la colonne « host », puis sur « Resolve GeoIP ». 7 nouvelles colonnes apparaissent.

logs web geo ip

Vous venez de géolocaliser toutes les IP qui se sont connectées à votre site et connaissez ainsi la provenance de vos visiteurs par pays, région ou encore par ville. Pour avoir un aperçu de la répartition de l’origine géographique des visites, cliquez là encore sur l’intitulé de la colonne qui vous intéresse et sur « Analyse… ».

Filtrage de Google Bot dans les logs

Voici la partie qui devrait le plus plaire aux SEO !

Pour filtrer les hits de Google Bot dans les logs il existe 2 options :

La première est de cliquer sur l’intitulé de colonne « agent » puis de « Filtrer » sur la chaine de caractères « Googlebot », elle a cependant l’inconvénient de capter les fanfarons qui se font passer pour GBot… Pour connaitre les chaines complètes des user-agents de Google rendez-vous sur cette page.

La seconde méthode, plus fiable, consiste à filtrer les IP du GoogleBot en entrant manuellement le préfixe 66.249 (colonne « host »).

Une fois que vous avez choisi votre méthode, cliquez sur « +Add as a step » pour valider l’opération en suivant la même base de paramétrage que sur la capture d’écran ci-dessous.

filtrage de google Bot dans logs web
J’ai ici filtré les logs de Google Bot sur ses IP qui commencent par 66.249

Il ne vous reste maintenant plus que des lignes basées sur le user agent Google Bot.

C’est une bonne base pour effectuer des analyses beaucoup plus fines et détaillées du comportement de Google Bot sur votre site : status codes rencontrés, pages les plus crawlées, etc.

J’espère que ces premiers « exercices » vous ont plu. Passons maintenant à une analyse de logs pour le SEO mais avant ça, préparons les logs.

PARTIE 2 : Préparation des logs

Nettoyage des logs pour une analyse SEO

L’intérêt ici est de ne garder que les logs les plus intéressants pour une analyse SEO. Nous allons donc supprimer les lignes qui concernent des appels de fichiers css, js, images, etc.

Créez une nouvelle analyse (comme vu dans la PARTIE 1 Vos première analyses) et choisissez la librairie « Filter rows/cell on value » qui se trouve dans l’ensemble « Filter data ».

Paramétrez ensuite le filtrage de vos logs de la façon suivante :

filtrer logs web
Nous filtrons ici toutes les lignes contenant des appels vers des ressources de type .js .css /fonts/ .png .jpg .php .gif .ico /#comment- /?replytocom=

Les valeurs à filtrer peuvent varier selon le type de site que vous analysez. Ici les valeurs (« has values ») sont particulièrement adaptées à une analyse d’un site WordPress mais n’hésitez pas à parcourir votre dataset pour les compléter.

Enfin pour une meilleure lisibilité, nous allons supprimer le HTTP/1.1 à la fin des requêtes.
Dans la colonne request, double-cliquez sur n’importe quelle cellule contenant HTTP/1.1 puis sélectionnez « Replace HTTP/1.1 by … »

Nous venons de supprimer 8831 lignes (CSS, images, scripts, etc) et de traiter 1158 lignes pour le nettoyage de HTTP/1.1. N’oubliez pas qu’il s’agit pour l’instant de traitements sur notre échantillon de 10 000 lignes 😉

Filtrage des user agents des bots : GoogleBot, BingBot, etc

Commencez par classer les user agents par type afin que nous puissions ne garder que les bots. Pour cela cliquez sur l’intitulé de la colonne agent et sur « Classify user agent ». De nouvelles colonnes apparaissent avec des détails supplémentaires : agent_type, agent_category et agent_brand.

Pour ne garder que les lignes relatives aux bots cliquez sur une cellule contenant la valeur « bot » dans la colonne agent_type, puis sélectionnez « Keep only rows equal to bots. »

user agent log web

Astuce : Dataiku DSS propose une option d’anonymisation de données grâce au plugin « Data Anonymizer ». Une fois installé, vous pourrez rendre anonyme n’importe quelle colonne de vos datasets en quelques clics (dans l’onglet Analyse cliquez sur « + ADD A NEW STEP », cherchez « Anonymize data processor » et laissez-vous guider)

PARTIE 3 : Analyse de logs avancée

L’objectif de cette partie est d’étudier en profondeur le comportement des différents robots d’exploration : fréquence de visite des pages, status codes rencontrés, comportement d’exploration des pages mobiles.

Status code rencontrés par les bots

RDV dans l’onglet Charts.

Sur votre gauche se trouvent toutes les variables de votre dataset. Faites les glisser dans la partie droite sur X et Y afin de créer une visualisation de vos données.

La première visualisation est une vue macro des status codes rencontrés par les Bots : elle regroupe le nombre de passages de chaque bot sur le site ainsi que les status codes rencontrés.

status codes user agent
Nombre de passages des différents robots d’exploration et codes HTTP rencontrés

Ce type d’analyse vous plait ?

Passons à la vitesse supérieure.

Passage des bots par URL et par type de page

Analysons maintenant en détails le nombre de passages de tous les Bots sur chacune de vos URL afin de détecter des paterns particuliers. Nous classerons aussi les pages selon si elles sont AMP ou non.

Commençons par créer un nouveau dataset basé sur nos précédents traitements (filtrage, nettoyage). Nous en aurons besoin pour le regroupement des hits par URL.

Pour cela, cliquez sur le bouton jaune en haut à droite DEPLOY SCRIPT. Nommez-le, choisissez son emplacement et son format (CSV) puis cliquez sur DEPLOY.

dataiku deploy script

Votre nouveau dataset est prêt ?

RDV maintenant dans le FLOW (menu de Dataiku, en haut à gauche). Considérez le FLOW comme un historique de vos opérations.

dataiku flow

Nous allons maintenant regrouper les lignes par requêtes. L’objectif est de compter le nombre de passages de bots par URL.

Cliquez sur votre nouveau dataset puis dans la partie Visual recipes, cliquez sur le picto jaune « Group ».

Sélectionnez les Group Keys « request » et « agent_brand » puis validez votre nouveau dataset en cliquant sur le bouton RUN en bas.

group by dataiku dss

Retournez dans le FLOW : votre nouveau dataset apparait. Cliquez dessus puis sur le bouton « LAB » bleu à droite.
Une fenêtre apparait : cliquez sur « NEW Prepare data and build models » afin de démarrer une nouvelle analyse.

Avec une visualisation par tableau (onglet Charts), on peut en quelques clics générer un observatoire des passages de tous les bots sur chaque URL :

Les bots passent-ils du temps sur les bonnes pages de votre site ?

Toujours dans l’onglet Charts, en quelques glisser-déposer on peut facilement afficher les pages les plus consultées par les crawlers.

pages vues user agent
Cette analyse met en lumière les différences de comportement entre les crawlers de Bing et de Google. Le premier fréquente souvent le robots.txt et la home alors que le second privilégie la home et les sitemaps.

Je vous invite également à tester une visualisation des passages des différents bots par jour. Cela vous permettra de repérer des comportements anormaux (par exemple un bot qui arrête subitement de visiter certaines de vos pages) et aussi de connaitre la date de dernier crawl de vos URL.

Suivi du passage quotidien des bots sur chaque URL avec possibilité de filtrer les bots et les URL

Comportements des bots sur les pages mobiles et AMP

Nous allons maintenant distinguer les URL AMP des URL non AMP.

Découpez la colonne request grâce à un Split avec delimiter /
et précisez le nom de la colonne générée (dans le case Output columns prefix). Choisissez Output as Multiple columns et côchez Truncate. Passez le nombre de colonnes à garder à 1 et choisissez Starting from End.

Vous devriez obtenir quelque chose comme ça :

split dataiku

La colonne que vous venez de créer contient maintenant des morceaux d’URL dont « amp » qui nous intéresse ici particulièrement. Pour ne garder que « amp » et effacer le contenu des autres cellules sans pour autant effacer les lignes, procédez de la façon suivante :

Cliquez sur une cellule contenant amp, et double-cliquez sur « Keep only rows containing amp » puis dans la partie Script à gauche de l’écran, sélectionnez l’action « Clear non matching cells » avec la valeur amp.

filtres data dataiku datascience
La petite barre verte sous la colonne amp vous donne une idée du volume de pages amp.

Votre colonne est maintenant nettoyée et vous permet en 1 coup d’œil de repérer les lignes de votre dataset correspondant à des pages amp, ce qui sera très pratique pour du filtrage.

Vous pouvez maintenant filtrer les passages de crawl par Bot (Google, Bing, yahoo, etc) et par type de page (amp / non amp) et même trier les lignes par nombre de passages pour une meilleure lisibilité.

Retournons dans l’onglet Charts pour visualiser la répartition du crawl sur les pages AMP vs non-AMP.

amp logs site web
On voit ici la répartition du type de pages (AMP en vert vs non-AMP en bleu) crawlées par les bots

Pour aller plus loin, vous pouvez aussi agrémenter la visualisation de filtres : par catégorie de page, par type de bot (mobile vs non mobile).

Croiser les logs avec les données d’un crawl Screaming Frog


Faire une analyse croisée de logs
Une analyse croisée permet de détecter les zones du site où Googlebot ne passe pas et aussi de s’assurer qu’il passe du temps sur les bonnes pages. C’est une aide précieuse pour découvrir les pages orphelines ou encore les spider traps.

Commencez par crawler votre site avec Screaming Frog afin de récupérer des éléments onsite de chaque URL (level, inlinks, size, etc), filtrez les HTML et exportez les données au format .xlsx.

analyse croisee log crawl

Dans Dataiku DSS, ré-ouvrez maintenant votre précédent dataset (celui avec les 4 colonnes request, amp, agent_brand et count). Nous allons le préparer pour le merge avec les données issues du crawl Screaming Frog. Créez maintenant une nouvelle Analyse.

Dans la colonne « request », remplacez « GET / » par votre nom de domaine complet tel qu’il apparait dans votre fichier internal_html de Screaming Frog. Cette étape va nous permettre de faire correspondre les lignes entre les 2 datasets.

Pour cette analyse, vous pouvez aussi conserver uniquement les lignes correspondantes à GoogleBot (Keep rows where agent_brand is Google)

dataiku data science studio filter

Cliquez sur DEPLOY SCRIPT en haut à droite. Une nouvelle page s’ouvre, cliquez sur RUN afin de créer un nouveau dataset basé sur vos derniers traitements, nous l’appellerons « ovh_crawl_logs_ready ».

Passons au regroupement du fichier de logs avec le crawl Screaming Frog. RDV maintenant dans le FLOW

Cliquez sur + DATASET et uploadez votre fichier Screaming Frog.

flow dataiku
A gauche le fichier internal_html issu de Screaming Frog, à droite le fichier de logs et ses différents traitements

Avant de pouvoir joindre les 2 fichiers et conserver toutes les données des 2 datasets, il faut les stocker dans une base de données SQL PostgreSQL comme expliqué sur le forum de Dataiku.

Cliquez sur votre dataset ovh_crawl_logs_ready puis sur Export (dans la sidebar de FLOW). Une fenêtre s’ouvre, RDV dans l’onglet EXPORT TO DATASET. Donnez un nouveau nom à votre dataset (ovh_crawl_logs_ready_postgresql), puis choisissez Store into PostgreSQL.

postgresql dataiku dss

Répétez l’opération avec votre dataset Screaming Frog « internal_html ».

Une fois la création de vos bases PostgreSQL terminée, cliquez sur votre nouveau dataset « ovh_crawl_logs_ready_postgresql » pour faire apparaitre la sidebar de FLOW.

Dans la zone Visual recipes de la sidebar, cliquez sur « Join with ».

Une fenêtre apparait. la valeur de First input dataset est de base « ovh_crawl_logs_ready_postgresql ». Pour le Second input dataset, choisissez internal_html_postgreSQL puis cliquez sur CREATE RECIPE. Une nouvelle page apparait.

Passons au paramétrage du merge.

Dans l’étape Join, Cliquez sur la ligne qui relie Adress à request. Une fenêtre apparait. Cliquez sur l’onglet JOIN TYPE et sélectionnez Outer join afin de garder toutes les lignes qui correspondent entre les 2 datasets mais aussi les lignes qui ne correspondent pas.

Cela nous permettra par exemple de découvrir les pages orphelines (pages vues par les bots mais non liée sur le site) ou les pages non crawlées par Google alors qu’elles sont liées sur le site.

diagramme venn analyse logs

Afin d’accélérer les traitements, nous allons filtrer certaines colonnes. Pour cela passez à l’étape Selected columns.

Les données les plus intéressantes de votre fichier Screaming Frog se trouvent dans les colonnes Adress, Size, Word_Count, Text Ratio, Level, Inlinks, Outlinks, External Outlinks, Response Time. Vous pouvez leur ajouter un préfixe (ex : SF_) pour faciliter la lecture dans votre futur dataset.

merge 2 datasets postgresql dataiku

Cliquez sur RUN afin de lancer le merge des deux datasets.

Vous êtes maintenant prêt pour une analyse croisée logs / crawl ! Ouvrez votre nouveau dataset.

Pages orphelines et pages jamais crawlées

Votre dataset comporte 2 colonnes similaires : request et SF_Address.
Jouez avec les filtres pour créer les 3 configurations suivantes :

  • request vide / URL dans SF_Adress : pages jamais crawlées mais bien liées sur votre site
  • URL dans request / URL dans SF_Address : tout est OK, les crawlers voient des pages qui sont bien liées sur votre site
  • URL dans request / SF_Address vide : il s’agit des pages orphelines, des pages qui ne sont plus liées sur votre site mais que les robots consultent quand même. Si vous avez entendu parler de crawl budget, la réduction de ces pages doit faire partie de votre stratégie SEO.
analyse logs pages jamais crawlees
Liste des URL jamais crawlées par Googlebot mais bien reliées sur le site d’après le crawl Screaming Frog
analyse logs pages orphelines
Liste des URL des pages orphelines
analyse logs crawl logs
Listes des pages crawlées par Google et liées sur le site. Ces pages vont à priori bien 😉

Trouver vos propres corrélations entre logs et crawl

RDV dans l’onglet Charts. L’idée ici est d’analyser l’impact de chaque facteur récolté via l’analyse Screaming Frog sur la fréquence de passage du crawler.

Choisissez count (AVG) sur l’axe Y et testez différentes combinaisons sur l’axe X.

Voici quelques idées :

crawl google profondeur pages
Le traditionnel nombre de crawl par niveau de profondeur de page
crawl texte ratio nombre mots
Recherche de corrélation entre ratio texte / html, nombre de mots et passages de GoogleBot
google bot inlinks correlation
Recherche de correlation entre nombre de liens internes entrants et passages de Googlebot

La suite ?

Les analyses que nous avons fait jusqu’ici sont des analyses descriptives.

Dans un prochain article, nous utiliserons Dataiku DSS pour faire de la prédiction grâce aux algorithmes de Machine Learning.

N’hésitez pas à poser vos questions en commentaires 😉 J’enrichirai l’article selon vos retours !

Suivez-moi sur Twitter pour être informé des mises à jour de l’article :

Merci à Jérémy Grèze (de Dataiku) pour son aide dans la création de ce guide.

A propos de l'auteur

Rémi Bacha

Passionné de SEO et Data Science. Fondateur de l'agence LABS ON MARS et co-fondateur des formations DATA SCIENCE SEO.

10 Commentaires

    • Hello,

      Oui, un CDN comme Cloudflare fonctionne comme un proxy et masque l’adresse IP entrante. Cloudflare fait suivre l’IP dans le header. Il faut ainsi configurer le serveur pour enregistrer ce header dans les logs. Cf: https://support.cloudflare.com/hc/en-us/sections/200805497-Restoring-Visitor-IPs

      Un hébergement web OVH (mutualisé) n’est pas aussi finement paramétrable. A noter que OVH offre son propre CDN, ce qui peut résoudre le problèmes si on veut utiliser les logs du mutu et un CDN.

    • Sur l’hébergement web OVH, lorsque tu utilises un CDN, le rewrite de l’IP dans les logs est automatique : tu vois bien l’IP de l’utilisateur.

      • Salut Rémi,

        Es-tu sûr de cela ? Dans différents logs analysés, je n’ai jamais les IP des GoogleBot (66.249.*.*) lorsque les sites sont derrière CloudFlare.

        PS : bravo pour tes articles en général !

  • Thx pour ton article ,

    Pas facile de trouver des cas concrets en Français sur Dataiku mais le logiciel a l’air prometteur.

    Au plaisir de te lire

    Seoxis

  • Hello,

    J’utilise la version en ligne (Trial 14 days).

    Quand je met mon login/mdp, domaine etc, ça me met ça : Test failed: Authentication error. Check the login and the password.

    (le login et mdp sont bons pourtant)

    • Hello,

      je ne connais pas la version en ligne mais j’imagine que les connecteurs fonctionnent de la même manière que sur la version locale. Tu peux contacter Jéremy Greze (@jeremy_gr sur Twitter), c’est lui qui a dev le plugin OVH. Tiens-moi au courant si tu en sais plus 😉

  • Salut Rémi et merci pour ce tuto très détaillé, c’est vraiment intéressant.
    En revanche, j’ai une erreur à ce stade : « Sélectionnez les Group Keys « request » et « agent_brand » puis validez votre nouveau dataset en cliquant sur le bouton RUN en bas. »

    Il est en effet impossible de sélectionner deux Group Keys à priori, sais-tu si cela provient du soft, du tuto, ou si j’ai mal fait quelque chose ?

    Merci,

  • Petit supplément d’info pour celles et ceux qui seraient intéressés par l’installation sur Windows 10.
    forums.virtualbox.org/viewtopic.php?f=1&t=62339
    Et surtout par le bas de page :
    1. To check the status of Hyper-v in Windows 10, | Run | OptionalFeatures.exe, and look for the « Hyper-V » option. The box should be empty, not checked or shaded. Make sure to fully power down and reboot the host after changing this setting.
    J’en suis à l’étape Connexion avec OVH mais çà coince (même message que Rémi Beaumont).
    J’attends d’être en relation avec @jeremy_gr sur Twitter pour en savoir plus.
    Merci en tout cas de ce partage très intéressant.

Articles récents

Rémi Bacha

Passionné de SEO et Data Science. Fondateur de l'agence LABS ON MARS et co-fondateur des formations DATA SCIENCE SEO.