Analyser Googlebot via les logs Apache en temps réel

écrit par Aymeric

500 internal errorOn a beaucoup parlé au SEO Campus 2013 d'analyse de logs. Comprendre le fonctionnement de Googlebot, lui éviter des erreurs, mieux le guider via le linking interne peut permettre à votre site d'être Googlebot Compliant.
Je vais vous présenter une astuce dans la configuration d'Apache qui va vous permettre d'envoyer chaque hit serveur de Googlebot vers un programme externe en plus de l'habituel fichier de logs.

Le principe

Cela se passe directement au niveau de la configuration d'Apache, via la directive CustomLog: il s'agit des Piped Logs. C'est documenté et vous allez voir que c'est ultra pratique pour envoyer la sortie des lignes de logs en temps réel vers un programme externe.
Au lieu d'envoyer chaque ligne de log dans un fichier texte .log lors d'une requête sur votre serveur Apache, on va rediriger la sortie vers un {script|programme|application}.

Dans votre configuration d'Apache, il suffit d'ajouter un Pipe ( | ) juste devant le chemin d'un script à exécuter dans une directive CustomLog:

CustomLog "|/srv/data/web/vhosts/www.yapasdequoi.com/htdocs/trackbots/tracklogs.php" googlebot_format

On prendra soin de spécifier un format de log spécifique pour parser plus facilement la ligne de log:
LogFormat "%h|||%{Referer}i|||%{User-Agent}i|||%V|||%r|||%>s|||%D|||%H|||%t" googlebot_format

Pour ne pas que cela soit trop consommateur de ressources, vous pouvez déclencher le piped log et donc le script qui sera déclenché avec cette directive uniquement sous certaines conditions via les variables d'environnement dans votre fichier de configuration Apache:

SetEnvIf User-Agent "Googlebot/2.1" googlebot_log
CustomLog "|/srv/data/web/vhosts/www.yapasdequoi.com/htdocs/trackbots/tracklogs.php" googlebot_format env=googlebot_log

Et chaque ligne sera envoyée vers notre script tracklogs.php

Exemple d'utilisation en PHP

Vous pouvez l'utiliser pour gérer des alertes en cas d'erreurs spécifiques ou pour vérifier qu'une page est bien crawlée régulièrement. Personnellement, j'utilise les pipedlogs principalement pour déclencher l'appel de l'image de tracking de Google Analytics à chaque passage de GoogleBot, cela me permet de suivre son crawl directement dans GA, c'est gratuit et en temps réel, un kiff de geek de le voir se promener sur mes sites:-)

#!/usr/bin/php
<?php
$stdin = fopen("php://stdin", "r"); ob_implicit_flush (true); while
($line = fgets ($stdin)) {
   $tmp = explode('|||', $line);
    $ip = $tmp[0];
    $referer = $tmp[1];
    $userAgent = $tmp[2];
    $hostName = $tmp[3];
    $documentPath = $tmp[4];
    $tmp2 = explode(" ", $documentPath);
    $documentPath = $tmp2[1];
    $url = $hostName . $documentPath;
    $RES_CODE = $tmp[5];
  trackapachelog($RES_CODE,$userAgent,$referer,$ip,$hostName,$documentPath);
}
?>

Il ne vous reste plus qu'à compléter la fonction trackapachelog, pour traiter les données comme bon vous semble.

Vos logs dans Google Docs

J'ai une vraie lubie pour Google Docs ces dernier temps, bien que Jérémy Allard m'a vraiment donné l'envie de me lancer dans la création de Plugins Chrome en tout genre lors du Teknseo, j'ai encore tellement de choses à exploiter avec Google Docs que je laisse les plugins pour plus tard:-)

Mon idée est de remonter dans une feuille de calcul sur Google Drive des infos en provenance des logs d'Apache, en live. Cela peut permettre d'afficher rapidement les dernières 404 par exemple sans pour autant se connecter en SSH et en ayant directement les données rangées dans un joli fichier.
Script à venir donc...

Merci à Jean-Benoit Moingt de m'avoir fait découvrir cette fonctionnalité, également utilisée dans la Watussi Box que je vous recommande pour mieux dompter GoogleBot. Special Dedicace à @dsampaolo avec qui on a causé logs au Teknseo😉

écrit dans Apache par Aymeric | 16 commentaires

16 commentaires "Analyser Googlebot via les logs Apache en temps réel"

  • Mikiweb dit:
  • Yann dit:
  • Aurelien dit:
  • LaurentB dit:
  • Guillaume dit:
  • formation en ligne dit:
    • Aymeric dit:
  • yohann dit:
  • Jerome dit:
    • Aymeric dit:
    • Jean-Benoît dit:
  • yohann dit:
  • Logiciel Call center dit:
  • Emilie dit: