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” />
13 commentaires sur Fonction Javascript pour ne montrer vos publicités qu'aux visiteurs venus des moteurs de recherche »
Trackbacks sur Fonction Javascript pour ne montrer vos publicités qu'aux visiteurs venus des moteurs de recherche
Les trackbacks sont fermés pour cause de spam.
L'ergonomie web, l'utilisabilité et la qualité des logiciels sont trois grandes passions mises au services de ma profession.
Marin 35 minutes plus tard :
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++) {
Frédéric de Villamil 40 minutes plus tard :
@marin : bien vu pour les variables locales. Et la condition d’arrêt de la boucle me semble plus safe.
Rik about 1 hour plus tard :
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 ;-)
Rik about 1 hour plus tard :
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.
Aymeric Jacquet about 2 hours plus tard :
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 ?
Nathalie HMD about 4 hours plus tard :
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.
Nicolas F. about 5 hours plus tard :
@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.
Frédéric de Villamil about 5 hours plus tard :
@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)
Rik about 5 hours plus tard :
@Nicolas F. : Non elle n’est pas globale. C’est une virgule que j’utilise pour séparer.
Thomas about 11 hours plus tard :
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
Sunny 1 day plus tard :
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
Nicolas F. 1 day plus tard :
@Ric: Autant pour moi, j’ai confondu avec le point virgule.
Sunny 1 day plus tard :
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 ;)