Can AI answer crawlers properly read your JavaScript single-page app?
You typed your product category into ChatGPT or Perplexity, and your company was nowhere to be found. A developer on your team looked at the site and blamed your frontend framework: "We build a single-page app in React, so AI crawlers cannot read the text."
Before you assign an engineer to spend two sprints rewriting your application, you need to understand how AI answer crawlers actually handle JavaScript. In many cases, the developer is right about the mechanism, but wrong about what you should do next.
Why live answer crawlers skip client-side JavaScript
Traditional search engine crawlers like Googlebot have spent years building headless rendering pipelines. When Googlebot crawls a page, it can queue the URL, execute client-side JavaScript, build the Document Object Model, and index the rendered text. This process is resource intensive, but traditional engines crawl asynchronously and can afford to wait seconds or minutes to render a page before adding it to their index.
AI answer crawlers operate under completely different constraints. When a user asks ChatGPT or Perplexity a question that triggers a web search, the system must fetch web pages, parse their contents, pass the relevant text into a context window, and generate a response in real time.
Running a full browser engine like Chromium to execute client-side JavaScript for every web lookup would add several seconds of delay to every prompt. To keep latency low, live answer crawlers like OAI-SearchBot, ChatGPT-User, Perplexity-User, and Claude-SearchBot perform fast HTTP fetches. They download raw HTML, extract visible text immediately, and move on.
If your single-page application serves a lightweight HTML shell with an empty container tag and relies on client-side JavaScript bundles to fetch data and construct the page, the answer crawler sees an empty document. To that crawler, your homepage has no product descriptions, no feature lists, and no value proposition.
How to check what an answer crawler actually sees
You do not need specialized software or expensive monitoring tools to test whether your application is readable. You can verify what an answer crawler sees directly from your terminal in thirty seconds.
Run a curl command that requests your site without executing JavaScript, sending a user agent string that mimics an answer crawler:
curl -sA "OAI-SearchBot" https://yourdomain.com | grep -i "your product name"
Replace yourdomain.com with your homepage URL and your product name with a distinct word or string that should appear in your core marketing copy.
If this command returns nothing, your server is returning a bare client-side shell. The live answer crawler receives no text content when it hits your page.
If the command prints your headline, product summary, and feature copy, your server is already delivering rendered HTML. In that case, client-side JavaScript rendering is not the reason your brand is missing from AI answers.
You can run the same test targeting other answer crawlers by altering the user agent string:
curl -sA "Perplexity-User" https://yourdomain.com
curl -sA "ChatGPT-User" https://yourdomain.com
curl -sA "Claude-SearchBot" https://yourdomain.com
If your terminal output shows raw JavaScript import tags and empty container elements, your application relies entirely on client-side execution.
The difference between training access and live fetch
When diagnosing crawler issues, teams frequently confuse training crawlers with answer crawlers. Blocking or failing to support one does not mean you have blocked or failed the other.
Training crawlers gather dataset content to train baseline language models. They run offline, asynchronously, and periodically. Examples include GPTBot, ClaudeBot, and Google-Extended. If a training crawler cannot read your site, your content will not inform the underlying weights of future model releases.
Answer crawlers execute during a live user query to pull current information into the model context window. Examples include OAI-SearchBot, ChatGPT-User, Perplexity-User, Claude-SearchBot, and Claude-User.
Blocking an answer crawler in your robots.txt file or serving it empty HTML prevents the AI engine from citing your site in live answers today.
Our crawler index from 2026-08-08 surveyed a panel of 54,082 domains, finding 33,670 domains with a readable robots.txt file. Among those 33,670 domains, 5,497 block at least one AI agent, and 2,576 specifically block at least one answer crawler.
Looking at individual agents across those 33,670 readable domains:
- 5,080 block GPTBot (training)
- 4,603 block ClaudeBot (training)
- 4,275 block Google-Extended (training)
- 2,147 block PerplexityBot (search)
- 2,074 block ChatGPT-User (search)
- 1,579 block OAI-SearchBot (search)
- 1,402 block Perplexity-User (search)
- 1,400 block Claude-SearchBot (search)
- 1,384 block Claude-User (search)
- 610 block Googlebot (other)
In a separate census of active Y Combinator companies conducted on 2026-08-07, out of 4,226 active companies, 3,755 had readable robots.txt files, and 253 blocked at least one AI crawler.
If your site returns raw HTML without content to answer crawlers, you are functionally invisible to live lookup tools, even if your robots.txt technically allows them access.
Before you pay for prerendering or server-side rendering
If your terminal check confirms that your single-page app returns empty HTML shells to crawlers, the solution appears obvious: rebuild the site with server-side rendering using Next.js or Nuxt, or buy a dynamic rendering proxy service.
Hold off before making that investment.
Migrating a pure single-page application to server-side rendering requires significant engineering effort. Router logic, state management, window references, and build pipelines all must be refactored. Middleware solutions and dynamic rendering proxies cost money and add another failure point to your hosting setup.
More importantly: rendering your HTML on the server does not guarantee that ChatGPT, Perplexity, Claude, Gemini, or Google AI Overviews will cite you.
Making your site readable by an answer crawler is a prerequisite, not a ranking signal. It allows an answer crawler to extract text if it chooses to visit your domain. It does not force the AI model to select your domain over a competitor, summarize your product favorably, or list your brand in answer summaries.
AI engines choose citations based on entity visibility across the broader web, brand mentions in authoritative publications, direct answer relevance, and context window constraints. If three industry publications recommend your competitor, an AI engine may cite those external sources even if your homepage has perfect server-side rendering.
Before committing engineering resources to a full server-side rendering rewrite:
First, determine whether answer crawlers are actually trying to fetch your pages. Check your web server access logs for user agent strings like OAI-SearchBot or Perplexity-User. If answer crawlers are visiting your domain regularly and receiving 200 status codes with empty HTML, fixing rendering will help them read your text. If they are not visiting your site at all, fixing JavaScript rendering will not change your visibility.
Second, avoid buying third-party rendering plugins or specialized middleware specifically marketed for AI optimization. Many vendors claim that adding their script or proxy guarantees AI inclusion. No vendor can promise a citation or ranking because generative engines operate non-deterministically.
Third, measure whether your brand appears across AI engines before and after making infrastructure changes. At Standing, we track recommendations across five major engines: ChatGPT, Perplexity, Gemini, Claude, and Google AI Overviews. Because AI outputs vary between requests, we execute a fixed prompt basket five times per question per engine, calculating visibility scores using a Wilson interval. A score of 34, plus or minus 6, gives you a statistically valid baseline. Competitors run prompts once, returning arbitrary single numbers without error margins.
If you decide to measure your brand footprint, Standing offers three tiers: Track at $100 per month for 3 domains, Optimize at $300 per month for 5 domains with custom prompts, and Agency at $500 per month for 50 domains with a monthly re-scan.
If your homepage is a client-side JavaScript app, test it with curl today. If the HTML output is empty, server-side rendering or static pre-rendering is necessary for live crawlers to digest your content. Treat rendering as basic technical housekeeping, not a silver bullet that promises instant AI citations.
See where you actually stand
Run a free check on your domain. Five AI surfaces, the real buying questions, about a minute. No signup.
Run a free check