Does ChatGPT Read Websites That Load Content With JavaScript?

Does ChatGPT Read Websites That Load Content With JavaScript?

October 22, 2026·9 min read

Not reliably: an analysis by Vercel and MERJ found that GPTBot, OpenAI's training crawler, does not execute JavaScript, so text that only appears after scripts run can be invisible to it. OAI-SearchBot, the crawler behind ChatGPT search, shows signs of running some JavaScript, but the safe working assumption is that ChatGPT sees what your server sends in the raw HTML and nothing more.

The rest of this page covers which OpenAI crawlers visit you, what the evidence says about each one, how to check your own raw HTML in a few minutes, and what to change if your pages turn out to be empty shells.

Which ChatGPT crawlers actually visit a website?

"ChatGPT reads my site" can mean three different programs. According to OpenAI's Overview of OpenAI Crawlers, GPTBot collects training data, OAI-SearchBot builds the index used by ChatGPT search, and ChatGPT-User fetches pages when a person's request triggers it. Each can be allowed or blocked separately in robots.txt. If you want the full list of names across vendors, see What Are GPTBot, OAI-SearchBot, ClaudeBot and Other AI Crawlers?

These crawlers are busy. In the full retained nginx logs of an edtech platform we work with (pickaclass.com), from 28 July to 11 August 2026, GPTBot made 2,744,985 requests and ClaudeBot 19,272,125, against 52,292 from Googlebot. Every one of those requests received whatever HTML the server returned. Whether anything ran the scripts on top is a separate question.

The live fetches matter most. ChatGPT-User, OAI-SearchBot and Perplexity-User fetch a page while an assistant is answering a real person. In that same fortnight the edtech platform received 1,918 such fetches on content pages; a client blog of a few dozen articles received 56 across 24 different articles. Each of those is a moment where a person is waiting for an answer. If the page returns <div id="root"></div> and a bundle of scripts, there is nothing to quote.

Does ChatGPT execute JavaScript when it crawls?

It depends on the crawler, and the evidence is uneven.

GPTBot. An analysis by Vercel and MERJ from December 2024 found that GPTBot does not execute JavaScript when crawling pages. Content that renders only in the browser may simply not exist for it.

OAI-SearchBot. A server-log analysis of OAI-SearchBot found that a third of its requests carried a ?_rsc parameter, a pattern characteristic of a crawler executing client-side JavaScript to fetch a page's rendered data. The same pattern was absent from GPTBot's requests in that period. So the search crawler appears to run some client-side code some of the time. A third of requests is not every page every time, and a log pattern is not a documented commitment.

ChatGPT-User. We have no source describing how it renders. Treat it like the others: assume it reads the raw HTML.

Claude has the same three-way split. Anthropic's documentation, as reported by Search Engine Journal, separates ClaudeBot (training), Claude-SearchBot (search indexing) and Claude-User (user-requested fetches), and warns that blocking Claude-SearchBot can reduce a site's visibility in Claude's search results. Nothing in our sources says these crawlers render JavaScript, so the same rule applies.

Why does Google see my JavaScript content when AI crawlers might not?

Because Google built and documented a rendering pipeline. Google's JavaScript SEO basics describes three phases: crawling, rendering in a headless Chromium browser, and indexing. Content that needs JavaScript to appear is queued separately for rendering rather than indexed straight from the first HTML fetch.

Running a full browser for every page costs far more than downloading a file, and even Google defers it. A crawler that stops at the first fetch skips that step entirely. That is how a single-page app can rank fine in Google and still look blank to an AI crawler.

Do not use Google as your proxy for AI visibility. On 19 October 2026 we asked assistants for the exact titles of 18 articles, each older than three weeks, on three client sites. ChatGPT found 1 of 18; Claude found 7 of 18. Google had indexed 29 of 30 articles of one of those sites. That test was not about JavaScript, but it shows that being in Google's index does not mean an assistant can find the page.

How do I test what my raw HTML contains?

This takes ten minutes and needs no special tools.

  1. View source, not Inspect. Press Ctrl+U (Cmd+Option+U on a Mac) on an important page. The browser's Inspect panel shows the page after JavaScript ran; View Source shows what the server sent. Search the source for a sentence from your main text.
  2. Fetch it from the command line. Run curl -s -A "GPTBot" https://www.example.com/your-page | grep -i "a sentence from the page". No match means the text is not in the initial response. Note that some firewalls treat a faked user agent differently from the real crawler, which is verified by IP, so a clean curl result does not prove the real bot gets the same page.
  3. Switch JavaScript off. In your browser's site settings, disable JavaScript and reload. What you see is roughly what a non-rendering crawler gets.
  4. Check the parts that matter. In the raw HTML, look for the title tag, meta description, canonical link, H1, the body text, prices, FAQ answers, internal links as real <a href> elements, and any JSON-LD structured data.
  5. Read your logs. Find requests from GPTBot, OAI-SearchBot and ChatGPT-User and look at status codes and response sizes. A 200 response of a few kilobytes on a page that should hold 1,500 words of text usually means the bot got the shell. Our guide on how to find AI crawlers in server logs shows how to filter them.

Also confirm the bot is getting your page at all rather than a challenge page or a 403. A rendering problem and a blocking problem look similar from the outside; Is My Website Blocking GPTBot, ClaudeBot and PerplexityBot? covers the second.

How do I fix a site that only shows content after JavaScript runs?

The goal is simple: the text, links and structured data that answer a buyer's question must be in the HTML the server sends. How you get there depends on your stack.

Approach What a non-rendering crawler receives Typical effort Watch out for
Client-side rendering only (a plain React or Vue single-page app) An empty container and script tags None, it is often the default Body text, links and JSON-LD missing from raw HTML
Server-side rendering (frameworks such as Next.js, Nuxt, SvelteKit) Full HTML generated per request Medium: configuration or partial rewrite Components that fetch their data only in the browser still arrive empty
Static site generation Prebuilt HTML files with full content Low to medium for blogs and marketing pages Pages must be rebuilt when content changes
Prerendering or snapshot service in front of the app A rendered snapshot of the page Low Snapshots go stale; bots and people must get the same content

Whichever route you take, these details decide whether it works:

  • Render the substance on the server. Headings, body copy, prices, plan names, opening hours, FAQ answers. Decorative widgets can stay client-side.
  • Use real links. Navigation built from click handlers instead of <a href> elements gives crawlers no path to your other pages.
  • Put JSON-LD in the initial HTML. Structured data injected later by a tag manager or script is invisible to a crawler that does not run scripts.
  • Do not hide main content behind interactions. Text that loads only when someone clicks a tab, presses "load more" or scrolls is not in the first response. Text that is present in the HTML but visually collapsed is fine.
  • Keep text as text. Prices and comparisons baked into images or canvas elements cannot be quoted.
  • Serve everyone the same page. A snapshot for bots that differs from what visitors see creates errors you will not notice until an assistant repeats them.

After the change, rerun the tests above on a handful of key pages and watch your logs for response sizes that jump.

Is server rendering enough to get ChatGPT to name my business?

No. Readable HTML is a gate, not a result. We have seen a site with complete markup (server rendering, Article, FAQPage and Organization JSON-LD, a sitemap) but only 75 URLs stay absent from answers on its own article's exact topic, while a site with about 190,000 crawlable URLs was crawled constantly. Surface beats markup.

Other gates fail quietly too. On our own site, a robots.txt rule meant to hide one redirect page (/b) was written as a prefix. Because robots.txt rules match prefixes, from 11 August to 21 October 2026 it also closed /blog, /business and every article in our business blog to all crawlers. On 21 October 2026 we put 40 questions to four assistants, three times each, and ItGrows was named in 0 of 160 answers. We changed the rule to /b$ that day.

Once crawlers can read your pages, what decides whether you are named is whether you have pages that answer the questions buyers ask, and whether assistants search at all for those questions. How Does ChatGPT Decide Which Businesses to Recommend? covers that part.

To see where you stand today, the free check at itgrows.ai generates five buyer questions from your homepage and shows in about 30 seconds whether ChatGPT and Perplexity name you. ItGrows also fixes crawler access and indexing and publishes answer articles on your own domain, measuring the four main assistants every week. Nobody can guarantee an assistant will name a business, and we do not.

Frequently Asked Questions

Does blocking GPTBot stop ChatGPT search from reading my site?

No. OpenAI runs GPTBot, OAI-SearchBot and ChatGPT-User as separate user agents with independent robots.txt rules, so you can block training while allowing search. Check that your rules name the agent you actually mean.

Can AI crawlers see JSON-LD added through Google Tag Manager?

Only if they execute JavaScript, and GPTBot was found not to. Structured data injected by a tag manager is missing from the raw HTML. Output it from your server or template instead.

Does Perplexity or Claude render JavaScript better than ChatGPT?

None of the sources we rely on confirms that Perplexity's or Anthropic's crawlers render JavaScript. Treat every AI crawler the same way: if a sentence is not in View Source, assume it is not seen.

Do I need to rebuild my whole site to fix this?

Usually not. Start with the pages that answer buyer questions: product, pricing, service, about and your articles. Static generation or server rendering for those pages often covers most of what assistants would ever quote.

Does ChatGPT name your business?

Enter your site: we ask ChatGPT and Perplexity five questions your buyers ask and show who they name instead of you. No signup, about 30 seconds.