7

Surveiller vos Google sitelinks dans les pages de résultats

Avec l’arrivée des megasitelinks dans les pages de résultats de Google et malgré « leur super algorithme », certaines pages non souhaitées peuvent remonter dans les SERP. Vous pouvez en rétrograder via Google Webmaster Tools afin que les liens vers ces pages n’apparaissent plus (et pour faire remonter d’autres résultats plus pertinents dans la page de résultats) mais comme ce type de demande peut prendre de quelques jours à plusieurs semaines, un petit script pour surveiller tout ça m’a paru nécessaire (d’autant plus qu’après une rétrogradation, un nouveau sitelink inadapté peut faire son apparition). Autre utilité : vous pourrez aussi être alerté quand le nombre de sitelinks pour votre homepage passe de 10 à 12 par exemple !

Au delà des différentes pages de vos sites qui sont liées à des sitelinks, ce script peut aussi vous servir pour faire de la veille concurrentielle afin de savoir les sitelinks que vos concurrents ont préféré rétrograder et pourquoi pas renforcer votre travail sur certains termes…

Voilà donc le script qui vous alertera automatiquement dès l’apparition ou la rétrogradation de sitelinks sur une requête donnée. Je ne suis pas développeur donc désolé si le codage n’est pas parfait… N’oubliez pas de changer la valeur $monemail. Si vous avez des améliorations à apporter aux preg_match, n’hésitez pas à me les soumettre!

<?php
$monemail='votremail@domain.com';
$delimiteur=';;;';
$headers ='From: "Veilleur de Megasitelinks Google"<'.$monemail.'>'."\n";
$headers .='Content-Type: text/plain; charset="utf-8"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';
$nouveau='Nouveau sitelink dans les SERP: "';
$ancien='Sitelink sorti des SERP: "';

//si un mot-clé est présent dans l'URL, on scrape
if (isset($_GET["requete"]) && $_GET["requete"]!=""){
$requete=stripslashes(urlencode($_GET["requete"]));
$website_filename=str_replace(array('+','\\'), array('_',''), $requete);
if (file_exists($website_filename.'.txt')) $filecontent=file_get_contents($website_filename.'.txt');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'http://www.google.com/search?q='.$requete.'&hl=fr&ie=utf-8&oe=utf-8&aq=t');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result=curl_exec ($ch);
curl_close ($ch);

//Si des nouveaux sitelinks sont trouvés, on les récupère
if(preg_match_all("/<h3 class=r\s+style=\"?display:inline\"?><a\s+href=\"?(.*?)\"? (.*?)>(.*?)<\/a><\/h3>(.*?)<div\s+class=\"?st?\"?>(.*?)<\/div>/i",$result, $sitelinks)) {
for ($i = 0; $i < count($sitelinks[1]); $i++) {
if (!eregi($sitelinks[1][$i].$delimiteur,$filecontent)){
//s'il n'existait pas, on l'ajoute
$filecontentnew.= $sitelinks[3][$i].$delimiteur.$sitelinks[1][$i].$delimiteur.strip_tags($sitelinks[5][$i])."\n";
$newsitelinks.=$nouveau.$sitelinks[3][$i].'" (url: '.$sitelinks[1][$i].')'."\n";
}
}
}
//si pas de sitelinks, on alerte
else{
mail($monemail,'Script Sitelinks','Erreur, aucuns sitelinks ne sont renvoyés pour une recherche sur le mot-clé '.$requete.'. Il n\'y en a peut être pas à moins que Google ait changé le code HTML des sitelinks dans les SERP, il va falloir revoir les regexp du script...',$headers);
}

//Si des sitelinks ont disparu, on les récupère
if (file_exists($website_filename.'.txt')) {
$filecontentold=file_get_contents($website_filename.'.txt');
if(preg_match_all("/(.*?)".$delimiteur."(.*?)".$delimiteur."/",$filecontentold, $sitelinks)) {
for ($i = 0; $i < count($sitelinks[1]); $i++) {
if (!eregi('<h3 class=r style="?display:inline"?><a href="'.$sitelinks[2][$i].'"',$result)) {
$oldsitelinks.=$ancien.$sitelinks[1][$i].'" (url: '.$sitelinks[2][$i].')'."\n";
$lien=str_replace('/','\/',$sitelinks[2][$i]);
$filecontentold=preg_replace("/(.*?)".$delimiteur.$lien.$delimiteur."(.*?)\r{1}/i","",$filecontentold);
}
}
}
}

//si il y a eu des changements, on envoie un mail
if ($oldsitelinks!="" || $newsitelinks!="") {
if (file_exists($website_filename.'.txt')) mail($monemail,'Un ou des sitelinks pour la requête ' .$requete.' ont changé',$oldsitelinks.$newsitelinks,$headers);
else mail($monemail,'Sitelinks pour la requête ' .$requete,str_replace('Nouveau ','',$oldsitelinks.$newsitelinks),$headers);
}

//on écrit le fichier correspondant au mot-clé pour le prochain passage
file_put_contents($website_filename.'.txt',  $filecontentold.$filecontentnew);
}

//message si aucun mot clé trouvé
else {
print 'Aucun mot n\'a été renseigné<br /><br />L\'URL doit être sous cette forme:http://'.$_SERVER["SERVER_NAME"].$_SERVER["PHP_SELF"].'?requete=nomdemonmonsite';
mail ($monemail,'Erreur de script sitelinks','Aucun mot n\'a été renseigné. L\'URL doit être sous cette forme:http://'.$_SERVER["SERVER_NAME"].$_SERVER["PHP_SELF"].'?requete=nomdemonmonsite',$headers);
}

?>

Bien évidemment, on placera ce script dans un cron job (quotidien par exemple) et on l’exécutera avec lynx (ou php directement):

#lynx -dump "http://www.domain.com/seo-scripts/megasitelinks.php?requete=ikea"

Précision: Vous pouvez avoir besoin de faire un petit chmod 777 sur le répertoire dans lequel se trouve le script (pour écrire les fichiers textes qui conserveront les requêtes contenant les sitelinks à surveiller).

N’hésitez pas à retweeter ce script si vous l’adoptez 😉

7 commentaires

  1. Salut !
    Merci pour le script, par contre, impossible d’avoir la liste des sitelinks, même en changeant $keyword (qui n’existe pas en fait ?) en $requete…

    Une idée ?

  2. Merci pour le $keyword, c’est corrigé! ooops, j’ai publié trop vite on dirait… J’avais pourtant fait mes tests avec une copie des SERP en local, j’avais pas de soucis. J’essaye de corriger le problème ASAP.

    Edit: Je viens de trouver l’erreur: c’était dans l’expression régulière. ça devrait fonctionner maintenant!

  3. Ping : Surveiller vos sitelinks dans les pages de résultats | Meta conseil | Scoop.it
  4. Ouah, vraiment pas mal ce script. Je me posais justement la question du temps que pouvait prendre ce changement, vu qu’un de mes clients attend depuis déjà un mois les modifications de ces liens de sites…

  5. Pour quelqu’un qui ne se définit pas comme un « codeur », ton script m’a l’air bien foutu. Ça va pas forcément améliorer notre réf, mais c’est vachement bien pour surveiller quelles pages Google met en avant. Merci 🙂

  6. Je suis on ne peut plus d’accord pour dire qu’il faut surveiller les site links de Google, et je le pense surtout depuis que j’ai vu une page de 404 parmi les liens sitelinks: ca la fout vraiment mal (bon a priori Google a ajusté lui même cette proposition, mais quand même …)

  7. Je suis tout à fait d’accord que Google affiche des pages non souhaitables. Le script est bienvenue ..merci

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *