All resources

Measure

August 12, 2026 · Updated August 17, 2026 · 13 min read

By Marcus Bransbury · Founder, Robot Visible

ChatGPT citations and search visibility

How ChatGPT search discovers and cites pages, which OpenAI crawler controls apply, what publishers can measure, and what one reproducible API search showed.

Quick answers

What makes a page eligible for ChatGPT search citations?

Allow OAI-SearchBot and its published network ranges to reach the public page, then make the page a strong source for a specific information need with clear visible claims, primary or well-attributed evidence, current facts, identifiable authorship, and useful internal discovery. Access creates eligibility, not a guarantee. Verify a citation only by capturing the answer, query, OpenAI surface, cited URL, and timestamp.

What is the difference between OAI-SearchBot, GPTBot, and ChatGPT-User?

OAI-SearchBot automatically crawls pages for ChatGPT search features. GPTBot crawls content that may be used for foundation-model training. ChatGPT-User fetches pages for certain actions initiated by a ChatGPT or Custom GPT user and is not the Search inclusion control. OpenAI documents these as independent roles, and says robots.txt rules may not apply to user-initiated ChatGPT-User requests.

Can I allow ChatGPT search but block OpenAI model training?

Yes. OpenAI documents OAI-SearchBot and GPTBot as independent robots controls. A publisher can allow OAI-SearchBot for search discovery while disallowing GPTBot to indicate that the site's content should not be used for foundation-model training. Verify that CDN and firewall policy follows the same distinction.

Does an OAI-SearchBot visit prove that ChatGPT cited my page?

No. It proves only that a verified search-crawler request reached a particular URL at a particular time. It does not reveal the user's query, an answer, source selection, mention, citation, impression, click, or conversion. Preserve crawler access as Eligible evidence and capture an actual answer separately for Observed evidence.

Can the OpenAI API measure ChatGPT search visibility?

It can provide a repeatable OpenAI web-search measurement surface with answer text and URL-citation annotations. OpenAI documents gpt-5-search-api as direct access to the models and tool used by Search in ChatGPT, and now points new integrations at the Responses API web search tool while keeping gpt-5-search-api as the Chat Completions path. Whichever you use, an API request is still not a consumer ChatGPT session, and the two are separate surfaces rather than interchangeable ones. Label the surface precisely and do not generalize one API result to all ChatGPT users.

How should I measure ChatGPT referrals and citations?

Keep four records separate: verified crawler requests, captured answers and cited URLs, attributable referral sessions, and downstream conversions. A crawler visit is not a citation, a citation is not a click, and a referral does not reveal total answer impressions. Compare stable questions over time and retain the query, surface, state, location, answer, source URL, and timestamp.

The short answer

To be eligible as a source in ChatGPT search answers, a public page should be available to OAI-SearchBot, including requests from OpenAI's published IP ranges. That removes a discovery barrier; it does not guarantee that ChatGPT will retrieve the page for a question, use its claims, cite its URL, describe the brand accurately, or send a visit.1

OpenAI documents search discovery, potential foundation-model training, and user-triggered fetching as independent jobs. A publisher can allow search through OAI-SearchBot while disallowing GPTBot for training. ChatGPT-User is different again: it may fetch a page because a person asked ChatGPT or a Custom GPT to visit it, and OpenAI says robots.txt rules may not apply to those user-initiated requests. The crawler reference keeps the current user agents and verification links in one maintained table.1

Treat the outcome as three separate states. Successful access can support Eligible evidence. A page with a clearer answer, stronger primary evidence, fresher facts, and better corroboration may be more Competitive. Only a captured answer that preserves the query, OpenAI surface, cited URL, response context, and timestamp is Observed citation evidence. None of those states should be inferred from the other two.

The three OpenAI web roles publishers need to separate

OpenAI's crawler documentation is unusually explicit about scope. OAI-SearchBot is used to surface websites in ChatGPT search features. GPTBot collects content that may be used to train generative AI foundation models. ChatGPT-User supports certain actions initiated by a person in ChatGPT or a Custom GPT and is not an automatic web crawler. A rule written for one name does not automatically control the others.1

OpenAI user agents, their documented jobs, and the evidence their visits provide
User agentDocumented roleWhat a successful request proves
OAI-SearchBotAutomatic crawling for websites that can surface in ChatGPT search resultsThat this crawler reached that URL at that time; not that the page was retrieved or cited in an answer
GPTBotCrawling content that may be used in foundation-model trainingThat a training-purpose crawler reached the URL; not that the content entered a dataset, changed a model, or appears in search
ChatGPT-UserA page visit triggered by certain user actions in ChatGPT or a Custom GPTThat a user-initiated fetch reached the URL; not why the user asked, what the answer said, or whether the page was cited

How ChatGPT search sourcing can be observed

OpenAI's web-search API documentation exposes a useful model for observation without publishing a source-ranking formula. A search-enabled response can contain a web-search action, answer text, and URL-citation annotations with the cited page's URL, title, and location in the answer. The API can also return the broader set of sources consulted, which OpenAI distinguishes from the smaller set cited inline. Search context size does not guarantee a fixed number of sources or citations.2

That distinction matters for publishers. A system can consult a page without citing it, cite the same page against several answer passages, or cite several URLs from one publisher. Counting citation annotations, unique URLs, unique domains, brand mentions, and referral sessions answers different questions. Pick the unit before comparing runs.

The visible source set is also query- and run-specific. A broad category question can be rewritten or supported by pages covering definitions, comparisons, implementation steps, statistics, and examples. Build one strong page for a coherent information need and connect genuinely different supporting pages with descriptive internal links. Do not manufacture near-duplicate pages for imagined rewrites.

Source signals in an OpenAI web-search response
SignalWhat it recordsWhat it cannot establish alone
Search actionThat the API surface performed a web-search operation, sometimes with the query it searchedEvery ranking candidate, retrieval rule, or why one source won
Consulted sourceA URL made available to the model while it formed the responseThat the final answer visibly attributed a claim to that URL
URL-citation annotationA URL and title attributed to a defined location in the returned answerConsumer ChatGPT exposure, repeat visibility, sentiment, or a click
Brand mention without a URLThe answer named the tracked entityThat the tracked site supplied the information or received attribution

Publisher controls: search, training, and on-demand retrieval

For search inclusion, OpenAI recommends allowing OAI-SearchBot in robots.txt and allowing requests from its published IP ranges. OpenAI says sites opted out of OAI-SearchBot will not be shown in ChatGPT search answers, although they can still appear as navigational links. It also warns that a robots.txt change can take about 24 hours to reach its systems, so an immediate retest is not a reliable policy check.1

A separate GPTBot rule expresses the site's training choice. Blocking GPTBot does not, by itself, opt the site out of ChatGPT search. Conversely, allowing GPTBot does not make a page search-eligible when OAI-SearchBot is blocked. ChatGPT-User cannot substitute for OAI-SearchBot either: OpenAI says it is not used to determine whether content may appear in Search.1

Robots.txt is only one layer. A CDN, web-application firewall, bot challenge, rate limit, authentication wall, redirect loop, or origin error can still refuse a permitted request. Verify the exact production URL at the edge and origin, and verify claimed crawler traffic against OpenAI's published ranges rather than trusting a spoofable user-agent string.

Independent OpenAI search and training choices
# Permit automatic discovery for ChatGPT search
User-agent: OAI-SearchBot
Allow: /

# Make a separate decision about potential model-training collection
User-agent: GPTBot
Disallow: /

# Do not rely on a ChatGPT-User rule as the Search control.
# OpenAI says these fetches are user-initiated and robots.txt may not apply.

This example permits search discovery and declines GPTBot training. It does not guarantee selection, override a firewall, or prove that OpenAI has already recrawled the site. Preserve any more specific rules your site needs and test the deployed file.

What to publish when access already works

Once access is verified, the constraint usually moves from eligibility to selection. State the page's answer early in complete sentences, then provide the evidence and qualifications that make it safe to reuse. A useful source gives a reader the definition, criteria, comparison, limitation, date, or first-hand observation needed for the exact question—not generic copy wrapped around keywords.

Make authorship, organization identity, dates, pricing, availability, and methodology visible where they matter. Cite primary sources for volatile product facts and label your own tests as observations. Accurate structured data can reinforce those visible facts, but OpenAI does not document a special ChatGPT citation schema. Treat schema as machine-readable clarification, not a submission or ranking control.

Compare the currently cited pages claim by claim. If they publish primary data, direct experience, a clearer definition, or better corroboration, close that evidence gap. If your page already supplies the strongest relevant evidence, improve discovery and external corroboration rather than adding length for its own sake. A page can be excellent and still lose a particular run because selection is competitive and variable.

  • Assign one canonical public URL to each substantive information need and keep its title, canonical, visible heading, and content aligned.
  • Put important facts in server-readable text rather than requiring login, interaction, or client-side rendering to reveal them.
  • Name the author or accountable organization and show when volatile facts were checked or meaningfully updated.
  • Support consequential claims with first-party data, primary documentation, reproducible observations, or clearly attributed sources.
  • Keep product, pricing, availability, and entity facts consistent across the site and credible third-party profiles.
  • Link the page from relevant hubs and supporting pages with anchor text that explains why it is useful.

Measurement: keep crawler, answer, referral, and outcome evidence apart

A crawler visit is not a citation, and a citation is not a click. The reviewed OpenAI crawler and web-search documentation does not provide publishers with a Search Console-style report of ChatGPT impressions or every query that exposed a URL. Build the measurement record from the evidence you can actually preserve, and label the gaps unknown. Absence from one answer is not an impression count of zero; absence of a crawler log is not proof that OpenAI has never discovered the page.

Use a stable question set and store the exact question, surface, model or app state where available, location, time, answer text, cited source URLs, and target-domain outcome. Repeat under comparable conditions. A first appearance is an observation; repeated appearances describe persistence; a before-and-after difference is still correlation unless the test isolates the change.

Keep human visits and conversions in the same analysis but not the same metric. A referral session shows that a person followed a link. It does not reveal how many answers displayed the link, whether the link was an inline citation or navigation, or what uncaptured answer text surrounded it. Preserve the referrer, full landing URL, timestamp, session, and downstream outcome rather than converting one visit into an estimated citation count.

A publisher measurement map for ChatGPT search visibility
EvidenceUseful interpretationDo not call it
Verified OAI-SearchBot request in edge or origin logsSearch crawler access to one URL at one timeA search impression, citation, recommendation, or human visit
Verified ChatGPT-User requestA user-triggered OpenAI fetch reached the URLProof that OAI-SearchBot indexed the page or that Search cited it
Captured answer with a target URL citationObserved citation for that query, surface, state, and timestampStable ranking, share of all ChatGPT answers, or causality
OpenAI API URL-citation annotationObserved attribution on that API measurement surfaceA consumer ChatGPT session unless the consumer session itself was captured
ChatGPT or OpenAI referral sessionA person clicked through and the visit retained attributable referral dataThe number of answer impressions or citations
Conversion after an attributable referralA downstream outcome for that visit under the analytics attribution modelProof that a particular content change caused the answer or the conversion

First-party observation: one ChatGPT Search API answer

On 12 August 2026 Robot Visible sent the query “what is answer engine optimization” to OpenAI's `gpt-5-search-api`, the API path OpenAI documents as direct access to the models and tool used by Search in ChatGPT. We set search context to medium and supplied an approximate London, United Kingdom location. The returned snapshot was `gpt-5-search-api-2025-10-14`.2

The answer contained 22 URL-citation annotations covering eight unique URLs across seven domains: Rank.ai, The Pedowitz Group, Optimus Consulting, SearchPod, TechRadar, Yext, and AEO Labs. TechRadar contributed two distinct cited URLs. Robot Visible was not mentioned and no robotvisible.com URL was cited.3,4,5,6,7,8,9,10

Every returned citation URL in this run carried `utm_source=openai`. That is a property of this recorded API response, not evidence that every OpenAI surface always adds the parameter or that consumer ChatGPT uses the same value. It does show why storing the full cited URL and a normalized canonical domain are both useful: the full URL preserves attribution evidence, while normalization prevents a campaign parameter from splitting one page into several citation identities.

This observation is bounded. It is one API run, not a consumer ChatGPT session, population-wide visibility report, ranking study, or causal test. The response can change with time, model snapshot, location, search context, index state, and ordinary answer variation. Its value is that another publisher can repeat the exact request, preserve a new response, and compare source presence without pretending the two runs are identical users.

Reproduction record for the Robot Visible OpenAI search observation
FieldRecorded value
Observed at12 August 2026, 20:01:06 UTC
Querywhat is answer engine optimization
SurfaceOpenAI Chat Completions with gpt-5-search-api
Returned model snapshotgpt-5-search-api-2025-10-14
LocationApproximate London, United Kingdom; Europe/London
Search contextmedium
Citation annotations22
Unique cited URLs and domains8 URLs across 7 domains
Target-domain resultRobot Visible was not mentioned or cited
Response IDchatcmpl-0f9761f8-eeca-4afb-9c1b-9d17e988845d

How to reproduce and extend the observation

The request below follows OpenAI's documented Chat Completions search pattern and fixes the variables the API exposes for this test. Save the complete response securely, then extract the answer, model, response ID, and URL-citation annotations. Do not publish an API key, raw private prompt context, or user data with the evidence.2

Run it again only when you have a reason: a scheduled baseline, a meaningful page release, a crawl-policy change that has had time to propagate, or a material source update. Preserve failed or source-free runs as provider errors or no-citation observations rather than silently discarding them. If you also test chatgpt.com, record that separately as a consumer surface with its own signed-in state, plan, model, location, and conversation context.

Reproduce the dated OpenAI search observation
import OpenAI from "openai";

const client = new OpenAI();
const completion = await client.chat.completions.create({
  model: "gpt-5-search-api",
  web_search_options: {
    search_context_size: "medium",
    user_location: {
      type: "approximate",
      approximate: {
        country: "GB",
        city: "London",
        region: "London",
        timezone: "Europe/London",
      },
    },
  },
  messages: [
    { role: "user", content: "what is answer engine optimization" },
  ],
});

console.log(JSON.stringify({
  observedAt: new Date().toISOString(),
  responseId: completion.id,
  model: completion.model,
  answer: completion.choices[0]?.message.content,
  annotations: completion.choices[0]?.message.annotations,
}, null, 2));

Requires an OpenAI API key and creates a billable search request. OpenAI now directs new integrations to the Responses API `web_search` tool and documents `gpt-5-search-api` as the path for keeping an existing Chat Completions integration, so this request still runs as written — but a Responses `web_search` run is a different surface and belongs in its own record rather than in a comparison with the run above. A later result is a new observation, not a failed attempt to reproduce the old wording. Store it beside the earlier record with its own timestamp and response ID.

The practical ChatGPT search workflow

  • Choose whether to allow OAI-SearchBot and GPTBot independently; document the policy owner and reason rather than copying a generic robots file.
  • Deploy the rule, allow roughly 24 hours for OpenAI's robots systems to adjust, then test the exact production URLs through the CDN, firewall, and origin.
  • Verify claimed OAI-SearchBot and ChatGPT-User traffic with OpenAI's published IP ranges; retain path, time, status, and edge action.
  • Confirm important facts are present in accessible text and agree with canonicals, metadata, structured data, product pages, and credible external profiles.
  • Build a small representative question set and preserve negative, source-free, and provider-error results rather than measuring only successful examples.
  • Capture consumer ChatGPT sessions and OpenAI API runs as different surfaces. Never relabel an API result as what every ChatGPT user sees.
  • Count citation annotations, unique cited URLs, unique domains, mentions, referrals, and conversions separately, with each metric's denominator stated.
  • After a release, wait for verified recrawl evidence and compare several like-for-like runs before attributing movement to the change.

Run a free OpenAI crawler and page-readiness check

Sources and further reading

Continue learning

See where your website stands

Run a free scan and get your AI readiness score across all six categories, with the gaps to fix first.