Attention, ce blog est en mode archive. Il n'est plus alimenté et consultable en lecture seulement. Il se peut que certaines informations ne soient plus à jour.
Si vous souhaitez continuer à me suivre, je continuerai à bloguer d'ici quelques semaines sur le blog de SEObserver.

Notes préliminaires : cet article vise essentiellement les développeurs, pas les cliqueurs fous qui vont demander en commentaire « j’ai installer sur windows xp mer sa marche pas ». Tout ce qui est expliqué ici l’est à titre éducatif, vous êtes responsables de ce que vous faîtes. Aucun support de ma part.

Version courte en cliquant ici.

Le succès des submitters tels que Sick Submitter, Senuke, Zenno ou même Imacros tient à trois choses :

  • leur capacité à utiliser un navigateur pour se déplacer dans le DOM et effectuer des actions à la différence de cURL,
  • leur modèle « tout en un », qui permet de centraliser l’intégralité d’une campagne,
  • leur relative facilité de prise en main.

Pour les développeurs, les deux derniers éléments peuvent se révéler d’insupportables limites : le tout-en-un est en effet un frein au branchement d’une campagne à des outils personnalisés, souvent tournant sur des langages PHP/Mysql. Quant à la facilité de prise en main, elle représente souvent de grosses limites pour un développeur qui a des besoins très personnalisés.

Enfin, le plus gros problème de tous ces outils est qu’ils reposent tous sur la nécessité d’un serveur windows, là-dessus pas besoin de faire de commentaire. Vous devrez droguer votre adminsys/dev barbu pour qu’il accepte de bosser avec ça. Et la drogue, ça coûte cher à la longue.

Les navigateurs sans tête

On va passer toute la partie théorique et présentation, googlez les termes suivants : headless browser, phantomJS, selenium, etc.

CasperJS est un framework facilitant l’utilisation de PhantomJS. Il s’agit d’un moyen puissant de dialoguer avec un navigateur.

Les avantages

  • Pas besoin d’apprendre un langage, puisque casperJS c’est du javascript, qu’il est possible de coupler avec des librairies puissantes telles que jQuery.
  • Totale flexibilité et adaptation à la demande, pas de variables stupides telles que VAR1 (imacros) ou $FNAME (sick submitter).
  • Vous pouvez utiliser aussi bien les sélecteurs CSS3 que XPATH.
  • Vous interprétez le javascript, ajax, etc, tout en restant en ligne de commandes, donc pas besoin d’écran
  • Pas besoin de windows, il peut fonctionner sur un serveur linux classique <3
  • Gratuit.

Les inconvénients

  • Pas de prise en main « click and play » pour les débutants.
  • Peu de tutoriels existants pour tout ce qui est soumission SEO.
  • Nécessité d’avoir une certaine maîtrise sur le serveur, notamment lancer des lignes de commande, donc exit les mutualisés.
Pour faire simple, la solution présentée ci-dessous vous permet d’écrire des scripts et de les lancer depuis votre serveur de production/depuis des pages web. Vous pouvez également appeler vos scripts depuis des fichiers php, des classes, bref ce que vous voulez.

Balayons ici les principales questions :

Lancement d’un script

Vous devrez lancer le script seulement en ligne de commande :

Si « casperjs » est enregistré dans votre path, vous pouvez juste taper « casperjs ».

casperjs nomdemonfichier.js

Sinon, vous pouvez appeler le bin et le script à charger en chemin absolu :

/home/moi/scripts/casperjs/bin/casperjs /home/moi/scripts/casperjs/samples/nomdemonfichier.js

Donc pour l’appeler depuis un fichier php :

<?php
echo exec('/home/moi/scripts/casperjs/bin/casperjs /home/moi/scripts/casperjs/samples/nomdemonfichier.js
');
?>

Utilisation d’un proxy

Lancez le script depuis votre shell ainsi :

casperjs --proxy=208.72.118.16:60099 --proxy-auth=username:password proxy.js

Structure-type d’un fichier

// obligatoire, pour charger la librairie casper
var casper = require("casper").create();
// optionnel, appelé pour utiliser xpath
var x = require('casper').selectXPath;

// modification de la résolution d'écran
casper.start(function(){
 this.viewport(1600,1200);
});
casper.start();
casper.userAgent('Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7');
casper.thenOpen("http://www.pagearemplir.com");
casper.then(function() {
console.log("page loaded");
});
// utilisation des sélecteurs CSS3 pour remplir un formulaire de manière "naturelle", en utilisant sendKeys plutôt que fill
casper.then(function() {
 this.sendKeys('.form1 textarea[name="commentaire"]', "Merci pour cet article !");
 this.sendKeys('.form1 input[name="name"]', 'David');
 this.sendKeys('.form1 input[name="email"]', 'david.d@gmail.com');
});
casper.then(function() {
this.click(x("//a[contains(@href, 'commentaire.php')]"));
});
casper.run(function() {
 this.exit();
});

Cliquer sur le lien qui contient « popo » dans le href, attendre que l’élément se charge, puis cliquer sur le lien qui contient toto dans le texte

casper.then(function() {
 this.waitUntilVisible(x("//a[contains(@href, 'popo')]"),
   function() { this.click(x("//a[contains(text(), 'toto')]")); }
);
});

Scraper les google suggests

A lancer comme ceci :

casperjs suggests.js pourquoi

code suggest.js :

/*global casper:true*/
var casper = require('casper').create({
    pageSettings: {
        userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko/20100101 Firefox/31.0"
    }
});
var suggestions = [];
var word = casper.cli.get(0);

if (!word) {
    casper.echo('please provide a word').exit(1);
}

casper.start('http://www.google.com/', function() {
    this.sendKeys('input[name=q]', word);
});

casper.waitFor(function() {
  return this.fetchText('.gsq_a table span').indexOf(word) === 0
}, function() {
  suggestions = this.evaluate(function() {
      var nodes = document.querySelectorAll('.gsq_a table span');
      return [].map.call(nodes, function(node){
          return node.textContent;
      });
  });
});

casper.run(function() {
  this.echo(suggestions.join('\n')).exit();
});

Scraper Google

/*jshint strict:false*/
/*global CasperError, console, phantom, require*/

var links = [];
var casper = require("casper").create();

function getLinks() {
    var links = document.querySelectorAll("h3.r a");
    return Array.prototype.map.call(links, function(e) {
        try {
            // google handles redirects hrefs to some script of theirs
            return (/url\?q=(.*)&sa=U/).exec(e.getAttribute("href"))[1];
        } catch (err) {
            return e.getAttribute("href");
        }
    });
}

casper.start("http://google.fr/", function() {
    // search for 'casperjs' from google form
    this.fill('form[action="/search"]', { q: "casperjs" }, true);
});

casper.then(function() {
    // aggregate results for the 'casperjs' search
    links = this.evaluate(getLinks);
    // now search for 'phantomjs' by fillin the form again
    this.fill('form[action="/search"]', { q: "phantomjs" }, true);
});

casper.then(function() {
    // aggregate results for the 'phantomjs' search
    links = links.concat(this.evaluate(getLinks));
});

casper.run(function() {
    // echo results in some pretty fashion
    this.echo(links.length + " links found:");
    this.echo(" - " + links.join("\n - "));
    this.exit();
});

Passer un argument lors de l’appel du script

Je lance le script en séparant mes arguments par des espaces et je n’oublie pas d’encapsuler par des guillemets quand il y a des & ou des espaces dans l’argument.

casperjs monscript.js argument1 "argument 2" "http://www.argument3.com/index.php?po=p&z=za"

Et je récupère le contenu de ces arguments dans le script ainsi :

var arg1 = casper.cli.get(0);
var arg2 = casper.cli.get(1);
var arg3 = casper.cli.get(2);

Charger le contenu d’une page distante dans une variable

var casper = require('casper').create();
var url = 'https://www.youtube.com/robots.txt';
var contents;
casper.start(url, function() {
    contents = atob(this.base64encode(url));
    console.log(contents);
});

casper.run();

Spammer le wordpress de Bertimus

/*jshint strict:false*/
/*global CasperError console phantom require*/

var casper = require("casper").create();
var x = require('casper').selectXPath;
var scrap = require('casper').create();
var commentaire;

scrap.start().then(function() {
    this.open('http://api.randomuser.me/', {
        method: 'GET',
        headers: {
            'Accept': 'application/json',
        }
    });
});
scrap.then(function() {
    contents = JSON.parse(scrap.getPageContent())
    require('utils').dump(contents.results[0].user.name);
})
scrap.thenOpen('http://www.rouflaquette.com/easytrolling/');

casper.start(function(){
    this.viewport(1600,1200);
});

casper.start();
casper.userAgent('Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7');
casper.thenOpen("http://boost.bookmarks.fr");

// on va au dernier article, on utilise le sélecteur xpath pour la démo
casper.then(function() {
        this.click(x("//a[contains(@href, '#comments')]"));
});

// depuis la première instance, on lance le 2eme casper qui va aller scraper un commentaire stupide
casper.then(function() {
    commentaire = scrap.getHTML("div#container textarea");
    this.echo(commentaire);
});

casper.then(function() {
	console.log("page loaded");
});

// on remplit le formulaire en tapant touche après touche, on utilise le sélecteur css3 pour la démo
casper.then(function() {
    this.sendKeys('#commentform textarea[name="comment"]', commentaire);
    this.sendKeys('#commentform input[name="author"]', contents.results[0].user.name.first+' '+contents.results[0].user.name.last);
    this.sendKeys('#commentform input[name="email"]', contents.results[0].user.email);
    this.sendKeys('#commentform input[name="url"]', 'http://www.spammeur-bourrin.com/');
});

// on va cliquer avec la souris sur le bouton submit
casper.then(function() {
    this.click('#commentform input[type="submit"]');
});

casper.then(function() {
	this.capture('tarace.png');
});

casper.run(function() {});
scrap.run(function() {});

setTimeout(function() {
    casper.exit();
}, 5000);

Du coup, comment remplacer sick submitter concrètement ?

Simple.

1) Créez-vous un générateur d’identité qui vous envoie en json des identités fake, comme l’exemple ci-dessus avec randomuser.me.

2) Pour la partie checkmail, vous pouvez aller parcourir votre boîte email grâce à un script php qui génère un feed (vous savez, le script de LFE !), ou bien vous optez pour une solution plus globale de catchall personnalisé sur un serveur, qui ouvre chaque email entrant et qui applique des règles en fonction du destinataire/émetteur de l’email (par exemple cliquer sur tous les liens de l’email, ou enregistrer dans un fichier si ce sont des credentials).

3) Vous créez votre fichier casperjs et vous lui passez comme argument les éléments qui changent pour votre campagne (url cible, etc).

4) Au moment d’appeler votre script, vous redirigez la sortie vers un fichier log qui vous affichera la dernière étape à laquelle vous vous êtes arrêté (voire le détail, ou un screenshot de l’étape en question).

Pour toute la partie multithread, cela se gère en amont de casperjs, en lançant plusieurs scripts différents via un script shell, et en enlevant d’une pile centrale les jobs à effectuer (redis, mysql, simple fichier texte) : il faut bien que vos scripts séparés puissent communiquer entre eux et qu’ils ne fassent pas 2x le même job !

Essayez de spammer le moins possible, ce n’est pas ce pour quoi cet outil a été conçu.

Si vous avez besoin d’aide, vous pouvez demander à Didier ou Benoît qui fournissent un support gratuit et illimité (attention, appelez-les de préférence entre 3 et 7h du matin par téléphone exclusivement, n’hésitez pas à insister).

{ Comments on this entry are closed }

D’abord aux USA, puis plus récemment et progressivement en France, Google Venice a définitivement changé l’aspect des SERPs. Sur de plus en plus de mots-clés, parfois très génériques et de manière parfois pas très pertinente, Google propose des résultats géolocalisés.

Pour modifier cette géolocalisation, on peut aller tout simplement dans « Outils de recherche » puis cliquer sur la ville en haut à droite.

Géolocaliser ses recherches sur Google

Géolocaliser ses recherches sur Google

Mais cette démarche est longue et fastidieuse (2 clics), et pas universelle, surtout si notre souci est de scraper des données, pour pouvoir faire des tris, des comparaisons et des vérifications de rankings en passant en argument la géolocalisation de l’utilisateur.

Ou tout simplement pour pouvoir communiquer à son client des liens directs vers des versions différentes des pages de ranking, géolocalisées à l’échelle de la ville. Idem, les suggests nous intéressent et depuis peu, elles changent elles aussi en fonction de la géolocalisation.

Géolocalisation des Suggests à Paris de la requête "Restaurant"

Géolocalisation des Suggests à Paris de la requête "Restaurant"

Géolocalisation des Suggests à Chambéry de la requête "Restaurant"

Géolocalisation des Suggests à Chambéry de la requête "Restaurant"

Si les paramètres hl (langue) ou gl (géolocalisation au niveau du pays) sont bien connus, il n’existait à ma connaissance aucune méthode permettant de géolocaliser à l’échelle de la ville ou du département, en passant directement un argument dans l’url. Personnellement, je devais aller faire la manipulation via « Outil de recherche », citée précédemment. Mais c’était sans compter la révélation de ce soir.

Comme d’habitude, c’est du côté d’Adwords qu’il faut se tourner pour espérer avoir un peu d’informations de la part de Google. En effet, les annonceurs aiment pouvoir voir à quoi vont ressembler leurs pubs sur les pages de résultat géolocalisées. Il fallait bien les contenter, et Google leur a proposé un outil en ligne pour afficher l’aperçu des SERPs pour un lieu donné.

Sur l’outil de diagnostic et de prévisualisation des annonces, Google nous permet de générer des requêtes en personnalisant l’affichage (mobile ou desktop) et la géolocalisation des requêtes, en modifiant le champ « zone ».

Outil de Prévisualisation et diagnostic des annonces

Outil de Prévisualisation et diagnostic des annonces

Vous rentrez un mot-clé et modifiez les différentes options, puis obtenez un résultat de type preview, tout à fait sexy avec des vrais morceaux de Wordart dedans.

Ce résultat est chargé dans une iframe en-dessous. Donc deux options :

  • soit examiner le DOM et récupérer le src de l’iframe
  • soit surveiller nos en-têtes réseau et récupérer le premier GET qui nous passe sous la main après le POST

Ce qui nous donne, pour la requête « randonnée » géolocalisée un peu partout, les urls suivantes (j’ai mis en gras les arguments qui changent d’une requête à l’autre) :

  • Le Creusot : https://www.google.fr/search?ie=UTF-8&oe=UTF-8&hl=fr&q=randonn%C3%A9e&adtest=on&ip=0.0.0.0&noj=1&nomo=1&nota=1&igu=1 &adsdiag=-1275564587398859936&tci=g:1005852,p:30000&glp=1&uule=w+CAIQICIaTGUgQ3JldXNvdCxCdXJndW5keSxGcmFuY2U
  • Chambéry : https://www.google.fr/search?ie=UTF-8&oe=UTF-8&hl=fr&q=randonn%C3%A9e&adtest=on&ip=0.0.0.0&noj=1&nomo=1&nota=1&igu=1 &adsdiag=4778293742799311731&tci=g:1006388,p:30000&glp=1&uule=w+CAIQICIbQ2hhbWJlcnksUmhvbmUtQWxwZXMsRnJhbmNl
  • Aix-en-Provence : https://www.google.fr/search?ie=UTF-8&oe=UTF-8&hl=fr&q=randonn%C3%A9e&adtest=on&ip=0.0.0.0&noj=1&nomo=1&nota=1&igu=1 &adsdiag=6370497183717865163&tci=g:1006327,p:30000&glp=1&uule=w+CAIQICIxQWl4LWVuLVByb3ZlbmNlLFByb3ZlbmNlLUFscGVzLUNvdGUgZCdBenVyLEZyYW5jZQ

On a donc 3 paramètres qui changent : adsdiag, tci et uule. La logique voudrait qu’adsdiag soit une espèce de token lié à la génération d’un test de pub (« ads diagnostic ? »), que tci contienne le paramètre de géolocalisation ; en l’occurence, le numéro suivant g: est exactement le même que celui dans le lien de la liste des codes géographiques dont je vais vous parler dans quelques lignes, et que uule soit un énième paramètre wtf qu’on ne comprend pas.

C’est faux.

En faisant mes tests, j’ai supprimé les différents paramètres dans l’url et ai constaté que Google se préoccupait uniquement du uule pour géolocaliser. Après une recherche google sur « uule » (c’est drôle non ? Chercher sur google des infos sur un paramètre de recherche google), je suis tombé sur un article d’un voisin qui expliquait qu’il trouvait ce paramètre de géolocalisation dans les pubs android, et qu’il s’agissait en fait d’un résultat d’encryption AES.

Là, petit coup de flip : et si cette chaîne dépendait également de l’utilisateur qui est logué ? J’ai eu peur qu’il s’agisse d’un mélange d’une data géoloc + utilisateur en cours ? Ça réduirait à néant tous mes espoirs d’un paramètre universel et d’une seule et même requête GET pour géolocaliser par ville.

Petit coup de fil sur Skype à RaphSEO pour qu’il fasse la même démarche que moi et qu’il me sorte la valeur de ce fameux uule : bingo, la valeur de son paramètre est exactement identique à la mienne.

Big deal !

Parfait. Nous avons donc trouvé un paramètre uule qui permet de géolocaliser nos recherches à l’échelle de la ville, mais nous sommes tombés dessus un peu par hasard. Il nous faudrait donc une liste. Quelle est la liste exhaustive de tous les lieux possibles, si je suis – par exemple – un gros annonceur et que je veux tester l’affichage de mes pubs partout et que j’utilise mon API Google Adwords, et où la trouver ?

Pas d’inquiétude mon good buddy, sur ce lien, vous pourrez trouver la liste des codes de géolocalisation utilisés dans adwords. Le fichier total à télécharger fait quand même 3,5 Mo, et il y a à l’heure où j’écris ces lignes 78618 lieux différents dans le monde entier. Une chose très instructive est de regarder à quelle échelle la géolocalisation peut se faire :

  • Airport
  • Autonomous Community (Espagne)
  • Borough (Mexique)
  • Canton (Suisse)
  • City
  • Congressional District (USA)
  • Country
  • County
  • Departement (France, cocorico)
  • DMA Region (USA, zone de « media market »)
  • Governorate (Egypte)
  • Municipality (Bulgarie)
  • Okrug (Russie)
  • Postal code (USA, Canada, Grande Bretagne et Allemagne)
  • Prefecture (Japon)
  • Province
  • Region
  • State
  • Territory (Canada)
  • TV Region (Grande Bretagne)
  • Union Territory (Inde)
Des aéroports. Quoi ? Après le petit moment « wtf » initial, on comprend que c’est finalement logique pour Google de cibler aussi des aéroports car il s’agit de lieux avec du trafic international donc attendant des poches de résultat plus internationaux que les bleds paumés desquels ils sont souvent proches

Au global concernant la France, voici la répartition des 1893 lieux possibles :

  • 1 pays
  • 7 aéroports
  • 22 régions
  • 96 départements
  • 1767 villes
Et pour les aéroports :
  • Aero-Club de Nimes-Courbessac,Languedoc-Roussillon,France
  • Bordeaux-Merignac Airport,Aquitaine,France
  • EuroAirport Basel-Mulhouse-Freiburg,Alsace,France
  • Le Bourget Airport,Ile-de-France,France
  • Nice Cote d’Azur Airport,Provence-Alpes-Cote d’Azur,France
  • Nantes Atlantique Airport,Pays de la Loire,France
  • Paris Orly Airport,Ile-de-France,France
Ah oui, mais dans cette liste, quand on regarde le fichier csv, il n’y a aucun paramètre « uule ». Il n’y a que les lieux, en dur, et les id de chacun de ces lieux. Argh.
Colonnes du fichier de géolocalisation de Google

Colonnes du fichier de géolocalisation de Google

Nous avons donc deux solutions pour trouver le paramètre uule qui correspond à la géoloc que l’on veut cibler, à partir de la liste :

  • la méthode hacker, qui consiste à compiler/décompiler/encrypter AES, pour trouver la méthode de génération du paramètre uule à partir de l’id, par exemple, un peu comme un générateur de md5, comme l’a expliqué dans l’article de floyd.ch cité précédemment (un morray ami à moi est en train de travailler dessus),
  • la méthode scrapeur, qui consiste à scraper la liste de tous les codes.

Si la méthode 1 est plus pratique et plus propre, car plus pérenne, je dois avouer qu’elle me dépasse un peu et que je ne sais pas faire. Alors quand on ne sait pas, on prend du proxy et on bourrine : on scrape.

On a donc le fichier d’origine avec tous les lieux à scraper, et il ne reste plus qu’à scraper le src de l’iframe générée, avec un casperjs ou imacros. Personnellement, si je suis un grand fan d’imacros pour les tâches simples de scrap facile ou de submit, avouons-nous le : casperjs est la solution des mecs qui savent ce qu’ils veulent, et je n’ai réussi à scraper de l’adwords dégoûtant plein d’ajax qu’avec ce framework magnifique (d’autant plus que son créateur, Nicolas Perriault, est un gars très sympa, mais qui déteste le spam) ; casperjs permet en effet de passer à l’étape suivante lorsqu’un élément précis de la page est chargé (alors qu’on est obligé de mettre un timer un peu au pif en croisant les doigts pour que ce soit chargé avec imacros), et il bug beaucoup moins qu’un navigateur.

Le résultat ? Une (grosse) liste de paramètres pour la géolocalisation. Admirez un peu :

Mais si vous êtes trop flemmards pour le faire voici la liste de tous les paramètres de géolocalisation uule scrapés, bien proprement dans un csv, si vous voulez géolocaliser plus finement vos recherches, pour la modique somme de 100€ 50€ un tweet. Je précise que ce scrap m’a quand même coûté une IP hein :)

Petit bémol, dans la liste d’origine de tous les lieux possibles, il manquait les différents arrondissements à Paris, Lyon et Marseille. Qu’à cela ne tienne, j’ai géocodé pour vous (grâce à l’API Google Maps) les différents arrondissements et j’ai récupéré le fameux uule arrondissement par arrondissement. J’ai ajouté tout cela à la fin du fichier.

En revanche, il manque bizarrement dans la liste de Google plein de petits patelins, qui influent pourtant sur la géolocalisation si on passe par la case coordonnées gps. Si vous voulez vous géolocaliser à Penne d’Agenais ou Saint-Sylvestre-sur-Lot, vous serez donc obligés de taper dans l’API Google Maps et de passer ces coordonnées dans Adwords.

Je pense que les logiciels et services de monitoring de ranking devraient désormais proposer de suivre des requêtes au niveau local, avec le fameux paramètre uule, même si on retombe grosso modo sur les mêmes résultats en passant en dur la ville dans la requête (« plombier » avec uule paris 15, et « plombier paris 15 »).

Bon scrap à vous :)

Et n’oubliez pas, si ça vous a plu et que vous voulez en savoir plus sur le SEO en général, il y a très bientôt la prochaine session de formation au référencement avancé « SEO High Level » à Paris. Profitez-en si vous avec des budgets OPCA en rab 😉

Si vous voulez le script casperjs pour scraper tout cela et que vous n’avez pas l’humeur à le coder mais que vous avez une centaine d’euros, contactez-moi à 512banque -at- gmail.com .

{ Comments on this entry are closed }

Le masque, le porc-épic et le piano

août 31, 2012

Dans un mauvais remix de Madagascar (le film, pas gasy), Google a sorti son énième animal stupide noir & blanc en guise de mise à jour. Après le panda et l’orque, le pingouin a fait son entrée. Il sera probablement suivi par un putois, un zèbre ou un lémurien. Ou un blaireau. Derrière les déclarations […]

Voir l’article en entier

Le SEO « White Hat », une vaste fumisterie…

février 22, 2012

Voici un article qui a defrayé la chronique outre atlantique il y a quelques mois, si bien que le célèbrissime Rand s’est fendu d’une réponse, loin d’être convaincante à mes yeux, malgré toute la sympathie que m’inspire le célèbre Rand. Voilà pourquoi j’ai préféré relayer l’article original, la réponse pouvant être trouvée à la fin […]

Voir l’article en entier

La technique de la guirlande

novembre 16, 2011
Thumbnail image for La technique de la guirlande

Quand on crée moults splogs et autres profils forum, on se retrouve avec un problème de taille : leur indexation. En effet, loin de viser systématiquement le PR et la qualité, le black hat est amené à viser, entre autres, la valeur atomique d’une page : toute page indexée envoie une valeur infime de jus, […]

Voir l’article en entier

SEO : êtes-vous vautour ou coucou ?

novembre 9, 2011
Thumbnail image for SEO : êtes-vous vautour ou coucou ?

Au lieu de perdre du temps à repartir de zéro, il est parfois beaucoup plus intéressant de « recycler ». Je m’explique. L’astuce est bien connue par les « site flippers » : récupérer un nom de domaine libre, ou le « snapper » pour le récupérer dès qu’il est libre, afin de récupérer toute l’ancienneté et toute la puissance dudit […]

Voir l’article en entier

La formation, le suggest, et la caille

octobre 12, 2011

L’équipe de ranking metrics pour souligner la pertinence et la qualité de leur formation, a commis ceci sur leur site web : Loin de moi l’idée de contester cette assertion et dire que leur formation n’est pas bonne, puisque je n’y ai pas assisté. Le but de cet article n’est d’ailleurs pas de me prononcer […]

Voir l’article en entier

Comment doubler votre efficacité SEO avec un Assistant Virtuel

octobre 10, 2011

Ceci est un article invité, rédigé par Jean aka webmarketing junkie, voyageur à plein temps qui vit de ses sites web depuis 2003, et auteur du guide « Travaillez en Slip » (http://www.travaillezenslip.com/book) Vous pouvez certainement gagner plusieurs heures par jour en confiant vos tâches répétitives à un « assistant virtuel ». Surtout si vous êtes référenceur, et que […]

Voir l’article en entier

Revolusyn : test vidéo et critique

octobre 4, 2011

La dernière fois, j’ai vu passer dans ma timeline un nouvel outil d’aide au content spinning baptisé « Revolusyn » . Cet outil est destiné à l’aide à la saisie et à la création de textes propres « prêts à spinner ». Voici donc une petite vidéo, et une petite synthèse, organisée par catégories : Ergonomie + Interface léchée […]

Voir l’article en entier

Donner plus de poids à ses backlinks, un exemple concret

octobre 3, 2011

Aujourd’hui, j’ai le plaisir d’accueillir popov301, un gars sympa qui habite dans une banlieue parisienne pourrie qui va nous montrer comment donner du poids à ses backlinks. Pourquoi ? Parce qu’entre un backlink paumé sur une page isolée et crawlée une fois par an, et un backlink sur une page bien pertinente et massivement linkée […]

Voir l’article en entier