Un bot débarque sur ton site, se présente comme GPTBot, aspire vingt pages en trente secondes, puis disparaît. Tu le laisses passer parce que ton robots.txt autorise OpenAI et que bloquer un crawler IA, c'est perdre de la visibilité GEO. Sauf qu'usurper un user-agent prend cinq secondes de curl, et rien ne prouve que ce visiteur était vraiment GPTBot. Ça pouvait tout aussi bien être un concurrent qui aspire tes prix, un scraper qui revend ton contenu à un modèle tiers, ou un outil de veille qui contourne ton paywall en se faisant passer pour un robot que tu as choisi de laisser entrer.
Ce guide détaille comment distinguer un vrai crawler IA d'un usurpateur, avec les deux méthodes de vérification qui comptent réellement, un script prêt à copier, et la grille de décision pour savoir quoi faire une fois le diagnostic posé.
Le user-agent ne prouve rien : usurper GPTBot prend cinq secondes
curl -A "GPTBot" https://tonsite.fr/tarifs
Cette commande suffit à se faire passer pour GPTBot aux yeux de n'importe quel serveur qui ne vérifie que l'en-tête User-Agent. Aucune barrière technique n'empêche un script, un concurrent ou un scraper malveillant de déclarer le user-agent de son choix. C'est un problème de fond très différent du SEO classique : ignorer un Disallow dans ton robots.txt est déjà une violation de la convention pour un vrai bot, mais un usurpateur n'a même pas besoin de l'ignorer, il se contente de se faire passer pour un bot que tu as explicitement autorisé.
Les conséquences concrètes : un concurrent qui surveille tes prix en continu sans jamais apparaître dans tes outils d'analyse classiques (puisqu'il se fond dans le trafic "IA légitime" que tu as choisi de ne pas bloquer), un contenu premium aspiré et republié ailleurs, ou un pic de charge serveur attribué à tort à un vrai pic de crawl OpenAI alors qu'il s'agit d'un bot mal codé qui martèle tes pages sans respecter de délai.
Qui sont vraiment GPTBot, ClaudeBot et PerplexityBot
Avant de vérifier un crawler, il faut savoir ce que chaque bot est censé faire. Les opérateurs IA séparent en général leurs bots d'entraînement de leurs bots de citation en temps réel, une distinction déjà détaillée dans notre guide pour bloquer les crawlers d'entraînement IA :
| Bot | Opérateur | Rôle | Respecte robots.txt |
|---|---|---|---|
GPTBot | OpenAI | Entraînement des modèles | Oui |
OAI-SearchBot | OpenAI | Indexation pour ChatGPT Search | Oui |
ChatGPT-User | OpenAI | Requête déclenchée par un utilisateur en direct | Oui |
ClaudeBot | Anthropic | Entraînement des modèles | Oui, reverse DNS parfois absent |
Claude-SearchBot | Anthropic | Citation et recherche | Oui |
PerplexityBot | Perplexity | Indexation et citation | Comportement variable signalé |
Googlebot | Référence historique, sert de témoin de comparaison | Oui |
Retiens surtout que le nom du bot dans le user-agent ne te dit rien sur sa légitimité tant que tu ne l'as pas vérifié par un des deux moyens ci-dessous.
Méthode 1 : la vérification DNS dans les deux sens
La méthode la plus fiable pour un trafic ponctuel combine une résolution DNS inverse et une confirmation dans l'autre sens :
- Résolution inverse. Tu pars de l'adresse IP du visiteur et tu cherches à quel nom d'hôte elle correspond.
- Validation du domaine. Ce nom d'hôte doit appartenir au domaine officiel de l'opérateur (
openai.compour GPTBot,anthropic.compour ClaudeBot,googlebot.compour Googlebot). - Confirmation directe. Tu résous ce nom d'hôte à nouveau dans l'autre sens et tu vérifies qu'il retombe bien sur la même adresse IP de départ.
host 20.171.207.113
# => 113.207.171.20.in-addr.arpa domain name pointer crawl-xxxx.crawl.openai.com.
host crawl-xxxx.crawl.openai.com
# => crawl-xxxx.crawl.openai.com has address 20.171.207.113
Si les deux adresses IP correspondent et que le nom d'hôte appartient bien au domaine attendu, le bot est authentique. La confirmation dans les deux sens n'est pas un détail : une résolution inverse seule peut être falsifiée par quiconque contrôle la zone DNS inverse de son propre bloc IP, alors que la boucle complète (inverse puis direct) est beaucoup plus difficile à truquer.
Méthode 2 : les plages IP publiées
OpenAI, Anthropic et Perplexity publient des listes d'adresses IP (souvent au format CIDR ou JSON) correspondant à leurs crawlers officiels. Comparer l'IP source à ces listes est plus rapide qu'une résolution DNS à chaque requête, à condition de rafraîchir le fichier régulièrement puisque ces plages évoluent. C'est aussi la méthode de secours recommandée pour ClaudeBot, dont la résolution DNS inverse n'est pas toujours fiable selon les retours d'implémentation observés en 2026 : dans ce cas, la correspondance avec la plage IP publiée par Anthropic devient la vérification principale plutôt qu'un complément.
En pratique, la combinaison la plus robuste reste : IP dans la plage publiée ET résolution DNS croisée cohérente quand elle est disponible. Un seul des deux signaux positifs suffit rarement à trancher pour un trafic à fort enjeu (zone de prix, contenu payant, formulaires).
Un script pour ne plus le faire à la main
Vérifier manuellement chaque requête n'a aucun sens à l'échelle d'un site qui reçoit plusieurs centaines de passages de bots par jour. Voici la logique à automatiser dans ton middleware ou ton reverse proxy :
#!/usr/bin/env bash
# verify-ai-bot.sh <IP> <USER_AGENT>
IP="$1"
UA="$2"
HOSTNAME=$(host "$IP" | awk '/pointer/ {print $NF}' | sed 's/.$//')
if [[ -z "$HOSTNAME" ]]; then
echo "SPOOF_SUSPECTED: aucune resolution inverse pour $IP (UA: $UA)"
exit 1
fi
case "$UA" in
*GPTBot*|*OAI-SearchBot*|*ChatGPT-User*) EXPECTED="openai.com" ;;
*ClaudeBot*|*Claude-SearchBot*) EXPECTED="anthropic.com" ;;
*PerplexityBot*) EXPECTED="perplexity.com" ;;
*) echo "UNKNOWN_BOT: $UA"; exit 2 ;;
esac
if [[ "$HOSTNAME" != *"$EXPECTED" ]]; then
echo "SPOOF_CONFIRMED: $HOSTNAME n'appartient pas a $EXPECTED (UA: $UA)"
exit 1
fi
FORWARD_IP=$(host "$HOSTNAME" | awk '/has address/ {print $NF}')
if [[ "$FORWARD_IP" != "$IP" ]]; then
echo "SPOOF_CONFIRMED: la confirmation directe ne correspond pas (UA: $UA)"
exit 1
fi
echo "VERIFIED: $UA depuis $IP ($HOSTNAME)"
Journalise le résultat (VERIFIED, SPOOF_SUSPECTED, SPOOF_CONFIRMED) avec l'IP, le user-agent et l'URL demandée. C'est ce journal qui te permettra de répondre à la question qui compte vraiment : qui aspire réellement ton site sous couvert d'un nom de bot connu.
Autoriser, limiter ou bloquer : la grille de décision
| Résultat de la vérification | Action recommandée |
|---|---|
Bot de citation vérifié (OAI-SearchBot, Claude-SearchBot, PerplexityBot confirmé) | Laisser passer, c'est ta visibilité GEO |
Bot d'entraînement vérifié (GPTBot, ClaudeBot confirmé) | Décision stratégique propre à ton contenu, voir notre guide sur le blocage des crawlers d'entraînement |
| User-agent IA connu mais échec de la double vérification | Bloquer ou limiter fortement, et journaliser pour investigation |
| Volume anormal même vérifié | Rate-limiter par IP plutôt que bloquer, pour ne pas perdre la citation |
Les règles d'autorisation dans robots.txt que nous détaillons dans notre guide robots.txt 2026 ne sont qu'une déclaration d'intention : elles indiquent ce qu'un bot respectueux doit faire, pas ce qu'un usurpateur va faire. La vérification technique en amont, elle, s'applique à tout le trafic, respectueux ou non.
Ce qu'on trouve en pratique sur un audit
Sur un audit récent mené par SeAudit pour un site e-commerce de taille moyenne, l'analyse des logs sur trente jours a fait remonter 1 240 requêtes affichant un user-agent GPTBot. Après passage au script de vérification ci-dessus, seules 890 d'entre elles (72 %) ont validé la double résolution DNS. Les 350 restantes provenaient d'un unique bloc d'adresses IP non documenté, concentré sur les pages de tarification et de comparatif produit, un schéma typique de surveillance concurrentielle plutôt que d'un vrai passage OpenAI. Ce type d'écart ne se voit dans aucun outil analytics classique tant que personne n'a vérifié la légitimité du user-agent déclaré.
Erreurs courantes
- Faire confiance au user-agent seul. C'est la faille la plus répandue, et la plus simple à corriger.
- Vérifier une fois puis ne plus surveiller. Les plages IP publiées changent ; un script qui tournait il y a six mois peut travailler avec une liste obsolète aujourd'hui.
- Bloquer tous les bots par prudence. Tu perds alors aussi les bots de citation légitimes, donc ta visibilité dans les réponses IA.
- Ne pas journaliser assez de champs. IP, user-agent, URL et horodatage sont le minimum pour pouvoir enquêter a posteriori sur un pic suspect.
À retenir
Un nom de bot dans le user-agent est une déclaration, pas une preuve. La seule façon de savoir si GPTBot, ClaudeBot ou PerplexityBot est réellement en train de visiter ton site est de croiser une résolution DNS dans les deux sens avec les plages IP publiées par chaque opérateur, puis de journaliser le résultat pour distinguer le vrai trafic IA du trafic usurpé. Envie de savoir où ton propre site se situe sur ces sujets techniques, obtiens ton score /100 en quelques minutes.
