Rendering and AI

Can AI Crawlers Read JavaScript? Why Some Sites Look Blank to ChatGPT

Your site looks finished in a browser: the prices, the reviews, the service list, all there. Now ask what a crawler sees if it never runs your scripts. For some sites the honest answer is a logo, a menu and an empty box where the business used to be.

October 18, 2026 · 9 min read

The short answer

Mostly no, as far as the evidence shows. Vercel's December 2024 analysis found that crawlers from OpenAI, Anthropic, Perplexity, Meta, ByteDance and Common Crawl did not execute JavaScript, while Googlebot and Applebot did. Text that appears only after scripts run may be invisible to many AI engines. Server-rendered HTML, from Next.js or a well-built WordPress site, avoids the problem.

On this page
  1. Two versions of every web page
  2. What Vercel's 2024 crawler study found, and how old it is
  3. Sites and widgets most likely to go blank
  4. Test your own pages with view-source and curl
  5. How Next.js puts the words in the HTML
  6. Where WordPress stands, fairly
  7. Fixes, from a free afternoon to a rebuild

Two versions of every web page

Every page exists twice. There is the HTML the server sends, and there is the page a browser builds after it runs the scripts in that HTML. On a traditional site the two are nearly the same: the words are in the HTML from the start. On a site built to render in the browser, the HTML can be a near-empty shell with one instruction: go fetch the content and draw it.

A person never notices the difference, because a browser runs the scripts in a fraction of a second. A crawler that reads only the raw HTML notices everything. It records a page with a title, a navigation bar and no prices, no services, no reviews. Then an engine asked about your business has nothing to quote, and it quotes someone else. That is one of the quieter reasons a site ranks on Google but is missing from AI answers, a pattern we describe in your site ranks on Google and is invisible to AI.

A crawler that does not run scripts sees the page you shipped, not the page you designed.

What Vercel's 2024 crawler study found, and how old it is

The best public evidence comes from one source: an analysis Vercel published on December 17, 2024, based on crawler traffic across its hosting network. It is useful and it is dated. Vercel is a hosting company with a view of its own customers' traffic, not an independent lab, and the crawlers it describes may have changed since. We treat it as medium confidence and say so.

Which crawlers run JavaScript, and how sure we are
Runs JavaScript?Basis
GooglebotYesGoogle says it can process JavaScript that is not blocked; pages wait in a rendering queue first
BingbotYesBing says it renders with an evergreen Microsoft Edge engine
ApplebotYesVercel, December 2024; Apple says blocked scripts or CSS can stop it rendering properly
GPTBot, OAI-SearchBot, ChatGPT-UserNoVercel, December 2024
ClaudeBotNoVercel, December 2024
PerplexityBotNoVercel, December 2024
Meta-ExternalAgent, Bytespider, CCBotNoVercel, December 2024
Claude-SearchBot, Claude-User, Perplexity-User and othersUnknownNo published test we could find

One detail is worth knowing. Vercel found that ChatGPT's and Claude's crawlers do download JavaScript files (11.50% and 23.84% of their requests, respectively) but do not run them. Fetching a script is not the same as executing it. Vercel's own advice was blunt: server-render the content that matters. Google says much the same in its JavaScript guidance, noting that not all bots can run JavaScript. The full crawler list, with what each one is for, is on the AI crawlers page.

Sites and widgets most likely to go blank

This is not a whole-site verdict. Many sites are fine everywhere except one or two important pieces that a script drops in after load. Those pieces are often exactly the ones an engine would quote.

Single-page apps

Sites built as browser-rendered apps, where the server sends a shell and the framework draws every page. The whole site can be blank to a non-rendering crawler.

Review and rating widgets

Third-party widgets that inject review text with a script. Your best customer quotes may exist only in the browser.

Pricing tables and calculators

Prices pulled from an API after the page loads. The number an engine most wants is the one it cannot see.

Structured data added by a tag manager

JSON-LD inserted through a tag manager is added by script, so it is missing from the raw HTML.

Tabs, accordions and load-more buttons

Content fetched only when clicked never reaches a crawler. Microsoft also warns that AI systems behind Copilot may not render hidden content such as tabs and expandable menus.

Store locators and booking embeds

Addresses and hours drawn from a map script or booking iframe rather than written on the page.

Test your own pages with view-source and curl

You do not need a tool or an agency to check this. You need a sentence from your page and two minutes. Pick a sentence that matters: a price, a service name, a line from a review.

  1. 1

    Open the raw HTML

    In Chrome, Edge or Firefox, type view-source: in front of the page address and press Enter. This shows what the server sent, before any script ran.

  2. 2

    Search for your sentence

    Press Ctrl+F (Cmd+F on a Mac) and search for the sentence. If it is there, non-rendering crawlers can read it. If it is not, they probably cannot.

  3. 3

    Check from the command line

    Run curl -s followed by the page address, piped to grep -i and your phrase in quotes. No output means the phrase is not in the HTML the server returns.

  4. 4

    Try it as the crawler

    Add curl's -A option with a user agent containing GPTBot or OAI-SearchBot. If the response differs, or returns an error, a firewall or CDN rule is treating AI crawlers differently.

  5. 5

    Look for your structured data

    Search the view-source page for application/ld+json. If your business markup is missing there but shows in browser tools, a script is adding it.

  6. 6

    Turn JavaScript off and look

    In your browser's developer tools, disable JavaScript and reload. What remains is roughly what a non-rendering crawler gets.

How Next.js puts the words in the HTML

Next.js, the framework DataCram builds on, was designed for this problem. In its App Router, pages and layouts are Server Components by default: they render on the server and arrive as finished HTML. Pages that do not depend on request-time data are prerendered at build time and served from a CDN. Interactive pieces are added as Client Components on top of content that is already in the page.

Titles, descriptions and structured data live in code and ship in the HTML, not through a tag manager. That is what we mean when we say a site is readable by every crawler on the table above. The same build choices make pages fast, which is why rendering sits inside our site speed and Core Web Vitals work too.

A fair warning: Next.js does not make a site readable by magic. A developer can still fetch content in the browser after load, or wrap the important text in a widget, and end up with the same blank page. The framework makes the right thing the default. It still has to be built that way, and tested with the steps above.

Where WordPress stands, fairly

A standard WordPress site renders each page in PHP on the server, so the post and page content arrives in the HTML. On this particular question, a well-built WordPress site is fine, and we would rather say so than pretend otherwise. The risks come from what gets added on top.

Usually in the HTML on WordPress

  • Page and post content written in the editor
  • Titles and meta descriptions from an SEO plugin
  • Schema output by a plugin into the page source
  • Menus, footers and contact details in the theme

Often missing from the HTML

  • Review widgets that load quotes with a script
  • Sliders and tabs filled by JavaScript
  • Content loaded by some page-builder elements after load
  • A headless front end built to render in the browser

Our larger case for Next.js is about speed, upkeep and security, and it is laid out in WordPress vs Next.js. For AI readability alone, the test matters more than the platform. Run view-source on your key pages, whatever they are built on.

Fixes, from a free afternoon to a rebuild

If the test shows missing text, the fix depends on how much is missing. Start at the top of this list and stop when the important facts are in the HTML.

  • Write the key facts as plain page text. Hours, prices, services, areas and a few review quotes, typed into the page rather than pulled from a widget. Often an afternoon.
  • Move structured data into the page source. Output the JSON-LD from the site or CMS instead of a tag manager.
  • Keep important answers on the page, visible. Put FAQ answers in the HTML and keep the critical ones out of tabs that load on click.
  • Turn on server rendering or prerendering. Many frameworks support it; on a browser-rendered app it is a development project, not a setting.
  • Rebuild when the shell is the whole site. A single-page app with no server rendering is usually cheaper to rebuild than to patch. DataCram's custom builds start at $1,750, fixed price.

Rendering is one item on a longer list, and fixing it is part of our AI search optimization work. A GEO audit checks it alongside crawler access, entity consistency, reviews and content, and the AI visibility check shows whether the engines name you once the words are readable. For the rest of the work, start at the generative engine optimization guide.

Questions owners ask us about AI search

Vercel's December 2024 analysis found that OpenAI's crawlers, including GPTBot, OAI-SearchBot and ChatGPT-User, did not execute JavaScript, though they downloaded some script files. That may have changed since, so test your pages. If your key text appears only after scripts run, ChatGPT may not see it. More on the ChatGPT page.

Because Google is one engine of many. Google's AI features use its index, and Googlebot renders scripts after a queue. But crawlers for ChatGPT, Claude and Perplexity did not run JavaScript in Vercel's 2024 analysis. Google itself says server rendering is still a good idea because not all bots can run JavaScript.

Open view-source: plus your page address, then search for an important sentence. Or run curl on the page and grep for the phrase. If the text is missing from the raw HTML, crawlers that do not run scripts probably cannot see it. Then confirm with the free AI visibility check.

Usually yes for the main content, because WordPress builds pages on the server. Watch for review widgets, sliders, tabs and page-builder elements that load text with scripts, and for headless setups that render in the browser. Test the pages that matter rather than trusting the platform name.

It makes the fix the default. Pages are Server Components and are prerendered or server-rendered, so the text ships in the HTML. A developer can still load content in the browser and recreate the problem, so the view-source test applies to Next.js sites too. See Athena CMS for how we build ours.

It is not a reliable fix. Google says Search does not use llms.txt, and Ahrefs found 97% of llms.txt files got no requests in May 2026, with AI retrieval bots making only 1.1% of requests. Putting the content in your HTML works for every crawler. More on llms.txt.

Keep reading

Free · No obligation

Find out what AI crawlers see on your site

Send us the pages that matter most. We will compare the raw HTML with what customers see, list anything crawlers miss, and tell you the cheapest fix.

Which of these sounds like you? (pick any)

Rather talk now? Call (210) 346-0848.

CallGet a quote