Why AI Search Engines Cannot Read Your JavaScript Website
Your website looks finished in a browser. That proves nothing about what a crawler receives, because the browser ran your JavaScript and the crawler may not have.
If your website builds its content in the browser rather than on the server, an AI crawler may receive a nearly empty page. The words your customers read are assembled by JavaScript after the page arrives, and a crawler that does not execute JavaScript never sees them. Nothing about content quality or keyword strategy matters until the text exists in the response your server sends.
The stakes are higher than a missed ranking because retrieval is only the first filter. AirOps analyzed 548,534 pages retrieved by ChatGPT and found roughly 15 percent were cited in final responses1, so competition for a citation is fierce even among pages that were successfully read. A page that arrives blank is not competing at all. Speed compounds it: SE Ranking's study of 129,000 domains found sites with first contentful paint under 0.4 seconds averaged 6.7 ChatGPT citations against 2.1 for sites over 1.1 seconds2.
Here is where this guide differs from the others on this topic. Almost every article states flatly that AI crawlers do not render JavaScript, as though it were measured last week. It was not. We checked the vendor documentation directly, and there is an honest version of this answer that changes what you should do about it.
What it means for a page to render in JavaScript
A server can send finished HTML containing your words, or it can send a near-empty shell plus a program that builds the words once it arrives. The first is server rendering. The second is client-side rendering. Both look identical in a browser, and only one of them is readable by something that does not run programs.
Open any page on your site and use view source rather than inspect. View source shows the raw HTML your server delivered. Inspect shows the document after your browser executed the JavaScript, which is a different thing and the source of most confusion on this topic. Google draws the same line in its own documentation, separating the crawled HTML from the rendered HTML as distinct phases3. If your headline, body copy and navigation are absent from view source and present in the inspector, your content is client-rendered.
This is a normal consequence of how modern sites are built. A framework such as React or Vue is designed to construct the interface in the browser, which produces an application-like experience. That was a reasonable tradeoff when the only machine reading your site was Googlebot, because Google invested in rendering. It became a liability when a new category of readers arrived that had not made the same investment.
The distinction to hold onto is that this is not a content problem or a quality problem. You can have the best page on the internet about your subject and still deliver it as an empty shell. The work is already done; it is simply being handed over at the wrong moment, to an audience that has already left.
Why Googlebot copes with JavaScript and the AI crawlers may not
Google documents that Googlebot renders JavaScript in headless Chromium as a separate queued phase after crawling. OpenAI, Anthropic and Perplexity publish crawler documentation that does not mention JavaScript execution in either direction. That asymmetry, not a vendor announcement, is the real state of the evidence.
Google is explicit about its own process. Googlebot crawls, then places pages returning a 200 status into a rendering queue where headless Chromium executes the JavaScript, then indexes the rendered result3. Google notes that pages may remain in that queue for seconds or longer, which is why client-rendered sites often index slowly even on Google. On the same page Google gives advice that reads differently in 2026 than when it was written: server-side or pre-rendering is still a good idea, because it makes the site faster for users and crawlers, and not all bots can run JavaScript3.
Now the other side. OpenAI documents GPTBot, OAI-SearchBot and ChatGPT-User with their user agents and purposes, and says nothing about JavaScript rendering4. Anthropic documents ClaudeBot, Claude-User and Claude-SearchBot in the same way, with no mention of rendering5. Perplexity documents PerplexityBot and Perplexity-User, again with no mention6. We checked all three in August 2026 rather than taking anyone's summary for it.
The measurement everyone cites comes from a joint study by Vercel and MERJ published on 17 December 2024, which monitored crawler traffic across several months and found no evidence of JavaScript execution by the major AI crawlers, while noting that some downloaded JavaScript files without running them, in 11.50 percent of ChatGPT requests and 23.84 percent of Claude requests7. AppleBot and Gemini were the exceptions, both executing JavaScript7.
That study is the entire evidentiary basis for a claim now repeated as though it were current. It is more than eighteen months old, no vendor has confirmed or denied the behavior since, and we could find no comparable public re-test. So the accurate position is not "AI crawlers cannot read JavaScript." It is that the only measurement available says they did not, the vendors have never claimed they do, and you are making a decision under uncertainty where one option costs a build change and the other costs total invisibility. That asymmetry decides it.
| Crawler | Operated by | What it feeds | Executes JavaScript? |
|---|---|---|---|
| Googlebot | Google Search index | Yes, documented: headless Chromium, in a queued rendering phase | |
| Gemini | Gemini answers | Yes, per the December 2024 measurement, using Google infrastructure | |
| AppleBot | Apple | Apple search and Siri | Yes, per the December 2024 measurement, browser-based |
| GPTBot | OpenAI | Model training | Not documented by OpenAI; no execution observed in the study |
| OAI-SearchBot | OpenAI | Search results inside ChatGPT | Not documented by OpenAI; no execution observed in the study |
| ChatGPT-User | OpenAI | Pages fetched when a user asks | Not documented by OpenAI; no execution observed in the study |
| ClaudeBot and Claude-SearchBot | Anthropic | Training and search quality | Not documented by Anthropic; no execution observed in the study |
| PerplexityBot | Perplexity | Perplexity search results | Not documented by Perplexity; no execution observed in the study |
You can check our side of this in about ten seconds. Use view source on this page and search for a sentence you can see above. It is in the raw HTML, because this site is pre-rendered to static files rather than assembled in your browser. If you want the same check run against your own site along with the rest of the technical picture, the free SEO audit fetches your pages the way a crawler does and reports what came back, and our technical SEO services cover the fix when the answer is bad.
How to see your site the way an AI crawler sees it
Three checks, none requiring a developer. View the raw HTML your server sends, disable JavaScript and reload, and compare what survives. If your headline, body copy and links vanish, you have found the problem, and you found it in under five minutes without any specialist tooling.
The reason this matters more than a tool report is that you will see it yourself. Owners are routinely told their site has a technical problem and have no way to judge the claim. This one is directly observable, which makes it one of the few technical findings you can verify before authorising work on it.
The disabled-JavaScript view is a close approximation of what a non-rendering crawler receives, which is the condition the December 2024 measurement found across the major AI crawlers7. Work through the checks on your most valuable page rather than your homepage. Homepages are frequently the best-built page on a site while service and location pages, which are the ones that earn citations, were generated later by a template. The gap between the two is where the damage usually sits.
One caution on interpretation. Seeing some HTML in view source is not a pass. Look specifically for the words that make the page worth citing: the headings, the explanatory paragraphs, the answers. A shell containing your navigation and footer with an empty content area is the exact failure pattern, and at a glance it looks like a page that is working.
- View the raw HTML. Right click, choose view source, then search the text for a distinctive sentence from your page. Present means server-delivered. Absent means built in the browser.
- Turn JavaScript off and reload. In Chrome, open settings, search for JavaScript, and block it. Reload the page. What remains is close to what a non-rendering crawler receives.
- Check the pages that matter, not the homepage. Test a service page and a location page. Templated pages often behave differently from a hand-built homepage.
- Look for content, not markup. Navigation and footer surviving is not a pass. The headings and body copy have to be there.
- Repeat after any redesign or platform change. This is a build-configuration property, and it can regress silently when a theme, plugin or framework version changes.
Server-side rendering, static generation, and prerendering explained
All three fixes achieve the same result by different routes: the HTML leaving your server already contains the words. Server-side rendering builds the page per request, static generation builds it ahead of time at deploy, and prerendering bolts a rendered snapshot onto an existing client-rendered app.
Google recommends server-side or pre-rendering on its own JavaScript documentation, on the grounds that it is faster for users and crawlers and that not all bots can run JavaScript3. Static generation is the strongest option when your content does not change per visitor. Pages are built once at deploy time into finished HTML files, so every crawler and every visitor receives complete content immediately, with no rendering step to skip and nothing to wait for. Marketing sites, service pages, location pages and blogs all fit this pattern, which covers the great majority of what a local business publishes.
Server-side rendering suits pages that genuinely vary per request, such as a logged-in dashboard or live inventory. The server assembles the HTML for each visit, so crawlers still receive complete content, at the cost of doing work per request. Most business websites do not need this and choose it accidentally because a framework defaulted to it.
Prerendering is the pragmatic retrofit. Your application stays client-rendered for humans while a service renders each page and serves the finished snapshot to crawlers. It is the least elegant option and the fastest to deploy when a rebuild is not realistic this quarter. The tradeoff is a second system that can drift out of date, so treat it as a bridge rather than a destination.
Whichever route fits, the decision is about where HTML is assembled and not about which framework you chose. React, Vue, Angular and Svelte all support at least one of these approaches, and the meta-frameworks built on them exist largely to make it straightforward. If a developer tells you this requires a rewrite, ask specifically which of the three options they evaluated and why each was rejected.
| Approach | When the HTML is built | Best for | Main tradeoff |
|---|---|---|---|
| Static generation | Once, at deploy time | Marketing, service, location and blog pages | Content changes require a rebuild and redeploy |
| Server-side rendering | On every request | Pages that genuinely differ per visitor | Server cost and complexity you may not need |
| Prerendering for crawlers | On demand, served only to bots | Retrofitting an existing client-rendered app | A second rendering path that can drift out of sync |
| Client-side rendering alone | In the visitor's browser | Application interfaces behind a login | Content may be invisible to anything that does not run scripts |
What this means for content you have already published
If your pages are client-rendered, the content you have already paid for has not been evaluated and rejected by AI systems. It has not been read. That is a better position than it sounds, because the work exists and only the delivery is broken.
Most owners arrive at this topic after a period of publishing that produced nothing. The instinctive diagnosis is that the content was not good enough, so the response is to commission more of it, which produces the same result at greater cost. Establishing that the pages were never readable changes the diagnosis completely, and it changes what you should spend next.
There is a second reason to fix delivery before adding content, and it concerns which surface you are trying to reach. Ahrefs compared 730,000 responses and found only 13.7 percent of citations overlap between Google's AI Overviews and AI Mode8, so these behave as separate systems with separate citation sets. Being readable is the shared prerequisite for both. Optimising for either one while the page arrives empty is effort spent on the wrong layer.
Once the rendering is fixed, existing content becomes eligible rather than instantly successful. Retrieval is still competitive, and roughly 15 percent of retrieved pages end up cited1. What changes is that your pages join the pool. If you want the layer above this one, we covered how AI decides who to recommend separately, and it assumes throughout that your pages can be read.
What to tell your developer
Keep the brief short and outcome-based rather than prescriptive about implementation. The requirement is that the HTML returned by the server contains the page content, verifiable by fetching the URL without a browser. How they achieve it is their decision, and the test is objective.
Write the requirement as an acceptance test, because that is what prevents a six-week discussion about frameworks. The test is: fetch the URL with a plain HTTP request, with no browser and no JavaScript engine, and confirm the response body contains the page heading, the body copy and the internal links. That is checkable by either party, and it does not depend on anyone agreeing about React. It also matches the condition Google names when it advises pre-rendering for bots that cannot run JavaScript3.
Ask for it on the templates that matter rather than the whole site at once. Service pages, location pages and blog posts are where citations are won. A phased fix that covers those first delivers most of the value and is far easier to approve than a full rebuild.
Finally, ask how the requirement will be protected. This is a build configuration, and configurations regress when a framework is upgraded or a theme is replaced. A one-line check in the deploy process that fails the build when a known sentence is missing from the server response costs almost nothing and prevents the silent version of this problem, which is the expensive one.
- The server response for every public template must contain the page heading, body content and internal links.
- Verification is a plain HTTP fetch with no browser and no JavaScript execution.
- Priority order: service pages, location pages, blog posts, then everything else.
- Add a deploy-time check that fails the build if content is missing from the server response.
- Re-run the check after any framework upgrade, theme change or platform migration.
A note on the currency of this guide. The rendering behavior described here rests on vendor documentation checked in August 2026 and on a measurement published in December 2024. Crawler behavior can change without announcement, and none of these vendors has committed publicly either way. We will review this page again by 1 September 2026. The recommendation is deliberately robust to the uncertainty: server-rendered content is readable by every crawler in the table, including the ones that do render.
Can an AI assistant actually read your site?
Five questions on how crawlers handle JavaScript. Every answer is grounded in vendor documentation or the measurement study linked in this guide.
-
1What does "view source" show you that the visible page does not?
Answer: The raw HTML the server sent, before any JavaScript ran
View source shows the HTML your server actually delivered, before a browser executed a single line of JavaScript. The rendered page you look at is what your browser built afterward. If your headings, body copy and links are missing from view source and only appear in the inspector, then anything that reads raw HTML and does not run scripts is seeing the empty version.
-
2Does Googlebot execute JavaScript?
Answer: Yes, using headless Chromium, though rendering is queued
Google documents a three-phase process: crawl, render, then index. Pages returning a 200 status go into a rendering queue where headless Chromium executes the JavaScript, and the rendered HTML is what gets indexed. Google notes that pages may sit in that queue for seconds or considerably longer. So Googlebot copes with JavaScript, but it copes slowly, and Google still recommends server-side or pre-rendering.
-
3What do OpenAI, Anthropic and Perplexity say in their crawler documentation about rendering JavaScript?
Answer: They do not address it at all
This is the honest and slightly uncomfortable answer. All three publish crawler documentation naming their agents and purposes, and none of it mentions JavaScript execution in either direction. The widely repeated claim that AI crawlers do not render JavaScript comes from independent measurement, not from vendor statements, which is worth knowing before you treat it as a permanent rule.
-
4The Vercel and MERJ measurement found ChatGPT crawlers downloaded JavaScript files in 11.50 percent of requests. What does that mean?
Answer: They fetched the files but did not execute the code
Downloading is not executing. The study found the crawlers fetched JavaScript files in a minority of requests while showing no evidence of running them, which means the content those scripts would have generated never existed from the crawler's point of view. It is an important distinction, because a server log showing JavaScript requests can look like rendering when it is not.
-
5Your site is built in React with client-side rendering. What is the fix that addresses this specific problem?
Answer: Deliver the content in the server response through server-side rendering, static generation or prerendering
The problem is not the framework and it is not the amount of content. It is where the content is assembled. Server-side rendering, static site generation and prerendering all solve it the same way: the HTML that leaves your server already contains the words. React, Vue and every other client-side framework support at least one of these approaches, so the fix is a build and hosting decision rather than a rewrite.
Honest self-check. There is no sign-up, and nothing is stored.
Straight answers to the common questions
The questions readers ask about this topic, answered directly. No forms, no sales pitch.
Pick a question on the left, or search above. You will get the direct answer, the way an answer engine would give it.
References
- AirOps. The influence of retrieval, fan-out and Google SERPs on ChatGPT citations. March 2026. https://www.airops.com/report/influence-of-retrieval-fanout-and-google-serps-in-chatgpt
- SE Ranking. Ranking factors for ChatGPT (129,000-domain study). November 2025. https://seranking.com/blog/ranking-factors-for-chatgpt/
- Google Search Central. Understand JavaScript SEO basics. accessed August 2026. https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics
- OpenAI. Bots and crawlers documentation. accessed August 2026. https://developers.openai.com/api/docs/bots
- Anthropic. Does Anthropic crawl data from the web, and how can site owners block the crawler. accessed August 2026. https://support.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler
- Perplexity. PerplexityBot and Perplexity-User documentation. accessed August 2026. https://docs.perplexity.ai/guides/bots
- Vercel and MERJ. The rise of the AI crawler. December 2024. https://vercel.com/blog/the-rise-of-the-ai-crawler
- Ahrefs. Are AI Mode and AI Overviews just different versions of the same answer? (730K responses). December 2025. https://ahrefs.com/blog/ai-overviews-vs-ai-mode
See where your business actually stands
Start with a free audit of your rankings, Google Business Profile, technical health, and AI-search visibility, with a prioritized plan and an honest quote for your situation.
Get your free audit