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
Catégorie: Google,Génération de contenu,Scraping,Scripts PHP
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
<?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>
Catégorie: Google,Référencement,Scripts PHP
Ecrit par Olaf le Vendredi 23 avril 2010 à 13:51 - Catégorie SEO BlackOut Life
Ces derniers jours, de nombreux blogs ont reçu de multiples messages promotionnels concernant la marque s00hie et ça a énervé. A juste titre lorsque l’on voit le nombre de messages postés.
Explications de l’auteur de ce fail
Tiger : Olaf, tu t’es fait connaitre dans le petit monde du BH SEO francophone il y a quelques mois et on avait plutôt le sentiment que tu étais compétent, que s’est il passé sur ce coup ?
Olaf : J’ai ripé :/ …
Tiger : Et plus précisément ?
Olaf : J’ai l’habitude d’utiliser des outils de promotion de masse e.g. XRumer. Ça me permet de faire du multipostage vers des récipiendaires qui seraient intéressés par les produits que je promeus, c’est de l’information push.
Tiger : Tu croyais que des robes et des chaussures sexy (sic) pourraient intéresser Sylvain d’axe-net et tous les autres ?
Olaf : Hum, je ne connais pas personnellement Sylvain, mais de toute façon, je doute que S00hie fasse des escarpins taille 48. A ce sujet, Sylvain a été une crème, comme tous ceux et celles à qui j’ai présenté mes excuses (David – de 1ere-position.fr, Guillaume de hebdoblog.com, Keeg (dont j’ignore le prénom) etc.) Léo de Propulsr et je tenais à profiter de la tribune que tu m’as gentiment proposée pour les remercier de leur indulgence.
Techniquement, j’ai merdé sur les filtres que j’utilise. Filtres qui sont d’habitude beaucoup plus restrictifs, c’est une moitié de l’explication : classiquement, je demande à XRumer de collecter des URLs de blogs ayant trait à certains mots clés précis tels que « mode féminine », majoritairement des n-grammes (expressions composées de plusieurs termes), moins sujets aux effets de bord parce que je me doute bien que des technophiles tenant des blogs pour technophiles n’en auront rien à cirer de mes belles robes.
Lors de cette campagne, j’ai voulu mettre la dose et j’ai eu la mauvaise idée d’utiliser des keywords tels que « Kawaï » qui me semblait propre au jargon utilisé par les post-adolescentes, une cible solide pour ma cliente – en fait, ce n’était pas la meilleure idée du monde…
Tiger : t’as quand même envoyé une dizaine de messages sur certains blogs, tu te moques pas un peu du monde lorsque tu parles d’erreur ?
Olaf : J’y viens, j’y viens… Ma plus grosse erreur est d’avoir utilisé la fonctionnalité de XRumer qui permet de dédoublonner la liste récoltée.
Je n’avais jamais eu de retour négatif avant cette campagne et globalement mes méthodes m’ont permis jusque là de ranker top 10 sur des mots -très- compétitifs à long terme.
J’ai déjà expliqué dans un article sur le bh seo que je suis pour le fair hacking, donc contre le spamming de brute. J’aurais plutôt dû me coder mon propre outil.
Par exemple, en Perl, ça donnerait ça (Que Saint Larry me pardonne, c’est codé on the fly) :
#!/usr/bin/perl -w
use strict;
my %domains;
my %urls;
@ARGV == 1 or print_usage_and_exit();
sub print_usage_and_exit {
print "usage: trim.pl nomDuFichierContenantLesURLs";
exit;
}
my $fichier = $ARGV[0];
open FH,"<","$fichier" or die $!;
while(<FH>){
my $line = $_;
my $line2 = $line;
my @levels = split('/',$line);
my $root = $levels[2];
unless(exists $domains{$root}){
if(defined($root)){
$domains{$root} = 0;
$urls{$line2} = 0;
}
}
}
close FH;
open FH,">","$fichier" or die $!;
while ( my ($key, $value) = each(%urls) ) {
print FH $key;
}
close FH;
Tiger : …, t’es sur que tu sais coder en Perl ?
Olaf : Je te sens taquin ^^, ce code dédoublonne par FQDN un fichier d’URLs : blog1.domaine.com et blog2.domaine.com resteront, en revanche, si blog1.domaine.com/article1 et blog1.domaine.com/article2 sont présents, seul le premier sera retenu, ça évite de promouvoir plus d’une fois sur un meme blog.
Par contre, c’est restrictif : si on a domaine.com/blog1 et domaine.com/blog2, c’est pareil : le second URL est expurgé.
Tiger : Pour en revenir à tes techniques, certaines personnes ont mis en avant ta mauvaise gestion des messages (backlinks dans le corps, content spinning rachitique)…Qu’as tu à dire là-dessus ?
Olaf : A partir du moment où j’ai une cible, je m’adapte. En l’occurrence, la cible privilégiée était féminine, intéressée par l’univers de la mode et pas forcément experte en SEO. Non que je prenne la gent féminine pour sans cervelle, mais typiquement, la jeune génération est plus encline à bloguer que les autres, et éventuellement plus réceptive à des commentaires de type « Salut, je trouve ton blog génial… », la cible étant aussi censément intéressée par les produits et pas forcément dans l’art de « comment reconnaitre un post automatisé ». Et puis, un seul message par blog était prévu…, dans l’esprit du fair hacking ou SEO responsable. Dans ce cas là, je ne vois pas d’obstacle à la méthode employée.
Pour ce qui est du spinning, j’utilise d’habitude toutes les méthodes décrites ici. En employant du contenu non encore indexé par Google histoire de donner une valeur ajoutée à ce que je poste.
Tiger : Un dernier mot ?
Olaf : robes ? Sérieusement, je souhaiterai présenter mes sincères excuses aux personnes lésées et remercier tous ceux qui, comme toi, m’ont apporté leur soutien (Rudy par exemple) – J’ai vraiment vu le moment ou on viendrait me chercher avec des fourches et des torches…
Catégorie: SEO BlackOut Life
Je vous propose un petit jeu, ce n’est pas un concours de référencement
, d’ailleurs je ne sais pas dans quelle catégorie le classer, car je crois que n’importe qui peut y participer.
FIN DU JEU ! merci à tous et toutes pour votre participation
Concours SEO BlackOut
Catégorie: Concours de référencement,SEO BlackOut Life
Ecrit par admin le Lundi 8 mars 2010 à 18:03 - Catégorie Concours de référencement
Je participe au concours pokerice pour voir
Pas de contenu pokerice pour le moment mais ça devrait arriver prochainement ou pas…
Du coup, je link le site de poker de mon pote David : Poker
Catégorie: Concours de référencement
Ecrit par admin le Vendredi 26 février 2010 à 11:07 - Catégorie Actualités référencement
Le jeudi 11 mars à 18 heures, DigiPort [fr] vous propose d’assister à une conférence sur le SEO Black Hat et l’E-commerce.
La conférence aura lieu à EuraTechnologies (165 avenue de Bretagne à Lille).
Deux de mes amis y interviennent, Aurélien Bardon et Mathieu Gheerbrant, pour présenter ce qu’est le Seo Black Hat, tout deux connaissent bien le secteur du commerce en ligne et les techniques de référencement dites Black Hat.
La conférence est gratuite, ce sera l’occasion d’échanger avec d’autres e-commerçants ou référenceurs, alors si vous êtes dans le coin à ce moment-là, n’hésitez pas à y assister
Informations supplémentaires et inscriptions ici :
http://www.digiport.org/agenda/detail/evenement/-1f3a680160.html
Catégorie: Actualités référencement
Ecrit par admin le Jeudi 25 février 2010 à 15:11 - Catégorie Référencement
Il peut être parfois nécessaire de détecter un site adulte, cela peut être utile dans le cas où vous maintenez un annuaire par exemple ou encore dans le cas où vous utilisez LFE (link farm evolution) et que vous ne souhaitez pas poser vos liens sur des blogs à dominante adulte.
Comment détecter un site adulte ?
Il existe plusieurs solutions :
- Chercher dans le texte de la page des mots-clés adultes à l’aide d’un script et d’une liste de mots-clés adultes prédéfinis
- Analyser les pixels des images présentes sur la page et si dominante chair alors suspicion (idée proposée par Sébastien Billard)
- Analyser les pubs présentes sur la page, avec au préalable un listing des régies adultes comme Carpediem…
- Utiliser des api qui classent les sites dans des catégories comme http://bcws.brightcloud.com
Je vous propose une autre solution, simple à mettre en place qui consiste à utiliser la fonction SafeSearch de Google :
La fonction SafeSearch de Google empêche l’affichage dans les résultats de recherche des pages Web à caractère sexuel.
Il suffit donc de mettre l’option safesearch sur strict et ensuite de saisir la commande info:ndd_adulte.tld, si 0 résultats retournés, alors c’est un site adulte.
Il ne vous reste plus qu’à faire le script qui va bien…
N.B : Cet idée d’article m’est venu suite à une discussion lancée par Maxime sur la sphère : http://www.seosphere.com/forum/index.php?showtopic=10060
Il ya certaiment d’autres méthodes, les commentaires sont là pour ça
Catégorie: Référencement