PHP Ranking Checker: Controlla Il Posizionamento Su Più Motori Di Ricerca

Questo è un semplice script in php che ho sviluppato molti anni fa per controllare il posizionamento del sito contemporaneamente su più motori di ricerca. Il suo funzionamento è molto molto semplice:

  1. inserisci l’URL del sito di cui vuoi controllare il posizionamento
  2. digita una Keyphrase per la ricerca
  3. avvia la ricerca

Dopo qualche istante viene visualizzata la posizione del sito su Google, Yahoo!, MSN, Altavista e Lycos. Position checker puoi provarlo qui.

Il programma è veramente molto semplice e non richiede alcuna tecnologia particolare, ma svolge egregiamente il suo scopo, per cui ho deciso di rilasciare il codice as-it-is (così com’è) sotto Creative Commons (basta citare autore e link della pagina del progetto) per permettere a chiunque sia interessato di migliorarne le funzionalità ed utilizzarlo come meglio crede anzichè lasciarlo ammuffire nel mio backup. Ho molto, molto altro materiale che intendo rilasciare pian piano, tempo permettendo.

Funzionamento del Rank Checker

Sono poche righe di codice PHP in tre soli files:

  1. form.php –  invia i 3 parametri per la ricerca: HTTP_POST_VARS[‘url’] il sito da controllare, HTTP_POST_VARS[‘key’], la chiave di ricerca e $HTTP_POST_VARS[‘num’] il numero massimo di risultati tra cui cercare
  2. search.php – che esegue la scansione delle SERP per determinare la posizione del sito tramite il parsing dei sorgenti delle SERP risucchiati col metodo file_get_contents()
  3. start.html – la pagina iniziale dei risultati

Non penso valga la pena di descrivere il primo file: è solo la form che invia i parametri ed include nel frame lo script di ricerca per visualizzarne i risultati. Ecco invece una breve spiegazione di search.php:

// CONFIG ****************
$nomi[1]="Google.it";
$nomi[2]="Yahoo.com";
$nomi[3]="Msn.it";
$nomi[4]="Altavista.com";
$nomi[5]="Lycos.it";
$motori[1]="http://www.google.it/search?as_q=<%key%>&hl=it&num=<%num%>…
$motori[2]="http://search.yahoo.com/search?_adv_prop=web&x=op&ei=…
$motori[3]="http://search.msn.it/results.aspx?q=<%key%>&first=0&count=<%num%>…
$motori[4]="http://www.altavista.com/web/results?itag=wrx&pg=aq&aqmode=s…
$motori[5]="http://cerca.lycos.it/cgi-bin/pursuit?etemp=error&query=<%key%>…
$splitter[1]='<div class=g’;
$splitter[2]='<a class=yschttl’;
$splitter[3]='<li><h3>’;
$splitter[4]="<br class=’lb’>";
$splitter[5]='<div style="margin-bottom:25px;">’;
$num=$HTTP_POST_VARS[‘num’];
//************************

Ho memorizzato in 3 arrays i tre dati principali che mi servono:

  • $nomi[] – il nome del motore
  • $motori[] – l’URL della sua SERP
  • $splitter[] – la stringa che userò per splittare il sorgente della SERP prima di eseguire il matching della chiave di ricerca negli elementi del relativo array (l’indice dell’array che mi restituirà un matching positivo corrisponderà alla posizione del sito).

Poi…

while (list($x,) = each($motori)) {

per ogni motore…

$search_url=str_replace(‘<%key%>’, urlencode($HTTP_POST_VARS[‘key’]), $motori[$x]);
$search_url=str_replace(‘<%num%>’, urlencode($num), $search_url);

…costruisco l’URL esatto della SERP con i parametri passati dal modulo

$lines = file_get_contents($search_url);
$sections = split($splitter[$x], $lines);
$lines = file_get_contents($search_url);

…poi ne memorizzo il sorgente utilizzando file_get_contents() e lo divido in un array utilizzando come parametro una qualsiasi stringa che si ripete nel sorgente ad ogni risultato. A questo punto mi ritrovo un array che contiene per ogni item il blocco di sorgente relativo ad ogni risultato. Il più è fatto: non rimane che  eseguire un matching sul dominio in ogni elemento dell’array. L’indice dell’array che restituirà un matching positivo costituirà la posizione del sito.

$pos[$nomi[$x]]=0;
foreach ($sections as $key => $value) {

if (strpos($value, $HTTP_POST_VARS[‘url’])) {
$pos[$nomi[$x]]=$key;
break;}

}
if ($pos[$nomi[$x]]==0) {$pos[$nomi[$x]]="-";}

Dopodichè, non rimane che mostrare i risultati:

echo $nomi[$x]."  :  ".$pos[$nomi[$x]];
}

Mantenimento e upgrade del software

Purtroppo non ho molto tempo per migliorarlo ed aumentarne le funzionalità, per questo lo metto a disposizione poichè può essere migliorato con poco sforzo. Ecco alcuni spunti:

  1. Aumentare il numero dei motori
    • E’ sufficiente inserire nome, URL della SERP e la stringa di split (guardando nel sorgente della SERP) negli array di configurazione
  2. Fidelizzazione
    • Dare l’opzione di ricevere i risultati per email
    • Schedulare l’esecuzione delle analisi (magari col supporto di un DB) per inviare via email agli utenti un report ogni TOT giorni
  3. Verifica
    • Puoi linkare il nome del motore di ricerca nei risultati alla SERP per dar modo agli utenti di controllare
  4. Attenzione a..
    • Se improvvisamente una ricerca non funziona, probabilmente è cambiato il codice sorgente della SERP per cui devi visualizzarne il sorgente con una ricerca manuale e cercare una nuova stringa di sorgente che possa fungere da separatore (splitter) per i blocchi di risultati
    • Nelle chiamate ai propri sistemi, Google vuole come parametro la API Key dello svilupparore. Aggiungi all’URL della SERP di Google il parametro &key=<la tua api key>

Scarica il programma in formato zip (4Kb)