How ChatGPT and Perplexity read your pages
- Schema type
ArticleWebPage- Checked against
- ChatGPT and Perplexity crawler documentation and Google Search Central, read November 2026
- Author
- The wprichsnippets.com editors
- Published
- Updated
ChatGPT search and Perplexity cite pages that their search crawlers, OAI-SearchBot and PerplexityBot, are allowed to fetch. Both also send user-triggered fetchers. Neither documents whether it renders JavaScript or reads JSON-LD, so put the answer and any markup in the raw HTML and allow the search crawlers in robots.txt.

01What decides ChatGPT citations and Perplexity links?
ChatGPT citations are the linked sources that appear inside or beside an answer in ChatGPT search. Perplexity shows the same idea as numbered source links. In both products a page can only be cited if the product's search crawler is allowed to fetch it, so access comes before any question of markup, wording or authority.
This guide sets out what each product documents about its crawlers, what is not documented, and how to check what a crawler can see on your own site. It sits in the AI answers section of this handbook, next to the guide on what Google says about schema and AI Overviews, which covers Google's side of the same question.
One rule runs through everything below: documented behaviour is reported as documented, and anything the products do not publish is called out as unknown. Claims that a given engine "loves JSON-LD" or "prefers lists" are not in either product's documentation.
02Which crawlers and fetchers visit your site?
The ChatGPT crawler documentation lists separate user agents, each controlled independently in robots.txt. OAI-SearchBot is the search crawler: it is used to surface websites in ChatGPT's search features. GPTBot crawls content that may be used to train generative AI foundation models. ChatGPT-User visits a page when a person's request in ChatGPT or a custom GPT needs it, and the documentation says robots.txt rules may not apply to those user-initiated visits.
Sites that are opted out of OAI-SearchBot will not be shown in ChatGPT search answers, though can still appear as navigational links.
The Perplexity crawler documentation describes a similar split. PerplexityBot surfaces and links websites in Perplexity search results and, according to the page, is not used to crawl content for AI foundation models. Perplexity-User fetches pages when a user asks a question, and the documentation says it generally ignores robots.txt because a user requested the fetch.
| User agent | Product | Job | Follows robots.txt |
|---|---|---|---|
OAI-SearchBot | ChatGPT search | Surfaces sites in search answers | Yes |
GPTBot | Model training | Collects content that may train models | Yes |
ChatGPT-User | ChatGPT, custom GPTs | Fetches a page for a user request | May not apply |
PerplexityBot | Perplexity search | Surfaces and links sites in results | Yes |
Perplexity-User | Perplexity answers | Fetches a page for a user question | Generally ignored |
The practical reading is simple. Blocking GPTBot does not remove you from ChatGPT search; blocking OAI-SearchBot does. Allowing PerplexityBot is what the documentation recommends if you want to appear in Perplexity results. Both products also publish IP ranges for their crawlers, on the ChatGPT bots page and the Perplexity crawlers page, which matters if a firewall or bot filter sits in front of your site, because a blocked request at the network edge looks the same to the crawler as a robots.txt refusal.
03How do robots.txt rules work for these crawlers?
Each crawler reads the group in robots.txt that names its user agent, and falls back to the catch-all group, User-agent: *, if there is none. That makes it possible to allow search crawlers while refusing training crawlers, or the reverse.
- To allow ChatGPT search but refuse model training: a group for
User-agent: OAI-SearchBotwithAllow: /, and a group forUser-agent: GPTBotwithDisallow: /. - To allow Perplexity search: a group for
User-agent: PerplexityBotwithAllow: /, or simply no rule that blocks it. - To keep a private area out of every crawler: a
Disallowline for that path in each group, because a named group replaces the catch-all group for that crawler rather than adding to it.
Timing matters when you change the file. The ChatGPT bots page says it can take about 24 hours from a robots.txt update for its search systems to adjust, and that when a site allows both OAI-SearchBot and GPTBot, results from one crawl may be used for both purposes to avoid crawling twice.
robots.txt is not the only gate. The Perplexity documentation notes that a web application firewall may need explicit rules to let its bots through, and recommends matching each user agent against its own published IP ranges. A firewall rule that challenges unknown bots will stop a crawler you have allowed in robots.txt, and nothing in robots.txt will tell you it happened.
04Raw HTML or JavaScript: what does each fetcher see?
Raw HTML is the document your server returns before any script runs. Rendered HTML is what a browser shows after JavaScript has built the page. The difference matters because many WordPress themes, page builders and schema plugins add content or JSON-LD with scripts.
Google documents its own position: its structured data introduction says Google can read JSON-LD that is dynamically injected into a page, for example by JavaScript or embedded widgets. Neither the ChatGPT nor the Perplexity crawler documentation makes an equivalent statement. Neither page says whether its crawler executes JavaScript, and neither says how long it waits for a page to finish loading.
Where a product does not document rendering, the safe assumption is that only raw HTML is guaranteed to be seen. That leads to three working rules:
- Put the main answer, headings, tables and author line in the server response, not in content loaded after the page opens.
- Print JSON-LD in the HTML from the server or CMS, as WordPress plugins and themes normally do, rather than injecting it from a tag manager.
- Avoid hiding key text in tabs, accordions or "load more" widgets that only fill after a click.
05Does JSON-LD reach the model?
Nobody outside these companies can answer that with certainty, and neither product's crawler documentation addresses it. The documentation describes which bots fetch pages and why. It says nothing about how a fetched page is parsed, whether a script type="application/ld+json" block is kept or discarded, or how much weight structured fields carry against visible text.
What can be said is narrower and still useful. JSON-LD is plain text inside the HTML. If a crawler fetches the raw HTML, the markup is in what it fetched. Whether it is used is unknown. That is the reason to treat markup as confirmation of the visible page rather than as a separate channel: the article's author, date, price or rating should appear in the text that a person reads, and the JSON-LD should repeat the same values. For entity markup that ties a site to a named publisher, see the guide to Organization schema and entity markup.
1{2 "@context": "https://schema.org",3 "@type": "Article",4 "headline": "Example Guide to Garden Soil Testing",15 "datePublished": "2026-10-02",6 "dateModified": "2026-11-04",27 "author": {8 "@type": "Person",9 "name": "Example Author",10 "url": "https://example.com/authors/example-author/"311 },12 "publisher": {13 "@type": "Organization",14 "name": "Example Garden Handbook",15 "url": "https://example.com/"16 }17}06What gets quoted in an AI answer?
Neither product publishes a rule for choosing which sentence to quote. What a person can observe is that answers tend to link a page next to a specific claim, and that the claim usually matches a passage that states it plainly. That observation is not a documented ranking factor; it is a reason to write passages that make sense on their own.
The structure that helps is the same structure that helps readers: a direct answer under the heading, one idea per paragraph, comparisons in an HTML table, and headings phrased like the question a person would ask. The guide to quotable page structure turns that into a checklist. For a broader view of how do machines read structured data?, the handbook's home page covers markup from the start.
Facts locked inside images, PDFs linked from the page, or interactive widgets are the hardest to quote, because a text answer needs text. If a number, a date or a definition matters, write it in a sentence in the HTML, and let the chart or download repeat it rather than hold it alone.
07A simple test you can run
You can check what a crawler can reach without any special tool. None of these steps proves that a page will be cited; they show whether anything is in the way.
- Open
/robots.txton your site and confirm thatOAI-SearchBotandPerplexityBotare not disallowed, either by name or by a catch-all rule. - Fetch the page without JavaScript, for example with
curlor your browser's view source, and search the result for your H1, your direct answer andapplication/ld+json. - Compare that raw source with the rendered page in browser developer tools. Anything present only in the rendered version may be invisible to a crawler that does not run scripts.
- Check your server or firewall logs for the crawler user agents over a few weeks, and confirm the requests receive a 200 status rather than a challenge or block page.
- Ask ChatGPT search and Perplexity a question your page answers well, note the date, and record which sources each cites. Repeat it later; answers change between runs.
Record what you find with dates. If the crawlers never appear in your logs, look at access first: robots.txt, firewall rules and bot filters are the usual causes, and they are fixable in minutes.
08Questions
Q1Does blocking GPTBot remove my site from ChatGPT search?
No. The ChatGPT crawler documentation describes GPTBot and OAI-SearchBot as independent settings. GPTBot relates to training data; OAI-SearchBot is the search crawler. A site can disallow GPTBot and still allow OAI-SearchBot so that it can appear in ChatGPT search answers.
Q2Do ChatGPT and Perplexity read JSON-LD?
Neither documents it. Their crawler pages explain which bots fetch pages and why, not how pages are parsed. JSON-LD printed in the raw HTML is part of what a crawler fetches, but whether it is used is not published, so make sure the same facts also appear in the visible text.
Q3Do these crawlers run JavaScript?
Their documentation does not say. Google documents that it can read JSON-LD injected by JavaScript, but there is no equivalent statement for OAI-SearchBot or PerplexityBot. The safe assumption is that only content in the raw HTML response is reliably seen.
Q4How do I get more ChatGPT citations?
Start with access: allow OAI-SearchBot, keep the page in raw HTML and make sure a firewall does not challenge the crawler. After that, citations depend on the answer being clear and useful. Write a direct answer under each question heading and keep facts in text and tables, not images.
09Sources
- ChatGPT crawler and user agent documentationChatGPT developer docs
- Perplexity crawlersPerplexity documentation
- Introduction to structured data markup in Google SearchGoogle Search Central



