Apache Log Analyzer 2 Feed: i feed a vantaggio dei SEO

ApacheLog2Feed Logo Come avevo già anticipato nell'anteprima del mio speech, quest'anno in occasione del Search Engine Strategies di Milano ho deciso di realizzare un intervento un po' particolare.

Ad una breve introduzione ai feed RSS e Atom è seguita la presentazione di un piccolo script, creato per l'occasione. Lo script si chiama Apache Log Analyzer 2 Feed ed è disponibile gratuitamente per il libero download, con licenza LGPL.

Andiamo a vedere più nel dettaglio di cosa si tratta.

Apache Log Analyzer 2 Feed al SES 2007 di Milano

Troppo spesso il tema dei feed è associato univocamente ai blog o alla distribuzione di news. Da sempre ho sottolineato come questo formato sia elastico a tal punto da poter essere agevolmente adattato a varie esigenze.

La scelta di realizzare questo script per il SES di Milano è stata motivata dalla volontà di dimostrare questa affermazione in modo concreto, possibilmente correlando l'intervento con i temi delle attività SEO e SEM.

Introduzione a Apache Log Analyzer 2 Feed

Apache Log Analyzer 2 Feed è un classe scritta in PHP 5, perfettamente in sintonia con le caratteristiche object oriented del linguaggio. Questa libreria rappresenta un potente strumento per analizzare un file di log generato da un webserver Apache, filtrarne il contenuto attraverso regole e pubblicare il risultato in un feed.

Ad esempio, volete essere avvisati via feed ogni volta che lo spider di Google passa sul vostro sito? Nulla di più facile. Con Apache Log Analyzer 2 Feed è possibile individuare in un file di log solo le righe associate ad una specifica user agent. Ogni volta che Googlebot passerà sul vostro sito arriverà la notifica direttamente nel vostro aggregatore.

Comprendere i vantaggi di questo sistema è immediato. L'analisi dei file di log è un'attività pesante che richiede notevoli quantità di tempo. Con Apache Log Analyzer 2 Feed è sufficiente impostare i filtri e sarà lui stesso, in tempo reale o grazie ad operazioni pianificate, ad inviarvi via feed i risultati.

Risorse e documentazione

E' molto probabile che a questo punto qualcuno di voi è già interessato a provare la classe o approfondirne i dettagli. Nei giorni scorsi ho realizzato qualche pagina di documentazione per la classe, disponibile in inglese e liberamente consultabile. La documentazione non è ancora completa, tuttavia vi fornisce esempi pratici e API per utilizzare al meglio la classe.

Chi lo desidera può continuare la lettura di questa pagina per scoprire una mini guida all'uso.

Download ed installazione

Il download è immediato, così come l'installazione della classe. Accedete all'area di download e scaricate la versione più adatta alle vostre necessità.

Scompattate l'archivio e troverete due cartelle: src e docs. La prima contiene la classe principale ApacheLogAnalyzer2Feed.php ed alcune classi necessarie per il corretto funzionamento. La seconda contiene la documentazione in formato phpDoc per le classi.

Copiate la cartella src all'interno della cartella dove risiederà il file che istanzierà la classe. A questo punto l'installazione è terminata.

Utilizzo e configurazione

Per utilizzare lo script è necessario istanziare la classe e configurare i filtri.

Analizziamo insieme un esempio. Il codice seguente ci avvisa ogni qual volta Googlebot richiede una risorsa qualsiasi nel nostro sito.

<?php

/**
* @see ApacheLogAnalyzer2Feed
*/
require_once 'ApacheLogAnalyzer2Feed.php';

// create an instance, parse access.log and write test.xml
$tool = new ApacheLogAnalyzer2Feed('access.log', 'test.xml');
// check Googlebot Useragent
$tool->addFilter('User-Agent', 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)');
// run
$tool->run();

Come prima cosa includiamo la classe principale. Non è necessario includere le librerie dipendenti, verranno richiamate in automatico dalla libreria principale.

<?php

/**
* @see ApacheLogAnalyzer2Feed
*/
require_once 'ApacheLogAnalyzer2Feed.php';

E' inteso che nel caso la classe si trovi nella cartella /src il percorso d'inclusione sarà il seguente.

<?php

/**
* @see ApacheLogAnalyzer2Feed
*/
require_once 'src/ApacheLogAnalyzer2Feed.php';

A questo punto creiamo un'instanza della classe. Il costruttore accetta due parametri: il primo è obbligatorio e rappresenta il percorso al file di log da analizzare; il secondo è facoltativo e rappresenta il percorso al file di output. Nel caso il percorso non sia presente, il feed verrà generato al volo e stampato come risultato dell'elaborazione.

Normalmente, questa opzione è molto utile nel caso la classe venga eseguita via operazione pianificata.

// create an instance, parse access.log and write test.xml
$tool = new ApacheLogAnalyzer2Feed('access.log', 'test.xml');

Perfetto!

Da questo momento la variabile $tool rappresenta il nostro oggetto. A questo punto possiamo decidere di impostare le proprietà, aggiungere i filtri ed impostare la modalità di confronto.

Per aggiungere un filtro è sufficiente richiamare il metodo addFilter() specificando il campo da cercare ed il suo contenuto. I campi disponibili sono quelli del file di log che, nel caso del formato standard corrispondono a

  • Remote-Host
  • Remote-Logname
  • Remote-User
  • Time
  • Request
  • Final-Status
  • Bytes-Sent
  • Referer
  • User-Agent

Per ciascuno il valore può essere esatto oppure espresso tramite espressione regolare anteponendo il prefisso regexp.

// check Googlebot Useragent
$tool->addFilter('User-Agent', 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)');

Ecco l'alternativa via espressione regolare.

// check Googlebot Useragent
$tool->addFilter('User-Agent', regexp:Googlebot');

Siamo pronti per lanciare l'analisi.

// run
$tool->run();

In questo specifico caso, il risultato sarà scritto nel file test.xml

In conclusione

Ci sono strumenti molto più professionali per l'analisi dei log, quello che però mi premeva è dimostrare come sia possibile sfruttare i feed anche per scopi ben diversi dalle classiche news.

La classe è disponibile con licenza LGPL. Non prevedo aggiornamenti nel breve tempo, ma non li escludo in futuro.