Formation référencement

Script pour surveiller l’indexation Google.

Ecrit par lemoussel le Vendredi 28 mai 2010 à 8:31 - Catégorie Google,Référencement,Scripts PHP

Je ne vais rien vous apprendre en vous indiquant que le moteur de recherche Google est omniprésent. Il est donc important, lors du lancement d’un nouveau site, de surveiller l’indexation des pages du site dans ce moteur de recherche.

Afin de surveiller le référencement d’une ou de plusieurs pages d’un ou plusieurs sites je vous propose ce petit outil “CheckIndex” qui vous permettra de mieux maitriser l’indexation (ou non) de votre site dans le moteur de recherche Google. Il peut aussi vous permettre de connaître la qualité d’indexation Google d’un concurrent ou d’un partenaire éventuel !

Deux points à noter pour utiliser cet outil. Vous devez avoir PHP 5 et la librairie cURL (libcurl) installés sur votre serveur .

Dans cet article je vous propose de voir comment se servir de CheckIndex et de vous présenter les trois fonctions suivantes que cet outil de suivi d’indexation utilise :

  • get_string_between : Fonction permettant de récupérer le texte contenu entre deux balises.
  • google_search_api : Comme son nom l’indique cette fonction permet d’effectuer la recherche sur Google
  • get_web_page : Récupération d’une page HTML.

get_string_between

<?php
function get_string_between($string, $start, $end)
{
     $string = ' '.$string;
     $ini = strpos($string,$start);
     if ($ini == 0) return '';
     $ini += strlen($start);   
     $len = strpos($string,$end,$ini) - $ini;
     return substr($string,$ini,$len);
}
?>

google_search_api

Utilisation de AJAX API de Google.
L’utilisation de cet API est expliquée en détail sur cette page: Class Reference Google AJAX Search API.

<?php
function google_search_api($args)
{
	$referer = 'http://' . $_SERVER["HTTP_HOST"] . $_SERVER['REQUEST_URI'] . ''; 
	if ( !array_key_exists('v', $args) ) $args['v'] = '1.0';
	$dataGoogleSearch = get_web_page('http://ajax.googleapis.com/ajax/services/search/web?'.http_build_query($args, '', '&'));
	if (stristr($dataGoogleSearch['content'], 'GwebSearch') === false) return false;
	else return true;
}
?>

get_web_page

Fonction de récupération d’une page HTML avec :

  • Sélection d’un User Agent tiré au hasard donc différent pour chaque interrogation.
  • Détermination du Internet media type (mime), à l’origine appelé Type MIME ou juste MIME ou encore Content-type.
  • Détermination du jeu de caractères (charset).

<?php
function get_web_page($url)
{
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Avant Browser/1.2.789rel1 (http://www.avantbrowser.com)");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/5.0 (Windows; U; Windows XP) Gecko MultiZilla/1.6.1.0a");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/3.01Gold (Win95; I)");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/4.8 [en] (Windows NT 5.1; U)");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.4) Gecko Netscape/7.1 (ax)");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Opera/7.50 (Windows XP; U)");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Opera/7.51 (Windows NT 5.1; U) [en]");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; en) Opera 8.0");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:1.2b) Gecko/20021001 Phoenix/0.2");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser; Avant Browser; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.310.0 Safari/532.9");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729)");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 GTB5");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0 )");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Opera/9.25 (Windows NT 6.0; U; en)");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Opera/9.80 (Windows NT 5.2; U; en) Presto/2.2.15 Version/10.10");
	$UAlist[] = array('os' => 'Windows', 'useragent' => "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10");
	$UAlist[] = array('os' => 'Mac', 'useragent' => "Mozilla/2.02E (Win95; U)");
	$UAlist[] = array('os' => 'Mac', 'useragent' => "Mozilla/4.0 (compatible; MSIE 5.15; Mac_PowerPC)");
	$UAlist[] = array('os' => 'Mac', 'useragent' => "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/125.2 (KHTML, like Gecko) Safari/85.8");
	$UAlist[] = array('os' => 'Mac', 'useragent' => "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/125.2 (KHTML, like Gecko) Safari/125.8");
	$UAlist[] = array('os' => 'Mac', 'useragent' => "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.8 (KHTML, like Gecko) Chrome/4.0.302.2 Safari/532.8");
	$UAlist[] = array('os' => 'Mac', 'useragent' => "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.0.3) Gecko/2008092414 Firefox/3.0.3");
	$UAlist[] = array('os' => 'Mac', 'useragent' => "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5");
	$UAlist[] = array('os' => 'Mac', 'useragent' => "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.15");
	$UAlist[] = array('os' => 'Mac', 'useragent' => "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US) AppleWebKit/528.16 (KHTML, like Gecko, Safari/528.16) OmniWeb/v622.8.0.112941");
	$UAlist[] = array('os' => 'Mac', 'useragent' => "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-US) AppleWebKit/528.16 (KHTML, like Gecko, Safari/528.16) OmniWeb/v622.8.0");
	$UAlist[] = array('os' => 'Mac', 'useragent' => "Opera/9.0 (Macintosh; PPC Mac OS X; U; en)");
	$UAlist[] = array('os' => 'Mac', 'useragent' => "Opera/9.20 (Macintosh; Intel Mac OS X; U; en)");
	$UAlist[] = array('os' => 'Mac', 'useragent' => "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; fr-fr) AppleWebKit/312.5 (KHTML, like Gecko) Safari/312.3");
	$UAlist[] = array('os' => 'Mac', 'useragent' => "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418.8 (KHTML, like Gecko) Safari/419.3");
	$UAlist[] = array('os' => 'Mac', 'useragent' => "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-us) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10");
	$UAlist[] = array('os' => 'Linux', 'useragent' => "ELinks (0.4pre5; Linux 2.6.10-ac7 i686; 80x33)");
	$UAlist[] = array('os' => 'Linux', 'useragent' => "ELinks/0.9.3 (textmode; Linux 2.6.9-kanotix-8 i686; 127x41)");
	$UAlist[] = array('os' => 'Linux', 'useragent' => "Links (2.1pre15; Linux 2.4.26 i686; 158x61)" );
	$UAlist[] = array('os' => 'Linux', 'useragent' => "Links/0.9.1 (Linux 2.4.24; i386;)");
	$UAlist[] = array('os' => 'Linux', 'useragent' => "Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/0.8.12");
	$UAlist[] = array('os' => 'Linux', 'useragent' => "w3m/0.5.1");
	$UAlist[] = array('os' => 'Linux', 'useragent' => "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.10.1");
	$UAlist[] = array('os' => 'Linux', 'useragent' => "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.4 (KHTML, like Gecko) Chrome/4.0.237.0 Safari/532.4 Debian");
	$UAlist[] = array('os' => 'Linux', 'useragent' => "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.8 (KHTML, like Gecko) Chrome/4.0.277.0 Safari/532.8" );
	$UAlist[] = array('os' => 'Linux', 'useragent' => "Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.309.0 Safari/532.9");
	$UAlist[] = array('os' => 'Linux', 'useragent' => "Dillo/2.0");
	$UAlist[] = array('os' => 'Unix', 'useragent' => "Mozilla/5.0 (X11; U; SunOS sun4m; en-US; rv:1.4b) Gecko/20030517 Mozilla Firebird/0.6");
	$UAlist[] = array('os' => 'Unix', 'useragent' => "Mozilla/5.0 (X11; U; SunOS i86pc; en-US; rv:1.9.1b3) Gecko/20090429 Firefox/3.1b3");
	$UAlist[] = array('os' => 'Unix', 'useragent' => "Mozilla/5.0 (X11; U; OpenBSD i386; en-US; rv:1.9.1) Gecko/20090702 Firefox/3.5");
	$UAlist[] = array('os' => 'Unix', 'useragent' => "Mozilla/5.0 (compatible; Konqueror/3.5; NetBSD 4.0_RC3; X11) KHTML/3.5.7 (like Gecko)");
	$UAlist[] = array('os' => 'Unix', 'useragent' => "Mozilla/5.0 (compatible; Konqueror/3.5; SunOS) KHTML/3.5.1 (like Gecko)");
	$UAlist[] = array('os' => 'Unix', 'useragent' => "Mozilla/5.0 (compatible; Konqueror/4.1; DragonFly) KHTML/4.1.4 (like Gecko)");
	$UAlist[] = array('os' => 'Unix', 'useragent' => "Mozilla/5.0 (compatible; Konqueror/4.1; OpenBSD) KHTML/4.1.4 (like Gecko)");
	$UAlist[] = array('os' => 'Unix', 'useragent' => "Mozilla/5.0 (X11; U; FreeBSD; i386; en-US; rv:1.7) Gecko");
	$UAlist[] = array('os' => 'Unix', 'useragent' => "Mozilla/4.77 [en] (X11; I; IRIX;64 6.5 IP30)");
	$UAlist[] = array('os' => 'Unix', 'useragent' => "Mozilla/4.8 [en] (X11; U; SunOS; 5.7 sun4u)");
 
	$options = array(
		CURLOPT_RETURNTRANSFER => true,    
		CURLOPT_HEADER         => false,   
		CURLOPT_FOLLOWLOCATION => true,     
		CURLOPT_ENCODING       => '',      
		CURLOPT_AUTOREFERER    => true,    
		CURLOPT_CONNECTTIMEOUT => 10,      
		CURLOPT_TIMEOUT        => 10,       
		CURLOPT_MAXREDIRS      => 10,       
		CURLOPT_FAILONERROR    => true,
		CURLOPT_USERAGENT      => $UAlist[array_rand($UAlist)]['useragent'],
        CURLOPT_COOKIEJAR      => 'CookieJar',
        CURLOPT_COOKIEFILE     => 'CookieTxt',		
	);
 
	$ch      = curl_init( $url );
	curl_setopt_array( $ch, $options );
	$content = curl_exec( $ch );
	$err     = curl_errno( $ch );
	$errmsg  = curl_error( $ch );
	$header  = curl_getinfo( $ch );
	curl_close( $ch );
 
 
  preg_match( '@([\w/+]+)(;\s+charset=(\S+))?@i', $header['content_type'], $matches_header );
  preg_match( '@<meta\s+http-equiv="Content-Type"\s+content="([\w/]+)(;\s+charset=([^\s"]+))?@i', $content, $matches_meta );
  if ( isset( $matches_header[1] ) ) 
     $header['mime'] = $matches_header[1];
  else
    if ( isset( $matches_meta[1] ) ) 
		$header['mime'] = $matches_meta[1];
 
  if ( isset( $matches_header[3] ) ) 
     $header['charset'] = $matches_header[3];
  else
     if ( isset( $matches_meta[3] ) ) 
		$header['charset'] = $matches_meta[3];
 
	$header['errno']   = $err;
	$header['errmsg']  = $errmsg;
	$header['content'] = $content;
	$header['charset'] = isset($header['charset']) ? $header['charset'] : 'utf-8';
 
	return $header;
}
?>

Voilà nous avons terminés avec les fonctions. Voici donc le code source du “coeur” de CheckIndex.
Son utilisation en est très simple. Il suffit de passer en paramètre un fichier sitemap au format XML contenant les URL à vérifier.

http://www.monsite.com/CheckIndex.php?sitemap=http://www.monsite.com/sitemap.xml

Pour rappel le fichier sitemap.xml doit être sous la forme :

<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="http://www.insolite-du-geek.fr/wp-content/plugins/google-sitemap-generator/sitemap.xsl"?>
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
	<url>
		<loc>URL1/</loc>
	</url>
	<url>
		<loc>URL2/</loc>
	</url>
</urlset>

Si vous voulez vérifier à intervalle régulier, il vous suffit alors d’appeler “CheckIndex” via une tache « cron » et de vous adresser un email contenant les Urls non indexées.

CheckIndex

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CheckIndex</title>
<style type="text/css">
	<!--
	body { font-family: verdana; font-size: 12px; background: #000; color: #fff; }
	a { color: #3399FF; }
	-->
</style>
</head>
<body>
<?php
require 'get_string_between.php';
require 'google_search_api.php';
require 'get_web_page.php';
 
if(function_exists('set_time_limit')) set_time_limit(0);
 
if(isset($_GET['sitemap']))
{	
	$sitemapURL = urldecode($_GET['sitemap']);
	$sitemapdata = get_web_page($sitemapURL);
	$nbURL = substr_count($sitemapdata['content'], '<loc>');
 
	ob_start();
 
	for($idxURL = 1; $idxURL <= $nbURL; $idxURL++)
	{
		 $url = get_string_between($sitemapdata['content'], '<loc>', '</loc>');
		 $sitemapdata['content'] = str_replace('<loc>' . $url . '</loc>', '', $sitemapdata['content']);
 		 $flagIndexed = google_search_api(array("q" => "info:$url"));
		 if ($flagIndexed === true) echo '<span style="color:green;">' . $idxURL . ' ' . $url . '</span><br />';
		 else echo  '<span style="color:orange;">' . $idxURL . ' ' . $url . '</span><br />';
 
		 ob_flush();
		 flush();
 
		 sleep(rand(1, 3));  
	}
 
	ob_end_flush();
}
 
?>
</body>
</html>
Articles liés :

Commentaires (14)

Catégorie: Google,Référencement,Scripts PHP


14 Commentaires

Commentaire par Dan | Blog référencement

Vendredi, 28 mai , 2010 à 10:16

Merci pour cet article qui vient en complément d’un billet récent que j’avais produit sur l’identification des robots qui visitent un site

Du coup je rajoute un lien dans mon article vers le tien :-)

Commentaire par Refschool

Vendredi, 28 mai , 2010 à 10:26

Excellente idée !

Commentaire par Guy Labbé

Vendredi, 28 mai , 2010 à 12:35

Super article de la bombe comme toujours merci LeMoussel j’ai hâte de tester tout ça!! :)

Commentaire par Daddy |Audit de referencement

Vendredi, 28 mai , 2010 à 15:00

Merci pour le script, je vais de ce pas le tester ;)

Commentaire par Nic'O

Vendredi, 28 mai , 2010 à 15:21

Merci, si on couple ça avec un sortie CSV, quelques stats, on a un nouveau tableau de bord =)

Commentaire par Seebz

Vendredi, 28 mai , 2010 à 15:25

Je crains fort que cet outil ne remplira pas sa fonction, à savoir « surveiller l’indexation ».

Les résultats retournés par l’AJAX API ne sont pas les mêmes que lors d’une recherche « normale » et les nouvelles pages indexés peuvent apparaitre dans les résultats « ajax api » plusieurs jours (semaines ?) après l’avoir été sur le google traditionnel.

Mon topic sur WRI
Le rapport de bug sur google code (ouvert en mai 2008)

Commentaire par Followix

Vendredi, 28 mai , 2010 à 15:37

géant, merci ;)

Commentaire par lemoussel

Vendredi, 28 mai , 2010 à 16:12

@Seebz

A ce Google il n’a pas finit de nous faire des miséres …

Ce qui est surprenant c’est que j’ai testé ce script sur au moins 400 URL et je n’ai pas rencontré ce problème. Bizarre , Bizarre, vous avez dit bizarre …

Dans le doute, rien n’empêche de mettre son petit code de scapping des pages de résultat de Google en lieu et place de l’API.

Commentaire par la faucheuse

Vendredi, 28 mai , 2010 à 17:19

Sympa en effet, un petit tool en plus… Avec une bonne gestion des CSV ( http://code.google.com/p/parsecsv-for-php/ ) on à en effet un bon tableau de bord des indexations.

Merci Lemoussel.

Commentaire par dudd

Samedi, 29 mai , 2010 à 14:47

superbe travail ! de la qualité et du nouveau sur seoblackout comme toujours chapeau l’artiste ;-)

Commentaire par Alex

Samedi, 17 juillet , 2010 à 23:55

Très bon script, toujours utile…

Commentaire par marcelpierre

Samedi, 31 juillet , 2010 à 18:50

comme toujours de la bombe bébé ou je dirais meme plus « chapeau »(noir cela va de soi) bas l’artiste,bravo l’as des as!

Commentaire par Caroline

Vendredi, 27 août , 2010 à 16:18

Merci beaucoup pour cet article très intéressant !

Commentaire par Forum MMA et Free Fight

Mercredi, 8 juin , 2011 à 9:52

Salut, y aurait il moyen de coupler ce script avec un système de rotation de proxy, pour le rendre encore plus efficace?

Les commentaires sont fermés pour cet article.



SEO BLACKOUT

Site web dédié aux techniques de référencement et de positionnement de sites web sur Google.

Certaines parties du site sont en accès restreint, ces espaces sont réservés à la SEO Black Hat Team.


Don't Be Evil !