AI Visibility Tracking ToolFree checker

Find Key Facts That Only Appear After JavaScript

99Visibility Research · Updated October 21, 2026 · 7 min read

Short answer

Content hidden behind JavaScript is any text that appears only after a browser runs scripts. As of October 2026, most AI crawlers, including OAI-SearchBot, ClaudeBot and PerplexityBot, read the raw HTML and do not execute JavaScript. A price or plan name that loads client-side does not exist for them. To find these gaps, fetch each key page without JavaScript and search the raw HTML for every fact that matters.

Key takeaways

  • Most AI crawlers read only the HTML your server sends, so facts injected by JavaScript are invisible to them.
  • Googlebot renders JavaScript, so a page can look fine in Google and still be empty for ChatGPT search, Claude and Perplexity crawlers.
  • Check prices, product names, plan names and contact details one by one, because one page often mixes server-rendered and client-rendered text.
  • A fact present in the raw HTML is eligible to be read, not guaranteed to be cited.
  • Rerun the check after every deploy that touches templates, the CMS, pricing components or the frontend framework.

Why the initial HTML is the version AI crawlers read

When a crawler requests a page, your server returns an HTML document. A browser then runs the JavaScript, which can add, replace or remove text. Sites built with client-side rendering often send a near-empty shell and fill it in with scripts.

That second step is where AI crawlers drop out. Vercel's crawler study (December 2024, updated February 2025) found that ChatGPT and Claude crawlers do 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. The evidence base behind this library records that the finding was independently re-confirmed in June 2026 for GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, PerplexityBot, Meta-ExternalAgent and Bytespider. You can read the detail in our summary of Vercel's AI crawler study.

Googlebot is the exception. Google documents that it renders JavaScript, so Google AI Overviews and AI Mode are not affected the same way. This creates a trap: a page that indexes cleanly in Google can still be blank to every other AI engine.

What it means for you: the raw HTML is the only copy of your page that most AI crawlers ever see. If a fact is not in it, those crawlers cannot quote it, check it or correct a wrong version of it.

The facts checklist

Not every sentence needs to be in the raw HTML. The facts below are the ones buyers ask AI tools about, and the ones AI answers most often get wrong. Stating a specific fact on a fetchable page gives an engine a sentence it can quote.

Work through this list for each key page:

  • Prices. Every plan price, currency and billing period (monthly, annual, per seat).
  • Plan names and limits. Tier names and what each includes, such as seats, usage caps or included features.
  • Product and service names. The exact names you want used, plus a one-line description of each.
  • Company identity. Legal or trading name, what the company does in one sentence, founding year, headquarters location.
  • Contact details. Phone number, email, physical address, opening hours for local businesses.
  • Locations and service areas. Cities, regions or countries you serve.
  • Integrations and compatibility. Platforms you connect to, if buyers choose you on that basis.
  • Certifications and compliance. Any certification you would want named in a comparison answer.
  • Policies that affect buying. Free trial length, refund terms, minimum contract.
  • Page titles, headings and meta tags. The title, H1 and meta description, plus any robots meta tags.

The last item matters more than it looks. A robots meta tag added by script may not be seen at all, which is covered in whether AI crawlers see robots meta tags added by JavaScript.

How to confirm each fact is in the initial HTML

This takes about ten minutes per page. Start with your pricing page, homepage, main product pages and contact page.

  1. Write down the exact strings. For each fact on the checklist, note the exact text as it appears on the live page, for example the price "$49" and the plan name "Starter".
  2. Fetch the raw HTML. In a browser, open view-source on the page (not the Elements panel in developer tools, which shows the rendered DOM). Or fetch it from the command line:
curl -s https://example.com/pricing > raw.html
  1. Search for each string. Use find in the source view, or grep the saved file:
grep -c "Starter" raw.html

A count of zero means the string is not in the HTML the server sent.

  1. Check where a match sits. If the string appears only inside a script tag, it may be a JSON payload rather than visible text. Vercel notes that JSON or React Server Components data in the initial HTML response may still be indexed, but visible text in the body is the safer state. Record it as "in a script only".
  2. Repeat with JavaScript disabled in the browser. Turn off JavaScript in browser settings and reload. Anything that disappears is client-rendered. This also catches text that the server sends but scripts later overwrite.
  3. Compare against the rendered page. For a full diff of raw HTML against the rendered DOM, follow the raw HTML vs rendered DOM check.
  4. Confirm crawlers actually get the HTML. Your server may send different responses to bots, or a firewall may block them before any HTML is served. The AI Crawler Checker requests a page as each AI crawler and shows which ones get turned away.
  5. Log the result per fact. A simple sheet works: page, fact, present in body, present in script only, missing.

What good and bad results look like

Expect mixed results. Many sites render the header and footer on the server and load the useful middle of the page with scripts.

Result What you see What it means
Good Every checklist fact appears as visible text in the raw HTML body Non-rendering crawlers can read your key facts
Partial Fact appears only inside a script or JSON block May be indexed, but not guaranteed as readable text
Bad Fact missing from raw HTML, present after rendering Invisible to non-rendering AI crawlers
Worse Raw HTML is a shell: a root div, script tags, little else The whole page is effectively blank to those crawlers
Conflict Raw HTML shows an old price, scripts replace it with the current one Crawlers may read and repeat the outdated fact

The conflict case deserves attention. A server-rendered placeholder or cached default price can be the only version an AI crawler sees. That is one plausible route to an AI answer stating the wrong price.

Where key facts usually hide

When a fact fails the check, the cause is usually one of a few patterns:

  • Pricing widgets. Toggles between monthly and annual billing that fetch prices from an API after load.
  • Tabs, accordions and "load more". Content fetched only when a visitor clicks.
  • Headless CMS front ends. The CMS stores the content, but the front end may fetch it in the browser. See whether a headless CMS makes a site invisible to AI crawlers.
  • Location and contact blocks. Store finders, maps and click-to-reveal phone numbers.
  • Personalised or geolocated content. Prices or currency set by script after detecting the visitor's region.
  • Content behind a login or paywall. No rendering setting fixes this, because crawlers do not log in.

Knowing the pattern tells you which team owns the fix: the frontend team for widgets and tabs, the CMS owner for headless setups, the growth team for personalisation.

What to do with a failed fact

The fix is to put the fact into the HTML the server sends. The usual routes are server-side rendering, static generation, or prerendering for the pages that matter. The SSR and prerendering rollout plan covers sequencing and testing.

For small gaps, a lighter fix often works. Render the default price and plan names in the HTML, and let scripts handle the toggle. Put contact details in plain text in the footer rather than behind a reveal.

Be clear about what this buys. Fixing rendering is hygiene, not optimisation. It decides whether your facts exist for the crawler at all. It does not make an engine more likely to retrieve or cite your page, and nobody outside the engine controls that choice. The honest answer to whether SSR increases AI citations is that it removes a block. No published before-and-after study has measured the effect on citations.

Avoid one shortcut. Serving AI crawlers different content from what visitors see is cloaking. It is a risk with every engine and never a fix.

How often to repeat the check

Rendering breaks quietly. Nobody changes a setting called "hide from AI". A component gets refactored and the price moves into a client-side fetch.

A practical rhythm:

  • After every relevant deploy. Any change to templates, pricing components, the CMS or the framework.
  • After price or plan changes. Confirm the new numbers are in the raw HTML, and that no old values remain in placeholders.
  • Monthly spot-check. Run the steps on your pricing, homepage and contact pages.
  • Before and after a migration. Framework upgrades and redesigns are the most common points of regression.

If you can, automate it. A scheduled job that fetches key pages and greps for each checklist string catches regressions the day they ship.

Frequently asked questions

Does this matter if Google ranks my page fine?

Yes. Googlebot renders JavaScript, so Google Search and its AI features can see client-rendered text. The crawlers behind ChatGPT search, Claude and Perplexity generally do not render, as of October 2026. A page can perform well in Google and still be blank to those engines. Check the raw HTML separately from anything Google Search Console tells you.

Is the browser's Elements panel the same as the raw HTML?

No. The Elements panel in developer tools shows the rendered DOM, after scripts have run. That is what a visitor sees, not what a non-rendering crawler reads. Use view-source, a command-line fetch, or a browser with JavaScript disabled. Those show the document your server actually sent.

If my price is in a JSON script block, is that enough?

It may be. Vercel notes that JSON or React Server Components data included in the initial HTML response may still be indexed. It is a weaker state than visible text in the page body, because no crawler documents how it reads those payloads. If the fact matters, render it as plain visible text too.

Will adding schema markup fix content hidden behind JavaScript?

No. Schema does not substitute for visible content, and Google says structured data isn't required for generative AI search. If schema is injected by JavaScript, non-rendering crawlers will not see it either. The fix for hidden facts is getting the text itself into the server-sent HTML.

Do I need to render every page on the server?

Not necessarily. Start with the pages that carry the facts on the checklist: pricing, product, homepage, contact and location pages. Interactive dashboards or logged-in areas do not need it, because crawlers cannot reach them anyway. Prioritise by which facts buyers ask AI tools about.

Sources

  1. The rise of the AI crawler - Vercel
  2. Understand JavaScript SEO Basics
  3. Overview of OpenAI Crawlers
  4. Perplexity Crawlers - Perplexity
  5. Google's Guide to Optimizing for Generative AI Features on Google Search

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.

Keep reading