KitCat cap
← Blog GEO · Aug 14, 2026

AI can't run your JavaScript. Here's what ChatGPT actually sees.

Google renders your JavaScript. ChatGPT, Claude and Perplexity don't. Here's the 5-minute test to find out what AI really reads on your site.

Open your website in Chrome. It looks great. Prices load, reviews scroll past, the booking widget slides in.

Now turn JavaScript off and reload. Whatever survives on that screen is roughly what ChatGPT sees when it goes looking for a business like yours.

For some sites, nothing survives.

The one-sentence version

Googlebot runs JavaScript. The AI crawlers — GPTBot, ClaudeBot, PerplexityBot — don’t. They read the HTML your server sends and nothing else, so any content that gets injected by a script after the page loads is invisible to them.

That’s not a theory. When Vercel analysed real crawler traffic across its network, the finding was blunt: “none of the major AI crawlers currently render JavaScript.” They’ll happily download your JS files — ChatGPT’s crawler fetched JavaScript in about 11.5% of its requests, Claude’s in about 23.8% — and then do precisely nothing with them.

Google’s own documentation is the other half of the picture: pages go into a rendering queue where headless Chromium executes the JavaScript before indexing. Same page, two completely different readers.

Why this is worse than it sounds

The failure mode here is silent. There’s no error, no warning in Search Console, no drop in your rankings.

You can sit at position one on Google — where the rendered version of your page is fully indexed — and be completely absent from ChatGPT’s answer to “who does emergency plumbing in my area,” because the only version ChatGPT ever saw was an empty div and a loading spinner.

Nobody sends you a report about the answer you weren’t in. That’s why this one goes unnoticed for years while everyone argues about keywords.

Worth noting the exception: Google’s Gemini and Apple’s crawler do render, because they piggyback on browser-based infrastructure. So AI Overviews can see content that ChatGPT can’t. The gap isn’t “AI vs. Google” — it’s a split right down the middle of AI itself.

The honest part: most of you are fine

Here’s where we’re supposed to tell you your site is broken and you need a rebuild. We’re not going to, because for most small businesses it isn’t.

If your site is WordPress, Squarespace, Shopify, plain HTML, or anything static, your content is in the HTML before a single script runs. You’re fine. Nobody needs to sell you a migration over this.

The sites that get hit are client-rendered apps — React or Vue builds where the server sends an empty shell and the browser assembles the page. That’s common in web apps, and increasingly common in whatever an AI website builder spat out for you in 20 minutes, since those tools love shipping a JavaScript bundle where a paragraph would do.

Where it actually bites normal sites

Even on a perfectly server-rendered site, the most commercially important content is often the stuff bolted on by a script:

The pattern: the facts a buyer wants are the ones most likely to be dynamic, and dynamic is exactly what doesn’t survive the trip.

The 5-minute test

Do this today, on your own site, before you pay anyone to have an opinion about it:

  1. View source, not inspect. Right-click → View Page Source. That’s the raw HTML your server sends — the AI’s version. Inspect shows the rendered DOM, which flatters you.
  2. Ctrl+F for your money facts. Phone number. City and service area. Prices. A review quote. Your main service names. Anything you can’t find isn’t there for the machines.
  3. Or kill JavaScript entirely. Chrome DevTools → Ctrl+Shift+P → type “Disable JavaScript” → reload. Read what’s left.
  4. From a terminal, if you’re comfortable: curl -s https://yoursite.com | grep -i "your phone number". No result, no content.

Whatever’s missing is your to-do list. Usually it’s shorter than you’d fear — a review widget to replace with real HTML, a pricing table to hardcode, an accordion to fix.

What good looks like

Server-rendered HTML first, JavaScript for enhancement — never for delivering the sentence that closes the sale. That’s why every site we build ships static: the HTML that lands on the visitor’s screen is the same HTML the crawler gets, with no rendering step in between.

Then the GEO layer sits on top of that foundation — structured data, plainly stated facts, and an llms.txt that introduces the business to AI directly. But all of that assumes the machines can read the page in the first place. Fancy schema on a page that renders empty is a beautiful sign in an empty room.

Run the test. If your source view already has your phone number, your prices and your service area in it, you have nothing to fix here and you should go spend the afternoon on something that matters more.

If it doesn’t — send us the URL and we’ll tell you exactly what’s missing and whether it’s a two-hour fix or a real problem. If it’s the two-hour fix, we’ll say so, and you can hand it to whoever built the site.

Got a brand worth finding?
Start a projectStart a projectStart a project Start a projectStart a projectStart a project