GUIDE · PART OF AI CRAWLER OPTIMIZATION
JavaScript and AI crawlers:
what they see, and what they miss.
Google runs a page's JavaScript before it reads it. The crawlers behind ChatGPT, Claude and Perplexity, as far as anyone has measured, do not. If your content arrives by script, those engines may be reading a page with very little on it. This guide shows how to check, and what to do if they are.
Do AI crawlers render JavaScript?
JavaScript rendering is the step where a browser runs a page's scripts and builds the content you see. Googlebot does this before it indexes a page. The major AI crawlers have not been seen to: a crawl study by Vercel and MERJ found that none of the AI crawlers it measured ran JavaScript. They read the HTML the server sends, so anything a script adds afterwards is missing from what they see.
Key facts
- Googlebot renders JavaScript. The AI crawlers measured so far do not
- An AI crawler may download a script file and still not run it
- Content that the server sends in the HTML is safe, even if CSS hides it at first
- Content that appears only after a script runs, or after a click, is at risk
- Structured data added by a script is at risk in the same way as text
- The test is simple: compare the page's raw HTML with what the browser shows
Last reviewed 15 October 2026 by the SEORCE team.
The page looks fine. That's the problem.
Nothing about a JavaScript-built page looks wrong to a person, or to Google. You only see the gap if you look at what the server sent before any script ran.
You see the finished page
Your browser runs the scripts, so you never see the empty version a non-rendering bot gets.
Search Console says it's indexed
Google renders the page, so its reports give no hint that other crawlers are seeing less.
Many modern sites render in the browser
A single-page app often sends a near-empty HTML file and builds everything afterwards.
What a bot gets, what's at risk, and the fix.
You don't need to rebuild the site. You need the important content to be in the HTML.
Only what the server sent.
Fetch a page without running its scripts and you have what an AI crawler has. On some sites that is the whole page. On others it's a logo and a loading message.
- The raw HTMLEverything in the first response from the server.
- Scripts, unexecutedA crawler may fetch them as files. It won't run them.
- Nothing added laterNo content from API calls, no injected markup.
Anything that waits for a script.
The line is between content that is in the HTML and content that is fetched or built afterwards. Hidden is fine. Absent isn't.
- Client-rendered pagesWhere the main content is built in the browser.
- Tabs and accordions that load on clickIf the content is fetched when opened, a bot never opens it.
- Lazy-loaded sectionsContent that appears only as you scroll.
- Schema added by scriptIncluding markup injected by a tag manager.
Put what matters in the HTML.
This is development work, and usually less of it than people fear. The aim is narrow: the content you want quoted should be in the first response.
- Render on the server, or ahead of timeReact, Vue and the tools built on them can all do this.
- Start with the pages that matterProduct, pricing and the pages that answer buyer questions.
- Leave the rest aloneA chat widget or a carousel loading by script costs you nothing.
- Test again afterwardsThe raw HTML should now contain the content.
Checking your own pages, one at a time.
Start with five pages you'd most want an AI engine to quote.
Pick the pages
Product, pricing and your best answers to buyer questions.
Look at the raw HTML
View the page source, or open the page with the browser extension.
Get the free extension →Search it for your key content
If a sentence you care about isn't in the source, a non-rendering bot can't read it.
List what's missing
Separate what matters from what doesn't. A missing chat widget is fine.
Move it server-side, then re-test
Hand the list to a developer, and check the raw HTML again once it's done.
Site audit →See a page the way a non-rendering bot does.
Open any page with the extension and it compares the raw HTML with what the browser built. Anything that appears only in the second is at risk.
Which crawlers run JavaScript.
| Crawler | Runs JavaScript? | What that means for you |
|---|---|---|
| Googlebot | Yes, in a second pass that can be delayed. | Google sees the finished page. So do its AI Overviews, which draw on the same index. |
| GPTBot, OAI-SearchBot, ChatGPT-User | Not observed to. | ChatGPT works from the raw HTML. |
| ClaudeBot | Not observed to. | The same applies. |
| PerplexityBot | Not observed to. | The same applies. |
Based on a crawl study by Vercel and MERJ. Crawler behaviour can change, so test your own pages instead of relying on a table.
Raw against rendered, for every URL.
Technical Suite compares what your server sends with what a browser builds, across the whole site, so content that only appears after scripts run is flagged page by page. AutoFix is delivered by script as well, and it is built so that Google and AI crawlers read the fixed page. We test each fix type against them before it goes out.
Frequently asked questions.
The ones that have been measured don't. A crawl study by Vercel and MERJ found that none of the major AI crawlers it looked at ran JavaScript. They read the HTML the server sends.
Only what is in the initial HTML. If the app renders in the browser and the server sends a near-empty page, ChatGPT's crawlers get the near-empty page. Server-side rendering fixes that.
It depends how it's built. If the content is in the HTML and only hidden by CSS, a crawler can read it. If it's fetched when someone clicks, a crawler never sees it.
Usually not. The aim is to get the important content into the first response, on the pages that matter. React, Vue and similar tools can render those pages on the server or ahead of time.
Much less. AI Overviews draw on Google's own index, and Googlebot renders JavaScript. The gap is with the other AI engines.
Yes. AutoFix is built so that Google and AI crawlers read the fixed version of the page, and each fix type is tested against them before it is released. That is different from a tag manager injecting markup in the browser, which a non-rendering crawler would miss.
View the page source in your browser and search for a sentence you care about. If it isn't there, a non-rendering crawler can't read it. The SEORCE extension shows the same comparison without the hunting.
Yes. The SEORCE browser extension shows the difference between a page's raw HTML and its rendered version, for whatever page you have open. You can also view the page source in any browser and search for your key content.
See your pages without JavaScript.
Add your site and run a crawl. Every page is checked for content that only appears after scripts run.
Not ready for an account? Use the free browser extension or any of the free tools.