Course outline · lesson 14 of 20

Module 05 · Engine Playbooks · Lesson 1 of 4

Optimizing for ChatGPT

ChatGPT answers some questions from memory and some from a live search, and only the search can see what you changed this year. Here is what OAI-SearchBot, your CDN and your raw HTML each decide.

9 min read4-question checkIntermediateUpdated 2026-10-17
0/20 passed

By the end of this lesson you can

  • Tell a retrieval-off ChatGPT answer from a retrieval-on one, and know which one your work can reach
  • Separate what OAI-SearchBot, GPTBot and ChatGPT-User each control
  • Check both halves of OpenAI's eligibility rule: robots.txt permission and CDN reachability
  • Read chatgpt.com referrals in GA4 as a floor, not a total

Ask ChatGPT what Ledgerly costs on Monday and it says $39 a month. Ask again on Tuesday, this time with search running, and it says $49, with a link to the pricing page. Both answers came from "ChatGPT". They came from two different systems, and only one of them can see anything you changed this year.

Most ChatGPT advice ignores that split. It tells you to allow a bot, add markup or rewrite your pages, and never says which ChatGPT the tactic is meant to reach. That is how teams spend a quarter on work that cannot touch the answer they are angry about.

This lesson separates the two systems, names the three OpenAI crawlers and what each one controls, and ends with a checklist you can run in ten minutes. Everything in it rests on OpenAI's own documentation. Where OpenAI is vague, the lesson says so.

Two ChatGPTs: retrieval off and retrieval on

When ChatGPT answers without searching, it answers from parametric memory: what the model absorbed in training, frozen at a knowledge cutoff. That is Stage 0 in the four-stage model. Nothing you publish this quarter reaches it.

OpenAI’s chat-latest model page, checked 16 October 2026, lists an April 20, 2026 knowledge cutoff. That alias changes over time. Other models have their own cutoffs, so record the exact model and its documented cutoff rather than treating ChatGPT as one fixed knowledge state. A fact published after that snapshot cannot have been learned from that publication during training. Record whether search ran: a retrieved source can supply newer information than the training cutoff.

When ChatGPT searches, it answers from retrieval: it fetches pages at answer time and can cite them. This is the half you can affect. But retrieval is the model's call, made per query, and nobody outside OpenAI knows how often it happens. Profound reports about 18% of conversations trigger at least one web search, Semrush's US clickstream put it at 34.5% of queries in February 2026, and cloro measured 80.5% globally on a 100-prompt set it chose. Those studies measure different things on different populations. None of them tells you what happens for your buyer's question.

One rule follows: if an answer shows sources, retrieval ran. If it shows none, you do not know, and it may be the frozen snapshot talking.

99Visibility asks ChatGPT through the API with web search on, so the model decides per prompt whether to search, as it does in the ChatGPT app. Each answer in the audit is marked "Searched the web" or "Answered from memory," with the searches it ran. That keeps the two systems apart inside one column. A wrong fact on an answer from memory is a stale belief from training, and no page edit reaches it this quarter. A wrong fact on an answer that searched is something a page said, and its citations show you which page.

Worked example

Ledgerly, a fictional B2B invoicing SaaS, raised its Growth plan from $39 to $49 a month in May 2026. In this example, the measured model was trained before that change, so its training data cannot establish the new price. No page edit changes that, so Ledgerly records it as a known constraint and stops arguing with it.

A retrieval-on answer can say $49, but only if three things hold: OAI-SearchBot may fetch the pricing page, the CDN lets it through, and the price is in the raw HTML. Ledgerly also finds a 2025 blog post that still says "$39 a month". If retrieval lands on that post, ChatGPT will repeat the wrong number with a citation attached. The fix is to correct the post. Nothing new needs adding.

Three OpenAI bots, three different switches

OpenAI runs three agents, and each one controls something different. Treating them as one "ChatGPT bot" is the most common robots.txt error there is.

AgentWhat OpenAI says it doesWhat blocking it does
OAI-SearchBot"used to surface websites in search results in ChatGPT's search features""Sites that are opted out of OAI-SearchBot will not be shown in ChatGPT search answers, though can still appear as navigational links."
GPTBotCrawls content that "may be used in training our generative AI foundation models"Signals your content should not be used for training. OpenAI claims no search effect.
ChatGPT-UserFetches a page when a user's request calls for itOpenAI says it is "not used to determine whether content may appear in Search" and that "because these actions are initiated by a user, robots.txt rules may not apply."

OpenAI states the settings are separate: "Each setting is independent of the others." So a site can keep its content out of training and stay in search:

User-agent: GPTBot
Disallow: /

User-agent: OAI-SearchBot
Allow: /

Two details trip people up. First, a site opted out of OAI-SearchBot "can still appear as navigational links". Seeing your homepage link in ChatGPT does not prove OAI-SearchBot is allowed, and opting out does not make you vanish. Second, the training decision is a business choice. OpenAI asserts no retrieval benefit from allowing GPTBot, and nobody has measured whether blocking it changes what future models recall about you. The honest label is unmeasured. For the full per-bot method, see AI Crawlers and robots.txt, Bot by Bot.

The eligibility rule has two halves

OpenAI's help center states the rule in one sentence: "To make a website eligible for inclusion, allow OAI-Searchbot to crawl the site and confirm that the website host or content delivery network allows traffic from OpenAI's published searchbot IP addresses."

The word that matters is and. A perfect robots.txt fails if the CDN refuses the crawler. OpenAI's own guidance names the symptom: bot-protection systems "can mistakenly block legitimate crawlers, often returning 403 Forbidden errors", and because OpenAI's crawlers are automated, JavaScript challenges and CAPTCHAs "may block access." A challenge page served with a 200 status is still a failed fetch.

Three things make this worse than it sounds:

  • Review CDN settings. Cloudflare’s September 15 announcement says existing settings carry over. New ad-supported domains are offered Search: Allow, Training: Disallow AI Training, and Agent: Block on pages with ads. Training Block also blocks mixed-use crawlers such as Googlebot and Bingbot; Disallow AI Training preserves their search access. Check the settings of your own zone.
  • IP lists are not the whole answer. OpenAI publishes its crawler IP ranges at openai.com/searchbot.json and sibling files, and it also warns against relying on IP-only allowlisting. As of August 2026 those files listed IPv4 ranges only, so an origin that answers on IPv6 alone cannot be reached.
  • Nothing tells you. No OpenAI dashboard reports that your CDN refused its crawler. The failure is silent.

To test it, 99Visibility's Crawler Access check requests your page as each crawler's user-agent, classifies the response as 200, 403, 429 or a challenge, and flags any bot that robots.txt allows but the firewall blocks. Read the result with one asymmetry in mind: a block on the user-agent string is strong evidence, but a pass is not proof, because a rule keyed to IP addresses could still stop the real bot. Your CDN or server logs, filtered to verified OAI-SearchBot traffic, are the ground truth. When robots.txt Says Yes and Your Firewall Says No covers the fix.

What ChatGPT search does with your page

It reads the raw HTML

Vercel's crawler study (published December 2024) found ChatGPT's crawlers fetched JavaScript files on 11.50% of requests but did not execute them, and independent re-testing in June 2026 found that GPTBot, OAI-SearchBot and ChatGPT-User still do not render JavaScript. If your pricing table is built in the browser, it does not exist for ChatGPT. Open the page source, or fetch it with curl, and search for the price. 99Visibility does not run this rendering check for you, so do it by hand. Rendering, noindex and Snippet Controls shows how.

It rewrites the question

OpenAI: "ChatGPT search typically rewrites your query into one or more targeted queries that it sends those providers." With memory on, ChatGPT "may use relevant saved memories when rewriting a search query." The prompt you test is not the query that runs. Test logged out with memory off, and treat any prompt list as a sample of buyer questions, not as the retrieval input.

It sometimes uses partners, including Bing

OpenAI says ChatGPT search "sometimes partners with other search providers", and its named-provider list traces back to 2024-era documentation that named Microsoft. Bing's index is a documented upstream with an unquantified effect. It is worth being in, because Bing Webmaster Tools is free and the same index backs Copilot, but nobody has measured how much it moves ChatGPT.

It ranks by "multiple factors"

OpenAI's full ranking disclosure reads: "ChatGPT ranks search results using multiple factors intended to help users find relevant, reliable information. Placement is not guaranteed." That is all of it. Anyone who lists ChatGPT's ranking factors is guessing.

It retrieves more than it cites

OpenAI's API documentation separates the pages a search consulted from the ones it cited, and says "the number of sources is often greater than the number of citations." A page can shape an answer without a link, and a link does not prove the page shaped it. Citation is not use.

Attribution: what utm_source=chatgpt.com shows

OpenAI's publisher FAQ says: "ChatGPT automatically includes the UTM parameter utm_source=chatgpt.com in referral URLs." In GA4, those visits arrive with chatgpt.com as the session source, so a filter on session source shows them.

Read that number as a floor. Free-tier and mobile-app clicks frequently arrive untagged and land in direct traffic. A rising chatgpt.com line is real. A flat or empty one does not prove ChatGPT sends nobody. For the full reporting setup, see Monitoring and Measuring GEO ROI.

Myth: "ChatGPT is 92% of AI traffic." That figure is 92.4% of trackable referral sessions on a self-selected panel of 166 agency properties. ChatGPT stamps its links and most rivals do not, and Google AI Overviews produce no referral event at all, so they were left out. It measures who tags links, not who sends visitors. Treat any share-of-AI-traffic number as an upper bound, never an estimate.

What not to do

  • Do not allow GPTBot to "get cited." OpenAI's description of GPTBot covers training and nothing else.
  • Do not block GPTBot and assume you left ChatGPT search. Search is OAI-SearchBot's job, and the settings are independent.
  • Do not publish llms.txt for ChatGPT. OpenAI does not document reading it, and no controlled test shows it does anything.
  • Do not rewrite pages "for AI". C-SEO Bench (arXiv:2506.11097, NeurIPS 2025) found most content-rewriting methods "are not only largely ineffective but also frequently have a negative impact on document ranking."
  • Do not chase the cutoff. A May 2026 price will not enter a model frozen in February 2026. Make it correct for retrieval and let the next model catch up.

Evidence: OpenAI's crawler documentation (developers.openai.com/api/docs/bots, verified 2026-08-22) states that sites opted out of OAI-SearchBot "will not be shown in ChatGPT search answers," that GPTBot governs training, and that "each setting is independent of the others." OpenAI's help center adds the second half: the host or CDN must allow traffic from OpenAI's published searchbot IP addresses.

Common mistakes

  • A blanket "block AI" rule. A template that disallows every OpenAI agent removes ChatGPT search eligibility when the owner meant to opt out of training only.
  • Checking robots.txt and stopping. Half the rule is your CDN. Test both halves.
  • Trusting a test from your laptop. A request with a borrowed user-agent tests your firewall's user-agent rules, not its IP rules. Logs filtered to verified bots settle it.
  • Testing logged in. Memory and custom instructions change the rewritten query. Test logged out.
  • Reading a missing source as a search miss. No sources often means no search ran at all.
  • Treating zero chatgpt.com sessions as zero visits. Untagged clicks land in direct.

Key takeaways

  1. 01ChatGPT is two systems: a frozen snapshot you cannot reach this quarter, and a per-query search you can.
  2. 02OAI-SearchBot controls ChatGPT search eligibility, GPTBot controls training only, and OpenAI says the two settings are independent.
  3. 03Eligibility needs robots.txt permission and a CDN that lets OpenAI's crawler through, and a failure at the CDN is silent.
  4. 04ChatGPT's crawlers do not run JavaScript, so your facts must be in the raw HTML.
  5. 05utm_source=chatgpt.com gives you a floor, because some ChatGPT clicks arrive untagged.

Your win · about 10 minutes

Know whether ChatGPT search can reach your site

  1. Open yoursite.com/robots.txt, find the group that applies to OAI-SearchBot (its own group, or User-agent: * if it has none), and confirm it does not disallow your key pages.
  2. Run the Crawler Access check on your pricing page and confirm OAI-SearchBot gets a 200, not a 403, 429 or challenge page; if you have CDN logs, filter them to OAI-SearchBot and check the status codes there too.
  3. View the raw source of your pricing page (not the browser inspector) and search for your current price; if it is missing, it is rendered in the browser and ChatGPT cannot read it.
  4. In GA4, filter traffic acquisition by session source chatgpt.com for the last 90 days and write the number down as a floor, not a total.
Run the free Crawler Access check

Knowledge check · 4 questions · pass with 3

Pass this to complete the lesson

Graded on our server. Get 3 of 4 right to mark the lesson complete and move your timeline.

  1. 1.Which OpenAI crawler decides whether your pages can appear in ChatGPT search answers?
  2. 2.A ChatGPT answer about your brand shows no sources. What can you conclude?
  3. 3.Why can a fix you ship today not change a retrieval-off ChatGPT answer?
  4. 4.What does a GA4 count of sessions with the source chatgpt.com give you?

See what AI says about your brand

Run a free audit across ChatGPT, Perplexity, Google AI, Gemini and Claude, and check which AI crawlers can reach your site.

Start for Free