Written by Jeremy Souffir Founder, JTS Tech Services

The short version: when ChatGPT cites a web page, it did not necessarily read it. A study by the search consultancy RESONEO — 1,200 captured answers, 88,000 search results, 26,900 distinct pages, recorded in July and replayed in August — found that ChatGPT grounds answers through three layers with different rules. A discovery index, OpenAI's own, that returns a URL, an untruncated title and a fixed snippet of roughly 200 characters. A reading cache that stores a full Markdown copy of every page the robot has ever opened, shared across all users, refreshed only when somebody asks about the page again. And a small set of pages opened live, almost all in the paid thinking mode. In the free instant mode, which is where the large majority of ChatGPT's users sit, zero pages were opened in 93% of answers: the model worked from titles and snippets alone. Product cards, meanwhile, never touch any of that — they come from merchant feeds. For a business that wants to be recommended, that means three separate jobs, and most of the advice circulating treats them as one.
What did the study actually measure?
RESONEO is a French digital-marketing consultancy; its co-founder published the findings on Search Engine Land on 17 August, and the full methodology and data are on the firm's own site. The numbers below are theirs. The plain-English reading is ours.
- Method: a browser extension recording the raw data stream ChatGPT sends to the browser (including fields the interface never shows), a fleet of accounts across free and paid tiers and countries, the same prompts replayed through the API, and canary pages on the firm's own domain with full server logs — so they could see what OpenAI's robots fetched rather than infer it
- The discovery index is OpenAI's own, not Bing's. Only 1.5% of its URLs appeared in Bing's top 20 for the same queries, and its titles run past Bing's 75-character cap — the longest captured was 289 characters. A result from it contains three things: the URL, the full title, and a snippet of about 200 characters
- The snippet is cut at indexing time, anchored on your H1, and is the same whatever the user asked. It is made of whatever visible text sits around the H1: the category label above it, the alt text of the first image below it, the byline, the date, a table of contents. In one measured case the snippet was 100% table of contents and 0% content. The meta description is ignored by this index entirely
- In free instant mode, 93% of answers opened no page at all. In thinking mode a conversation pulled around 100 results across some 28 domains, versus around 11 results in instant, and the expensive tools — scraped Google rankings and real page opens — switch on. The routing is economic: whatever costs OpenAI money or time is reserved for the mode where users pay and wait
- Across the corpus, 61,332 URLs reached the sources sidebar. 5,032 became the lead source behind a citation. 759 pages were actually opened, all in thinking mode. An opened page was cited 74% of the time; a page retrieved but never opened, 7%
- Opened pages go into a cache keyed by URL and shared by every user and tier. A copy is fresh for about 30 minutes, then served stale while a background fetch refreshes it for the next person — so the recrawl schedule of your page is set by how often ChatGPT users ask about it. Copies were observed being served more than 90 days after the fetch. Cache-Control: no-store is ignored. So is noindex
- The cached copy is HTML converted to Markdown. Scripts, iframes and JSON-LD are stripped. Image alt text survives. Text hidden by CSS is still extracted. The robot does not execute JavaScript, and any page over 4 MB is not truncated — it is rejected with an HTTP 400 and the model reads nothing
- Pages the model opens on its own carry no utm_source=chatgpt.com in the citations shown to users. The reads with the 74% citation rate leave no UTM trace; filtering analytics on that parameter counts clicks and misses reads
- Shopping and local never touch web search. Product carousels draw from OpenAI's merchant feeds, with Google used as an oracle for price and reviews; cards were cached for weeks, identical across users and countries, and Amazon was absent from the offers even on questions that named it. In the authors' words, ranking well in ChatGPT's links does nothing to get you into the product cards — they are two different jobs

Why this is not the same as "make your catalog readable"
We have written before about getting product data into the feeds the assistants read, and about edge rules that turn the agent away before it reads anything. Both still stand, and this study confirms the first one harder than we put it: for product cards, the feed is the whole game. What is new here is the web path — the guides, comparison pages, FAQs and category pages that answer the “which one should I buy” question before a product is ever named. That path has its own rules, and they are cruder than anybody assumed: a frozen snippet, a cache you cannot expire, a page-size cliff, and no structured data.
Does this reach a normal online store, or only publishers?
It reaches anyone whose customers ask an assistant a question before they buy — which is most of them. Three reasons this is an operator's problem rather than an SEO curiosity.
- Most of your ChatGPT exposure happens in the mode that reads the least. More than nine in ten ChatGPT users are on the free tier, and free instant mode is grounded in titles and snippets, not pages. If your guide page's first 200 characters after the H1 are a breadcrumb, a date and a “share this” row, that is the entirety of what the model knows about it when it decides whether to cite you
- The question that decides the sale is asked in human language, and answered from the web path. Nobody asks for a stroller with a 49 cm frame width; they ask for one that fits through the ticket gates. The study's point — and ours — is that the content that maps spec-sheet language to how people actually ask is what gets a brand into the answer, and that content lives on ordinary pages, not in the feed
- Two of your existing habits actively hurt here. A heavy product or guide page that tips past 4 MB is not partly read; it does not exist to the robot. And content rendered client-side in JavaScript — tabs, accordions, reviews loaded after the page — is invisible to it, because the robot does not run scripts
The two conclusions that both get this wrong
The first is to rebuild the site around the quirks — 289-character titles, H1s stuffed with keywords, alt text written for the snippet rather than for the image. The authors say plainly that the result_source field they relied on vanished overnight, shopping providers were anonymised the same week, and any mechanism they documented may be gone by the time you deploy. Optimising for a 200-character snippet is a tactic with a short shelf life. The second is to shrug because structured data is stripped: “so JSON-LD doesn't matter.” It is stripped on one path of one assistant. It still feeds the Google-sourced results that dominate paid thinking mode, it is what Google's AI Mode and Gemini read, and the merchant feed that fills ChatGPT's product cards is structured data by another name. The honest read is narrower and more useful: ChatGPT's web reader is a crude, fast-changing system, so build for the things that survive it — crawlable pages, a first paragraph that carries the answer, a page that works without scripts and stays light — and keep the structured data for the systems that do read it.
What should we do this week?
A short list, deliberately light-touch, in the order we would do it. None of it requires rebuilding anything.
- Look at what sits between your H1 and your first useful sentence on the ten pages you would most like an assistant to cite. Category label, date, author, share row, table of contents — move them below the first paragraph or out of the main content. Make the first 200 characters after the H1 carry the core message in a complete sentence
- Write titles as self-contained sentences, not truncation-optimised labels. The full title reaches the model untruncated in OpenAI's index, so it is part of your grounding budget; Google still cuts at about 60 characters, so lead with the part that stands alone
- Keep one informative alt text near the top. It survives the Markdown conversion and, in the study, routinely took about 50 of the 200 snippet characters — so make those 50 characters say something true about the page, not “image-1.jpg”
- Check page weight and script dependence on your key pages. Anything near 4 MB is on a cliff; anything that only renders after JavaScript runs is not there. Fetch the page with scripts off and see what a robot would see
- Keep your meta descriptions. They do nothing for OpenAI's own index and still do a third of the work for the Google-fed pipelines that thinking mode leans on
- Look for the ChatGPT-User and OAI-SearchBot user agents in your server logs, not just utm_source=chatgpt.com in analytics. The opened pages — the ones cited 74% of the time — carry no UTM. If your dashboard says ChatGPT sends you nothing, you may be measuring clicks and missing reads
- Treat the product feed as a separate job, with its own owner. If you want to appear in ChatGPT's product cards, that is the merchant feed — OpenAI's file-upload or API spec — not your blog, not your JSON-LD and not your Google rankings. And because cards are cached for weeks and identical for everyone, the first clean lookup matters more than later improvements
- Mine the questions. Your reviews, support tickets and inbound emails already hold the words people use when they ask an assistant about what you sell. Answer those questions, in those words, on pages the robot can read — that is the one step that pays off on every retrieval system at once, including the ones OpenAI has not built yet

Isn't this just ChatGPT? We care about Google and Gemini too.
Yes — and that is part of the point. The study found that paid thinking mode took about three quarters of its web results from scraped Google rankings, while free Think mode took about three quarters from OpenAI's own index; two people asking the same question can get answers built from different corpora. Ranking well in Google still matters for one of those, and does nothing for the other. Google's own AI Mode and Gemini read structured data the way ChatGPT's cache does not. The practical consequence is that there is no single “AI visibility” setting to flip. There are a handful of retrieval systems, each with its own rules, and the work is to be legible to all of them: a feed for the cards, clean crawlable pages with the answer up top for the readers, structured data for the engines that use it, and a measurement habit that looks at server logs rather than one UTM parameter. The fundamentals are not new. What is new is knowing how little some of these systems actually read — and how much is decided in the first two hundred characters.
The genuinely encouraging part
Almost everything this study found is fixable from the content side with an afternoon of editing, and the fixes are the kind that cannot hurt you anywhere else. A first paragraph that carries the answer, a title that reads as a sentence, an alt text that describes the image, a page that loads without scripts and does not weigh 4 MB, a product feed that is clean the first time it is looked up: none of that is a hack, none of it depends on a pipeline name that might vanish next week, and all of it is exactly what a human reader and every other search engine wanted anyway. The system doing the reading is crude today and will improve fast. The pages that are the best answer will be fine either way.
Where we fit
The reason the fixes above do not get made is not that they are hard. It is that nobody in a growing store owns the question “what does the assistant actually get when it looks at us?” — across the feed, the edge, the pages and the logs. That is the job our AI Shopping Visibility offer does. Retaining JTS means we fetch your store the way the assistants do: we check what lands in the product feed and whether the first lookup is clean, what the first 200 characters of your key pages say to a robot, what is hidden behind scripts or tipping past the size limit, what your edge rules hand back to the ChatGPT and OpenAI crawlers, and what your logs — not your UTM filter — say about how often you are being read. Our CortexGuard app for Shopify keeps the catalog side correct once it has been fixed, so the product cards are built from data you actually control. The point is not to chase a snippet rule that may be gone next month. It is to make sure that when any of these systems looks at your store, it finds the answer, in the words your customers use, in the first place it reads.
Sources
- Olivier de Segonzac, Search Engine Land — Inside ChatGPT's retrieval stack: the index, cache, and pages it actually reads (17 August 2026: the three-layer model, the 200-character snippet, the 93% figure, the cache rules, the 4 MB limit, JSON-LD stripping, the citation funnel and the mode-by-mode comparison)
- RESONEO — What ChatGPT pulls, what it shows, what it cites (the full study: methodology, the six measurement instruments, the shopping and merchant-feed findings, and the data behind every figure above)
- OpenAI — Overview of OpenAI crawlers (the ChatGPT-User, OAI-SearchBot and GPTBot user agents to look for in your server logs)
- OpenAI — Agentic Commerce: product feeds (the file-upload and API feed specs that fill ChatGPT's product cards — the separate job)
- JTS Tech Services — What AI shopping agents actually need from your product data (our earlier guide to the feed side)
- JTS Tech Services — You can do the structured data perfectly and still be invisible (the edge rules that refuse the request before any of this applies)


