← All checks
AEOTypical severity: Medium

No-JavaScript Content Scanner

Detects whether your site is a near-empty SPA without JS that AI crawlers can't index or cite.

What it checks

This scanner detects whether your site is a single-page application (SPA) that arrives nearly empty when loaded without running JavaScript. It checks how much real content is available before the browser processes the code.

Why it matters

Many AI crawlers and search engines don't run JavaScript, so if your content only appears after loading it with JS, to them your page is blank and they can't index or cite it. This is very common on sites built with modern frameworks by vibe coders without realizing it.

How to fix it

Use server-side rendering (SSR) or static generation (SSG) so the HTML arrives with the main text and links already in place. Most modern frameworks offer this option; enabling it ensures both Google and AI see your real content.

How this check works

Scanaris downloads your page's HTML exactly as the server serves it, without running JavaScript, strips out scripts, styles, noscript tags, templates and SVGs, and measures how much visible text is left in the body. It only opens a finding, medium severity, when two conditions hold at once: that text is under 250 characters, and the HTML contains an empty single-page-app container, meaning a <div> with id root, app, __next, __nuxt or q-app with nothing inside. A site with server-side rendering or static generation has text in the initial HTML and is never flagged; a site with little content but no SPA container is not flagged either. The threshold is deliberately low to avoid false positives.

Why it matters

Googlebot runs JavaScript, but in a second pass that can take days and with a limited budget. The crawlers of AI assistants (GPTBot, ClaudeBot, PerplexityBot) generally do not run it at all: they read the HTML they receive, full stop. If your HTML is a <div id="root"></div> and a script, to them your site is empty. They cannot index what they do not see or cite what they do not read, so when someone asks ChatGPT about your product category, you do not exist. It is the most common problem with sites built by AI tools that generate a pure client-side React or Vue app, and the most invisible, because in the browser everything looks perfect.

How to fix it

  • Enable server-side rendering. In Nuxt it is on by default (ssr: true); if you turned it off, turn it back on. In Next.js, the App Router renders on the server unless you mark the component 'use client' all the way up. In plain Vite with React or Vue there is no SSR: move to Next.js, Remix, Nuxt or Astro, or generate the public pages as static HTML.
  • If migrating is not an option, prerender: generate the HTML of the public routes at build time (Nuxt nitro.prerender, Next.js static export, Astro by default) or use a prerendering service that serves rendered HTML to bots.
  • At minimum, put the essential content in the HTML: the headline, the description of what you do and the main links, even if the app replaces them on load. That is what bots will see.
  • Check the pages that matter, not just the home: the blog and product pages are the ones assistants cite.

Check it is fixed

curl -s https://yourdomain.com | sed -e 's/<script[^>]*>.*<\/script>//g' -e 's/<[^>]*>/ /g' | tr -s ' \n' ' ' | wc -c

If the result is only a few dozen characters, JavaScript renders the content. It should count thousands. Another way: in the browser, disable JavaScript in the developer tools and reload; what you see is what bots see.

Frequently asked questions

Google indexes me fine. Why should I care?

Because more and more people ask an assistant instead of searching, and those assistants do not run your JavaScript. And because even on Google, deferred rendering delays indexing of your changes by days. The numbers and the reasons are in why AI-built apps are invisible to AI.

My app is a private dashboard behind login. Does this affect me?

No: what sits behind authentication should not be indexed. This check matters for the public pages, the ones you want to appear. If your site is just the dashboard plus a landing page, make the landing page HTML.

I have SSR and it still shows little text.

Then the HTML carries structure but little real content, and it is worth checking that the landing page actually says something. The headings that organise that content are reviewed by headings.

Check it on your site

Scan your site free and see if this and 44 other checks pass, with a fix prompt for every issue.

Scan my site free

From the blog

Related checks