To get cited by ChatGPT, two things have to happen in order. ChatGPT must first decide to search the web. Then your page must be the clearest answer it retrieves. You control the second step through crawler access, server-rendered HTML and passages that stand on their own. You reach the first step only through what the rest of the web says about you. I measured both halves on my own site in August 2026, and the first half cost me more citations.

The six steps below run in the order I would do them.
- Allow OpenAI's search crawler. Let OAI-SearchBot in through robots.txt, and treat the GPTBot training crawler as a separate decision.
- Serve the answer in the HTML. Put it in the server-rendered page, not in a component that loads afterwards.
- Write passages that stand alone. Name the subject in every section, so a quoted paragraph still makes sense.
- Say the same thing everywhere. Keep your name, title and one-line bio identical on every profile.
- Build mentions where the engines look. Start with the surfaces they already cite, such as YouTube, Reddit and GitHub.
- Measure with a repeated probe. Pool several runs before you believe a number.
Generative engine optimization (GEO) is the work of getting your pages cited inside AI answers. The sibling posts cover how GEO differs from SEO and how to measure AI citations. The data below explains why each step sits where it does.
How often ChatGPT cited my site
On 2026-08-22 I ran 30 fixed queries through SearchApi, a service that queries ChatGPT, Perplexity and Google and returns each answer as JSON. The queries covered my name, the AIDLC method I write about, tool comparisons, how-to questions and commercial searches. I counted a win when an answer cited a page on pooyagolchian.com.
| Engine | Queries citing pooyagolchian.com | Rate |
|---|---|---|
| Perplexity | 14 of 30 | 47% |
| Google AI Mode | 10 of 30 | 33% |
| ChatGPT | 9 of 30, or 9 of the 20 it searched | 30%, or 45% of searched |
| Google organic top ten | 7 of 30 | 23% |
The AI engines cited my site on 30% to 47% of the queries. Google's organic top ten showed it on 23%. The gap was widest on commercial intent, such as "AI transformation consultant Dubai". ChatGPT cited my site on 3 of 6 commercial queries, while Google's top ten showed it on none. Google's AI Overview appeared on only 5 of the 30 queries, too few to read, so the table leaves it out.
Retrieval was not my main problem. When ChatGPT searched, it cited my site 45% of the time. The losses sat somewhere else.
Why ChatGPT skipped the search on 10 queries
ChatGPT answered 10 of my 30 queries from what it already knew and ran no web search at all. The answer payload marks this with is_web_search_performed: false, and every one of those answers cited nobody. I left the search decision to ChatGPT, which is the default, so these are calls it made on its own.
| Query type | Queries | ChatGPT skipped the search |
|---|---|---|
| AIDLC and agentic concepts | 10 | 7 |
| How-to questions | 4 | 3 |
| Brand queries | 4 | 0 |
| Tool comparisons | 6 | 0 |
| Commercial queries | 6 | 0 |
The split follows the type of question, not the quality of the page. Concept and how-to questions stayed inside the model. Brand, comparison and commercial questions triggered a search every time. "What is a bolt in agentic development" drew no search, so my post defining a bolt never got to compete. "AIDLC vs SDLC" lost the same way, despite a dedicated comparison post.
No on-page change can win a query where the engine never retrieves. Better markup, faster pages and sharper copy all act after a fetch that never happens. I list these queries under what you cannot control, further down.
What happens when ChatGPT does not know your name
On 2026-08-23 I ran about 84 live ChatGPT trials on my own name, plus control names. On the bare query "pooya golchian", ChatGPT searched in only 8 of 26 trials. With any qualifier, such as "Pooya Golchian AEO", it searched in 48 of 58. One extra word lifted the search rate from 31% to 83%.
Retrieval worked whenever ChatGPT searched. It listed pooyagolchian.com as reference number one in 17 of 18 searching runs. The pages were fine. The stall happened before ChatGPT fetched a single page.
Asked to answer without search, ChatGPT said it knew no reliably identifiable public figure by my name. ChatGPT holds no prior for the name, so a bare query with no stated intent routes to a clarifying question instead of a search.
The control names never stalled. Rand Fishkin, Aleyda Solis, Kevin Indig, Jono Alderson and Gianluca Fiorelli all drew a search on the bare name. Even an ambiguous name like "Alex Smith" searched first and asked which one afterwards.
The lesson moves the work off your site. ChatGPT decides whether to search before it fetches anything, so schema, page speed and llms.txt cannot reach that decision. The lever for a thin entity is off-site entity density. A thin entity is a person or brand the model has seen described in too few places. Entity density is how many independent sources describe you the same way. Google makes a related point about its own AI features. Its AI features guidance says you need no special schema.org structured data to appear in AI Overviews or AI Mode.
Why pages you do not control define you
Two more engines showed the same pattern in my August tests. Bing Copilot cited github.com 21 times for my name and pooyagolchian.com zero times. My GitHub profile README did the citation work my site should have done. Perplexity's top citation for "who is Pooya Golchian" was a stale third-party profile page. That page now redirects to a marketing homepage, yet its old cached snippet still shaped Perplexity's answer about me.
The 2026-08-22 run showed where the engines go when they skip my site. On those answers, YouTube drew 74 citations across 17 of the 30 queries. Reddit came second, with 29 citations across 16 queries. I publish on neither, which makes them the two largest citation surfaces I am absent from.
Allow OpenAI's search crawler and decide on training separately
OpenAI runs separate user agents for search, for training and for fetches a user triggers. Its crawler documentation states that each robots.txt setting is independent of the others.
| User agent | What OpenAI says it does | What blocking it means |
|---|---|---|
| OAI-SearchBot | Surfaces websites in ChatGPT's search results | Your site stops appearing in ChatGPT search answers, apart from navigational links |
| GPTBot | Crawls content that may train OpenAI's foundation models | Signals that your content should not be used for training |
| ChatGPT-User | Visits a page when a user's question in ChatGPT needs it | robots.txt rules may not apply, and it does not decide search inclusion |
A robots.txt that allows search and user fetches but opts out of training looks like this.
User-agent: OAI-SearchBot
Allow: /
User-agent: ChatGPT-User
Allow: /
User-agent: GPTBot
Disallow: /I allow all three on pooyagolchian.com, because I want the model to know my work, not only find it. Whether that helps is a bet, not a measurement. Two checks sit outside the file. OpenAI recommends allowing requests from its published search crawler IP ranges, so confirm your CDN or firewall does not block them. OpenAI also notes that a robots.txt change takes about 24 hours to reach its search systems. The free AI visibility checker tests whether AI crawlers can read your site at all.
Serve the answer in the server-rendered HTML
Put the answer in the HTML your server sends, not in a component that fills in after the page loads. OpenAI's crawler documentation does not say whether its bots run JavaScript, so do not bet a citation on it. I learned this on my own site. Until 2026-08-22, my comparison tables loaded in the browser, and crawlers received a loading skeleton with zero <table> elements. Removing one flag from 38 table components fixed it, and the tables now ship in the first response.
The test takes a minute. Fetch the page with curl, then search the raw output for a sentence from your answer. If the sentence is missing, a crawler that skips JavaScript misses it too.
Write passages an AI can quote alone
An AI answer attaches each citation to a sentence or two, so every passage on your page has to stand on its own. I watched this happen to my own homepage. On 2026-08-19, three of five live AI answers to my name ended on the same sentence. The engines had lifted it whole from my homepage's answer to its own question, "Who is Pooya Golchian?" That sentence named three small open-source packages rather than my current work.
Four rules keep a passage quotable.
- Open each section with a sentence that answers its heading.
- Name the subject in full instead of writing "it", "this" or "he".
- Attach a number and a date to each claim, so a quote carries its own proof.
- Phrase headings the way people type the question.
Answer engine optimization (AEO) means shaping a page so an AI answer can quote it. My SEO and AEO best practices guide carries the full on-page checklist.
Keep your identity facts the same everywhere
Answer engines build a picture of you from every page that mentions you, including your own. On 2026-08-19 my own site carried nine competing job-title strings, and AI answers described an older version of me. My structured data claimed one title, and the prose around it outnumbered that claim.
Pick one title, one location and one sentence that describes your work. Copy them word for word into LinkedIn, your GitHub profile README, conference bios and directory listings. GitHub deserves early attention if you work in tech, because Bing Copilot cited it 21 times for my name.
Build mentions where the engines already look
For a thin entity, the remaining work happens off your site. Pick targets by where the engines already cite, not by domain authority.
- Wikidata. My name had no Wikidata item in August 2026. Wikidata's notability policy accepts an item for a clearly identifiable entity that serious, public references can describe.
- YouTube. Record a short video that answers the same question as your strongest post. YouTube drew 74 citations in my run, and I had none of them.
- Reddit. Answer real threads on your topic under your own name, with the full answer in the comment.
- GitHub and LinkedIn. Put the same one-line identity on both profiles, word for word.
- Old third-party profiles. Find the stale ones and ask their owners to update or remove them.
Measure with a repeated probe, not one call
ChatGPT gives different answers to identical calls, so one call proves nothing. One of my probes scored 0 of 1 on a query, and the same query scored 2 of 3 twenty minutes later. Pool at least six runs before you quote a rate. Across full runs, ChatGPT moved about 10 points, while Perplexity and Google organic repeated exactly.
A probe I trust has four parts.
- A fixed query list, written before the first run, so nobody can pick winners afterwards.
- The raw answer payload saved for every call, including the search flag.
- Separate counts for "did not search" and "searched but cited someone else", because each failure needs a different fix.
- A list of the domains cited when you lose, which tells you where to publish next.
The companion post on measuring AI citations walks through the setup in full.
What you cannot control
Some of this sits outside your reach, and a GEO plan that pretends otherwise wastes its budget.
- ChatGPT's decision to search. Off-site work makes your name easier to recognise, but no page edit forces a search.
- Questions ChatGPT answers from memory. My 10 no-search queries cited nobody, so no competitor won them either.
- Cached copies of old pages. Perplexity kept quoting my stale profile snippet after the page itself had changed.
- Run-to-run noise. A 10-point swing in ChatGPT is noise, not a result, so judge the trend across several runs.
Get your own citation rate measured
The SEO and AEO audit measures your AI citation rate as part of a fixed-scope, $6,000 review. I credit the full fee toward a generative engine optimization engagement booked within 60 days.