GEO technique
Trouvez les bots IA dans vos logs serveur (et vérifiez qu’ils sont réels)
Votre outil d’analytics ne voit pas les robots d’IA. Vos logs serveur, si. Voici des commandes à copier, les listes d’IP officielles et une checklist de confidentialité.
Mis à jour et vérifié le 19 octobre 2026
Pourquoi votre analytics ne montre pas les bots IA
Des outils comme Google Analytics comptent les visites avec un petit script qui tourne dans le navigateur. Un robot qui télécharge seulement votre HTML n’exécute jamais ce script, donc il n’apparaît jamais.
Votre serveur web note chaque requête, des humains comme des bots. Ce registre, c’est votre log d’accès.
Les logs répondent à trois questions : quels bots passent, quelles pages ils récupèrent, et s’ils obtiennent la page ou une erreur.
Où trouver vos logs
- nginx : le format standard « combined » contient déjà tout le nécessaire. Sous Debian et Ubuntu, le fichier se trouve en général dans /var/log/nginx/access.log.
- Apache : utilisez aussi le format combined. Le format « common » n’a pas d’agent utilisateur, il ne permet donc pas de repérer les bots. Ajoutez %{User-agent}i à votre LogFormat.
- Derrière un CDN ou un proxy ? Le premier champ affiche alors peut-être l’IP de votre proxy pour chaque requête. Configurez d’abord le réglage « real IP » de votre serveur (ou enregistrez l’IP client transmise), sinon chaque vérification d’IP ci-dessous échouera.
- Pas d’accès aux logs bruts ? Regardez le tableau de bord de votre hébergeur, ou placez un CDN devant votre site. Plus d’infos plus bas.
Lire une ligne de log
Voici une ligne au format combined, avec une adresse IP inventée. Chaque partie répond à une question.
203.0.113.7 - - [19/Oct/2026:08:01:02 +0000] "GET /pricing HTTP/1.1" 200 5123 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot"- Adresse IP : d’où vient la requête. C’est elle que vous comparerez aux listes officielles.
- Heure : quand cela s’est produit.
- Requête : la méthode et la page. Ici GET /pricing.
- Code de statut : 200 = servie, 301/302 = redirigée, 403 = bloquée, 404 = introuvable, 5xx = erreur serveur.
- Octets : la quantité renvoyée.
- Agent utilisateur : qui le visiteur prétend être. Ici GPTBot. N’importe qui peut le taper, donc à lui seul il ne prouve rien.
Les bots IA à repérer
Cette liste vient de la documentation de chaque entreprise, vérifiée le 19 octobre 2026.
| Agent utilisateur | Entreprise | Rôle | Respecte robots.txt | Liste d’IP |
|---|---|---|---|---|
OAI-SearchBot | OpenAI | Index de recherche | Oui | OAI-SearchBot JSON (s’ouvre dans un nouvel onglet) |
GPTBot | OpenAI | Entraînement | Oui | GPTBot JSON (s’ouvre dans un nouvel onglet) |
ChatGPT-User | OpenAI | Demande d’un utilisateur | En partie | ChatGPT-User JSON (s’ouvre dans un nouvel onglet) |
Claude-SearchBot | Anthropic | Index de recherche | Oui | Claude-SearchBot JSON (s’ouvre dans un nouvel onglet) |
ClaudeBot | Anthropic | Entraînement | Oui | ClaudeBot JSON (s’ouvre dans un nouvel onglet) |
Claude-User | Anthropic | Demande d’un utilisateur | Oui | Claude-User JSON (s’ouvre dans un nouvel onglet) |
PerplexityBot | Perplexity | Index de recherche | Oui | PerplexityBot JSON (s’ouvre dans un nouvel onglet) |
Perplexity-User | Perplexity | Demande d’un utilisateur | Non | Perplexity-User JSON (s’ouvre dans un nouvel onglet) |
Googlebot | Moteur de recherche | Oui | Googlebot JSON (s’ouvre dans un nouvel onglet) | |
Google-Agent | Demande d’un utilisateur | Non | Google-Agent JSON (s’ouvre dans un nouvel onglet)Google-Agent JSON (s’ouvre dans un nouvel onglet)Google-Agent JSON (s’ouvre dans un nouvel onglet) | |
bingbot | Microsoft | Moteur de recherche | Oui | bingbot JSON (s’ouvre dans un nouvel onglet) |
Applebot | Apple | Moteur de recherche | Oui | Applebot JSON (s’ouvre dans un nouvel onglet) |
meta-externalagent | Meta | Entraînement | Oui | Non publiée |
meta-webindexer | Meta | Index de recherche | Oui | Non publiée |
meta-externalfetcher | Meta | Demande d’un utilisateur | En partie | Non publiée |
Amazonbot | Amazon | Entraînement | Oui | Non publiée |
Amzn-SearchBot | Amazon | Index de recherche | Oui | Non publiée |
Amzn-User | Amazon | Demande d’un utilisateur | En partie | Non publiée |
DuckAssistBot | DuckDuckGo | Index de recherche | Oui | DuckAssistBot JSON (s’ouvre dans un nouvel onglet) |
MistralAI-User | Mistral AI | Demande d’un utilisateur | Oui | Non publiée |
MistralAI-Index | Mistral AI | Index de recherche | Non précisé | Non publiée |
MistralAI-Training | Mistral AI | Entraînement | Oui | Non publiée |
CCBot | Common Crawl | Entraînement | Oui | CCBot JSON (s’ouvre dans un nouvel onglet) |
Google-Extended et Applebot-Extended sont des jetons robots.txt, pas des robots. Ils n’apparaissent jamais dans un log.
Anthropic ne publie pas de chaînes d’agent utilisateur complètes. Dans les logs, elles ressemblent à « compatible; Claude-User/1.0; +claudebot@anthropic.com ».
Commandes à copier
Elles fonctionnent sur un log au format combined. Nous les avons testées le 19 octobre 2026 avec grep et awk sous macOS. Remplacez access.log par votre fichier.
grep -oE 'GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User|meta-externalagent|Amazonbot|Applebot|DuckAssistBot|MistralAI-User|CCBot' access.log | sort | uniq -c | sort -rnawk -F'"' '{ split($3,a," "); if (match($6,/GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User/)) print substr($6,RSTART,RLENGTH), a[1] }' access.log | sort | uniq -cgrep 'OAI-SearchBot' access.log | awk '{print $7}' | sort | uniq -c | sort -rn | headawk -F'"' '$6 ~ /GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User/ { split($3,a," "); if (a[1] >= 400) print a[1], $2 }' access.logzgrep -c 'GPTBot' /var/log/nginx/access.log.*.gzVérifier chaque IP de bot avec Python
Ce script télécharge les listes d’IP officielles et affiche VERIFIED ou NOT IN LIST pour chaque ligne de bot. Il n’utilise que la bibliothèque standard de Python.
# Usage: python3 verify_bots.py access.log
import ipaddress, json, re, sys, urllib.request
LISTS = {
"GPTBot": "https://openai.com/gptbot.json",
"OAI-SearchBot": "https://openai.com/searchbot.json",
"ChatGPT-User": "https://openai.com/chatgpt-user.json",
"ClaudeBot": "https://claude.com/crawling/bots.json",
"Claude-User": "https://claude.com/crawling/bots.json",
"Claude-SearchBot": "https://claude.com/crawling/bots.json",
"PerplexityBot": "https://www.perplexity.com/perplexitybot.json",
"Perplexity-User": "https://www.perplexity.com/perplexity-user.json",
"Googlebot": "https://developers.google.com/static/crawling/ipranges/common-crawlers.json",
"bingbot": "https://www.bing.com/toolbox/bingbot.json",
}
cache = {}
def networks(url):
if url not in cache:
req = urllib.request.Request(url, headers={"User-Agent": "log-check/1.0"})
data = json.load(urllib.request.urlopen(req, timeout=20))
cache[url] = [ipaddress.ip_network(p.get("ipv4Prefix") or p.get("ipv6Prefix"))
for p in data["prefixes"]]
return cache[url]
bot = re.compile("|".join(sorted(map(re.escape, LISTS), key=len, reverse=True)))
for line in open(sys.argv[1], errors="replace"):
ua = line.split('"')[5] if line.count('"') >= 6 else line
match = bot.search(ua)
if not match:
continue
try:
ip = ipaddress.ip_address(line.split()[0])
except ValueError:
continue
ok = any(ip in net for net in networks(LISTS[match.group(0)]))
print("VERIFIED " if ok else "NOT IN LIST", match.group(0), ip)Est-ce vraiment GPTBot ? Vérifiez l’IP
Un agent utilisateur n’est que du texte. N’importe qui peut envoyer « GPTBot ». Perplexity recommande lui-même de combiner l’agent utilisateur avec une vérification de l’IP.
Méthode 1 : les listes d’IP officielles
OpenAI, Anthropic, Perplexity, Google, Microsoft (Bing), Apple, DuckDuckGo et Common Crawl publient des listes JSON des plages d’IP de leurs bots. Si l’IP figure dans la liste, la requête vient du réseau de l’entreprise. Les liens sont dans le tableau ci-dessus.
Méthode 2 : le DNS inverse
Google : cherchez le nom d’hôte de l’IP. Il doit se terminer par googlebot.com, google.com ou googleusercontent.com, et la recherche de ce nom doit renvoyer la même IP. Pour Bing, c’est pareil, avec des noms se terminant par search.msn.com.
host 66.249.66.1
# 1.66.249.66.in-addr.arpa domain name pointer crawl-66-249-66-1.googlebot.com.
host crawl-66-249-66-1.googlebot.com
# crawl-66-249-66-1.googlebot.com has address 66.249.66.1 ← same IP: real GooglebotCe que disent les chiffres
- Entraînement, recherche et demandes d’utilisateurs sont différents. GPTBot et ClaudeBot collectent des données d’entraînement. OAI-SearchBot, Claude-SearchBot et PerplexityBot construisent des index de recherche. ChatGPT-User, Claude-User et Perplexity-User récupèrent une page parce que quelqu’un la demande à l’instant.
- Beaucoup de réponses 403 ou 5xx signifient que vous bloquez ou cassez l’accès des IA. Vérifiez votre pare-feu, les réglages bots de votre CDN et votre robots.txt.
- Les requêtes vers robots.txt et llms.txt montrent quels bots lisent vos règles. OpenAI indique qu’OAI-SearchBot et GPTBot peuvent ajouter une mention robots.txt à leur agent utilisateur quand ils récupèrent ce fichier.
- Les demandes d’utilisateurs peuvent ignorer robots.txt. Selon OpenAI, les règles de robots.txt peuvent ne pas s’appliquer à ChatGPT-User, et selon Perplexity, Perplexity-User les ignore en général.
- Une visite n’est pas une citation. Elle signifie qu’un bot a lu votre page, pas qu’une réponse d’IA la citera.
Pas d’accès au serveur ? Utilisez votre CDN
AI Crawl Control de Cloudflare (anciennement AI Audit) montre quels services d’IA explorent votre site et quels robots ignorent vos règles. Selon Cloudflare, il est disponible dans toutes les offres.
Cloudflare Logpush peut exporter les logs de requêtes avec des champs comme ClientIP, ClientRequestUserAgent, ClientRequestPath et EdgeResponseStatus. Notre analyseur lit aussi ces lignes JSON.
Logs et vie privée (RGPD)
Les adresses IP peuvent être des données personnelles. La Cour de justice de l’UE l’a dit pour les adresses IP dynamiques dans l’affaire Breyer (C-582/14, 19 octobre 2016), et le considérant 30 du RGPD cite les adresses IP comme identifiants en ligne.
Les IP des bots appartiennent à des entreprises, mais le même log contient aussi les IP de vos visiteurs. Une approche pratique :
- Isolez d’abord les lignes de bots, et travaillez sur celles-ci.
- Ne gardez les logs bruts que le temps nécessaire, par exemple pour la sécurité. Le RGPD ne fixe pas de nombre de jours ; il dit de ne pas conserver les données personnelles plus longtemps que nécessaire.
- Conservez des totaux (bot, jour, page, statut, vérifié ou non) plutôt que des IP.
- Tronquez ou hachez une IP une fois vérifiée.
- N’envoyez pas de logs bruts à un outil externe sans contrat de sous-traitance. Notre analyseur fonctionne dans votre navigateur : rien n’est envoyé.
Ceci est une information générale, pas un conseil juridique.
Questions fréquentes
Comment savoir si ChatGPT visite mon site ?
Cherchez dans votre log d’accès OAI-SearchBot (recherche ChatGPT), ChatGPT-User (demande d’un utilisateur) et GPTBot (entraînement). Comparez ensuite les IP aux listes d’OpenAI.
Pourquoi Google Analytics n’affiche-t-il pas GPTBot ?
Google Analytics compte les visites via un script dans le navigateur. Les robots qui téléchargent seulement votre HTML ne l’exécutent pas.
Comment savoir si une requête GPTBot est réelle ?
Comparez son IP à openai.com/gptbot.json. Si elle n’y figure pas, traitez la requête comme non vérifiée.
Quels bots ignorent robots.txt ?
D’après leur propre documentation : les bots qui récupèrent une page parce qu’un utilisateur l’a demandée. OpenAI dit que robots.txt peut ne pas s’appliquer à ChatGPT-User, Perplexity dit que Perplexity-User l’ignore en général, et Google dit la même chose de ses fetchers déclenchés par les utilisateurs.
Que signifient des erreurs 403 pour les bots IA ?
Votre serveur, votre pare-feu ou votre CDN a refusé la requête. Si vous voulez être trouvé dans la recherche IA, trouvez la règle qui bloque le bot et modifiez-la.
Ai-je le droit d’enregistrer les adresses IP ?
En général oui, dans un but précis comme la sécurité, mais les IP peuvent être des données personnelles. Gardez les logs peu de temps, stockez des totaux plutôt que des IP, et mentionnez la journalisation dans votre politique de confidentialité. Ceci n’est pas un conseil juridique.
Pour aller plus loin
Assurez-vous que les bots trouvent quelque chose à lire
Exploré ne veut pas dire cité. Voyez comment les outils d’IA lisent votre page, sur 22 points.
Analyser ma page