16 April 2024


formation avancée au référencement

Archive for the ‘Scripts, plugins et mods’ Category

Failles XSS : encoder les urls

Lundi, février 2nd, 2009

Nombreux sont ceux qui ont lu les articles sur les failles XSS, si précieuses pour récupérer des liens de sites .gov et autres .edu, et qui perdent parfois un temps fou à les transcoder pour les faire indexer rapidement.

Pour rappel, les failles XSS (Cross Site Scripting) permettent d’injecter du code dans une page donnée mal sécurisée, via un paramètre de l’url.
Dans le cas présent, nous ne cherchons qu’à déposer un lien qui sera invisible pour l’administrateur du site qui ne regarde pas ses logs. Cependant, les applications peuvent être tout à fait meurtrières pour les sites visés. Attention donc à veiller à sécuriser vos sites ;)

On connaît plusieurs techniques pour faire indexer ces liens : les caching proxies, les liens cachés dans les sites qui ne nous appartiennent pas, les pages “satellites” (qu’elles servent encore à quelque chose :D ) etc…

Mais la problématique demeure… Comment aller plus vite pour encoder les urls et les balancer sur le web ?
Aujourd’hui c’est un petit outil très simple que je vous propose, et qui fera gagner du temps à ceux qui ne l’ont pas déjà développé.

Il s’agit d’un script PHP simplissime qui vous présente un formulaire à trois champs dans lesquels il vous suffit d’entrer l’url de la page à scripter avec le paramètre qui nous intéresse laissé vide et en dernier (cf. exemple), l’url de la page que vous souhaitez linker et l’ancre du lien.
Le résultat sera le code source du lien à ajouter (ou plutôt à injecter) dans les pages que l’on vise.

Le script d’encodage est en téléchargement libre ici : XSS encoding script
et en démo sur cette page : Démo XSS encoding script

A vous maintenant de linker les pages que vous avez indexées pour les populariser :D

Les applications du cloaking : cloaking sur referer et IP delivery

Jeudi, janvier 29th, 2009

Nous voici à nouveau sur cette technique du cloaking. Après avoir lu avec conscience et sérieux le premier volet introductif aux techniques de cloaking, vous devez être impatient(e)s de connaître ou confirmer ces techniques en environnement réel.

Je présenterai ici une petite collection des applications du cloaking, qui bien sûr n’est pas limitative et encore moins une référence. Le cloaking peut être amélioré, affiné, et chacun aura sa recette (plus ou moins bonne).

Le cloaking sur referer et IP delivery qu’est-ce que c’est ?

Le cloaking sur referer : “dis-moi d’où tu viens et je te montrerai ce que tu aimes”

Le cloaking sur referer est une technique visant à présenter un contenu différent en fonction de la provenance du visiteur (humain ou robot). En PHP, on se servira de la variable super globale $_SERVER pour le récupérer et l’utiliser à nos fins.

$referer = $_SERVER['HTTP_REFERER'];

IP delivery : “dis-moi qui tu es et je te montrerai ce que tu cherches”

L’IP delivery consiste à “délivrer” un contenu en fonction de l’ip du visiteur. C’est simplement du cloaking sur IP, mais avec la différence que ce n’est pas destiné forcément aux robots.

Un exemple plus parlant et concret est le fait d’utiliser l’IP delivery pour cibler les publicités que l’on diffuse en fonction de la zone géographique du visiteur.

Cloaking sur referer et IP delivery en action

Voici une technique assez puissante qui vous permet d’obtenir des liens sans que l’échange soit complètement réciproque.
Je m’explique. Vous avez passé votre pause déjeuner à vous concocter une armada de MFAs pour financer vos prochaines vacances. Pas peu fier de la somme de contenu que vous avez réussi à amonceler, vous vous dites “Voici de quoi nourrir un bot !”.
Mais pour que le bot trouve votre mine de contenu, il faut faire connaître les sites… Donc, vous commencez votre référencement sur des annuaires plus ou moins populaires, ou à validation automatique qui forcément vont vous demander des liens retour (s’ils ne vérifient pas le contenu du site, ils vérifieront la présence du lien).
Pour cela, 2 solutions : soit ils lancent un script de vérification, soit ils y vont manuellement. C’est là que l’on applique notre script…

Dans une base de données, on enregistre le domaine du site (tld, pas de sous-domaine hein), on insère aussi l’ip du serveur et finalement, le code source du lien qui sera vérifié.

 CREATE TABLE `seo`.`partenaire` (
`partenaire_id` INT NOT NULL AUTO_INCREMENT ,
`partenaire_domaine` VARCHAR( 30 ) NOT NULL ,
`partenaire_ip` VARCHAR( 16 ) NOT NULL ,
`partenaire_code` TINYTEXT NOT NULL ,
PRIMARY KEY ( `partenaire_id` )
) ENGINE = MYISAM

Maintenant, on va détecter de manière assez simple si le visiteur (humain ou script) vient du serveur sur lequel on a soumis un lien. Pour cela, on utilisera la fonction suivante.

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
<?php
//  Vérifier que le referer n'appartient pas à un annuaire auquel on a soumis, sinon, on affiche le lien
function bad_referer($referer, $ip){
  $buffer = '';
  $value = null;
 
  //  Isolation du domaine
  $uri = parse_url($referer, PHP_URL_HOST);
 
  //  Récupération du TLD
  if (preg_match('#www\.#U', $uri)){
    preg_match('#www\.(.*?)\.?(.[a-z]{2,3})#Usi', $uri, $match);
    $value = $match[1].$match[2];
  }
  else{
    preg_match('#.*\.(.*?)(.[a-z]{2,3})#U', $uri, $match);
    $value = $match[1].$match[2];
  }
 
  //  Affichage de tous les codes des partenaires pour ce domaine
  $q = mysql_query("SELECT * FROM partenaire WHERE partenaire_domaine='".$value."' OR partenaire_ip='".$ip."'");
  if(@mysql_num_rows($q) != false && @mysql_num_rows($q) > 0){
    while(@$r = mysql_fetch_object($q)){
      $buffer.= ' '.stripslashes($r->partenaire_code);
    }
  }
 
  echo $buffer;
 
  return;
}
?>

L’utilisation est très simple, à l’endroit où vous souhaitez afficher les liens des partenaires, il suffit d’appeler la fonction comme cela :

<?php bad_referer($_SERVER['HTTP_REFERER'], $_SERVER['REMOTE_ADDR']);?>

Comme les admins d’annuaire sont tous presque tous des flemmards ( :D ), ils ne vont pas masquer le referer s’ils font une vérification manuelle de la présence du lien. C’est là qu’on agit. Sinon, ils utilisent un script de vérification automatique et on grille l’adresse IP du serveur.

Grâce à cette technique, vos sites ne ressembleront pas à des guirlandes de Noël et vous pourrez toujours être référencés.
La technique ultime consiste à faire un cloaking sur les robots en plus afin que les liens s’affichent pour eux. Cela vous permet d’y insérer également vos propres liens :D

Il est possible de conserver en session la visite depuis le referer traqué pour que le lien apparaisse toujours sur les autres pages dans le cas d’un lien en footer.

J’espère que vous en avez appris un peu et que vous suivrez le prochain épisode avec autant d’attention, en attendant, ne soyez pas evil hein ;)

Freeglobes : améliorer la lisibilité des descriptions longues

Lundi, janvier 12th, 2009

Je continue sur Freeglobes car il y a du potentiel avec ce script.

Vous savez, comme nombre de référenceurs et webmasters, que le contenu est très important pour ressortir sur les moteurs de recherche… et surtout le contenu unique.
Quand on a un annuaire de qualité, où le duplicate content est traqué et éliminé, on ne veut pas perdre ses places (ni son PR) dans les pages de résultats. Du coup, on demande des descriptions longues aux personnes qui inscrivent leur site afin d’obtenir du contenu et de pouvoir donner suffisamment à manger à nos amis les crawlers.

Mais au-delà de ça, on ne veut pas perdre non plus nos visiteurs qui sont des cliqueurs potentiels !
En effet, on fait des annuaires pour obtenir du lien, mais si on peut en tirer des profits, alors why not !
Alors comment faire pour conjuguer un texte de plus de 1500 caractères avec une lisibilité suffisante pour les visiteurs quand on sait que Freeglobes vous sort les descriptions de sites telles quelles, sans balisages HTML ?

C’est là qu’intervient la petite modification… Les codeurs PHP connaissent tous la fonction magique de 5 caractères qui fait les retours à la ligne automatiquement : nl2br() :D

Il suffit d’utiliser cette petite fonction à un endroit stratégique pour permettre d’afficher le texte des catégories de manière bien plus claire et lisible. Finis les pavés de mots indigestes !

Comment procéder ?
Recherchez le fichier /include/common.php et parcourez-le jusqu’à trouver la fonction

function affichage_liens($links, $url_r=true, $fil=false, $display_feeds=false, $display_tags=false)

Une fois la fonction trouvée, recherchez dedans la ligne

'description' => $link->getVar('description'),

et remplacez par

'description' => nl2br($link->getVar('description')),

et vos utilisateurs seront un peu plus heureux !

Voilà, ce n’est pas grand chose, 5 caractères et 2 parenthèses pour permettre aux robots et aux humains de se sentir mieux en visitant votre annuaire Freeglobes !
La démo est en ligne sur mon annuaire des sites pour enfants, vous pouvez regarder la catégorie Culture qui s’est fait bombardée de texte par un artiste !

Bon courage à vous !

Plugin FreeGlobes pour afficher des descriptions de catégories

Samedi, décembre 6th, 2008

La suite de la série des plugins FreeGlobes…
Bien que ce script ait beaucoup de points forts, il reste bien quelques points faibles…. On a déjà corrigé la lacune au niveau d’AdSense avec le plugin Freeglobes AdSense Enhanced (qui permet de spécifier tous les paramètres que l’on veut pour faire apparaître nos ads au formats et couleurs de l’emplacement), maintenant, on s’attaque aux descriptions de catégories.

Mon ami Tiger, le webmaster de SEOblackout, nous avait fait part de sa recherche d’un tel plugin. Il avait mis le doigt sur une profonde lacune du script ! En effet, sans contenu, ces pages qui ont pourtant du potentiel sont boudées par les moteurs, donc les jeunes annuaires ont encore plus de mal à démarrer, et d’autre part, le contenu, nos amis les bots en veulent toujours plus…. alors pourquoi les mettre au régime ?
On récoltera du coup un crawl de meilleur qualité, des mots clefs pour se positionner et pour mieux cibler nos ads (et donc obtenir un meilleur CTR).
Le schéma ressemblera un peu à celui d’un blog (contenu éditorial original + contenu relatif progressif, comme les commentaires, sauf que là, ce sont les descriptions des sites). Cela permettra également de donner plus de poids aux sites inscrits puisque la thématique sera en ligne avec les liens proposés.

La phase action maintenant.
Pour installer ce plugin, il suffit de le télécharger (à la fin de l’article), de l’extraire et l’uploader dans le dossier /plugins. Le plugin est activé par défaut (mais ne génère pas d’erreur s’il n’y a pas de texte).
Ensuite, rendez vous dans la partie Plugins de l’espace d’administration, et cliquez en bas de la page sur “Textes des catégories” (c’est le nouveau plugin).
Vient ensuite la fastidieuse tâche de saisir pour chacune des catégories un texte unique (ou uniquifié :) ) pour nourrir l’appétit sans fin des robots d’indexation.
Sur la page d’accueil, vous pouvez de suite voir quelle catégorie n’a pas de texte, et lui en ajouter en un clic, ou modifier la description de celles qui ont déjà été traitées.
C’est intuitif et simple ;)

Maintenant, pour l’implémentation dans le template, c’est relativement aisé !
Recherchez le fichier main.hml de votre template et collez-lui ce snippet (en fonction de vos ads).

1
2
3
<{if isset($smarty.get.dir) }>
	<{plugin name='categoryText' call='categoryText' parameters=$smarty.get.dir}>
<{/if}>

Et voilà ! :)
Vous disposez maintenant d’une fonctionnalité supplémentaire pour votre annuaire FreeGlobes : ajouter une description aux pages catégories.

Envie d’une démonstration ? Rien de plus simple, si l’on regarde les top catégories de mon annuaire des sites pour enfants on verra un texte bien rempli, en rapport avec les catégories et les sites inscrits.
Un des autres avantages est de pouvoir saisir les balises HTML que l’on veut afin d’insérer un lien par exemple… ;)

Pour télécharger le plugin, suivez le lien : » freeglobes_categoryText.zip

Optimiser le titre des pages de détail dans les Freeglobes

Vendredi, novembre 28th, 2008

Comme pour tous les annuaires, le plus difficile est de faire du vrai trafic…
On a souvent (seulement ?) l’utilité de l’annuaire pour faire du lien, et avec AdSense, on ne devient pas riche rapidement en n’utilisant que des annuaires…
Alors autant qu’ils servent à faire ranker nos sites !

Il n’est pas du meilleur effet en SEO de répéter le nom du site au début de sa balise title, or c’est le gros inconvénient des Freeglobes…
Les titres sont de la forme “Nom de l’annuaire > titre de la page de détail”, mais il faudrait idéalement qu’ils suivent le schéma suivant : “Titre de la page détail > Nom de l’annuaire” pour mieux profiter de la longue traine.
C’est d’autant plus utile que les internautes qui soumettent dans les annuaires utilisent des expressions bien soignées, chargées des mots clefs qu’ils visent, donc, meilleur pertinence pour les moteurs ;)

On ne s’intéressera ici qu’aux pages de détail des sites enregistrés. Les autres pages feront l’objet d’un billet séparé, tout aussi détaillé ;)

Alors, comment on procède ?
Facile, il n’y a qu’un petit fichier à modifier… on le trouve à la racine du site, il s’appelle “single.php”.
Dans ce fichier, il vous suffit de localiser les lignes suivantes (ligne 46 dans une install dernière version) :

1
2
3
// Meta title
  $meta_title = $CONFIG['site_name'].' > '.$links[0]->getVar('name');
  $smarty->assign("meta_title",$meta_title);

et de remplacer le code trouvé par le snippet suivant:

1
2
3
// Meta title
  $meta_title = $links[0]->getVar('name').' > '.$CONFIG['site_name'];
  $smarty->assign("meta_title",$meta_title);

Et voilà, il n’y a plus qu’à voir le résultat… Pour cela, rien ne vaut un petit backlink vers ma page préférée du moment, située sur l’annuaire enfants pour apprécier la belle balise title :lol:

Générer du contenu avec les chaînes de Markov

Mardi, novembre 25th, 2008

Toujours en quête de contenu unique et ciblé, le webmaster est.
De nombreux moyens pour en trouver, développer il doit.
Maître Yoda, codez-moi un script de chaines de Markov !

Yoda, code moi une solution de génération de contenu

Alors comment ça se passe ?
Je ne vais pas entrer dans les explications mathématiques qui me dépassent, mais plutôt tenter d'expliquer comment cela fonctionne et quels en sont les intérêts.

En gros, et pour les nuls comme moi, les textes qu'on passe à la moulinette [inline] [/inline] sont rendus uniques car on modifie l'ordre des mots en tentant de conserver certaines suites. En fait, c'est un peu comme mettre le contenu dans un panier à salade, essorer avec plus ou moins de violence (ça c'est ce que certains appellent la granulométrie), et tout ressortir d'un coup en sachant déjà quel serait l'ordre des mots. Les chaînes de Markov, c'est la prédiction du futur sans connaître le passé :)
Voilà pour l'explication, vous l'aurez compris, je suis incapable de vous expliquer correctement comment cela fonctionne.... mais j'aime bien le résultat !

Alors, si on passait à l'action....
Pas mal de gens recherchent ce genre de scripts sur Internet, et il en existe des plus ou moins bons, et des plus ou moins paramétrables.
A mes débuts, j'ai utilisé le code ci-dessous pour réécrire mes contenus, avec succè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
<?php
/*
------------------
Ecrit par Levi Thornton @ Boogybonbon.com, Tous droits réservés, alors n'espérez même pas supprimer cette ligne ou faire croire que c'est vous qui l'avez écrit !
Note de BlackMelvyn: c'est une traduction, je respecte son copyright, et c'est pas moi qui l'ai codé ;)
 
Si vous aimez ce script faites un BL vers http://www.boogybonbon.com/ (Note: mais le domaine est mort...)
------------------
*/
class clsMarkov {
  var $wordList= array();
  var $termTree = array();
 
  function makeList($string) {
    $string = strtolower($string);
    $string =  preg_replace("/[^A-z0-9\s]/i", "", $string);
     preg_match_all("/[A-z0-9]+\S/", $string, $op);
     $this->wordList = $op[0];
     return $this->wordList;
  }
 
  function buildTree() {
    // $searchList = $this->wordList;
    $arraySize = count($this->wordList);
    while ($ns!=$arraySize) {
      $termRoot = current($this->wordList);
      $termKeys = array_keys($this->wordList,$termRoot);
      foreach ($termKeys as $key=>$num) {
        $this->termTree[$termRoot][] = $this->wordList[($num+1)];
      }
      $this->termTree[$termRoot] = array_unique($this->termTree[$termRoot]);
      next($this->wordList);
      $ns++;
    }
 
  }
 
  function phraseWriter($seed, $words) {
    $results = $seed = strtolower($seed);
    if($this->termTree[$seed]) {
    while($nn<=$words) {
      $rndseed = rand(0,count($this->termTree[$seed]));
      if($this->termTree[$seed][$rndseed]) {
        $results .= ' '.$this->termTree[$seed][$rndseed];
        $seed = $this->termTree[$seed][$rndseed];
        $nn++;
      }
    }
    return $results;
    } else return 'No seed match';
  }
}
?>

Voic comment ce script s'utilise

1
2
3
4
5
6
7
8
<?php
$string = "Plus vous avez de mots et meilleur sera le résultat de votre opération sur le texte d'origine
Si vous n'y arrivez pas, il faut persister";
$tmp = new clsMarkov();
$tmp->makeList($string);
$tmp->buildTree();
print $tmp->phraseWriter('vous', 10); // phraseWriter(mot de base, nombre de mots dans le résultat)
?>

Bon voilà, vous avez maintenant le pouvoir de générer un nouveau contenu unique, facilement...
Alors il ne vous reste plus qu'à coder votre meilleur script de scraping et de commencer à vous faire des ronds avec la longue traine ;)
Pour être utile à l'internaute, il est indispensable de faire un bon cloaking afin que le contenu généré ne soit destiné qu'aux moteurs, et le contenu clair et lisible aux internautes recherchant de bonnes informations.

Chapitre suivant dans la série génération de contenu : le scraping, comment ça marche ;)

Libérer AdSense dans les annuaires Freeglobes

Mardi, novembre 18th, 2008

Comme premier article, j'ai choisi de vous parler de Freeglobes.

Ce script d'annuaire est vraiment bien fait : il est SEO-friendly (URL rewriting, agrégation des flux RSS etc...), il utilise un système de template (en l'occurence Smarty), ce qui permet une personnalisation facile à prendre en main, et les fonctionnalités supplémentaires sont gérées par un système de plugins très bien fait, basé sur celui du fameux script de blogging Dotclear.

C'est sur ce dernier point que je vais m'attarder pour vous présenter le résultat de quelques lignes de codes assemblées et quelques dizaines de minutes de travail...

Freeglobes est très bien fait pour prendre en main rapidement un annuaire, peu de modifications, pas ou peu d'interventions dans le code source... bref, le rêve de nombreux webmasters qui veulent faire des annuaires en peu de temps et gagner un max de BLs.

Le seul problème c'est que notre cher copain Google n'aime pas trop les annuaires qui servent à faire seulement du lien... Logique me répondrez-vous ! Alors dans ce cas, autant faire du trafic et le convertir en euros :)

C'est là que j'interviens :) Le plugin AdSense est relativement basique et ne permet pas de faire beaucoup de modification : les réglages sont limités au format 468x60 et au mode text_image (alternance de texte ou d'images dans la bannière).

Or, il existe certains endroits bien plus "chauds" pour les clics, et qu'il faut optimiser du mieux que l'on peut... C'est pour ça que j'ai recodé le plugin en ajoutant tout un set de fonctionnalités supplémentaires.

Après avoir installé le plugin, vous pourrez donc choisir le format, le type d'annonces diffusées, la couleur du texte, du titre de l'annonce, de l'url de l'annonceur etc... Bref, un tweak complet...

Vous pouvez voir le plugin en démo sur mon annuaire de sites de mode. Regardez le source et vous verrez qu'il est différent pour chaque ensemble (skycrapper à gauche et banners au centre).

L'utilisation est très simple, il suffit d'insérer le tag du plugin légèrement modifié, de la manière suivante :

<{plugin name='adsense' call='showAds' parameters='*type*,*format*,*radius*,*link*,*adtext*,*bg*,*border*,*url*'}>
en remplaçant les mots entre * par les valeurs adéquates par exemple :
<{plugin name='adsense' call='showAds' parameters='text,468x60,0.6,fefefe,fefefe,000000,000000,cccccc'}>
Pour le reste, il suffit de télécharger le plugin et de vous laisser guider ;)

» freeglobes_adsense_plugin.zip