Fonction Javascript pour ne montrer vos publicités qu'aux visiteurs venus des moteurs de recherche

Enfin sorti de 2 ans de blackout des moteurs de recherche – pensez, je n’étais même pas en première position sur mon nom – grâce aux bons conseils référencement d’Aymeric Jacquet (/backlink à mots clés), j’ai décidé de remettre quelques publicités sur ce site, histoire de payer mon serveur et de continuer à héberger tout un tas de gens sympathique ainsi que quelques projets open source tout aussi sympathiques. Cependant, hors de question de faire subir ces dernières à mes lecteurs réguliers, il me fallait donc filtrer en fonction du refferer entre ceux des visiteurs qui me venaient des outils de recherche et les autres.

Typo générant un cache HTML statique, j’ai été obligé de passer par du Javascript, langage que je ne maîtrise absolument pas. C’est donc moche, certainement améliorable, mais ça a le mérite de marcher.

La fonction modifiée en tenant compte des retours reçus dans les commentaires :

display_adsense = function(client, slot, width, height, div) {
  if (document.referrer == "") {
    return(0);    
  }

  var referrers = ["/search", "search.live.com", "ask.com", "images.google", "soso.com", "baidu"];

  for (var i = 0; i < referrers.length; i++) {
    if (document.referrer.toLowerCase().indexOf((referrers[i]+'')) != -1) {
      google_ad_client = client;
      google_ad_slot = slot;
      google_ad_width = width;
      google_ad_height = height;

      var e = document.createElement("script");
      e.type = "text/javascript";
      e.src = "http://pagead2.googlesyndication.com/pagead/show_ads.js";
      document.getElementById(div).appendChild(e);
      return(0);
    }
  }  
}

Paramètres :

    <li>client : le paramètre google_ad_client figurant sur le script d'affichage normal de vos annonces Adsense.</li>
    <li>slot : le paramètre google_ad_slot figurant sur le script d'affichage normal de vos annonces Adsense.</li>
    <li>width : le paramètre google_ad_width figurant sur le script d'affichage normal de vos annonces Adsense.</li>
    <li>height : le paramètre google_ad_height figurant sur le script d'affichage normal de vos annonces Adsense.</li>
    <li>div : l'id du bloc dans lequel vous souhaitez afficher votre annonce.</li>
    

Voilà ; si vous avez des remarques constructives – autres que adsense ça sux ou le refferer sniffing ça sux – afin d’améliorer cette fonction, je suis évidemment preneur. Vous pouvez également m’offrir le livre de Christophe Porteneuve Bien développer pour le web 2.0, Noël est passé mais il n’est jamais trop tard pour bien faire.

<typo:flickr img=”3155116301” size=”medium” alt=”New York depuis l’empire state building” />

Publié le 02 janvier 2009 à 14h00 Publié sous

Mots clés référencement, adsense, javascript, adwords, seo, blogging

Si cet article vous a plu, suivez-moi sur Twitter Suivez-moi sur Twitter

  1. Avatar

    Par Marin le 02 janvier 2009 à 14h35 :


    Hello Fred, je mettrais des variables locales et je corrigerai la boucle :p

    var referrers = [“/search”, “search.live.com”, “ask.com”, “images.google”, “soso.com”, “baidu”]; for (var i=0,j=referrers.length;i<j;i++) {

  2. Avatar

    Par Frédéric de Villamil le 02 janvier 2009 à 14h40 :


    @marin : bien vu pour les variables locales. Et la condition d’arrêt de la boucle me semble plus safe.

  3. Avatar

    Par Rik le 02 janvier 2009 à 14h51 :


    Je peux même pas lire le code en entier avec cette espèce de overflow hidden sur le pre.

    Si tu corriges ça (avec un auto par exemple), j’aurais bien 2-3 commentaires à faire ;-)

  4. Avatar

    Par Rik le 02 janvier 2009 à 15h17 :


    1) Je préfère largement les early return qui permettent d’avoir un code moins indenté et plus généralement concentré sur la tache à exécuter et non les cas spéciaux.

    2) Plutôt que de faire une boucle, j’aurais fait une Regexp pour traiter ce genre de choses.

    Bon ok, j’aurais pas fait de regexp parce que j’ai toujours peur de me tromper mais bon hein.

    3) Dans un souci de performance maximale (mais bon sur un script de cette taille on s’en fiche) : - for (i = 0; referrers[i]; i++) devient for( var i =0, il = referrers.length; i < il; i++) - On met document.referrer.toLowerCase() dans une variable plutôt que de faire 2 lookups et une exécution de fonction - Pourquoi lowerCase tu le retour de indexOf() ? 1 en minuscule ça fait toujours 1. - Toujours, toujours, toujours utiliser la syntaxe “var foo” sauf si on sait qu’on veut une variable globale.

  5. Avatar

    Par Aymeric Jacquet le 02 janvier 2009 à 15h33 :


    Content de voir que mes petits conseils ont porté leurs fruits.

    Ca doit être encore léger, mais ça donne quoi concrètement en terme d’augmentation de trafic Moteur ?

  6. Avatar

    Par Nathalie HMD le 02 janvier 2009 à 17h35 :


    Moi je dis rien, la dernière fois que j’ai eu l’audace de vouloir toucher à Javascript, j’en ai chié pendant deux semaines pour une simple validation de formulaire.

    Je maudis les boucles, je maudis les itérations! NIAAHHH!

    Fin de la folie passagère.

  7. Avatar

    Par Nicolas F. le 02 janvier 2009 à 18h34 :


    @Rik : Ta var il est globale.

    Perso j’utilise : for(var i=referrers.length-1; i>-1; i–)

    Bien sûr, il faut que l’ordre n’ait pas d’importance.

  8. Avatar

    Par Frédéric de Villamil le 02 janvier 2009 à 18h56 :


    @All : merci pour les conseils, j’ai modifié le code en conséquence (et je me coucherai moins bête ce soir. Il me reste juste 2-3 soucis à régler pour que ce soit vraiment nickel.

    @Aymeric : je suis passé de 15-25 VU par jour depuis les moteurs de recherche à 150, avec plus de 800 URL encore marquées comme problématiques dans les GWT (j’ai réglé les problèmes, ce n’est plus qu’une question d’indexation)

  9. Avatar

    Par Rik le 02 janvier 2009 à 19h04 :


    @Nicolas F. : Non elle n’est pas globale. C’est une virgule que j’utilise pour séparer.

  10. Avatar

    Par Thomas le 03 janvier 2009 à 00h44 :


    Il aurait été intéressant d’avoir le code du début pour suivre l’évolution avec les commentaires. Là, c’est déjà tout corrigé :o

  11. Avatar

    Par Sunny le 03 janvier 2009 à 19h13 :


    Mes deux centimes : +1 pour tout ce que dit Rik. Avec des regexp et un return tôt j’aurais fait :

    http://edit.sunfox.org/display_adsense.js

  12. Avatar

    Par Nicolas F. le 03 janvier 2009 à 20h28 :


    @Ric: Autant pour moi, j’ai confondu avec le point virgule.

  13. Avatar

    Par Sunny le 04 janvier 2009 à 00h16 :


    Chouette retour sur le problème (http://t37.net/inserer-des-adsense-en-javascript-apres-le-chargement-de-la-page.html) ! Par contre ma regex souffre d’un bug d’échappage, résolu sur la page originale.

    PS: Et il n’y a qu’un p à mon Ripert ;)

Réagir à Fonction Javascript pour ne montrer vos publicités qu'aux visiteurs venus des moteurs de recherche

Merci de vous exprimer dans un français correct. Les commentaires déplacés, injurieux et le spam seront supprimés.

Les trackbacks sont fermés pour cause de spam.


Abonnez-vous au flux RSS et suivez les nouveaux articles du site Suivez-moi sur Twitter