Le Cloaking : Définition, Exemples et Scripts pour Cloaker
Le Cloaking est une technique souvent utilisé lorsque l’on fait du Black Hat SEO et que l’on veut cacher des choses mais on peut aussi l’utiliser pour faire du White Hat SEO.
Pour faire simple une page cloaké est une page dont il existe plusieurs versions.
Contrairement à ce qu’on peu lire sur le Web, le cloaking n’est pas interdit et c’est même recommandé par Google ainsi que d’autres moteurs de recherche. Car ça consiste à fournir un contenu sur mesure en fonction de celui qui le demande. Le cloaking peut donc améliorer l’UX et mieux convertir vos visiteurs.
Sommaire
- 1 Le cloaking n’est pas interdit !
- 2 Quelques exemples de cloaking autorisé :
- 3 Comment faire du Cloaking ?
- 3.1 Exemple de récupération du Referer en PHP :
- 3.2 Exemple de récupération de l’User Agent en PHP :
- 3.3 Exemple de cloaking par Accept-Language en PHP :
- 3.4 Exemple de récupération du navigateur en PHP :
- 3.5 Exemple de récupération de l’adresse IP du visiteur en PHP :
- 3.6 Exemple de récupération de l’hôte de l’IP du visiteur en PHP :
- 3.7 Exemple de cloaking par Referer en PHP :
- 3.8 Exemple de cloaking avec JavaScript :
- 3.9 Cloaking avec Flash
- 3.10 Exemple de cloaking avec DHTML
- 4 Comment faire du cloaking pour Google ?
Le cloaking n’est pas interdit !
Il faut garder en tête que le but de Google est de fournir la meilleure expérience utilisateur. Si vous avez le même but alors vous pouvez {utiliser|abuser} du cloaking 😉 Mais si votre but est de tromper les utilisateurs votre stratégie risque de ne pas durer.
Inutile de vous rappeler que cacher des liens et des mots clés c’est une forme de cloaking qui vise à tromper les moteurs et les internautes donc à ne pas faire.
Quelques exemples de cloaking autorisé :
Exemple 1 : ma page d’origine est en anglais, le visiteur est français on lui affiche le site en français tout en lui proposant la version anglaise.
Exemple 2 : par rapport à la provenance de l’utilisateur et la page demandé on lui fournis un résultat que l’on juge plus pertinent au moment où la page est demandé.
Exemple 3 : permettre aux moteurs de recherche d’indexer vos contenus pour les référencer et restreindre l’accès pour obliger à faire une inscription gratuite ou payante aux visiteurs humain.
Exemple 4 : désactiver certains scripts JavaScripts et CSS, Police d’écriture, etc.. pour les crawler afin d’accélérer le crawl de votre site. Ils sont en place pour l’expérience utilisateur pas pour la diffusion et le partage d’information.
Exemple 5 : supprimer tous les {liens|backlinks|échange de liens} de nos sites et PBN mais uniquement pour les robots collecteurs de données analytique comme Majestic, Semrush, Ahref etc… afin de ne pas permettre à vos concurrents d’identifier votre stratégie de Netlinking.
Exemple 6 : garder son site dans son état normal pour les robots des moteurs afin de maintenir son SEO et pour les visiteurs afficher une version légèrement modifié pour s’adapter à un événement temporairement comme Noël, Halloween etc…
Comment faire du Cloaking ?
Il faut savoir qu’il existe différentes façon d’obtenir des informations sur les visiteurs de nos sites internet. Comme vous le savez lorsque vous naviguez sur internet vous laissez des traces. Nous pouvons les obtenir avec les Cookies, le Referer, l’User Agent, l’adresse IP et le Hôte ce qui nous permet de faire différentes formes de cloaking.
Exemple de récupération du Referer en PHP :
Pour récupérer l’information du referer (la page précédente à partir de laquelle l’utilisateur a accédé à votre page) en PHP, vous pouvez utiliser la variable superglobale $_SERVER['HTTP_REFERER']
. Voici un exemple simple illustrant son utilisation :
1 2 3 | <?php echo "Referer : ".$_SERVER['HTTP_REFERER']; ?> |
Démo : https://www.black-hat-seo.org/labo/php/test_referer.php
Il est important de noter que l’information du referer ne doit pas être considérée comme totalement fiable, car elle peut être facilement modifiée ou supprimée par les navigateurs ou les utilisateurs. De plus, elle n’est pas toujours transmise, en particulier dans le cas de transitions de sites sécurisés (HTTPS) vers des sites non sécurisés (HTTP).
Exemple de récupération de l’User Agent en PHP :
Pour récupérer l’information de l’User Agent d’un visiteur en PHP, vous pouvez utiliser la variable superglobale $_SERVER['HTTP_USER_AGENT']
. L’User Agent est une chaîne de caractères envoyée par le navigateur à votre serveur, qui identifie le navigateur ainsi que le système d’exploitation et la plateforme utilisée par le visiteur. Voici un exemple simple pour illustrer comment récupérer et afficher cette information :
1 2 3 | <?php echo "User agent : ". $_SERVER['HTTP_USER_AGENT']; ?> |
Démo : https://www.black-hat-seo.org/labo/php/test_user_agent.php
L’User Agent peut être utilisé pour diverses raisons, comme la personnalisation de contenu pour différents navigateurs ou la collecte de statistiques sur les types de dispositifs utilisés pour accéder à votre site. Toutefois, il est bon de se rappeler que les informations de l’User Agent peuvent être modifiées ou falsifiées par les utilisateurs ou certains logiciels.
Exemple de cloaking par Accept-Language en PHP :
Créer un système de cloaking en PHP utilisant l’en-tête HTTP Accept-Language
consiste à détecter la langue préférée du client et à servir un contenu différent en fonction de cette langue. Voici un exemple simple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php // Obtenir la valeur de l'en-tête Accept-Language $lang = $_SERVER['HTTP_ACCEPT_LANGUAGE']; // Analyser la valeur pour obtenir la première langue préférée $preferredLang = substr($lang, 0, 2); // Afficher un contenu différent selon la langue switch($preferredLang) { case "en": echo "Content for English speakers."; // Contenu en anglais break; case "fr": echo "Contenu pour les francophones."; // Contenu en français break; default: echo "Default content for other languages."; // Contenu par défaut break; } ?> |
Dans cet exemple, PHP lit l’en-tête Accept-Language
du client pour déterminer sa langue préférée. Ensuite, le script sert un contenu différent en fonction de cette langue.
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | <?php function getBrowser() { $u_agent = $_SERVER['HTTP_USER_AGENT']; $bname = 'Unknown'; $platform = 'Unknown'; $version= ""; //First get the platform? if (preg_match('/linux/i', $u_agent)) { $platform = 'linux'; } elseif (preg_match('/macintosh|mac os x/i', $u_agent)) { $platform = 'mac'; } elseif (preg_match('/windows|win32/i', $u_agent)) { $platform = 'windows'; } // Next get the name of the useragent yes seperately and for good reason if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent)) { $bname = 'Internet Explorer'; $ub = "MSIE"; } elseif(preg_match('/Firefox/i',$u_agent)) { $bname = 'Mozilla Firefox'; $ub = "Firefox"; } elseif(preg_match('/Chrome/i',$u_agent)) { $bname = 'Google Chrome'; $ub = "Chrome"; } elseif(preg_match('/Safari/i',$u_agent)) { $bname = 'Apple Safari'; $ub = "Safari"; } elseif(preg_match('/Opera/i',$u_agent)) { $bname = 'Opera'; $ub = "Opera"; } elseif(preg_match('/Netscape/i',$u_agent)) { $bname = 'Netscape'; $ub = "Netscape"; } // finally get the correct version number $known = array('Version', $ub, 'other'); $pattern = '#(?<browser>' . join('|', $known) . ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#'; if (!preg_match_all($pattern, $u_agent, $matches)) { // we have no matching number just continue } // see how many we have $i = count($matches['browser']); if ($i != 1) { //we will have two since we are not using 'other' argument yet //see if version is before or after the name if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){ $version= $matches['version'][0]; } else { $version= $matches['version'][1]; } } else { $version= $matches['version'][0]; } // check if we have a number if ($version==null || $version=="") {$version="?";} return array( 'userAgent' => $u_agent, 'name' => $bname, 'version' => $version, 'platform' => $platform, 'pattern' => $pattern ); } $ua=getBrowser(); $retour = "Navigateur : " . $ua['name'] . " " . $ua['version'] . " installé sur " .$ua['platform'] . " détecté grâce à l'user agent : <br>" . $ua['userAgent']; echo $retour; ?> |
Démo : https://www.black-hat-seo.org/labo/php/test_browser.php
Exemple de récupération de l’adresse IP du visiteur en PHP :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php function getUserIpAddr() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) //if from shared { return $_SERVER['HTTP_CLIENT_IP']; } else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //if from a proxy { return $_SERVER['HTTP_X_FORWARDED_FOR']; } else { return $_SERVER['REMOTE_ADDR']; } } echo "Adresse IP : ". getUserIpAddr(); ?> |
Démo : https://www.black-hat-seo.org/labo/php/test_ip_user.php
Exemple de récupération de l’hôte de l’IP du visiteur en PHP :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php function getUserIpAddr() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) //if from shared { return $_SERVER['HTTP_CLIENT_IP']; } else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //if from a proxy { return $_SERVER['HTTP_X_FORWARDED_FOR']; } else { return $_SERVER['REMOTE_ADDR']; } } echo "Hote associé à l'adresse ip ".getUserIpAddr()." : ". gethostbyaddr(getUserIpAddr()); ?> |
Démo : https://www.black-hat-seo.org/labo/php/test_hote_ip.php
Exemple de cloaking par Referer en PHP :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php $referer = $_SERVER['HTTP_REFERER']; if($referer=="https://www.black-hat-seo.org") { echo "Bonjour, Voici la page spécial BHS !"; } else { echo "Bonjour, Voici la page normal."; } ?> |
Exemple de cloaking avec JavaScript :
1 2 3 4 5 6 7 8 9 10 11 12 13 | <script type="text/javascript"> // Détecter le user-agent du visiteur var userAgent = navigator.userAgent.toLowerCase(); // Vérifier si le user-agent appartient à un moteur de recherche if(userAgent.includes("googlebot") || userAgent.includes("bingbot")) { // Afficher le contenu destiné aux moteurs de recherche document.write("Contenu optimisé pour les moteurs de recherche."); } else { // Afficher le contenu destiné aux utilisateurs normaux document.write("Contenu destiné aux visiteurs du site."); } </script> |
Dans cet exemple, le JavaScript vérifie le user-agent
du visiteur. Si c’est un bot de moteur de recherche connu (comme Googlebot ou Bingbot), le script affiche un contenu différent de celui qu’il afficherait pour un visiteur humain standard.
Cloaking avec Flash
Le cloaking avec Flash est plus difficile à illustrer avec un simple extrait de code, car il implique généralement la combinaison de fichiers Flash (.swf) et de scripts côté serveur. Le concept est que le serveur détecte le user-agent et décide de servir une version Flash du contenu (généralement plus riche en médias et moins orientée texte) aux utilisateurs et une version différente, plus riche en texte, aux moteurs de recherche.
Exemple de cloaking avec DHTML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <!DOCTYPE html> <html> <head> <script type="text/javascript"> function showContent() { var userAgent = navigator.userAgent.toLowerCase(); var contentDiv = document.getElementById('content'); if(userAgent.includes("googlebot") || userAgent.includes("bingbot")) { contentDiv.innerHTML = "Contenu optimisé pour les moteurs de recherche."; } else { contentDiv.innerHTML = "Contenu destiné aux visiteurs du site."; } } </script> </head> <body onload="showContent()"> <div id="content"></div> </body> </html> |
Dans cet exemple DHTML, lorsque la page est chargée, la fonction showContent
est appelée et modifie le contenu de la div #content
en fonction du user-agent détecté.
Comment faire du cloaking pour Google ?
Il faut identifier les adresses IPs, DNS, Hote et User agent de vos visiteurs. Google nous donne une piste à explorer avec la liste des robots d’exploration du Web qu’ils utilisent. On peut déjà identifier le user agent. Mais ca ne suffit pas car n’importe qui peut utiliser les user agent de Google donc on va aussi contrôler le Hote, l’adresse IP ou les DNS pour éviter de se faire dénoncer par un concurrent.
Je vous publie ce script dans les prochains jours si ce sujet vous intéresse 😉
En attendant vous pouvez nous rejoindre sur le forum dédié aux cloacking pour en discuter.
sagessealp
06/11/2019 au 1:43 PMBonjour, on pourrait avoir la suite de l’article ?
Jean Francois Dupin
03/01/2020 au 6:09 PMElle est cloaké 😉