Seohackers netlinking

Google Quality Rating Guidelines Version 5 – 31 mars 2014

Ecrit par admin le Jeudi 10 juillet 2014 à 17:39 - Catégorie Google

Voici la dernière version du guide Google « Quality Rating Guidelines » fourni par Google à ses Quality Raters.

Cette version date du 31 mars 2014 et peut-être téléchargé ici :

https://anonfiles.com/file/ea756b1e885fcfe45c385719b018279b

Bonne lecture !

Commentaires fermés

Catégorie: Google

Negative SEO : Duplicate Content MattCutts.com

Ecrit par admin le Samedi 1 février 2014 à 18:17 - Catégorie Google

Edition : Test arrêté, la page devrait revenir définitivement

Bonjour à tous, cela fait bien longtemps que je n’ai pas publié ici pour diverses raisons. Ce qui me motive aujourd’hui à publier, c’est la non-action de Google vis à vis d’un problème récurrent qui pourrait être corrigé facilement dans la plupart des cas.

Les gens de chez Google ont affirmé haut et fort pendant des années, qu’un concurrent ne pouvait rien faire pour déclasser un site.

Puis ils ont légèrement modifié leur discours pour dire : « qu’il n’y avait presque rien qu’un webmaster puisse faire pour déclasser un site concurrent ».

Ce discours a été modifié une nouvelle fois par Google le 14 mars 2012 :

Nous nous efforçons d’empêcher les autres webmasters de nuire à votre classement ou de faire supprimer votre site de notre index. Si vous avez des inquiétudes à propos d’un site qui référence vos pages Web, nous vous suggérons de contacter l’administrateur du site concerné. Google compile et organise les informations publiées sur Internet, mais ne gère pas le contenu des pages Web.

Voici la page en question : https://support.google.com/webmasters/answer/34449?hl=fr

Cette dernière mise à jour a été faite suite au déclassement d’un site recevant des liens en masse. Cela est bien un aveu de faiblesse de la part de Google concernant des actions de negative SEO utilisant les liens pour déclasser un site.

Mais il n’y pas que les liens qui peuvent aider à faire tomber un site dans les SERPS, il y a d’autres leviers !

Negative SEO : Duplicate Content MattCutts.com

Commentaires (15)

Catégorie: Google

Google Quality Raters Guidelines juin 2012 (V. 3.27)

Ecrit par admin le Mercredi 5 septembre 2012 à 17:18 - Catégorie Google

Voici la dernière version (3.27) en ligne du fameux guide Google pour les quality raters, cette version date du 22 juin 2012.

Cette version ne diffère pas beaucoup de la version 2011.

Pour info, j’ai trouvé ce document en utilisant le footprint suivant "Proprietary and Confidential – Copyright 2012" google. Je me suis basé sur le pdf de l’année dernière pour trouver ce footprint :)

Voici le sommaire :

Google Quality Raters Guidelines juin 2012 (V. 3.27)

Commentaires (9)

Catégorie: Google

Générateur de (très) longue traîne

Ecrit par 512banque le Vendredi 28 mai 2010 à 14:40 - Catégorie Génération de contenu,Google,Scraping,Scripts PHP

Tenter de se positionner sur des expressions fortement concurrentielles n’est pas forcément un choix judicieux. En effet, certains mots-clés demandent énormément d’efforts et génèrent finalement assez peu de trafic. Le retour sur investissement n’est donc pas au rendez-vous.

Parfois, il vaut mieux tenter de cibler un ensemble de petites requêtes faciles à atteindre, ces requêtes mises bout à bout représentant un trafic non négligeable et dépassant bien souvent les requêtes « star ».

Choisir des expressions de « longue traîne » consiste donc à faire varier l’expression clé principale en utilisant des synonymes et en y ajoutant d’autres mots, tels que la localisation ou d’autres spécificités. Au lieu de chercher à se positionner sur « plombier », on va préférer « plombier dijon » ou « plombier bourgogne » et ainsi de suite pour toutes les grosses villes de france et tous les départements.

Pour trouver des expressions de longue traîne, on peut utiliser notre imagination, mais également les suggestions de google (google suggest) ou la fameuse « roue magique »… Ou bien les deux en même temps !

J’ai ainsi couplé le script de la wonder wheel à celui de google suggest, les deux se trouvant sur Seoblackout ;)

J’ai donc cherché le mot clé « referencement », et en dédoublonné ça m’a donné 650 expressions. Evidemment, il faut faire le tri car on trouvera des expressions aussi peu ciblées que « chiffre d affaires restauration rapide » ou « taux de transformation chimie » mais rien ne vaut une review manuelle pour un travail propre.

Au niveau du script, je sais qu’il existe de nombreuses pistes d’amélioration, mais franchement entre nous… Ca marche et ça me va bien comme ça :)

Voici la bête :

<?php header('Content-Type: text/html; charset=UTF-8'); ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <title>Long tail</title>
  <meta http-equiv="content-style-type" content="text/css" />
</head>
<body>
 
<?php
 
// Auteurs du script : Beunwa http://divioseo.fr/ & Tiger http://www.seoblackout.com
// Modifications par 512banque http://www.deliciouscadaver.com
// Url article du script pour bugs, commentaires... : http://www.seoblackout.com/2010/05/28/generateur-de-tres-longue-traine/
//Site Web : http://www.seoblackout.com
 
 
$etape = strip_tags($_GET['etape']);
 
switch($etape) {
 
case '1': ?>
<form action="?etape=2" method="post">
	<table><tr><td>
		Keyword : <textarea name="kw" rows="10">
<?php 
 
if ((isset($_POST['kw'])) && $_POST['kw']!='')
{
	$q=strip_tags($_POST['kw']);
	foreach (google_wheel($q) as $kws) { echo $kws."\n"; }
	flush();
}
else
{
	echo 'Veuillez saisir un mot-clé !';
}
?></textarea>
	</td><td>
		et <textarea name="mix2" rows="10"><?php echo strip_tags($_POST['mix2'])?></textarea>
	</td><td>
		<br />
		Langue : 
		<select name="lang">
			<option value="fr">FR</option>
			<option value="en">EN</option>
		</select>
		<br />
		Profondeur : 
		<select name="depth">
			<option value="1">1</option>
			<option value="2">2</option>
			<option value="3">3</option>
			<option value="4">4</option>
			<option value="5">5</option>
		</select>  
		<br />
		Alphabet :<input type="checkbox" name="alph" />
	</td></tr></table>
	<br />
	<input type="submit" value="Go" />
</form>
 
<?php
break;
case '2': ?>
<form action="?etape=3" method="post">
 
<h3>Dédoublonner et faire le ménage</h3>
<form  action="?etape=3" method="post">
<textarea rows="20" cols="60" name="kw">
<?php if(isset($_POST['kw'])){
	$lang = strip_tags($_POST["lang"]);
	if($lang == '') $lang = "fr"; 
	$depth = strip_tags($_POST["depth"]);
	if($depth == '') $depth = "1";
 
	$kwsd = array();
	$kwsd=explode("\n",trim(strip_tags($_POST["kw"])));
	foreach ($kwsd as $lst) {
		if($lst != "\n"){
			//mots cles simple
			ggSuggest($lst, $lang, $depth);
 
			//mots cles avec compléments
			$kws2 = array();
			$kws2=explode("\n",strip_tags($_POST["mix2"]));
			foreach ($kws2 as $mix2) {
				ggSuggest($lst.$mix2, $lang, $depth);
			}
 
			//alphabet
			if(strip_tags($_POST["alph"]) == "on"){
				$alpha = "a";
				while($alpha != "z"){
					ggSuggest($lst.' '.$alpha, $lang, $depth);
					$alpha = ++$alpha;
				}
			}
		}
	}
 
} ?>
</textarea>
 
	<br />
	<input type="submit" value="Go" />
</form>
 
<?php
break;
case '3':
$keywords = explode("\r\n", $_POST['kw']);
 
		foreach($keywords as $k=>$v) {
		if(preg_match('#^(.*) [\w]$#',$v)) {
		unset($keywords[$k]);
		} }
 
		$keywords = array_unique($keywords);
		?>
		<h3><?php echo count($keywords); ?> expressions uniques générées</h3>
		<p>Pensez à faire le tri ;)</p>
		<?php
 
		foreach($keywords as $k=>$v) {
		echo $v.'<br />';
		}
 
break;
default: ?>
<form action="?etape=1" method="POST">
  Saisir un mot-clé : <input id="kw" name="kw" type="text" size="" /><br />
  <button id="submit" name="submit" type="submit" value="submit">submit</button>
</form>
 
<?php			 
}
 
 
 
function google_wheel($q) {
$res_final = array(); 
$q=urlencode($q);
$search_url="http://www.google.com/search?q=$q&hl=fr&tbo=1&tbs=ww:1";
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.63 (Windows NT 5.1; U; fr) Presto/2.1.1');
	curl_setopt($ch, CURLOPT_URL,$search_url);
	curl_setopt($ch, CURLOPT_FAILONERROR, true);
	curl_setopt($ch, CURLOPT_REFERER, $search_url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
	$res= curl_exec($ch);
	curl_close($ch);
	if ($res) {
		if (preg_match('/"r":\[(.*?)\]}\)/',$res,$matches))
		{		
			$response=str_replace('"','',$matches[1]);
 
			$response2=explode(',',$response);
			$response3='';
			foreach ($response2 as $key => $value) 
			{
				$value2=urlencode($value);
				$search_url2="http://www.google.com/search?q=$value2&hl=fr&tbo=1&tbs=ww:1";
 
				$ch2 = curl_init();
				curl_setopt($ch2, CURLOPT_USERAGENT, 'Opera/9.63 (Windows NT 5.1; U; fr) Presto/2.1.1');
				curl_setopt($ch2, CURLOPT_URL,$search_url2);
				curl_setopt($ch2, CURLOPT_FAILONERROR, true);
				curl_setopt($ch2, CURLOPT_REFERER, $search_url2);
				curl_setopt($ch2, CURLOPT_RETURNTRANSFER,true);
				$res2= curl_exec($ch2);
				curl_close($ch2);
				if ($res2)                                         
				{	
					if (preg_match('/"r":\[(.*?)\]}\)/',$res2,$matches2))
					{		
						$response.=','.str_replace('"','',$matches2[1]);
					}
				}
			}
			$response3=array_unique(explode(',',$response));
			asort($response3);
			foreach ($response3 as $key => $value) 
			{
			$res_final[]=str_replace(array('r2:','[',']'),'',$value);
			flush();
			}
		}
	}
 	return array_unique($res_final);
}
 
function ggSuggest($kw, $lang, $depth = 1, $inc = 1){	
	global $tabKw;
 
	$tabKw[] = $kw;	
    $url = 'http://www.google.com/complete/search?hl='.$lang.'&js=true&qu='. urlencode($kw);
	if (function_exists('curl_init')) {
	$header = array(
        "Accept: text/xml,application/xml,application/xhtml+xml,
		text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
        "Accept-Language: fr-fr,fr;q=0.7,en-us;q=0.5,en;q=0.3",
        "Accept-Charset: utf-8;q=0.7,*;q=0.7",
        "Keep-Alive: 300");
		$ch = curl_init();
	    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
	    curl_setopt($ch, CURLOPT_HEADER, false);
	    curl_setopt($ch, CURLOPT_VERBOSE, true);	
	    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
	    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
	    curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.com/');
	    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)' );
	    curl_setopt($ch, CURLOPT_HTTPHEADER, $header );
	 	curl_setopt($ch, CURLOPT_URL, $url);
		$result=curl_exec ($ch);
		curl_close ($ch);
	} else {
		$result= file_get_contents($url);
	}
	preg_match_all('/\["(.*?)",/si', $result, $kwgoogle, PREG_SET_ORDER);//mot
	preg_match_all('/\,"(.*?)résultats",/si', $result, $nbresult, PREG_SET_ORDER);//nb resultats
 
	if ($kwgoogle=='' || $inc > $depth) {
		return $tabKw;
	}else {
		$ii = 0;
		foreach($kwgoogle as $v){	
			$tk = strip_tags($v[1]);
			if(!in_array($tk, $tabKw)){ 
				$tk = str_replace ('\r',"", $tk);
				$kwr = $nbresult[$ii][1];
				if($kwr == "") $kwr = 0;
				//echo $kwr.' ; '.$tk.'<br />'; je ne veux pas du nombre de résultats
				echo $tk."\n";
				$ii++;                                  
				flush();
				ggSuggest($tk, $lang, $depth, $inc+1); 
			}
		}
	}
	return $tabKw;
}
?>

Pour utiliser cette liste, il vous suffit créer des pages uniques suffisament différentes les unes des autres, une pour chaque mot-clé. Le meilleur moyen de faire ça, c’est d’utiliser un script de spin de votre fabrication ou bien d’acheter un script de content spinning.
Et puisque Tiger m’offre un deuxième lien, j’en profite pour vous présenter le futur site de mon agence de référencement à Chambéry.
Bonne longue traîne à tous ;)

Commentaires (27)

Catégorie: Génération de contenu,Google,Scraping,Scripts PHP

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>

Commentaires (14)

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

Google Suggest – Script php (Nouvelle version)

Ecrit par admin le Mercredi 27 janvier 2010 à 14:25 - Catégorie Google,Scripts PHP

Il y a quelques jours, nous vous présentions un outil nommé Google Suggest php script permettant d’extraire les suggestions proposées par Google à partir d’un mot-clé, les résultats ainsi obtenus étaient à nouveau extraits et ainsi de suite selon le niveau de profondeur défini par l’utilisateur du script (jusqu’à 5 niveaux).

Et bien, aujourd’hui nous vous proposons en plus les options suivantes :

  • Gestion de listes de mots
  • Intégration de mots mixés
  • Test de mots + lettres de l’alphabet
  • Récupération du nombre de résultats

Voici le script php google suggest nouvelle version :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<?php
//Script Google Suggest by http://www.seoblackout.com
// Auteurs du script : Beunwa http://divioseo.fr/ & Tiger http://www.seoblackout.com
// Contributeurs émérites : Seg http://www.wagablog.com/ & Meuhsli http://www.thugeek.com/
// Url article du script pour bugs, commentaires... : http://www.seoblackout.com/2010/01/27/google-suggest/
?>
<form  action="" method="post">
	<table><tr><td>
		Keyword : <textarea name="kw" rows="10"><?=strip_tags($_POST['kw'])?></textarea>
	</td><td>
		et <textarea name="mix2" rows="10"><?=strip_tags($_POST['mix2'])?></textarea>
	</td><td>
		<br />
		Langue : 
		<select name="lang">
			<option value="fr">FR</option>
			<option value="en">EN</option>
		</select>
		<br />
		Profondeur : 
		<select name="depth">
			<option value="1">1</option>
			<option value="2">2</option>
			<option value="3">3</option>
			<option value="4">4</option>
			<option value="5">5</option>
		</select>  
		<br />
		Alphabet :<input type="checkbox" name="alph" />
	</td></tr></table>
	<br />
	<input type="submit" value="Go" />
</form>
<?php
if(isset($_POST['kw'])){
	$lang = strip_tags($_POST["lang"]);
	if($lang == '') $lang = "fr"; 
	$depth = strip_tags($_POST["depth"]);
	if($depth == '') $depth = "1";
 
	$kwsd = array();
	$kwsd=explode("\n",trim(strip_tags($_POST["kw"])));
	foreach ($kwsd as $lst) {
		if($lst != "\n"){
			//mots cles simple
			ggSuggest($lst, $lang, $depth);
 
			//mots cles avec compléments
			$kws2 = array();
			$kws2=explode("\n",strip_tags($_POST["mix2"]));
			foreach ($kws2 as $mix2) {
				ggSuggest($lst.$mix2, $lang, $depth);
			}
 
			//alphabet
			if(strip_tags($_POST["alph"]) == "on"){
				$alpha = "a";
				while($alpha != "z"){
					ggSuggest($lst.' '.$alpha, $lang, $depth);
					$alpha = ++$alpha;
				}
			}
		}
	}
 
}
 
function ggSuggest($kw, $lang, $depth = 1, $inc = 1){	
	global $tabKw;
 
	$tabKw[] = $kw;	
    $url = 'http://www.google.com/complete/search?hl='.$lang.'&js=true&qu='. urlencode($kw);
	if (function_exists('curl_init')) {
	$header = array(
        "Accept: text/xml,application/xml,application/xhtml+xml,
		text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
        "Accept-Language: fr-fr,fr;q=0.7,en-us;q=0.5,en;q=0.3",
        "Accept-Charset: utf-8;q=0.7,*;q=0.7",
        "Keep-Alive: 300");
		$ch = curl_init();
	    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
	    curl_setopt($ch, CURLOPT_HEADER, false);
	    curl_setopt($ch, CURLOPT_VERBOSE, true);	
	    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
	    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
	    curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.com/');
	    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)' );
	    curl_setopt($ch, CURLOPT_HTTPHEADER, $header );
	 	curl_setopt($ch, CURLOPT_URL, $url);
		$result=curl_exec ($ch);
		curl_close ($ch);
	} else {
		$result= file_get_contents($url);
	}
	preg_match_all('/\["(.*?)",/si', $result, $kwgoogle, PREG_SET_ORDER);//mot
	preg_match_all('/\,"(.*?)résultats",/si', $result, $nbresult, PREG_SET_ORDER);//nb resultats
 
	if ($kwgoogle=='' || $inc > $depth) {
		return $tabKw;
	}else {
		$ii = 0;
		foreach($kwgoogle as $v){	
			$tk = utf8_decode(strip_tags($v[1]));
			if(!in_array($tk, $tabKw)){ 
				$tk = str_replace ('\r',"", $tk);
				$kwr = utf8_decode($nbresult[$ii][1]);
				if($kwr == "") $kwr = 0;
				echo $kwr.' ; '.$tk.'<br />';
				$ii++;
				flush();
				ggSuggest($tk, $lang, $depth, $inc+1); 
			}
		}
	}
	return $tabKw;
}
?>

Un grand merci à  Seg (Wagablog – Google Analytics) et Meuhsli (Blog Geek) de l’agence référencement Résoneo, qui nous proposent ici une contribution majeure. 

Merci encore une fois à Beunwa (Référencement Dijon), pour avoir contribué au développement du script Google Suggest. 

Merci à eux 3 pour avoir accepté de partager publiquement et gratuitement avec vous ces améliorations !

Le web est un lieu de partage, keep this spirit !

A lire à propos de Google Suggest chez copains :

Commentaires (37)

Catégorie: Google,Scripts PHP

Google ne respecte pas la balise meta robots noarchive

Ecrit par admin le Jeudi 1 octobre 2009 à 15:17 - Catégorie Cloacking,Google

Vous savez certainement que l’on peut interdire l’affichage du cache d’une page dans Google, cela est bien utile parfois.
Pour interdire l’affichage du cache, Google et les autres moteurs tels que Yahoo ou Bing par exemple, propose l’ajout d’une balise meta qui a pour syntaxe :
<META NAME="ROBOTS" CONTENT="NOARCHIVE">
ou
<META NAME="GOOGLEBOT" CONTENT="NOARCHIVE"> (pour interdire la mise en cache par googlebot uniquement).

Il y a quelques jours le serveur qui héberge mon site n’était plus accessible, j’ai donc eu dans mon navigateur un beau message « DNS error… vous pouvez afficher la page en cache », je clique sur le lien machinalement et là je vois le cache de mon site or dans mon head j’ai bien la meta noarchive qui est présente puisque j’interdis volontairement la mise en cache.
Voici 2 copies d’écrans, la première avec le cache seoblackout.com sur Google :

cache seoblackout.com sur google

La seconde montre bien que la balise meta robots noarchive est bien présente dans le cache :

source-cache-google

Michaël m’a donné le lien suivant sur twitter http://www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156412 avec l’extrait suivant « due to temporary failure of the page’s web server… The cached page appears to users exactly… », suite à cette lecture, j’ai donc pensé que l’on voyait le cache car le serveur avait était out pendant quelques heures mais il n’en est rien puisque d’autres sites qui n’ont pas été out sont aussi touchés par ce souci.

De là, j’ai fais une demande de suppression de cache dans google webmaster tools, demande qui a aboutie en moins de 48 heures mais avec l’inconvénient de ne plus afficher le snippet dans les résultats. J’ai donc retiré la demande de suppression mais Google s’est remis à afficher le cache, sans remettre le snippet, j’ai à nouveau refais un demande de suppression de cache que Google a respecté un à deux jours au lieu des 90 jours annoncés dans webmasters tools, puisque depuis mon cache est à nouveau visible (suffit de saisir cache:www.seoblackout.com dans Google), c’est à n’y rien comprendre.

Je vous mets les copies d’écrans de mon Google Webmaster Tools ci-dessous :

Annulation de la première demande de suppression de cache :
Google Webmaster Tools annulation demande de suppression

Seconde demande de suppression de cache :
Google Webmaster Tools : seconde demande de suppression

Conclusion : Google ne respecte pas, pour certains sites, la balise meta robots noarchive, et même lorsque l’on fait une demande de suppression du cache dans Google webmaster Tools, la demande est respectée provisoirement puisque le cache réapparait ensuite.
Dans mon cas, on ne voit que le cache de la home mais pour d’autres sites c’est toutes les pages internes qui apparaissent en cache malgré l’interdiction.

Je n’ai pour le moment aucune piste viable quant au pourquoi Google ne respecte pas cette meta pour certains sites. Bug ??

Commentaires (25)

Catégorie: Cloacking,Google

Google Wonder Wheel PHP Script

Ecrit par admin le Samedi 13 juin 2009 à 14:27 - Catégorie Google,Scripts PHP

Google a sorti, de son lab., il y a quelques semaines maintenant, une option nommée Google Wonder Wheel qui permet à partir d’un mot-clé donné de trouver des mots-clés connexes qui ont un lien sémantique avec le mot-clé recherché. Les résultats sont présentés sous forme cartographique dans une animation flash.

Cette fonctionnalité n’est pas disponible dans toutes les langues pour le moment, on la retrouve sur google.com, google.cn et certainement d’autres mais pas sur google.fr

Il est quand même possible d’obtenir des résultats pour des mots français, on peut saisir un mot-clé uniquement français, par exemple, poker retournera des mots apparentés anglais, alors que poker gratuit retournera des mots-clés connexes français, les mots avec accents renverront des mots-clés français, exemple crédit versus credit.

Voici quelques screenshots pour voir la Google Wonder Wheel en action :

Pour accéder à Google Wonder Wheel, il faut aller sur google.com et cliquer sur show options :

show options google

Ensuite on clique sur wonder wheel (colonne de gauche vers le bas) et on saisit notre mot-clé, ici je prend comme exemple référencement :

referencement

Je clique ensuite sur référencement google :
referencement google

Puis je clique sur référencement manuel :
referencement manuel

Il faut savoir que les mots-clés présents dans le flash sont présents dans le code source de la page, donc il est aisé d’extraire ces mots-clés apparentés :)

Voici le script php qui permet d’extraire ces mots-clés :

A partir d’un mot-clé donné, ce script va extraire, pour chaque mot-clé de la roue, tous les mots-clés apparentés :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php
//Script Auteur : Tiger
//Site Web : http://www.seoblackout.com
//Url script :  http://www.seoblackout.com/2009/06/13/google-wonder-wheel/
//Description script : Ce script php vous permet d'extraire pour un mot-clé donné, les mots-clés connexes à partir de Google Wonder Wheel
//Installation : uploader ce fichier sur votre serveur et appeler le ainsi : http://votre_site_web.com/google-wheel.php?kw=votre mot clé
 
if ((isset($_GET['kw'])) && $_GET['kw']!='')
{
	$q=strip_tags($_GET['kw']);
	echo google_wheel($q);
}
else
{
	echo 'Veuillez saisir un mot-clé !';
}
function google_wheel($q) {
 
$q=urlencode($q);
$search_url="http://www.google.com/search?q=$q&hl=en&tbo=1&tbs=ww:1";
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.63 (Windows NT 5.1; U; fr) Presto/2.1.1');
	curl_setopt($ch, CURLOPT_URL,$search_url);
	curl_setopt($ch, CURLOPT_FAILONERROR, true);
	curl_setopt($ch, CURLOPT_REFERER, $search_url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
	$res= curl_exec($ch);
	curl_close($ch);
	if ($res) {
		if (preg_match('/"r":\[(.*?)\]}\)/',$res,$matches))
		{		
			$response=str_replace('"','',$matches[1]);
 
			$response2=explode(',',$response);
			$response3='';
			foreach ($response2 as $key => $value) 
			{
				$value2=urlencode($value);
				$search_url2="http://www.google.com/search?q=$value2&hl=en&tbo=1&tbs=ww:1";
 
				$ch2 = curl_init();
				curl_setopt($ch2, CURLOPT_USERAGENT, 'Opera/9.63 (Windows NT 5.1; U; fr) Presto/2.1.1');
				curl_setopt($ch2, CURLOPT_URL,$search_url2);
				curl_setopt($ch2, CURLOPT_FAILONERROR, true);
				curl_setopt($ch2, CURLOPT_REFERER, $search_url2);
				curl_setopt($ch2, CURLOPT_RETURNTRANSFER,true);
				$res2= curl_exec($ch2);
				curl_close($ch2);
				if ($res2) 
				{	
					if (preg_match('/"r":\[(.*?)\]}\)/',$res2,$matches2))
					{		
						$response.=','.str_replace('"','',$matches2[1]);
					}
				}
			}
			$response3=array_unique(explode(',',$response));
			asort($response3);
			$res_final='Mot-clé : '.urldecode($q);
			$res_final.='<br />Résultats: <br /><ul>';
			foreach ($response3 as $key => $value) 
			{
			$res_final.='<li>'.utf8_decode($value).'</li>';
			//flush();
			}
			$res_final.='</ul>';
		}
	}
 	return $res_final;
}
?>

Ce script peut être largement améliorié, c’est une base de départ ;)

Voici le résultat de l’extraction à partir du mot-clé référencement :

  • api google
  • comparatif moteur de recherche
  • demande de devis
  • devis création site internet
  • devis gratuit
  • devis referencement
  • exalead moteur de recherche
  • l api
  • la soumission
  • le positionnement
  • les moteurs
  • les moteurs de recherche
  • liens commerciaux
  • loi informatique et libertés
  • moteur de recherche altavista
  • moteurs de recherche
  • moteurs de recherche gratuits
  • mots clefs
  • méthodologie création site internet
  • page rank gratuit
  • positionnement moteur de recherche
  • principaux moteurs de recherche
  • referencement google
  • referencement gratuit
  • referencement gratuit internet
  • referencement gratuit moteur de recherche
  • referencement internet
  • referencement manuel
  • referencement moteurs de recherche
  • referencement naturel
  • referencement positionnement
  • référencement manuel
  • référencement manuel gratuit
  • référencement moteurs de recherche
  • référencement payant
  • soumission moteur de recherche
  • url rewriting

Commentaires (21)

Catégorie: Google,Scripts PHP



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 !