ChatGPT decides who to cite before it ever opens a browser tab. Independent studies of the model's network traffic show: brands the model names itself, in its own first search query, get cited 68.9% of the time. Brands surfaced only through the subsequent search — 2.1%. A 33x gap, decided not at search time, but earlier — inside the model's weights. Here's what to do about it.
I already wrote about how ChatGPT physically can't see prices hidden behind JavaScript, and quotes G2 instead, in "ChatGPT has already been to your website. And left to quote a competitor." That piece was about content accessibility once the model is already searching. This one is about what happens earlier: how a brand enters the model's field of view before it opens a single tab.
Two stages: the shortlist first, then the filter
Two further studies by the same author, Suganthan Mohanadasan, including a separate piece on what ChatGPT decides before it searches, expose the mechanism in detail. It runs in two stages.
First, the model builds a competitive shortlist — right inside the first search query, before it has opened a single page. In 21 of 27 tested conversations, ChatGPT's first search already contained product names the user never mentioned. Ask "best AI note-taking app" and the JSON traffic shows a query like "Granola Notion AI Otter Fireflies Fathom Mem Limitless" — assembled by the model itself, from what it already "knows" about the category.
Then comes a hard positional filter. Even among pre-shortlisted sources, few get cited: 1st position in the results gives a 5.2% citation chance, 2nd — 4.6%, 6th and beyond — 0.3%. Of 3,554 pages the model actually retrieved in one measurement, only 110 made it into the final answer — 3.1%.
Which is where the three steps below come from. The first two are about making the shortlist — decided before any search happens. The third is about passing the filter, once the model does check you live.
Step 1. Dense semantic entity anchoring
Contextual proximity. ChatGPT's shortlist isn't random — it's an imprint of what the model saw sitting next to what in its training text. If a brand is regularly mentioned in the same sentence or paragraph as its competitors and category — on Reddit, GitHub, Hacker News, Wikidata, industry media — the model learns that association and pulls the brand into the shortlist by default, before ever touching the live web.
One consistent positioning sentence. Write the entity down as one phrase: "[Brand] is the [category] for [audience]" — and use it everywhere, unchanged, from press releases to a founder's LinkedIn bio. Inconsistent phrasing dilutes co-occurrence; repeating the same pairing reinforces it.
Step 2. Dominate the primary training datasets
LLMs aren't trained on the whole web indiscriminately — they're trained on filtered, high-quality slices: Common Crawl, C4, technical documentation corpora. Presence there matters more than a ranking position in Google.
- Aggregators and listings. A complete, current profile on G2, Capterra, Product Hunt, Trustpilot, Crunchbase isn't just about leads — it's text that's highly likely to end up in training data, paired directly with the category name.
- Open source and the tech ecosystem. GitHub repos, documentation, integrations with popular APIs and frameworks — code and technical writing are among the cleanest, most heavily used corpora in training.
- Multimodal traces. YouTube review transcripts, Spotify and Apple Podcasts episodes. Models increasingly train on text transcripts of audio and video — a review nobody will ever cite directly still leaves a text footprint in the dataset.
Step 3. Site infrastructure for the "site probe"
Even once the model has shortlisted a brand, it still runs a live check — the exact kind of query the research surfaces: site:yourbrand.com pricing features 2026. Your site has to pass that probe, or none of the co-occurrence work above gets you a citation.
- Transparent URL structure. Clear, predictable paths: /pricing, /features, /integrations, /vs-competitor.
- Machine-readable formatting. Prices and plans in plain HTML text or a table — not behind a lead-gen form or a dynamic script. Same conclusion as part one of this research: the model simply can't see JS-loaded prices.
- llms.txt and Schema.org markup. A short, machine-readable file describing your product structure, plus SoftwareApplication, Product, and Offer schema — a direct hint to the model instead of a guess.
- Crawler accessibility. None of the above matters if GPTBot, PerplexityBot, ClaudeBot, or Bingbot physically can't reach the page — because of a robots.txt rule or a Cloudflare JS challenge.
That last point is the one you can test today, not after six months of content work. I built a free tool that does exactly this: it reads your robots.txt and, at the same time, sends a live request under each major AI crawler's user-agent — GPTBot, ChatGPT-User, ClaudeBot, PerplexityBot, Bingbot — and shows which ones your site actually lets through, and which it blocks, even when robots.txt formally allows access.
Check your site's AI-bot accessibility →
What to do today
All three steps solve the same problem — not ranking higher, but getting baked into the model's weights before the user even asks the question. Ranking in classic search is a competition for a click, right now. A seat in an LLM's shortlist is what decides the outcome of that competition before it even starts.
Where to start today: run your site through the AI-bot accessibility check — it takes seconds, and either confirms there's no technical barrier, or points at the specific block worth fixing first. After that come Step 1 and Step 2, which don't resolve in seconds but don't require a big-brand budget either: consistent, repeated mentions in the right context are almost always more within reach than they look.
Maxim Safianov
0 comments
No comments yet — be the first to share your thoughts.
Sign in to post your comment instantly:
…or comment as a guest — guest comments appear after moderation.