Skip to content
Healthy URL healthyURL
← Fix guides

The page is empty until JavaScript runs

Most AI crawlers, and some search crawlers, read the HTML your server sends without running any scripts. If the content only appears after JavaScript executes, those readers see a blank page.

AI readiness ai.content.requires_javascript

When someone visits your site, your server sends back an HTML file. On many modern sites that file is nearly empty — it contains a few script tags, and the actual text, headings, and images only appear once the visitor's browser downloads and runs JavaScript. A human with a browser won't notice, but a reader that doesn't run scripts sees only the empty shell.

Why it matters

AI crawlers and some search crawlers read the raw HTML your server sends and do not execute JavaScript. If your content only exists after scripts run, those readers see a blank page, so your pages can't be cited, summarised, or indexed. You lose visibility even though the page looks perfect to human visitors.

How to fix it

The goal is to make your real content present in the HTML your server sends, before any JavaScript runs. This usually means server-side rendering (SSR), static generation, or prerendering.

WordPress

Standard WordPress themes already send full HTML, so this problem usually comes from a page builder or a headless/React front end. If you use a JavaScript framework front end, switch it to a server-rendered or static setup (see the framework sections below). If you use a heavy page builder, check that its output includes your text in the HTML source rather than loading it dynamically.

Next.js / React / Vue / other frameworks

Render content on the server or at build time instead of only in the browser.

  • Next.js: use Server Components, getServerSideProps, or getStaticProps so pages ship with content.
  • Nuxt / Vue: enable SSR or nuxt generate for static output.
  • Create React App / pure client-side apps: move to a framework that supports SSR, or add a prerendering step at build time.

Nginx

Nginx can't render JavaScript itself, but you can route crawlers to a prerendered version using a prerender service:

location / {
    set $prerender 0;
    if ($http_user_agent ~* "googlebot|bingbot|GPTBot|ClaudeBot|PerplexityBot") {
        set $prerender 1;
    }
    if ($prerender = 1) {
        proxy_pass https://service.prerender.io;
    }
}

Apache

Same approach using mod_rewrite to send crawlers to prerendered HTML:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (googlebot|bingbot|GPTBot|ClaudeBot|PerplexityBot) [NC]
RewriteRule ^(.*)$ https://service.prerender.io/%{REQUEST_URI} [P,L]

Cloudflare

Cloudflare offers server-side rendering options if you host on Cloudflare Pages or Workers. You can also run a prerender Worker that intercepts crawler requests and returns a cached, fully rendered HTML snapshot. Check your framework's Cloudflare deployment guide for its SSR mode.

How to check it worked

View the raw HTML your server sends — either run curl https://yourdomain.com/ in a terminal or right-click the page and choose "View Page Source" (not "Inspect"). Your main text and headings should be visible there, not just a set of empty script tags.

Does this affect your site?

A scan takes under a minute and checks this along with eighteen other things. No account needed.