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, orgetStaticPropsso pages ship with content. - Nuxt / Vue: enable SSR or
nuxt generatefor 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.