How ChatGPT chooses its sources — and the GEO levers that follow
“How do we show up in ChatGPT?” I hear this question almost every week. The standard answer always sounds similar: write good content, appear in comparison lists, comment on Reddit. Practiced routine. Only how do we know it is true? Most of it is passed on in good faith, one expert quoting the next.
There is a more honest way, and a colleague in the field, Suganthan Mohanadasan, took it. He did not analyze the finished answers but read the traffic beneath them: the JSON data ChatGPT sends to its own browser before a single line of answer reaches the screen. There sit the machine’s internal labels. Where every page comes from. Which drawer your question falls into. Which searches the system actually fired. I cross-checked his findings against two larger analyses and translate both here into concrete levers for GEO, Generative Engine Optimization, the work of getting cited in AI answers.
Two kinds of finding you must not mix
A framing first, because it decides the value of the whole thing. This data holds two very different kinds of insight. Some are structural: that a certain field exists, what it is called, which values it takes. A single clean capture is enough as evidence, because you only have to see a field once to know it exists. The others are frequencies. “Reddit is cited most often,” “the bulk runs through a particular provider.” These values come from a few dozen queries on a single account, with a clear tilt toward SaaS and tech.
Read the structure as fact and the percentages as direction. Where a frequency has a mechanical reason, you may trust the direction, not the exact value. For the big numbers I therefore also draw on an analysis by Profound that examined roughly 700,000 ChatGPT conversations from the fourth quarter of 2025. One shows the mechanics, the other the order of magnitude.
The first question: does ChatGPT even search?
Before ChatGPT reaches into the web, it sorts your question into a category. The field for this is called “turn_use_case” and knows six values, among them ordinary search, shopping, local, a reasoning mode and pure image generation. The value that matters is called “text.” If your question falls into that drawer, the system does not search. It answers from training knowledge and stops.
For harmless cases this makes sense. “How do I change a tire” or “write me a Python function” needs no fresh source. What gives pause is another case from the test: “current treatment guidelines for type 2 diabetes” also landed at “text.” A current, highly sensitive question where you would expect research was answered from memory. Of ten deliberately current questions, it went this way three times. And Profound confirms the order of magnitude from the other side: only about 18 percent of all conversations trigger a web search at all.
What decides is the wording, not the topic. “best coffee near me” tips into the local lane, “best 4K TVs to buy” switches on shopping, “best 4K TVs with reviews” stays an ordinary search. Same thing, three paths, depending on word choice.
That has an uncomfortable consequence as soon as the model answers from memory. Then it can be wrong on facts and sources. A study in Advances in Orthopedics from 2025 checked 109 sources ChatGPT gave for common questions around knee and hip replacements. Only 36 percent of them were correct or could be matched to an existing publication at all. The test ran on a version without web search, that is exactly the mode in which the model draws from training. Where nothing is searched, no verifiable source is in play.
The lever from this: before you put a euro into a page, check whether the question triggers a search at all. For a definition or a how-to, no page gets in, however good it may be. Put your work where the system actually retrieves. For the questions answered from memory, only the long road remains, via authority and presence in future training data, which is why crawlers like Common Crawl should be able to see your page.
Where the pages come from: four channels
Every retrieved web page carries a field called “result_source,” and it takes one of four values. “serp” is the open-web baseline, seen mostly with news. “labrador” is a positive list of established publishers: Reuters, the Guardian, the Wall Street Journal, the Financial Times, Wikipedia, even arXiv. The text excerpts there reach close to a thousand characters, practically whole articles. “bright” stands for Bright Data, a commercial scraper, and dominates in shopping, finance, weather and local. “oxylabs” is the rival Oxylabs and brings above all regional and local press.
OpenAI confirms the licensed channel from the other side. When ChatGPT search launched at the end of October 2024, OpenAI named its publisher partners: Reuters, the Financial Times, Axel Springer, Le Monde, Condé Nast, the Associated Press. The search variant was a fine-tuned GPT-4o back then and, according to OpenAI, drew on external search providers as well as partner content. “labrador” is thus the license lane, and few enter it who do not own a national newspaper.
By far the largest share of retrievals runs over the scraped lane, over Bright Data and Oxylabs. That is exactly where most brands play. The consequence is uncomfortably plain: you have to be cleanly readable. Your facts and figures belong in real HTML text, not behind a script, not in a PDF, not baked into an image. The license lane is closed to most. What remains is the road through third-party sources: PR, brand mentions, links, Reddit, the pages the scrapers reach anyway. The technical duty behind this I described in the piece on crawl budget.
One question, dozens of searches
ChatGPT also reveals which searches it fires on your behalf when you pull the conversation back through its own API. On the fast model this is meager: one reworded query, done. On the reasoning model, asked to compare a few products, something else happened. The one question turned into roughly 15 to 40 sub-searches, depending on complexity.
Three behaviors stand out. The system fires targeted “site:” queries straight at the providers’ pricing pages. It guesses a price and then searches to confirm it. And it keeps drawing wider circles, picks up tools that never appeared in your question, and chases their prices. Reading the page is meant literally too: the model searches the page for ”$,” ”€,” even “Agency,” opens the hit page server-side and reads the source text after the currency sign. The same happens with your own page. A question about your prices triggers a query like “site:yourdomain.com/pricing,” the model guesses a number, opens the page and searches the HTML for the symbol to check its guess.
What does this mean for you? Survive this “site:” probe on your pricing page. Key figures in readable text, no toggles via JavaScript, no dynamic loading. And write for the cleaned-up search query the system actually asks, not for the clunky sentence a human types.
Retrieved, cited, mentioned — three different things
This is where the most gets muddled, hence the close look. Three different things can happen to a source. Retrieved means the model pulls your page into its context; that is the “result_source” object, and the reader never sees it. Cited means it hangs your page onto a specific sentence as evidence, the clickable footnote. Mentioned means your brand name appears in the answer, often as a linked chip, but is not the source of the statement. Each of these three you can win or lose on its own.
How far apart they fall shows in a comparison from the test. Reddit was retrieved 278 times and cited 11 times. YouTube was retrieved 201 times and cited not once. The reason is mechanical: a citation has to bind to text the model actually pulled. From a YouTube page it gets the metadata in search, not the transcript. A Reddit thread stands in full on the page. This is no isolated finding. Ahrefs found, across more than 1.4 million ChatGPT prompts, Reddit cited at 1.93 percent, YouTube at 0.51 percent. Two further mechanics lie beneath. Citations bind to a precise statement, so thematic proximity is not enough; you have to be the best evidence for exactly this one sentence. And the hits are deduplicated per domain, so twenty thin pages of your domain collapse into one. One strong page per statement beats a stack of weak ones.
The game is clearest at a point where the reasoning model logs its own approach. For a comparison it wanted the providers’ prices first-hand and went to the official page first. For two tools the price sat behind JavaScript. The model could not read it, gave up and wrote, in effect, that it could of course draw on third-party sources since the official page was hard to parse. Then it cited G2. Your facts, someone else’s page, because your own was not readable. A pricing list in JavaScript therefore not only ranks poorly, it hands your numbers to a third party.
The consequence is uncomfortable: you cannot cite yourself. The statement about you is evidenced elsewhere, so earn third-party coverage on review sites and in forums, win on text rather than video, and place a strong page behind every statement. How exactly to find and close the “retrieved but not cited” gap I described in detail in the piece Retrieved but not cited.
Three stages, three measurement instruments
Once you take these three terms seriously, they stop being synonyms and arrange themselves into a funnel. The causal chain runs in one direction: first the retrieval, then the citation, then the mention, or in the terms that have taken hold in reporting, fetch, citation, mention. For your content to be cited, it first has to be retrieved. For the brand to be mentioned, a citation helps but is not mandatory. Each stage leaves its trace on a different level, so each needs its own measurement instrument. The mention you read from the answer. The citation half, because the clickable source stands in the text but the match against your URLs does not. The retrieval you see almost only server-side.
01/FETCH
Retrieval"The model pulls your page into its context; the reader never sees it."
The volume of AI bot hits on the target pages, split by bot. Aggregated from the server logs, e.g. via Peec.ai Agent Analytics.
The scraper lane via Bright Data and Oxylabs rotates residential IPs and appears as anonymous residential traffic no one can attribute. Retrieval stays a partial approximation and a leading indicator, not a complete count.
02/CITATION
Citation"Your page hangs on a specific sentence as a clickable citation."
The share of tracked prompts in which your domain appears as a source, regardless of whether the brand itself is named.
Go down to the URL level, not just the domain. The system deduplicates hits per domain; a domain citation does not yet prove it was the target page you wanted.
Domain cited but brand not mentioned: proof that the content carries before the brand sticks. For this, filter the source report by your own domain and lay it against the mention list, in the same cadence and with the same prompt set.
03/MENTION
Mention"Your brand name appears in the answer text, often as a linked chip."
Whether your brand name is in the answer text. The easy case: readable straight from the answer, e.g. via Peec.ai. The metric most people already track anyway.
The model takes the recommendation from third parties, from forums and reviews. In experience, the mention trails the first two stages with a delay. What you can steer sits mostly before it.
Retrieval and fact citation are the levers you hold directly, the leading indicators you can steer by. The mention is downstream. It follows.
The mention is the easy case. A visibility tool like Peec.ai reads along whether your brand name is in the answer text. That is the metric most people already track.
You measure the citation today just as well, only in a different place. The same tool reports, per prompt, the cited domains and URLs. From that you draw the share of tracked prompts in which your own domain appears as a source, regardless of whether the brand is named. The revealing cut is the difference: prompts in which your domain is cited but the brand is not mentioned. That is “citation without mention” in its purest form, proof that the content carries before the brand sticks. In practice this means filtering the source report by your own domain, laying it against the mention list and comparing prompt by prompt, in the same cadence and with the same prompt set as the mentions. Go down to the URL level here, not just the domain. You remember the deduplication per domain: a domain citation does not yet prove it was the target page you wanted.
The retrieval is the hard case, because it never appears in the answer. No output tool can see it. It still leaves a trace, in your server logs: the AI fetcher hits the server with its own user agent. Some visibility tools aggregate these bot hits from the access logs, at Peec.ai as Agent Analytics, for example. That is your proxy for retrieval, the volume of AI bot hits on the target pages, split by bot. Watch for the right bots. What counts are the search- and live-triggered fetchers, that is OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User and Claude-User, not the training crawlers like GPTBot, ClaudeBot or Google-Extended. The first correlate with actively answering a question, the second only with training for the next model.
A blind spot remains, and you must say it openly, or you sell yourself a phantom number. Retrieval over the open web runs, as shown above, largely over Bright Data and Oxylabs. These scrapers rotate residential IPs, that is addresses from ordinary private connections, and disguise themselves. A considerable share of retrievals therefore appears in your logs not as “ChatGPT-User” but as anonymous residential traffic you cannot attribute to anyone. The bot analysis measures the identifiable share, not the retrievals from the scraper lane. Retrieval stays a partial approximation and a leading indicator, not a complete count. Say so, and the number holds.
Put together this yields a funnel picture on three levels. Are we picked up at all, does our content carry as a source, does the brand stick at the end? The value shows once the mentions hold still. Then you see in the same picture that retrieval rises and citation rises, while the mention, in experience, trails with a delay. That is an honest narrative of leading and lagging indicators instead of a single number that does not budge.
Behind it stands the same logic as in the whole piece. You cannot issue the recommendation to yourself; the model takes it from third parties, from forums and reviews. Your facts, on the other hand, prices, specifications and measurements, it fetches and cites from your own, cleanly readable HTML page, as long as nothing sits behind JavaScript or in an image. Retrieval and fact citation are the levers you hold directly. The mention is downstream and partly out of your hands. That is exactly why the first two work as leading indicators you can steer by, and the third follows.
What the big numbers say
Here the 700,000 conversations from Profound help, because they back the mechanics with weight. When a search happens, the first question dominates. In the first round the answer carried a citation 12.6 percent of the time, and this first round triggers a citation roughly 2.5 times as often as the tenth, almost four times as often as the twentieth. The opening question is the most expensive spot in the conversation.
When the system searches, it rarely settles for one source. On average around six different sources came together per conversation, about four per cited round. The model triangulates. The market is broad but uneven: the ten largest domains captured only 12 percent of all citations, at a Gini value around 0.8. Wikipedia is the default knowledge layer and sits in about every sixth cited conversation, Reddit follows behind. And sources travel in packs. Through co-citation clusters you appear next to your competitors: a careers page next to Glassdoor and Indeed, a travel brand next to Kayak and Expedia.
From this follows a clear order. Win the first question, that is the “what is,” “how do I,” “what is the best for” with which a search begins, not the clarifying follow-up after it. Be the source after Wikipedia, the deeper framing or the current figure an encyclopedia does not deliver. And know your citation neighbors, to appear deliberately next to the domains your topic is already familiar with.
What cannot be measured
As revealing as the traffic is, one limit stays hard. There is no visible ranking order. No authority score, no trust weight, no formula reaches the browser, because this logic stays on OpenAI’s servers. Whoever sells you “ChatGPT’s ranking factors” is selling you snake oil.
Two things restrict the matter further. Personalization is real and selective. For a question that touched the analyst’s own field of work, ChatGPT drew on his earlier chats, with sources marked as “personal_sources” from chat history, Gmail and files. Part of some answer thus arises from private data no one can optimize for. That is one of the reasons two people get different answers and visibility values fluctuate. And the local is capped. A configuration value called “local_results_limit” is set to 2. Ask for the best café nearby, and ChatGPT names two places, not a top 10. In the local, you are among the first two or not there at all.
What you can do this week
You need no big setup for this. Take your most important questions and check whether ChatGPT searches for them at all: does the answer come with sources below the line, or from memory? For answers from memory, no work on the page helps; that is a task for the long haul, via authority.
You can read the channel behind every hit yourself. Open ChatGPT, then the developer tools, the Network tab, tick “Preserve log,” ask a question and search the responses for “result_source.” If handling the console goes too far: there is now a free Chrome extension that records most of these signals on your own session and exports to Excel.
Afterwards open your pricing and spec-sheet pages and check whether the numbers really stand there as HTML text, not as an image and not loaded via JavaScript. And take on five questions where you want to be named, check where you are retrieved but not cited, and earn a solid third-party source per statement.
Visibility here, too, is not an end in itself. ChatGPT is not a search engine, so stop treating it like one. It reads your page for the facts, as long as it can parse them, and other pages for the opinion, and only when the question is worth a search. Build for exactly that. And treat all of this, my framing included, as a snapshot of a system that shifts weekly. The structure holds. The numbers wander.