En juillet 2026, notre équipe chez RESONEO a capturé et disséqué 1 200 réponses ChatGPT, 88 000 résultats de recherche et 26 900 pages distinctes pour répondre à une question : quand ChatGPT cite une page, d'où vient-elle ? Jérôme Salomon (Oncrawl) a guidé toute la partie cache. L'étude complète est publiée sur think.resoneo.com ; cet article en tire ce que les professionnels du search doivent retenir.

La version courte : le grounding de ChatGPT repose sur trois étages de stockage. Un index de discovery qui trouve les pages, un cache de lecture qui conserve la copie intégrale des pages déjà fetchées, et un petit lot de pages ouvertes en live. Chaque étage a ses règles, sa fraîcheur et ses angles morts. Une fois qu'on a ces trois étages en tête, le comportement de citation de ChatGPT cesse d'être mystérieux et redevient ce qu'il est : un système construit pour répondre au moindre coût.

Comment on sait tout ça

Notre extension chrome enregistre le flux de données brut que chatgpt.com envoie au navigateur, y compris des champs que l'interface n'affiche jamais. Jusqu'au 21 juillet 2026, ce flux contenait un champ result_source qui nommait le pipeline interne derrière chaque résultat de recherche. Quatre valeurs revenaient sans cesse : labradorbrightoxylabsserp. Aucune n'est documentée par OpenAI, qui ne parle publiquement que de « third-party search providers ».

Puis le champ a disparu du flux. Du jour au lendemain, sur tous les comptes qu'on surveille. Nous ré-identifions désormais chaque pipeline par ses signatures de format (longueur de snippet, forme des title...), avec un classifieur qui tombe juste environ 98 % du temps. La V5 de notre extension l'embarque en natif. Nous avons aussi fait tourner une flotte de comptes sur plusieurs tiers et plusieurs pays, rejoué les mêmes prompts via l'API d'OpenAI, et publié des pages canari sur notre propre domaine avec les logs serveur complets, pour voir exactement ce que les robots d'OpenAI récupèrent au lieu de le deviner.

Le casting des pipelines

Ce qu'on avait établi avant cette campagne, et qui tient toujours :

  • labrador est le hub de retrieval maison d'OpenAI. En plus du web search, il renvoie des résultats news, academia (arXiv), Reddit et YouTube : il fonctionne comme un orchestrateur d'index internes, de dépôts ouverts type Wikipedia et de partenariats presse.
  • bright et oxylabs, ce sont des résultats Google scrapés, achetés en live.
  • P1/P2/P3 servent le shopping, depuis les feeds marchands propres à OpenAI, avec Google conservé en oracle pour les prix et les avis.
  • B1/B3, Yelp et Tripadvisor servent le local, avec une subtilité : les liens affichés aux utilisateurs pointent vers Google Maps.

Le shopping et le local ne touchent jamais au web search. Si vous vendez des produits ou tenez un restaurant, votre bataille se joue dans les feeds marchands et les fiches locales, en plus des citations classiques. Cet article se concentre sur le versant web search, parce que c'est là que sont tombées les surprises.

Étage 1 : l'index, et Bing n'y est pour rien

Commençons par le résultat principal : OpenAI a son propre index web, et ce n'est pas Bing qui l'alimente. On l'a vérifié de trois façons. Seules 1,5 % des URLs labrador apparaissent dans le top 20 de Bing sur les mêmes fan-outs. Aucun snippet labrador ne correspond à un snippet Bing. Et Bing coupe les title à 75 caractères, alors que 24 % des title labrador dépassent allègrement cette limite. Le plus long qu'on ait capturé fait 289 caractères.

Cet index alimente la quasi-totalité des citations search en mode instant, le mode rapide servi aux utilisateurs gratuits. L'exception, ce sont les questions dont la réponse nécessite des données quasi en live (« qui a gagné le match hier soir »), où il partage à peu près 50/50 avec des résultats Google scrapés.

Maintenant, que contient concrètement un résultat de cet index ? Trois choses. L'URL. Le title complet de la page, jamais tronqué, même quand il est absurdement long. Et un snippet d'environ 200 caractères.

La construction du snippet mérite qu'on s'y arrête, parce que c'est l'intégralité du texte de votre page qui atteint le modèle en mode instant. Il est ancré sur votre H1, restitué en majuscules, plus tout le texte visible qui traîne immédiatement autour. Cen'est pas forcément le texte que vous choisiriez... Tout : le libellé de catégorie au-dessus du titre, l'attribut alt de l'image en dessous, la signature, la date de publication, un sommaire s'il est posé là. On a mesuré un cas où le snippet était à 100 % un sommaire et à 0 % du contenu. Ce qui occupe ces 200 caractères sera repris, et rien d'autre, et la meta description est totalement ignorée.

Encore une chose sur ce snippet : il ne dépend pas de la query. La même URL ressort avec le même snippet figé, que l'utilisateur ait demandé un prix, un historique ou des effets secondaires. Il est découpé à l'indexation et servi tel quel jusqu'au crawl suivant.

Au regard des standards du search moderne, c'est assez grossier... Le snippet indépendant de la query, c'est le genre de chose que la recherche web a abandonné il y a une vingtaine d'années, et le voilà en 2026 aux commandes de l'assistant IA le plus utilisé de la planète. On suppose que c'est un provisoire appelé à s'améliorer vite. En attendant, c'est là-dessus que votre contenu est jugé.

En comparaison, les résultats bright ressemblent exactement à ce qu'ils sont, des résultats Google : title coupés vers 60 caractères avec des points de suspension, snippets d'environ 160 caractères, meta description reprise une fois sur trois. Votre meta description ne sert à rien pour labrador et fonctionne toujours pour les pipelines alimentés par Google. 

Un routage économique, pas technique

Pourquoi OpenAI entretient-il les deux ? Le coût est la réponse.

En mode instant, ChatGPT doit répondre en quelques secondes et l'utilisateur ne paie généralement rien. Donc il n'interroge que ce qu'OpenAI possède déjà : le hub labrador. Aucune page n'est ouverte (zéro page ouverte dans 93 % des réponses instant capturées). La réponse est fondée sur des title et des snippets de 200 caractères, rien d'autre.

En mode thinking, l'utilisateur paie un abonnement et accepte d'attendre. Là, les outils chers sont invoqués : classements Google scrapés via bright (75 % des résultats search en thinking), et vraies ouvertures de pages par le robot ChatGPT-User. Une conversation thinking ramène une centaine de résultats répartis sur environ 28 domaines, contre environ 11 résultats en instant.

Tout ce qui coûte à OpenAI de l'argent (payer les prestataires de scraping) ou du temps (ouvrir des URLs, appeler des APIs live) est réservé au mode où les utilisateurs paient et patientent. 

Voilà pourquoi ça compte commercialement : plus de 90 % des utilisateurs de ChatGPT sont au tier gratuit. Gratuit veut dire instant, et instant veut dire labrador. Le pipeline dont personne n'avait entendu parler il y a six mois est celui qui décide de la visibilité dans l'immense majorité des conversations ChatGPT en cours en ce moment même.

Les chiffres du funnel rendent l'enjeu concret. Sur notre corpus, 61 332 URLs ont été remontées dans la sidebar de sources. 5 032 sont devenues la source principale d'une citation. 759 pages ont été réellement ouvertes, toutes en mode thinking. Une page ouverte finit citée 74 % du temps ; une page simplement remontée, mais non ouverte, 7 %.

Étage 2 : un cache de lecture partagé par tout le monde

C'est la partie que Jérôme Salomon a creusée avec nous, et elle a changé notre façon de comprendre « ChatGPT a visité ma page ».

À côté de l'index, ChatGPT entretient un cache de toutes les pages qu'il a fetchées un jour. Pas des snippets : des pages complètes, converties du HTML vers du markdown et stockées comme ça. Le cache est keyé sur l'URL et partagé entre tous les utilisateurs et tous les tiers. Si un utilisateur gratuit à Berlin pose une question sur une page qu'un abonné payant de l'Ohio a fait fetcher la semaine dernière, Berlin reçoit la copie de l'Ohio.

La logique de rafraîchissement est ce que les ingénieurs appellent du stale-while-revalidate. Une copie est considérée fraîche pendant environ 30 minutes. Dans cette fenêtre, tout le monde reçoit la version stockée et votre serveur ne voit rien passer. Au-delà de 30 minutes, l'utilisateur reçoit quand même la copie périmée immédiatement, et un fetch en arrière-plan la rafraîchit pour le suivant. Ce qui veut dire que le rythme de recrawl de vos pages est réglé par un seul signal : la fréquence à laquelle les utilisateurs de ChatGPT les demandent. Les pages populaires restent fraîches. Les autres vieillissent indéfiniment ; Jérôme a documenté des copies servies plus de 90 jours après le fetch, sans plafond d'éviction en vue. Votre header Cache-Control: no-store ? Ignoré. Votre noindex ? Ignoré aussi.

La conversion en markdown a sa propre personnalité. Les scripts, les iframes et le JSON-LD sont supprimés (oui, vos données structurées n'atteignent jamais le modèle par ce chemin). Les alt d'images survivent. Et le texte masqué en CSS est extrait quand même, ce qui veut dire que le robot lit des choses qu'aucun visiteur humain ne voit. On vous laisse méditer les implications, en notant que la détection de cloaking ne semble pas encore être le point fort d'OpenAI.

Deux limites dures encadrent chaque fetch. Le robot n'exécute pas le JavaScript, donc le contenu injecté côté client lui est invisible. Et les pages sont plafonnées à exactement 4Mo. Au-delà, la page n'est pas tronquée. Elle est rejetée d'un bloc avec une HTTP 400, et le modèle ne lit rien du tout. Une page trop lourde n'est pas lue en partie ; elle n'existe pas.

Une surprise se cache dans tout ça : un paramètre de l'API renvoie la date de crawl de la copie stockée d'une URL. Fetchez vos propres pages par ce biais et vous savez quand un utilisateur de ChatGPT a fait lire votre page pour la dernière fois. C'est une vraie métrique d'exposition, presque gratuite, et personne ne la regarde (merci Jérôme Salomon pour la trouvaille !).

L'angle mort analytics

Vous avez sans doute déjà vu utm_source=chatgpt.com dans vos rapports analytics. Ce paramètre est ajouté aux liens cliquables affichés aux utilisateurs. Il traque le clic sortant. Mais toutes les citations n'ont pas ce paramètre de tracking... Nous avons en effet observé que les pages que ChatGPT ouvre de lui-même en mode thinking ne contiennent pas d'utm_source dans les citations présentées aux utilisateurs.

Donc les pages que le modèle a réellement lues en entier, celles qui ont 74 % de taux de citation, ne laissent aucune trace utm. Si vous jaugez votre exposition ChatGPT en filtrant sur ce paramètre, vous comptez les clics et vous ratez les lectures. Surveillez aussi le user-agent ChatGPT-User dans vos logs serveur.

Le mystère : des citations venues de nulle part

Un résultat résiste à l'explication, et on aimerait l'aide de la communauté dessus.

Une partie des résultats qui atteignent le modèle n'ont aucun snippet, juste un title et une URL. On l'a constaté pour les résultats arXiv ou Reddit, qui viennent de bases de données pour lesquelles OpenAI a un accès direct, donc cela ne nous choque pas. Mais il y en a beaucoup d'autres.. Et voilà le plus étrange : en mode instant, les URLs sans snippet (hors Reddit, Youtube, arXiv) sont citées plus que les URLs avec snippet (14,9 % contre 8,2 %). Le modèle préfère citer les pages sur lesquelles il a lu le moins de choses.

Plus étrange encore, certains liens cités ne correspondent à aucun résultat de recherche. Notre hypothèse est que le modèle les écrit depuis sa mémoire paramétrique, la connaissance gravée dans ses poids à l'entraînement. Ce sont presque toujours des racines de domaines connus, consciencieusement suffixées utm_source=chatgpt.com comme si elles sortaient d'une recherche. Une part non négligeable de ce que ChatGPT finit par citer pourrait être simplement ce dont il se souvient, pas ce qu'il a récupéré. On observe le phénomène ; on ne sait pas encore le dimensionner précisément, et on accueillera volontiers les contradicteurs sur ce point.

Une bizarrerie voisine : arXiv a été remonté plus de 2 600 fois dans notre corpus et cité 10 fois. Reddit, même profil. ChatGPT lit des preprints et des forums pour réfléchir, puis montre au lecteur des pages web ordinaires. Être récupéré et être cité sont deux marchés différents.

Alors, faut-il écrire des title de 289 caractères ?

Soyons francs sur la tentation. Le title complet atteint le modèle sans troncature, donc il fait partie de votre budget de grounding. Les 200 caractères après votre H1 sont le seul texte du corps que le modèle voit en mode instant, donc décaler les libellés de catégorie, les dates et les widgets coincés entre votre H1 et votre première phrase utile améliore directement ce que ChatGPT sait de votre page. Ces deux leviers sont réels, mesurés, actionnables aujourd'hui.

Actionnez-les avec légèreté. Écrivez le title comme une phrase autoportante plutôt que comme un libellé optimisé pour la troncature. Faites porter votre message de fond par les 200 premiers caractères après le H1. Gardez un alt informatif près du haut de page. Gardez votre meta description quand même, parce que les pipelines alimentés par Google s'en servent toujours. Restez sous les 4 Mio et lisible sans JavaScript.

Mais ne reconstruisez pas votre site autour d'une bizarrerie. Tout ce que décrit cet article est un système qui évolue très vite : le champ result_source a disparu du jour au lendemain, les providers shopping ont été anonymisés la même semaine, et les tokens Google Shopping sont passés de lisibles à chiffrés en quatre jours. N'importe quel mécanisme documenté ici peut avoir disparu le temps que vous déployiez.

Deux faits structurels, en revanche, sont solides. Un : les LLMs ont un knowledge avec une date de cutoff, après laquelle ils ne connaissent plus rien, ils sont donc condamnés à s'appuyer sur des moteurs de recherche pour combler l'écart entre leurs données d'entraînement et aujourd'hui. Le retrieval restera une dépendance permanente de tout assistant IA. Deux : tous les moteurs sur lesquels ils s'appuient seront poussés vers une qualité de niveau Google, parce qu'un index rudimentaire produit des réponses rudimentaires et que les utilisateurs le remarquent. Le snippet de 200 caractères ne fera sans doute pas long feu... Le besoin d'être la meilleure réponse, non. C'est pour ça que les fondamentaux classiques, des pages crawlables, des title clairs, du contenu qui répond vraiment à la question, continuent de payer quelle que soit la plomberie.

La bataille durable : posséder les réponses aux vraies questions

Optimiser la mécanique du snippet, c'est de la tactique. La stratégie est en amont : savoir ce que les gens demandent réellement aux assistants IA, et être la source qui y répond.

Personne ne demande à ChatGPT « une poussette avec un châssis de 49 cm de large ». On lui demande « une poussette qui passe les portiques du métro ». Personne ne cherche la dureté de la mousse d'un casque audio ; on demande quel casque reste confortable quand on porte des lunettes. On demande quel canapé survit à un chat qui fait ses griffes. Cet écart entre la langue des fiches techniques et la langue des humains est exactement là où se joue la visibilité IA, parce que les assistants répondent à des questions conversationnelles avec le contenu qui s'y apparie le mieux.

Vous possédez déjà la moitié du corpus qui révèle ces questions : les avis clients, les conversations du support, les emails que vous recevez chaque jour, les enquêtes que personne n'a rouvertes. L'autre moitié vit hors de vos murs, dans ce qui se dit de vos produits sur les forums, les plateformes sociales, en vidéo, dans la presse et sur les blogs. Lisez les deux versants et les key benefits et pain points de vos produits ressortent dans les mots de vos clients, qui sont aussi les mots qu'entendent les assistants IA. Exploitez cette langue, répondez-y sur des pages que les robots peuvent lire, et vous optimisez pour tous les systèmes de retrieval à la fois, y compris ceux qu'OpenAI n'a pas encore construits.

Ce qui reste ouvert

Nous ne savons pas quel robot alimente l'index labrador ; nos pages canari ont vu OAI-SearchBot quasi muet pendant que l'index continuait de servir des résultats. Reddit est le cas facile, puisqu'OpenAI dispose d'un accès temps réel à la data API de Reddit via leur partenariat de 2024 ; YouTube est une autre histoire, sans accord public ni empreinte visible expliquant comment ces résultats entrent. Et la sur-citation des URLs sans snippet reste expliquée par une hypothèse.

La stack d'OpenAI devient de plus en plus difficile à observer. Des champs disparaissent du flux, des providers sont anonymisés, le routage change d'une semaine à l'autre, et l'ensemble se complexifie au fil du temps. Nous avons tout publié, méthodologie comprise, précisément pour que d'autres puissent challenger ces résultats ou pousser plus loin. L'étude complète, avec les données derrière chaque chiffre de cet article, est sur think.resoneo.com/chatgpt-retrieval.