Sommaire · 11 chapitres
- 01Qu'est-ce que ChatGPT-User ?
- 02Les robots IA à repérer dans vos logs
- 03Ce qu'un passage mesure, et ce qu'il ne mesure pas
- 04Étape 1 : récupérer les journaux au bon endroit
- 05Étape 2 : compter les passages par robot
- 06Étape 3 : identifier les pages lues
- 07Étape 4 : vérifier que le robot est authentique
- 08Étape 5 : croiser avec le panel et Google Analytics
- 09Les pièges à éviter
- 10Mettre en place ce suivi
- 11Questions fréquentes
Je suis Amaury Duval, consultant SEO et GEO, certifié Google Analytics et Google Tag Manager. Ce tutoriel donne les chaînes d'identification publiées par chaque éditeur, les commandes pour extraire ces visites d'un fichier de logs, la marche à suivre sur Vercel, la vérification des adresses IP et la façon de croiser le résultat avec vos autres mesures. Les commandes ont été testées sur un journal au format combiné, celui de Nginx et d'Apache par défaut.
Qu'est-ce que ChatGPT-User ?
D'après la documentation des robots d'OpenAI, lue le 2 novembre 2026, ChatGPT-User intervient quand un utilisateur déclenche une action dans ChatGPT ou dans un GPT personnalisé, par exemple la consultation d'une page pour répondre à une question. OpenAI précise qu'il « n'est pas utilisé pour explorer le web de façon automatique ».
C'est ce qui le rend utile à la mesure. Un robot d'indexation passe sur votre site selon son propre calendrier. ChatGPT-User, lui, passe parce qu'une conversation en cours a besoin de votre page, ou parce qu'un utilisateur a collé votre lien dans la discussion. Chaque passage est la trace d'un usage réel de votre contenu par un assistant.
Pour la même raison, OpenAI indique que les règles du robots.txt « peuvent ne pas s'appliquer » à ces actions lancées par un utilisateur. Pour gérer votre présence dans la recherche de ChatGPT, la documentation renvoie vers OAI-SearchBot, pas vers ChatGPT-User.
Les robots IA à repérer dans vos logs
Chaque éditeur envoie plusieurs robots aux rôles distincts, comme je l'ai détaillé dans mon étude sur les robots IA. Pour la mesure, seule la famille des lectures à la demande signale un usage dans une conversation. Les robots de recherche disent que vos pages sont éligibles, ceux d'entraînement ne disent rien de votre visibilité.
| Nom à chercher | Éditeur | Rôle | Ce que son passage indique |
|---|---|---|---|
| ChatGPT-User | OpenAI | Lecture à la demande d'un utilisateur | Page consultée dans une conversation |
| OAI-SearchBot | OpenAI | Indexation pour la recherche de ChatGPT | Page éligible aux réponses avec lien |
| GPTBot | OpenAI | Collecte pour l'entraînement des modèles | Rien sur la citation |
| Perplexity-User | Perplexity | Lecture à la demande d'un utilisateur | Page consultée pour une réponse |
| PerplexityBot | Perplexity | Indexation pour les résultats de Perplexity | Page éligible aux réponses |
| Claude-User | Anthropic | Lecture quand un utilisateur pose une question à Claude | Page consultée dans une conversation |
| Claude-SearchBot | Anthropic | Indexation pour la recherche de Claude | Page éligible aux réponses |
| ClaudeBot | Anthropic | Collecte pour l'entraînement des modèles | Rien sur la citation |
Sources : documentation d'OpenAI, de Perplexity et l'aide d'Anthropic, lues le 2 novembre 2026. Perplexity précise que Perplexity-User, déclenché par un utilisateur, ignore en général les règles du robots.txt.
2.1Les chaînes exactes publiées par les éditeurs
Voici les chaînes d'identification (user agents) telles que les publient OpenAI et Perplexity. Le numéro de version peut changer : cherchez le nom du robot, jamais la chaîne entière.
ChatGPT-User Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot
OAI-SearchBot Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36; compatible; OAI-SearchBot/1.4; +https://openai.com/searchbot
GPTBot Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot
Perplexity-User Mozilla/5.0 (compatible; Perplexity-User/1.0; +https://perplexity.ai/perplexity-user)
PerplexityBot Mozilla/5.0 (compatible; PerplexityBot/1.0; +https://perplexity.ai/perplexitybot)Anthropic ne publie pas la chaîne complète de ses robots, seulement leurs noms : recherchez Claude-User, Claude-SearchBot et ClaudeBot tels quels. Mistral a aussi un agent de lecture à la demande, MistralAI-User, que je cite dans l'étude.
2.2Le cas de Google : rien à compter
Les aperçus IA et le mode IA de Google ne laissent aucune trace distincte. Google-Extended n'est pas un robot qui visite votre site : d'après la documentation des robots de Google, il « n'a pas de chaîne d'identification HTTP distincte » et ne sert qu'à exprimer un choix dans le robots.txt. L'exploration passe par les robots habituels de Google. Pour les réponses de Google, la mesure se fait dans la Search Console et par un panel de questions, comme je l'explique pour les AI Overview.
Ce qu'un passage mesure, et ce qu'il ne mesure pas
Un passage de ChatGPT-User prouve qu'une conversation a eu besoin de votre page. Il ne prouve pas que la réponse vous a cité, ni que votre nom a été affiché. L'inverse est vrai aussi : aucun éditeur n'indique que chaque citation déclenche une lecture en direct, et la réponse peut s'appuyer sur un index déjà constitué. Un utilisateur qui colle votre lien pour faire résumer la page produit aussi un passage, sans aucune recommandation.
Ces lectures complètent donc les autres mesures sans les remplacer. Elles disent quelles pages servent de matière aux assistants, et comment ce volume évolue d'un mois à l'autre. Le panel de prompts dit si vous êtes nommé, le canal IA de GA4 dit si l'on clique. C'est le croisement des trois que je décris dans ma méthode pour mesurer le ROI du GEO.
Étape 1 : récupérer les journaux au bon endroit
4.1Sur un serveur classique
Nginx et Apache écrivent par défaut un journal d'accès au format combiné, souvent /var/log/nginx/access.log ou /var/log/apache2/access.log. Les fichiers plus anciens sont archivés et compressés par la rotation des logs : zgrep les lit sans les décompresser. Pensez à vérifier combien de jours votre hébergeur conserve, car une rotation courte efface l'historique avant que vous ayez pu comparer deux mois.
4.2Derrière un CDN
Si un CDN sert vos pages depuis son cache, une partie des visites n'atteint jamais votre serveur. Les journaux de l'origine sous-estiment alors les lectures : c'est dans les journaux du CDN qu'il faut compter. Le CDN ou son pare-feu peut aussi refuser des robots que votre robots.txt autorise. Pendant la collecte de mon étude, 267 sites ont même refusé l'accès à leur propre robots.txt.
4.3Sur Vercel
Sur Vercel, l'onglet Logs du projet montre, dans le détail de chaque requête, la chaîne d'identification du visiteur. Deux limites, d'après la documentation des runtime logs :
- 01La conservation est courte
- une heure en offre Hobby, un jour en Pro, trois jours en Enterprise, trente jours avec l'option Observability Plus.
- 02Les pages statiques n'y sont pas toutes
- la documentation renvoie vers les Drains pour obtenir l'ensemble des requêtes statiques. Et la recherche libre ne porte que sur le message et le chemin, pas sur la chaîne d'identification.
Pour un suivi dans la durée, il faut donc un Drain de logs, disponible en offres Pro et Enterprise et facturé au volume. Selon la référence des Log Drains, chaque entrée porte les champs proxy.userAgent, proxy.path, proxy.clientIp et proxy.statusCode. Un filtre limite l'envoi à un robot :
contains(log/userAgent, 'ChatGPT-User')Pour suivre plusieurs robots, le plus simple est de ne pas filtrer à l'envoi et de trier à l'arrivée. Avec un export au format NDJSON, cette commande liste les pages lues par les trois agents de lecture :
jq -r 'select(.proxy.userAgent[0]? // "" | test("ChatGPT-User|Perplexity-User|Claude-User")) | .proxy.path' drain.ndjson \
| sort | uniq -c | sort -rnÉtape 2 : compter les passages par robot
Sur un journal au format combiné, cette commande compte les lignes de chaque robot IA :
grep -oE 'ChatGPT-User|OAI-SearchBot|GPTBot|Perplexity-User|PerplexityBot|Claude-User|Claude-SearchBot|ClaudeBot|MistralAI-User' access.log \
| sort | uniq -c | sort -rnPour inclure les fichiers archivés, remplacez grep -oE par zgrep -ohE et ajoutez access.log*. Lisez d'abord le rapport entre robots de recherche et agents de lecture : beaucoup de passages d'OAI-SearchBot et aucun de ChatGPT-User signifie que vos pages sont indexées, mais que les conversations ne s'en servent pas.
Étape 3 : identifier les pages lues
La liste des pages consultées par ChatGPT-User est le résultat le plus utile :
grep 'ChatGPT-User' access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20Une même lecture peut produire plusieurs lignes : redirection, nouvel essai, requêtes rapprochées. Pour une série qui se compare d'un mois à l'autre, je compte plutôt les couples jour et page, en ne gardant que les réponses 200 :
awk -F'"' '$6 ~ /ChatGPT-User|Perplexity-User|Claude-User/ && $3 ~ /^ 200 / {split($2, r, " "); split($1, d, "["); print substr(d[2], 1, 11), r[2]}' access.log \
| sort -u | awk '{print $2}' | sort | uniq -c | sort -rnLe résultat donne, pour chaque page, le nombre de jours où au moins un agent de lecture l'a consultée. Regardez aussi les codes d'erreur : une page souvent demandée qui répond 403 ou 404 est une lecture perdue.
Étape 4 : vérifier que le robot est authentique
N'importe quel programme peut se présenter comme ChatGPT-User. Les éditeurs publient donc les adresses IP de leurs robots :
- OpenAI :
https://openai.com/chatgpt-user.json,searchbot.jsonetgptbot.json; - Perplexity :
https://www.perplexity.ai/perplexity-user.jsonetperplexitybot.json; - Anthropic :
https://claude.com/crawling/bots.json, une liste commune à ses robots.
Ce script compare chaque adresse de votre journal aux plages publiées. Il ne demande que Python, sans dépendance :
grep -E 'ChatGPT-User|Perplexity-User|Claude-User' access.log | awk '{print $1}' | sort -u > ip-agents.txtimport ipaddress, json, sys, urllib.request
SOURCES = ["https://openai.com/chatgpt-user.json",
"https://www.perplexity.ai/perplexity-user.json",
"https://claude.com/crawling/bots.json"]
reseaux = []
for url in SOURCES:
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
for p in json.load(urllib.request.urlopen(req, timeout=20))["prefixes"]:
cidr = p.get("ipv4Prefix") or p.get("ipv6Prefix")
if cidr:
reseaux.append(ipaddress.ip_network(cidr))
for ligne in open(sys.argv[1]):
ip = ipaddress.ip_address(ligne.strip())
ok = any(ip.version == r.version and ip in r for r in reseaux)
print(ip, "publiée" if ok else "NON publiée")Lancez-le avec python3 verifier_ip.py ip-agents.txt. Les adresses absentes des listes sont à écarter du comptage. Ces fichiers changent : OpenAI avait mis à jour sa liste ChatGPT-User le 27 octobre 2026. Téléchargez-les à chaque analyse plutôt que de les copier une fois pour toutes.
Étape 5 : croiser avec le panel et Google Analytics
Une page lue n'a de valeur qu'au regard de ce qu'elle produit. Je classe chaque page selon trois sources : les agents de lecture dans les logs, les clics venus des assistants dans le canal IA de Google Analytics et la présence dans un panel de prompts relevé par un des outils GEO.
| Ce que vous observez | Lecture | Piste |
|---|---|---|
| Lue souvent, cliquée depuis les assistants | La page sert de source et attire des visites | La protéger, la tenir à jour |
| Lue souvent, jamais cliquée | Matière à réponse, sans raison de cliquer | Travailler la promesse et ce que seule la page apporte |
| Indexée par OAI-SearchBot, jamais lue | Éligible, mais pas retenue | Comparer avec les pages citées sur ses questions |
| Aucun robot de recherche | Accès refusé ou page inconnue | Vérifier le robots.txt, le pare-feu et les erreurs |
Pour le dernier cas, le vérificateur de mon étude lit votre robots.txt robot par robot. Dans les 8 239 sites étudiés, 5,0 % bloquent OAI-SearchBot, et une règle générale « User-agent: * » bloque aussi les robots de recherche. Les leviers pour être repris sont détaillés dans mon guide du référencement dans ChatGPT.
Les pièges à éviter
- 01Confondre GPTBot et ChatGPT-User
- le premier collecte pour l'entraînement, le second lit pour un utilisateur. Seul le second dit quelque chose de votre usage dans les réponses.
- 02Compter des lignes
- redirections et nouveaux essais gonflent les totaux. Comptez des pages par jour, sur les réponses 200.
- 03Chercher la chaîne entière
- les numéros de version changent. Le nom du robot suffit.
- 04Croire les chaînes sur parole
- vérifiez les adresses IP avant de présenter un chiffre.
- 05Lire les logs de l'origine derrière un cache
- les pages servies par le CDN n'y figurent pas.
- 06Chercher Google
- les aperçus IA ne laissent pas de trace propre dans les logs.
- 07Laisser filer l'historique
- une conservation d'un jour ne permet aucune comparaison. Exportez ou drainez chaque jour.
- 08Prendre une lecture pour une citation
- c'est un indicateur d'usage. Le nombre de citations se mesure dans un panel.
Mettre en place ce suivi
Ces lectures sont l'un des quatre étages de mon suivi de la visibilité IA, avec le panel de prompts, le canal IA de GA4 et l'attribution déclarée par vos clients. J'installe l'extraction, la vérification des adresses et le rapport mensuel, sur votre serveur ou votre CDN. Pour le reste de la démarche, voyez mon accompagnement de consultant GEO, ou contactez-moi.
Questions fréquentes
Q01Qu'est-ce que ChatGPT-User ?
C'est l'agent qu'OpenAI utilise quand un utilisateur de ChatGPT déclenche la lecture d'une page, par exemple pour répondre à une question ou résumer un lien. Il n'explore pas le web de façon automatique, d'après la documentation d'OpenAI.
Q02ChatGPT-User respecte-t-il le robots.txt ?
Pas forcément. OpenAI indique que, ces actions étant lancées par un utilisateur, les règles du robots.txt peuvent ne pas s'appliquer. Pour gérer la présence dans la recherche de ChatGPT, c'est OAI-SearchBot qu'il faut régler.
Q03Quelle différence entre GPTBot, OAI-SearchBot et ChatGPT-User ?
GPTBot collecte des pages pour l'entraînement des modèles, OAI-SearchBot indexe les pages que la recherche de ChatGPT peut citer, ChatGPT-User lit une page pour un utilisateur précis. Bloquer GPTBot ne retire pas un site des réponses de ChatGPT.
Q04Une visite de ChatGPT-User est-elle une citation ?
Non. Elle prouve qu'une conversation a eu besoin de la page, pas que la réponse l'a citée. C'est un indicateur de tendance par page, à croiser avec un panel de prompts et avec les clics mesurés dans GA4.
Q05Peut-on voir les aperçus IA de Google dans les logs ?
Non. Google n'utilise pas de robot distinct pour ses réponses IA, et Google-Extended n'a pas de chaîne d'identification propre. Les clics venus des aperçus IA se lisent dans la Search Console, mélangés au reste de la recherche Web.
Q06
Comment voir les robots IA sur un site hébergé chez Vercel ?
Le détail de chaque requête, dans l'onglet Logs, affiche la chaîne d'identification, mais la conservation va d'une heure à trente jours selon l'offre. Pour un suivi mensuel, un Drain de logs envoie chaque requête, avec son user agent et son adresse IP, vers votre propre stockage.