// 01 — Fondamentaux
Définition et principes
Définition officielle (Google) : le cloaking consiste à présenter un contenu ou une URL différente aux robots d'exploration et aux utilisateurs. C'est considéré comme une violation des Consignes aux webmasters de Google, car les utilisateurs voient un contenu différent de celui évalué par Google. (developers.google.com/search/docs/crawling-indexing/cloaking)
Le terme vient de l'anglais to cloak — « dissimuler sous une cape ». Par analogie, le site revêt un « manteau d'invisibilité » pour tromper les moteurs de recherche et les faire indexer un contenu qu'ils ne verraient jamais autrement.
Mécanisme fondamental
Le cloaking exploite une réalité technique fondamentale : un serveur web peut savoir qui fait une requête avant de renvoyer sa réponse. Sur la base de cette identification, il peut choisir de servir un contenu différent. Les critères d'identification sont :
User-Agent (HTTP Header)Chaque client HTTP envoie une chaîne User-Agent identifiant le logiciel client. Les bots ont des UA prévisibles (Googlebot/2.1, Bingbot/2.0). Facile à détecter, mais facilement spoofable.
Adresse IPGoogle, Bing, Baidu et les autres publient leurs plages d'IP de crawlers. Détection par lookup dans ces listes ou via DNS inversé. Plus fiable que le UA seul — difficile à falsifier côté bot.
Comportement JavaScriptLes robots n'exécutent pas toujours le JS, ou l'exécutent différemment. Le serveur peut détecter l'absence d'exécution JS côté client pour identifier un bot (bien que Googlebot rende JS depuis 2015).
Headers HTTP supplémentairesPrésence ou absence de Accept-Language, Accept-Encoding, Referer, cookies de session, résolution d'écran (via JS). Un bot typique envoie moins de headers qu'un navigateur réel.
Différence cloaking vs personnalisation légitime
| Situation | Cloaking ? | Explication |
| Contenu différent pour bots vs humains | ✗ OUI | Intentionnalité de tromper le moteur |
| Contenu adapté selon la langue/pays | ✓ NON | Même contenu traduit, bot reçoit la même version |
| Version AMP vs desktop | ✓ NON | Déclaré via balises canoniques, pas de tromperie |
| A/B test redirecting bots vers variante A uniquement | ✗ OUI | Le bot ne voit pas les vraies variantes testées |
| Page de connexion pour non-connectés | ✓ NON | Google Search Console permet de déclarer les zones payantes |
| Afficher plus de texte aux bots qu'aux humains | ✗ OUI | Text stuffing — gonfler artificiellement le contenu indexé |
| Lazy loading d'images avec placeholder | ~ GRIS | Acceptable si le bot peut renderer le JS et voir l'image finale |
// 02 — Arsenal Technique
Techniques de cloaking
IP-based
Cloaking par adresse IP
Le serveur compare l'IP source à une liste de plages connues des crawlers (Googlebot : 66.249.64.0/19, etc.). Si l'IP correspond → page SEO ; sinon → page réelle. Technique la plus courante et la plus robuste.
User-Agent
Cloaking par User-Agent
Détection de la chaîne UA dans le header HTTP. Simple, mais contournable si Google vérifie le contenu avec un UA de navigateur normal (ce qu'il fait régulièrement pour détecter le cloaking).
JavaScript
Cloaking JS / DOM-based
Contenu injecté uniquement en JS, absent du HTML initial. Les bots qui ne rendent pas JS voient le contenu SEO dans le HTML statique. Les utilisateurs voient le contenu JS. Efficace contre les bots sans rendering, moins contre Googlebot (qui rende JS).
CSS/Style
Texte masqué (Hidden text)
Texte avec display:none, visibility:hidden, couleur identique au fond, taille de police 0, ou positionné hors écran (left:-9999px). Indexé par les bots, invisible pour les utilisateurs. Forme dégradée de cloaking.
Redirect
Soft 404 / Redirect cloaking
Le bot reçoit un code 200 avec du contenu SEO. L'utilisateur est redirigé (302/JS) vers une page différente. Le robot indexe la page A, l'utilisateur arrive sur la page B. Très souvent utilisé pour les sites de spam pharmaceutique ou de jeux en ligne illégaux.
Flash / PDF
Cloaking Flash/PDF
Historiquement : HTML riche pour les bots, contenu Flash pour les humains (Flash non indexé). Aujourd'hui avec les PDF : contenu HTML indexable pour les bots, iframe ou embed vers un PDF/image illisible pour les humains.
HTTP_REFERER
Cloaking par Referer
Si la requête vient d'une SERP Google (Referer: google.com), l'utilisateur est redirigé vers une page différente. Technique du « pharma hack » : bonne landing pour Google, contenu spam si on clique depuis les résultats.
CDN Layer
Cloaking via CDN/Reverse Proxy
Un CDN ou reverse proxy intercepte les requêtes des bots et sert un contenu différent sans que le serveur d'origine soit impliqué. Couche de difficultés supplémentaire pour l'attribution lors d'un audit.
// 03 — Implémentation (à des fins d'audit)
Exemples de code
1. Détection IP (PHP) — méthode de référence
// Liste partielle des plages IP Googlebot (à maintenir à jour)
function isGooglebot($ip): bool {
// Étape 1 : DNS inversé
$hostname = gethostbyaddr($ip);
if (!preg_match('/\.googlebot\.com$|\.google\.com$/', $hostname)) {
return false;
}
// Étape 2 : DNS direct (vérification croisée obligatoire)
$resolved = gethostbyname($hostname);
return $resolved === $ip;
}
$clientIP = $_SERVER['REMOTE_ADDR'];
if (isGooglebot($clientIP)) {
// ⚠ Servir un contenu différent ici = CLOAKING
include 'seo_version.html';
} else {
include 'user_version.html';
}
2. Détection User-Agent (PHP / .htaccess)
# --- Apache .htaccess (redirection bot) ---
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} Googlebot|bingbot|Yahoo|Slurp [NC]
RewriteRule ^(.*)$ /seo-version/$1 [L,R=302]
// --- PHP : simple détection UA ---
$ua = strtolower($_SERVER['HTTP_USER_AGENT'] ?? '');
$knownBots = ['googlebot', 'bingbot', 'slurp', 'duckduckbot',
'baiduspider', 'yandexbot', 'sogou', 'exabot', 'facebot'];
foreach ($knownBots as $bot) {
if (str_contains($ua, $bot)) {
// ⚠ L'UA est facilement falsifiable — NE PAS utiliser seul
serve_seo_content();
exit;
}
}
3. Cloaking JavaScript (injection DOM)
// Technique : contenu SEO dans HTML statique, remplacé en JS
// HTML initial (indexé par le bot) :
// <div id="content">Contenu SEO riche avec 1000 mots-clés...</div>
// JS exécuté uniquement par les navigateurs humains :
document.addEventListener('DOMContentLoaded', () => {
// Détecte les "humains" : interactions, résolution, plugins
const isHuman = window.innerWidth > 0
&& navigator.plugins.length > 0
&& !window.callPhantom; // détecte PhantomJS
if (isHuman) {
// ⚠ Remplace le contenu par celui destiné aux humains
document.getElementById('content').innerHTML =
'<iframe src="page-spam.html" style="border:0;width:100%"></iframe>';
}
});
4. Cloaking par Referer (hack pharmacie)
// Technique du "Pharma Hack" — injectée via faille CMS
$referer = $_SERVER['HTTP_REFERER'] ?? '';
// Visite directe ou depuis Google → page spam visible uniquement pour utilisateurs Google
if (preg_match('/google\.|yahoo\.|bing\.|baidu\./i', $referer)) {
// ⚠ Redirection vers contenu de spam (médicaments, paris illégaux...)
header('Location: https://spam-pharmacy.net/cheap-pills');
exit;
}
// Les crawlers (sans Referer de SERP) voient le vrai site légal
include 'index_normal.php';
5. Texte caché CSS — variante cloaking
<!-- Méthode 1 : couleur sur fond -->
<div style="color:#ffffff; background:#ffffff;">
acheter cialis generique pas cher livraison rapide...
</div>
<!-- Méthode 2 : position hors écran -->
<div style="position:absolute; left:-9999px; top:-9999px;">
1000 mots-clés SEO spam non visible à l'écran...
</div>
<!-- Méthode 3 : font-size 0 -->
<span style="font-size:0px; display:inline;">mots clés cachés</span>
<!-- Méthode 4 : z-index négatif sous image -->
<div style="z-index:-1; position:relative;">spam text</div>
<img src="cover.jpg" style="position:absolute; top:0; left:0;">
// 04 — Cas d'Usage
Usages observés dans la nature
| Secteur | Technique utilisée | Objectif | Risque |
| Pharmacie illicite (Pharma Hack) | Injection PHP + Referer | Positionner des pilules génériques sur des sites légitimes compromis | Extrême |
| Jeux d'argent illégaux | IP + UA + redirect 302 | Ranker sur "casino en ligne" sans contenu apparent | Extrême |
| Sites pour adultes | JS cloaking + lazy loading | Indexer sur des requêtes grand public, rediriger vers contenu adulte | Extrême |
| Affiliate spam | Hidden text + redirect | Générer des commissions via ranking artificiel sur comparateurs | Élevé |
| Sites de contrefaçon | IP cloaking | Ranker sur des marques de luxe, livrer des contrefaçons | Élevé |
| Malvertising | CDN cloaking | Servir des pubs propres au bot, malwares aux utilisateurs | Critique |
| Scraping dissimulé | UA spoofing inversé | Le scraper se fait passer pour Googlebot pour contourner les protections | Moyen |
Le Pharma Hack — étude de cas
Pharma Hack (2010–présent) : l'une des attaques SEO cloaking les plus répandues. Un attaquant compromet un site légitme (CMS non mis à jour, plugins vulnérables) et injecte discrètement des pages de vente de médicaments (Viagra, Cialis, Xanax). Ces pages sont indexées sur des requêtes hautement concurrentielles. Le propriétaire du site ne voit rien (pages masquées aux admins), Google indexe du spam pharmaceutique. L'attaque est souvent découverte quand le site reçoit une pénalité manuelle ou quand le propriétaire cherche son propre nom sur Google.
// 05 — Comment Google détecte
Techniques de détection par les moteurs de recherche
Google emploie plusieurs stratégies pour identifier le cloaking, rendant cette pratique de plus en plus risquée :
🕵️
Googlebot Incognito (UA normal)
Google crawle régulièrement les mêmes URLs avec un User-Agent de navigateur standard (Chrome) au lieu du Googlebot officiel. Si le contenu diffère, le cloaking est détecté.
RISQUE ÉLEVÉ
🔍
Fetch as Google (GSC)
L'outil "Inspecter l'URL" dans la Google Search Console permet de voir exactement ce que Googlebot récupère et rend. Les webmasters peuvent aussi l'utiliser pour auto-diagnostiquer.
RISQUE ÉLEVÉ
📊
Comparaison cache vs live
Comparaison automatisée entre le cache Google (ce que Googlebot a crawlé) et le rendu actuel de la page pour un utilisateur. Divergences = signal fort de cloaking.
RISQUE ÉLEVÉ
🌐
Rapports utilisateurs / spam reports
Les utilisateurs qui tombent sur des pages spam peuvent les signaler directement à Google (Report Spam). Ces signaux déclenchent des revues manuelles par l'équipe Search Quality.
RISQUE MOYEN
🤖
Machine learning sur patterns
Les systèmes de Google analysent des patterns comportementaux : taux de rebond inhabituel, divergence entre CTR et positionnement, signaux UX aberrants — tous indicateurs d'un contenu trompeur.
RISQUE MOYEN
🔗
Vérification IP (PTR records)
Google publie ses plages IP officielles. Si un site tente de servir du contenu différent basé sur l'IP de Google, Google le détecte en comparant le comportement depuis ses IP officielles et des IP tierces.
RISQUE FAIBLE
⚡
Rendering JavaScript (Chromium headless)
Depuis 2015, Googlebot exécute JavaScript en utilisant une instance headless de Chrome (WRS — Web Rendering Service). Il voit donc le contenu rendu, pas seulement le HTML statique — contourne le JS cloaking.
RISQUE ÉLEVÉ
Outils pour détecter le cloaking sur son propre site
# Comparer ce que voit Googlebot vs un navigateur
$ curl -s -A "Googlebot/2.1 (+http://www.google.com/bot.html)" \
https://exemple.com/ | grep -i "<title>\|<h1>"
# Comparer avec un navigateur classique
$ curl -s -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0" \
https://exemple.com/ | grep -i "<title>\|<h1>"
# Depuis l'IP de Googlebot (pour tester les sites IP-cloakés)
$ curl -s --interface 66.249.66.1 https://exemple.com/ | md5sum
$ curl -s --interface votre_ip https://exemple.com/ | md5sum
# Si les hashs diffèrent → contenu différent → CLOAKING
# Vérifier le DNS PTR d'une IP suspecte
$ nslookup 66.249.66.1
# → crawl-66-249-66-1.googlebot.com ✓
# Scraping headless pour voir le rendu JS
$ puppeteer --url https://exemple.com/ --wait-for-selector "#main-content"
// 06 — Conséquences
Sanctions et pénalités
Position officielle Google : « Si votre site est pris en flagrant délit de cloaking, il sera supprimé de l'index Google. » — Google Webmaster Guidelines. Cette sanction peut être permanente si le problème n'est pas résolu et contesté via un réexamen.
| Type de pénalité | Déclencheur | Effet | Récupération |
| Pénalité manuelle — spam | Signalement + revue par équipe Search Quality | Désindexation partielle ou totale, message dans GSC | Difficile (demande de réexamen) |
| Pénalité algorithmique | Spam Brain / ML detection | Chute brutale du positionnement sans notification | Long (résolution + temps) |
| Désindexation complète | Cloaking grave + spam massif | Le domaine n'apparaît plus sur aucune requête | Très difficile ou impossible |
| Suppression de l'index Discover/News | Cloaking détecté dans ces surfaces | Plus d'apparition dans Google Discover ou News | Demande de réexamen spécifique |
| Blacklistage domaine | Récidive + spam systématique | Tous les futurs domaines du même propriétaire affectés | Quasi irréversible |
Cas réels de pénalités
BMW Germany (2006)Premier cas médiatisé majeur. BMW Allemagne utilisait du texte JavaScript masqué et des pages doorway pour ranker sur "used cars". Désindexation complète du domaine bmw.de annoncée publiquement par Matt Cutts (Google). Réintégration après 2 jours suite à correction rapide.
JC Penney (2011)Le New York Times révèle que jcpenney.com avait acheté des milliers de liens et utilisait du texte caché pour ranker sur des centaines de termes (robes de mariée, jeans…). Pénalité Google majeure, le site chuta de #1 à #70 sur des dizaines de requêtes. Pénalité manuelle visible dans GSC.
Overstock.com (2011)Identique à JC Penney — scheme de liens + techniques de cloaking. Désindexation partielle suivie d'une récupération après soumission d'une demande de réexamen et nettoyage. Pertes financières estimées à plusieurs millions sur les semaines de pénalité.
// 07 — Audit & Protection
Contre-mesures et protection
Auditer son propre site
import requests
from hashlib import md5
def detect_cloaking(url: str) -> dict:
"""Compare le contenu reçu avec différents User-Agents."""
agents = {
"Googlebot": "Googlebot/2.1 (+http://www.google.com/bot.html)",
"Bingbot": "Mozilla/5.0 (compatible; bingbot/2.0)",
"Chrome": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0",
"Mobile": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_0) AppleWebKit",
}
results = {}
hashes = set()
for name, ua in agents.items():
r = requests.get(url, headers={"User-Agent": ua}, timeout=10)
h = md5(r.text.encode()).hexdigest()
results[name] = {"status": r.status_code, "hash": h,
"final_url": r.url}
hashes.add(h)
results["cloaking_detected"] = len(hashes) > 1
return results
# Utilisation
report = detect_cloaking("https://exemple.com/")
print(f"Cloaking détecté : {report['cloaking_detected']}")
Protéger son site contre l'injection de cloaking (Pharma Hack)
- Mises à jour systématiques : CMS (WordPress, Drupal), plugins, thèmes — 90 % des hacks exploitent des vulnérabilités connues.
- Monitoring de l'index Google : site:votredomaine.com depuis un IP différente + UA bot pour détecter des pages injectées.
- Google Search Console : activer les alertes de pénalité manuelle et surveiller la couverture de l'index.
- Intégrité des fichiers : surveiller les modifications de
.htaccess, wp-config.php, functions.php, fichiers core — outils : Wordfence, Sucuri.
- CSP (Content Security Policy) : empêcher l'injection de scripts non autorisés via header HTTP.
- WAF (Web Application Firewall) : Cloudflare, AWS WAF, Sucuri — filtrent les requêtes malveillantes avant qu'elles n'atteignent le serveur.
# Bloquer les UA de bots connus qui font des requêtes suspectes
map $http_user_agent $blocked_agent {
default 0;
~*masscan 1;
~*nikto 1;
~*sqlmap 1;
~*acunetix 1;
"" 1; # UA vide → bloquer
}
if ($blocked_agent) { return 403; }
// 08 — Zone Grise
Cas de différentiation légitime (non-cloaking)
Principe clé (Google) : la différentiation de contenu est acceptable à condition que le moteur de recherche ait accès au même contenu que l'utilisateur final — ou que la différence soit explicitement déclarée et attendue (via hreflang, rel=canonical, robots.txt, GSC settings). L'intention de tromper est le critère discriminant.
| Pratique | Statut | Condition de légitimité |
| Internationalisation i18n (hreflang) | ✓ Légitime | Déclarer toutes les versions avec hreflang, le bot peut accéder à chaque version |
| Lazy loading d'images | ✓ Légitime | Utiliser des attributs loading="lazy" standards — Googlebot les supporte |
| Version AMP | ✓ Légitime | Déclarer la relation avec <link rel="amphtml"> et rel="canonical" |
| Paywall / contenu Premium | ✓ Légitime | Déclarer dans GSC (Structured Data paywallaccess), permettre accès limité à Googlebot |
| Gestion des sessions (cookies) | ~ Gris | Acceptable si Googlebot sans cookie voit le même contenu essentiel |
| Personalisation UX non editoriale | ✓ Légitime | Changer la couleur du thème, l'ordre des recommandations — pas le contenu textuel indexable |
| A/B testing (Google Optimize style) | ✓ Légitime | Ne pas exclure Googlebot des tests, utiliser des redirects 302 temporaires |
| Adaptive serving (images WebP vs JPEG) | ✓ Légitime | Le contenu éditorial reste identique — seul le format de l'image change |
// 09 — Outillage
Outils de détection et d'audit
Google
Google Search Console
Outil officiel. Inspection d'URL : voit exactement ce que Googlebot a crawlé + rendu. Rapports de couverture pour détecter des pages inattendues. Pénalités manuelles visibles dans "Actions manuelles".
Audit
Screaming Frog / Sitebulb
Crawlers d'audit SEO configurables avec différents UA. Comparaison du contenu crawlé entre UA Googlebot et navigateur standard. Détection de redirects inattendus.
Sécurité
Sucuri SiteCheck
Scan gratuit pour détecter les malwares et injections de cloaking (Pharma Hack). Vérifie depuis plusieurs IP et UA. Alertes automatiques par email.
Réseau
cURL + Diff
Approche manuelle puissante. curl -A "Googlebot" vs curl -A "Chrome" puis diff des deux réponses — immédiatement révèle toute différence de contenu serveur.
Monitoring
Uptime Robot + Custom Agent
Monitoring continu avec UA personnalisé (Googlebot). Alertes si le contenu change ou si une redirection apparaît. Détection précoce d'injections de cloaking sur son propre site.
Dev
Chrome DevTools / Network
Onglet Network → surcharger le UA manuellement. Onglet "Application" → voir les cookies/sessions actifs. Lighthouse peut révéler des différences de rendu entre crawl et affichage.
// 10 — Chronologie
Histoire du cloaking SEO
~1995–1998
Premières techniques — Dawn of SEO
Les premiers SEO découvrent que les moteurs (AltaVista, Excite) indexent différemment du contenu selon les UA. Le keyword stuffing et les pages doorway sont inventés. Le cloaking naît de l'exploitation de ces différences.
2000
Google's First Spam Team
Google crée une équipe dédiée à la lutte contre le spam (Matt Cutts rejoint l'équipe). Les premières sanctions manuelles sont appliquées. Google publie ses premières Webmaster Guidelines incluant une interdiction explicite du cloaking.
2006
Cas BMW Germany — médiatisation
BMW.de désindexé pour cloaking basé sur des pages doorway JavaScript. Annonce publique de Matt Cutts — premier grand signal que Google sévit réellement. Le cas devient un cas d'école dans la communauté SEO mondiale.
2008–2011
Epidémie Pharma Hack
Prolifération des injections de cloaking pharmacie sur des milliers de sites CMS non sécurisés. Affecte des journaux, universités, gouvernements. Des pages "acheter viagra" apparaissent sur des domaines respectables — déclenchant des pénalités massives pour des victimes innocentes.
2011
Google Panda + Penguin — Algorithmic Detection
Panda (février) et Penguin (avril 2012) intègrent des signaux de qualité algorithmiques détectant le spam et le cloaking. Les techniques basées uniquement sur l'UA deviennent rapidement obsolètes.
2014–2015
Googlebot rend JavaScript
Google annonce que Googlebot exécute désormais JavaScript via une version headless de Chrome (WRS). Le JS cloaking — longtemps efficace — perd massivement de son efficacité. Les techniques d'évasion se sophistiquent.
2016
Google Penguin 4.0 — Real-time
Penguin passe en temps réel et fait partie du core algorithm. La détection de spam (dont le cloaking) devient permanente et continue plutôt que périodique. Récupération accélérée après correction.
2022–2024
Spam Brain — ML-based Detection
Google déploie SpamBrain, un système de détection de spam basé sur le machine learning. Capable d'identifier des patterns de cloaking non vus auparavant. Le modèle apprend continuellement des nouveaux comportements adversariaux. Les mises à jour Spam Update (mars 2024) ciblent spécifiquement le scaled content abuse et le site reputation abuse — formes modernes de cloaking.