ChatGPT's search step increasingly issues site:-scoped queries rather than broad open-web searches. This single detail changes what "being findable" means for anyone with a site, docs, or a blog.
What a site:-Scoped Search Actually Implies
When a model decides to search, it writes the query itself. A broad query like best invoicing tools for freelancers pulls from the whole index and the model picks whatever ranks. A scoped query like site:yourdomain.com pricing means the model has already decided your domain is the right source and now wants a specific fact from it.
Broad search rewards general authority. Scoped search rewards whether the specific answer exists on a crawlable page on your domain, in text, at a URL a search index has actually seen. If your pricing lives inside a JavaScript-rendered widget, or your API rate limits are buried in a PDF, a scoped query returns nothing - and the model either guesses, hedges, or moves on to a competitor's docs page.
For AI engineers building retrieval-augmented systems (RAG - feeding a model external documents at query time), this should feel familiar. It's the same failure mode as a chunk that never got indexed. The difference is the index isn't yours.
Run the Test Yourself
You don't need a GEO vendor to check this. Run the same scoped queries a model would generate:
# What a model asks when it already trusts your domain
site:yourdomain.com pricing
site:yourdomain.com "rate limit"
site:yourdomain.com refund policy
Paste each into Google or Bing directly. Then check whether the answer is in the visible snippet - not three clicks deep.
Then check crawlability from the terminal:
curl -s https://yourdomain.com/pricing | grep -i "per month"
If curl returns your raw HTML but the price isn't in it, that fact is client-side rendered and invisible to most crawlers. Same test for docs pages, FAQ answers, and comparison tables.
Three fixes, in order of payoff:
- Put the literal answer in server-rendered HTML. Prices, limits, versions, dates.
- Give each discrete fact its own indexable URL. One page answering "what are the rate limits" beats a mega-page with an anchor link.
- Use the phrasing a user would type. Models generate queries from user language, not your internal product vocabulary.
This is unglamorous work - closer to technical SEO hygiene than to prompt engineering. That's precisely why most teams skip it.
Key Takeaways
- Scoped
site:queries mean the model already chose your domain; the only question is whether the fact is retrievable. - Client-side-rendered facts are functionally invisible to the crawl step -
curlplusgreptells you in seconds. - One clear fact per indexable URL, written in user phrasing, outperforms a comprehensive page that buries it.
Run one scoped query for your own site right now - which specific fact came back empty that you assumed was public?
Sources referenced: Simon Willison's blog, Promptwatch reporting
Top comments (3)
The site: test is a useful way to debug fact retrieval after a domain has been selected, but I would not treat a successful result as evidence that the model will select that domain in the first place. In a scan we ran across 284 Korean DTC brands and 50 AI shopping questions per brand, 65.5% had zero appearances and the mean was only 0.648 out of 50. That gap suggests two separate stages: domain/source selection, then fact retrieval within the chosen source. Your curl/grep check is strong for stage two. For stage one, do the Promptwatch or Simon Willison sources expose the actual generated search queries, or are the site: patterns inferred from observed result URLs? Keeping those evidence levels separate would make the test much more diagnostic.
The rise of AI-driven search necessitates a reevaluation of traditional SEO tactics. Brands must adapt to how AI interprets and ranks content, emphasizing quality and relevance over mere keyword placement.
Strong post, the "already chose your domain" framing is the key reframe. Scoped queries turn GEO into a retrieval problem, not a ranking problem, and the RAG analogy holds: a fact that never made it into an indexable chunk is just as missing whether the index is yours or Google's.