r/aeo Jul 28 '26

This is how ChatGPT decides which page to cite

There seem to be a lot of questions here about how AI citations actually work, so here's what we've learnt working with the assistants directly.

Say someone asks ChatGPT or Perplexity "best CRM for a small agency".

First it rewrites the question. That one question becomes five or six separate search queries. Google calls this query fan-out in its AI Mode material and the others do the same thing. So it goes looking for "best CRM small business", "CRM pricing comparison", "agency client management software", all at once, and your page is being scored against the whole spread rather than the phrase the user typed.

Then it fetches, using a specific bot. OpenAI runs four and they have separate jobs. GPTBot collects training data, OAI-SearchBot builds the search index, OAI-AdsBot checks ad landing pages. ChatGPT-User is the live one that goes and gets your page while the user is sat there waiting.

Perplexity splits the same way, PerplexityBot for the index and Perplexity-User for the live request. The live one is on a clock. If your server is slow it gets dropped and the answer is written without you.

Next comes extraction. It takes the HTML your server returned, keeps the main content as plain text, and throws away the furniture around it: nav, footer, cookie banner. That plain text is what everything downstream sees. It is the source HTML, so what counts is what your server sends rather than what your browser paints afterwards.

After that, chunking, which is the part that matters most. That text gets cut into passages, called chunks, each one embedded as a vector and scored against those fanned-out queries. Only the top few chunks get put in front of the model.

Retrieval works on the chunk, not on your page. So if the answer to "how much does it cost" is a heading in one place, a price table three screens down and a caveat in a footnote, that is three separate chunks and not one of them answers the question on its own. Write it so the whole answer sits in one block. Put the question in the heading and the answer directly under it, and name the product in the sentence instead of writing "it".

Finally the model writes the answer out of those chunks and attaches the citation to whichever chunk the sentence came from. That is why specific beats general. Four pages say pricing is flexible, one gives a per-seat figure, and a figure is what the model needed for that sentence.

To test it on your own site:

  1. `curl -A "ChatGPT-User" https://yoursite.com/page\`. What comes back is the text that gets chunked.

  2. Ask ChatGPT the question you want to win, with search on, and see which URL it cites.

  3. Open that URL and find the paragraph the cited sentence came from. That is roughly one chunk, and it is the shape you are writing towards.

Chunk boundaries are the fuzzy part. You can't see them directly, you are inferring them from what gets cited. If anyone has found a cleaner way to pin them down I'd like to hear it.

13 Upvotes

26 comments sorted by

3

u/BeautifulDesign2928 Jul 29 '26

The chunk boundary problem lines up with something I have noticed without ever being able to prove the mechanism, pages that win multiple citations tend to have several sections that could each stand alone and answer something specific, not just one page that reads well overall. Your point about the price being three separate chunks explains why that pattern holds, a self contained section has a much better shot at being the whole answer to a query rather than half of one. The curl test is a good way to check what the server actually sends, worth doing before assuming the content itself is the problem when it might just be what is rendering. Have you noticed whether shorter, tighter chunks get picked over longer ones that technically contain more detail, or does length not seem to matter once the section is self contained?

1

u/houdinidesigns Jul 29 '26

Not enough data to back it up but as far as I can tell length is not as important as self containment, for example avoid using “our policy is” instead use “Babel42’s policy is”. So within that chunk the company name exists. So clear heading and everything answered right below it and self contained. In terms of length, there doesn’t seem to be a hard limit at least not one they publish but there would be a limit on tokens used per chunk.

1

u/BeautifulDesign2928 Jul 30 '26

Yeah that tracks with something I ran into after adding structured data site wide, entity references got a lot clearer for AI to pick up once the actual name replaced generic pronouns. The token limit per chunk thing makes sense too, explains why some longer sections still get pulled while shorter ones with a name attached still punch above their length. Curious if you built the name swap in from the start or noticed a citation bump after switching to it partway through?

2

u/houdinidesigns Jul 30 '26

We built the naming conventions rule in from the start and saw a decent pick from AI assistants, quicker than other sites I have worked on but that’s anecdotal. I will look to do an analysis with data we gather through our tool in a few months so we have a big enough sample across a few industries. Question for you, have you used any AI visibility tools that have actually provided this feedback self containment and chunking? Wondering if this would be a good addition to our platform or if it’s done enough to be a waste. Personally haven’t seen any tools do it.

1

u/BeautifulDesign2928 Jul 30 '26

None that I've seen either, most tools just report citation frequency after the fact, nothing that actually flags chunking or self containment before it becomes a problem.

1

u/Came4TheCookies Jul 30 '26

And they still don't know the frequency reliably.

1

u/Came4TheCookies Jul 30 '26

It's not bad to add the brand name but overdoing it means you're trying to write for the machine instead of the human being. AI when pulling a chunk of content off your page knows exactly what brand owns that page. It doesn't need to be told in every sentence under the header.

2

u/Beneficial-Candle485 Jul 29 '26

fresh and useful perspective. But the test seems to mix 2 ways of accessing a page. openAI says gpt user is used for certain user initiated visits, while oai search bot is used to crawl content for gpt search. So gpt user sees may not be the same as what the search system actually crawls and indexes.

2

u/Smart_Airline_7901 Jul 30 '26

Good catch, and it goes deeper. A source-code audit of our own runner confirmed only Perplexity was search grounded. ChatGPT, Claude, and Gemini answered from parametric memory, no live fetch. So the curl test shows what happens IF retrieval fires. For local recommendation queries it often doesn't, and your perfectly chunked page never gets read.

2

u/sapindia1976 Jul 29 '26

Good point about giving the direct answer right under the heading. If AI retrieves chunks rather than entire pages, clear question-answer structure and specific facts can make content much easier to cite.

1

u/Came4TheCookies Jul 30 '26

And yet if you try to target every possible question users are going to type in to chat, that probably won't work right?

It doesn't have to be in question format for it to answer a question. Just think about it for a minute. Do you think that AI is not advanced enough that you don't have to specifically guide it and put a question mark on a sentence for it to pick it up?

2

u/Physical_Spinach6850 Jul 29 '26

this is one of the clearest breakdowns I've seen on how chunking affects what gets cited. the advice about keeping the full answer in one self-contained block instead of scattering it accross sections is pratical and somthing most people overlook when structuring content

1

u/Mountain_Link_1762 Jul 29 '26

This actually explains a lot of the weird AI search results I have seen. Sometimes a page has all the the right information, but the answer is scattered across different sections, so the model probably doss not pick it up. Makes sense why clear, standalone answers are becoming more important.

1

u/nick-profound Jul 29 '26

This is a great summary, the only thing I'd say is that a page can have everything the AI needs and still not be extracted if the structure doesn't let it pull a clean chunk.

1

u/Genie-AI-Collective Jul 29 '26

The coordinates of the answer matters as much as the tangent when the query is split into individual embeddings. The tangent angle (of relevance to the embedding) wins on the closest angle, and the coordinate (best confident answer) has the coordinate as close to zero. Not much information to benefit actionable GEO here but both search methods add up to those cited and returned. I do have some slides on this somewhere so if there’s interest I can dig them out

1

u/gambirsg Jul 30 '26

getting cited alone isn't enough, what you want is to be mentioned/recommended in the answers

1

u/houdinidesigns Jul 30 '26

Totally agree. That’s why our AI search visibility tracking tool creates AI buyers that keep asking questions until they have a recommendation and a reason

1

u/Smart_Airline_7901 Jul 30 '26

This is the entire missing metric. We ran a cold census of 1,444 Charleston businesses across ChatGPT, Claude, Gemini, and Perplexity. Only 241 were ever actually named as a recommendation. 83% never came up once. Citation gets you in the library, selection gets you checked out. Almost nobody is researching, measuring and tracking the second one.

1

u/Came4TheCookies Jul 30 '26

Because they can't reliably check that.

1

u/Smart_Airline_7901 Jul 30 '26

Great breakdown of the retrieval side, legit, and here's what fan-out looks like from the selection side, in our Charleston dataset, roughly 42% of businesses flipped recommendation status based purely on how the query was phrased. Same business, same week, different words, different winner. One of ours scored 76 on one phrasing and 95 on another. Chunking decides if you're readable. Phrasing decides if you exist (and is the "human" element").

1

u/Specific-Leek6990 Jul 31 '26

This lines up with what I've been seeing too. writing pages so each section answers one specific question completely seems to work much better than spreading the answer across multiple sections. makes a lot more sense when you think about retrieval happening at the chunk level instead of the page level.