Free JavaScript Rendering Check for AI Crawlers
99Visibility Research · Updated October 21, 2026 · 5 min read
Short answer
A free JavaScript rendering check compares a page's raw HTML with the page a browser shows after JavaScript runs. Anything that appears only after JavaScript runs may be invisible to most AI crawlers. Vercel found ChatGPT and Claude crawlers fetch JavaScript files but do not execute them. Googlebot does render JavaScript. You can run the check by hand in a few minutes, or use a free tool that runs it for you.
Key takeaways
- Vercel found that ChatGPT and Claude crawlers download JavaScript but do not run it, so client-side content can be missing for them.
- The check is a diff: raw HTML with no JavaScript against the rendered page, focused on prices, product names, headings and key claims.
- Googlebot renders JavaScript, so a gap here matters for ChatGPT, Claude, Perplexity and Meta crawlers, not for Google AI Overviews.
- Fixing a rendering gap makes your content exist for the crawler. It does not guarantee retrieval or a citation.
- A clean rendering check says nothing about robots.txt or firewall blocks, which you check separately.
What the free check tells you
The check answers one question: does the text that matters exist in the HTML your server sends, before any JavaScript runs?
That matters because most AI crawlers read only that first response. Vercel's study of AI crawler traffic found that ChatGPT and Claude crawlers fetch JavaScript files (11.50% and 23.84% of their requests) but don't execute them, so they can't read client-side rendered content. Independent re-testing in June 2026 found the same for GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, PerplexityBot, Meta-ExternalAgent and Bytespider. Googlebot and AppleBot are the exceptions: they render.
So if your pricing table, product names or main headings load through JavaScript, a ChatGPT search crawler may see an empty shell. If you build on React or a similar framework, read whether ChatGPT can read a React website for the framework-specific detail.
How to run the check by hand
You need a browser and, optionally, a terminal. Pick one page that carries facts buyers ask about, such as your pricing or main product page.
- Read the raw HTML. In Chrome, type
view-source:before the URL, for exampleview-source:https://example.com/pricing. This shows the server's response before JavaScript runs. - Search it. Press Ctrl+F (Cmd+F on Mac) and search for the exact facts you expect: a price, a plan name, the H1 text.
- Or fetch it from a terminal. Run
curl -s https://example.com/pricing | grep -i "starter". No output means the word is not in the raw HTML. - Load the page with JavaScript off. Open DevTools (F12), open the Command Menu (Ctrl+Shift+P or Cmd+Shift+P), type "Disable JavaScript" and reload. What you see is roughly what a non-rendering crawler gets.
- Compare with the normal page. Turn JavaScript back on, reload, and note every fact that appears only now.
- Open hidden panels. Click tabs, accordions and "load more" buttons. Content fetched on interaction is missing from the raw HTML too.
For a fuller method, including how to diff extracted text at scale, follow the raw HTML vs rendered DOM playbook.
Which facts to look for
Don't check everything. Check the sentences an AI answer would need to describe you correctly.
- Prices and plan names. These are the facts AI answers most often get wrong, and the ones buyers ask about.
- Product and feature names. If your product name sits in a JavaScript-rendered hero block, the crawler may not see it at all.
- Headings (H1 and H2). They tell any reader what the page covers.
- One-line definitions of what you do. A specific, fetchable sentence gives an engine something it can quote.
- Locations, integrations and contact details. Often loaded from a widget or API call.
Say you run a hypothetical project-management SaaS. Your pricing page shows three plans in the browser, but view-source shows only a loading spinner and a script tag. For a non-rendering crawler, you have no prices. The guide to finding facts hidden behind JavaScript walks through a page-by-page inventory.
How to read the result
Sort every fact you checked into one of three outcomes.
- Present in raw HTML. Good. Non-rendering crawlers can read it.
- Present only after JavaScript. This is a gap. Fix it by moving that content into the server response through server-side rendering, prerendering or static generation. The comparison of SSR, prerendering and static generation helps you pick one.
- Present only after a click. Put the key facts in the initial HTML, even if the interactive version stays.
One nuance: Vercel notes that data embedded as JSON or React Server Components payloads inside the initial HTML response may still be read. If you find your price inside a script block in view-source, it is in the response, but plain visible text is the safer target.
For Google, the stakes differ. Googlebot renders JavaScript, so a gap here rarely explains missing AI Overviews. See whether AI Overviews need server-side rendering.
What the check cannot tell you
Be clear about the boundaries before you act on the result.
- It doesn't test access. A page can pass this check and still be blocked by robots.txt or by a firewall or CDN returning 403 to an AI crawler. OpenAI's crawler documentation treats each bot separately, so check them one by one. The free AI crawler checker page covers that test.
- It doesn't predict citations. Fixing rendering decides whether your content exists for the crawler. It does not make an engine more likely to retrieve or cite you. Retrieval and citation depend on the query and on the engine. Read whether SSR will increase your AI citations for what the evidence supports.
- It doesn't reach answers without search. When a model answers from memory with no web access, nothing on your site this quarter changes that answer.
- It's a snapshot. A redeploy or a new framework version can reintroduce the gap. Re-run it after major front-end changes.
What stays in your control is concrete: make sure the facts that matter are in the HTML your server sends.
The free tool that does it faster
The manual method works for one page. It gets slow across a site, and it doesn't show what each crawler actually receives.
The 99Visibility AI Crawler Checker requests a page as each AI crawler and shows which ones your firewall turns away. Pair that with the raw HTML check above and you cover the two questions that come first: can the crawler reach the page, and can it read what's on it.
Frequently asked questions
Does Googlebot read JavaScript-rendered content?
Yes. Google documents that Googlebot renders JavaScript before indexing, so client-side content can reach Google Search and its AI features. Rendering still adds a step, and Google's JavaScript SEO guidance covers common failure points. The bigger risk sits with crawlers that don't render at all, such as the ChatGPT and Claude crawlers Vercel studied.
Will allowing GPTBot help ChatGPT read my JavaScript site?
No. GPTBot governs whether your content may be used for training. OpenAI says OAI-SearchBot controls inclusion in ChatGPT search, and each setting is independent. Neither bot executes JavaScript according to the evidence we track, so the fix for a rendering gap is putting content in the server response, not changing which bots you allow.
Is a blank page with JavaScript disabled always a problem?
It is a problem for any crawler that doesn't render, which includes most AI crawlers as of October 2026. It may not matter for Google, which renders. If the page carries facts buyers ask about, such as prices or product names, treat a blank raw response as a gap worth fixing.
How often should I re-run the check?
Run it after any front-end change: a framework upgrade, a new page template, a redesigned pricing table or a new CMS widget. These are the moments content quietly moves from the server response into JavaScript. A quarterly spot check of your highest-value pages also catches drift nobody announced.
Do I need to server-render my whole site?
No. Start with the pages whose facts AI answers need: pricing, product pages, the homepage and key comparison pages. Prerendering or static generation can cover these without rebuilding the whole application. Leave interactive app screens behind login alone, since crawlers can't reach them anyway.
Sources
This page is AI-assisted. It was written from a verified evidence base and checked against our editorial policy. Engine behaviour changes often; facts are as of October 21, 2026.