TECHNIQUE BLACK HAT — Documentation éducative

Cloaking

Le cloaking est une technique SEO consistant à présenter un contenu différent selon que la requête provient d'un robot d'indexation ou d'un utilisateur humain — une manipulation délibérée de la perception des moteurs de recherche, prohibée par les guidelines de Google, Bing et Yahoo.

👁 Ce que voit le robot (Googlebot)
GET / HTTP/1.1
User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html)

← 200 OK
<h1>Meilleurs hôtels Paris — Guide complet 2024</h1>
<p>Contenu éditorial riche, 2 500 mots, maillage interne propre, balises sémantiques optimisées…</p>
👤 Ce que voit l'utilisateur
GET / HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)

← 302 Found → /casino-en-ligne-illegal.html
<h1>Casino en ligne — Bonus 500€ sans vérification</h1>
<p>Offre limitée, cliquez maintenant, paiement Bitcoin…</p>
100 %Interdit par Google Webmaster Guidelines
6techniques principales identifiées
~1 jdélai de pénalité manuelle moyen
∞durée potentielle de la désindexation

// 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 IP

Google, 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 JavaScript

Les 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émentaires

Pré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

SituationCloaking ?Explication
Contenu différent pour bots vs humains✗ OUIIntentionnalité de tromper le moteur
Contenu adapté selon la langue/pays✓ NONMême contenu traduit, bot reçoit la même version
Version AMP vs desktop✓ NONDéclaré via balises canoniques, pas de tromperie
A/B test redirecting bots vers variante A uniquement✗ OUILe bot ne voit pas les vraies variantes testées
Page de connexion pour non-connectés✓ NONGoogle Search Console permet de déclarer les zones payantes
Afficher plus de texte aux bots qu'aux humains✗ OUIText stuffing — gonfler artificiellement le contenu indexé
Lazy loading d'images avec placeholder~ GRISAcceptable 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

SecteurTechnique utiliséeObjectifRisque
Pharmacie illicite (Pharma Hack)Injection PHP + RefererPositionner des pilules génériques sur des sites légitimes compromisExtrême
Jeux d'argent illégauxIP + UA + redirect 302Ranker sur "casino en ligne" sans contenu apparentExtrême
Sites pour adultesJS cloaking + lazy loadingIndexer sur des requêtes grand public, rediriger vers contenu adulteExtrême
Affiliate spamHidden text + redirectGénérer des commissions via ranking artificiel sur comparateursÉlevé
Sites de contrefaçonIP cloakingRanker sur des marques de luxe, livrer des contrefaçonsÉlevé
MalvertisingCDN cloakingServir des pubs propres au bot, malwares aux utilisateursCritique
Scraping dissimuléUA spoofing inverséLe scraper se fait passer pour Googlebot pour contourner les protectionsMoyen

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éclencheurEffetRécupération
Pénalité manuelle — spamSignalement + revue par équipe Search QualityDésindexation partielle ou totale, message dans GSCDifficile (demande de réexamen)
Pénalité algorithmiqueSpam Brain / ML detectionChute brutale du positionnement sans notificationLong (résolution + temps)
Désindexation complèteCloaking grave + spam massifLe domaine n'apparaît plus sur aucune requêteTrès difficile ou impossible
Suppression de l'index Discover/NewsCloaking détecté dans ces surfacesPlus d'apparition dans Google Discover ou NewsDemande de réexamen spécifique
Blacklistage domaineRécidive + spam systématiqueTous les futurs domaines du même propriétaire affectésQuasi 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.
PratiqueStatutCondition de légitimité
Internationalisation i18n (hreflang)✓ LégitimeDéclarer toutes les versions avec hreflang, le bot peut accéder à chaque version
Lazy loading d'images✓ LégitimeUtiliser des attributs loading="lazy" standards — Googlebot les supporte
Version AMP✓ LégitimeDéclarer la relation avec <link rel="amphtml"> et rel="canonical"
Paywall / contenu Premium✓ LégitimeDéclarer dans GSC (Structured Data paywallaccess), permettre accès limité à Googlebot
Gestion des sessions (cookies)~ GrisAcceptable si Googlebot sans cookie voit le même contenu essentiel
Personalisation UX non editoriale✓ LégitimeChanger la couleur du thème, l'ordre des recommandations — pas le contenu textuel indexable
A/B testing (Google Optimize style)✓ LégitimeNe pas exclure Googlebot des tests, utiliser des redirects 302 temporaires
Adaptive serving (images WebP vs JPEG)✓ LégitimeLe 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.