What AI Sees: Why JavaScript Sites Can Look Empty to ChatGPT, and How to Fix It
Your new site looks great. The hero animates in, the pricing cards slide up, the reviews rotate. Then you ask ChatGPT what your company does, and it has nothing to say about you, or it describes you from a stranger's listing instead of your own words.
There's a good chance it never saw your words at all. Many modern sites send a nearly empty HTML file and let JavaScript build the page in the browser. People see the finished page. Most AI crawlers only see the empty file.
What AI Sees shows you that gap for any page. Paste a URL and you get two columns side by side: what a visitor sees after the page loads, and what an AI crawler reads in the raw HTML. On top, you get one number, the share of the page's words that AI crawlers can actually read.
Why a page can look full and read empty
When a browser opens a page, it does two things. It reads the HTML your server sends, and then it runs your JavaScript, which can add text, swap sections and fetch more content. A person only ever sees the end result, so a page built mostly by JavaScript looks the same to them as a page sent as plain HTML.
AI crawlers skip the second step. The crawlers behind ChatGPT, Claude and Perplexity fetch the HTML and read what's in it. They don't run your scripts and wait for the page to fill in. If your words only show up after JavaScript runs, those crawlers get a page shell with a menu, a footer and very little in between.
Google is the odd one out. Its crawler does run JavaScript, though it often gets to that step later than the first fetch. That's how a site can rank on Google and still look empty to ChatGPT, and why "but we're on page one" doesn't settle the question.
This setup has a name, client-side rendering, and it's the default for a lot of tools people use to build sites quickly. Single page apps built with React or Vite work this way unless someone sets them up to render on the server. So do many sites made with AI app builders, which is why this check gets the most use from people who built their site in a weekend.
RankControl publishes full articles as native posts on your site, so there's real text for crawlers to read.
What a blank page costs you
When a buyer asks ChatGPT or Perplexity a question, the engine often searches the web right then and reads a handful of pages before it answers. It quotes the pages it could read. If your page comes back as a shell, the answer gets built from whatever else it found, which is usually a review site, a directory listing or a competitor's page.
That's the quiet part of this problem. Nothing breaks, and no error shows up anywhere. Your page simply never makes it into the answer, and the visit that would have followed goes to someone else.
The same thing applies to the details you've set up for search. If your page title, description or structured data gets added by JavaScript, crawlers that skip scripts miss those too. Keep them in the HTML your server sends.
What the check shows you
The result page answers one question in a single line: what share of this page can AI crawlers read? Under that, two columns let you see the difference with your own eyes.
| Part of the result | What it tells you |
|---|---|
| Readable share | The words AI crawlers can read, as a share of what visitors see |
| What visitors see | The page's main text after it fully loads in a browser |
| What AI crawlers read | The text that sits in the HTML before any JavaScript runs |
| Word counts | How many words are on each side, so you can see the size of the gap |
| Fix note | Shows when less than 60% is readable, with the change to ask for |
The comparison counts words the same way on both sides. Images and link addresses are left out, so a big gallery or a long list of links won't bend the number.
A score near 100% means crawlers get the same text people do. A score between 60% and 80% usually means some parts load by script, like a reviews widget, a tab or a slider, and it's worth a look. Under 60%, most of the page loads with JavaScript, and the fix belongs with whoever builds your site.
Our own homepage reads at 100%, which is the bar we'd hold any page that matters to.
What we found on 83 real sites
We wanted to know how common this is, so we ran two groups of homepages through the same comparison in October 2026.
The first group was sites that rank on Google's first page for 12 everyday buyer searches, across software, online shops, home services, insurance and legal help, and agencies. We left out sites whose firewall turned AI crawlers away, since a block hides the HTML question entirely, which left 61. The second group was 22 public sites hosted on one of the popular AI app builders.
| Sites on Google's page one | Sites built with an AI app builder | |
|---|---|---|
| Sites checked | 61 | 22 |
| 80% or more readable | 57 | 12 |
| Under the 60% fix line | 2 | 10 |
| Under 20% readable | 0 | 10 |
| No readable words at all | 0 | 9 |
None of the 61 ranking homepages fell under 20%, and 57 of them showed AI crawlers at least 80% of their text. Pages that hold a first-page spot almost always send their main text in the HTML, even when they're built with heavy modern tools.
The app-builder sites were a different world. Nearly half of them, 10 out of 22, showed AI crawlers less than a fifth of their text. Nine of those had no readable words at all. Their HTML was a blank shell with a title, a script tag and nothing for a crawler to quote.
The other 12 app-builder sites did fine, with 80% or more readable. Their text was already in the HTML, which means prerendering or server rendering was switched on. The builder isn't the problem by itself. The default is, and most people never change it because the site looks perfect in their own browser.
Four ways JavaScript hides your words
A blank shell is the extreme case. Most sites that land between 40% and 80% have smaller leaks, and they're easy to miss.
- Content behind a click, like tabs, accordions and "show more" buttons that fetch their text only when someone clicks. FAQ sections and pricing details often live here.
- Text a widget pulls in, such as reviews, ratings and comparison tables that a third-party script drops onto the page after it loads.
- Words inside images or video, like a headline baked into a hero image or a feature list inside a graphic. No crawler reads those as words.
- Pages built from data after they load, such as product listings and location pages that pull their details from an API once the page opens.
Each of these is fine for a person and invisible to the crawlers behind ChatGPT, Claude and Perplexity. If the missing part is your pricing, your FAQ or your proof, it's the part a buyer's question needs most.
How to fix it, based on how your site is built
The right fix depends on your setup. You rarely need a rebuild, but you do need someone who can change how pages get delivered.
| Your setup | What to change |
|---|---|
| React or Vite single page app | Add prerendering for public pages, or move them to a framework that renders on the server |
| Next.js, Nuxt, SvelteKit or Astro | Make sure public pages use server rendering or static output, not data fetched in the browser |
| AI app builder | Turn on any prerender or SEO option, or export the code and host it with server rendering |
| WordPress, Webflow, Shopify, Framer or Wix | Usually fine. Check page builder sections, sliders and widgets that load by script |
For many teams the cleanest move is to split the site in two. Keep the app where it is, and put the marketing pages, pricing and articles on a platform that sends full HTML. The pages that need to be read get read, and the app keeps all its interactivity.
What to send your developer
If you don't build the site yourself, this is the short version to pass along. Send the result page from the check with it, since it shows both columns.
- Public pages, like the homepage, pricing, product pages and articles, should send their main text in the HTML.
- Content that loads after a click should already be in the HTML, even if it's hidden until someone opens it.
- The page title, meta description and structured data should be in the HTML, not added by a script.
- Every page we care about should score 80% or more in What AI Sees.
Most developers know exactly what this means once they see the two columns. The work is often a setting or a build change, and it rarely touches how the site looks.
Check a page by hand
You can confirm what the tool shows in about a minute. Open the page, right-click and pick View Page Source, then search for a sentence you can see on screen. If the sentence isn't in the source, crawlers that skip JavaScript can't read it.
A second test is to turn JavaScript off in your browser settings and reload the page. Whatever is left on screen is roughly what the AI crawlers get. Turn JavaScript back on afterwards, or half the web will look broken to you.
A short test before any page goes live
- Run the page through What AI Sees.
- If it's under 80%, find which section is missing from the AI crawler column.
- Move that section's text into the HTML, or render it on the server.
- Run the check again and keep the result page for your developer.
Put your words where crawlers can read them, then let RankControl fill the site with pages buyers search for.
A readable page is the floor, and traffic needs more
Fixing rendering gets AI crawlers to your words. It doesn't give them many words worth quoting. A homepage, a pricing page and an about page can't answer the hundreds of questions buyers type into ChatGPT and Google before they pick a vendor.
That's where most sites stall. The pages are readable now, but there are only a handful of them, and none answer the specific questions that bring visits.
RankControl does that part. It finds the questions buyers in your market search, then writes and publishes up to 100 articles a month as native posts on your own site. On platforms like WordPress, Webflow, Shopify and Ghost, that means crawlers get the full text in the HTML. If your site runs on Next.js, a copy-paste snippet renders the posts on the server. Auto-publish is off by default, so you can read each article first.
Then it tracks 50 of your buyer questions every week across six AI engines, Google AI Mode included, alongside your Google rankings and the visits AI answers send you. It also checks every day whether AI search crawlers can reach your site, and shows a banner in your dashboard if one gets blocked.
Traffic from Google and AI search is the first result to look for. Mentions inside AI answers take longer, and they mostly come from other sites linking to and talking about you. Link Control helps there, finding sites to pitch for each article and sending the emails from your own inbox once you approve them.
You can do all of this yourself. Fix the rendering, write a few strong articles a month, pitch sites one by one and check your questions in each AI engine every week. For a small team that's easily 20 hours a month once the rendering work is done. Or RankControl can run it for $400 a month, with a 7-day free trial.
Check your page above, then start a free trial and let RankControl give crawlers something worth reading.