AI Search Readiness guide · Chapter 3
Server-visible content: what a fetcher receives before JavaScript runs
Client-rendered apps send an empty shell to anything that does not execute scripts. Most AI fetchers do not. This is the single most common critical finding on builder sites.
The empty shell
A React app built with Vite ships an index.html with one div and a script tag. The browser runs the script and the page appears. A fetcher that reads the HTML and stops sees a title and nothing else. Google runs JavaScript, with a delay and a budget; the fetchers behind assistants mostly do not, and the ones that do are not the ones building the index.
The audit fetches every sampled page without executing scripts, records the first 400 characters of visible text, and compares the word count with what a browser would render. Under a few dozen words in the raw HTML with a script-heavy head is an empty shell, and the report shows you exactly the text a fetcher received.
Fixing it
The fix is architectural, which is why the audit marks it as advisory rather than opening a pull request: server-side rendering (Next.js App Router, TanStack Start, Remix), static prerendering at build time (vite-plugin-ssr, prerendering plugins, or a static site generator for the marketing pages), or at minimum a real body in index.html for the home page. Every builder in our catalog can produce a server-rendered project; the builder guides on the Repairs page say how.
Test it yourself: fetch the page with curl or wget and read the output. If the text you expect a customer to read is not there, an assistant will not read it either.
Challenges and bot walls
A hosting challenge page (a 403 or 503 with a "checking your browser" title, or a 200 that is only a challenge) has the same effect as an empty shell for every fetcher that cannot solve it. The audit detects the common patterns and reports them as blocked by challenge, with the status and title it saw.
Checks in this chapter
Server-visible content · Raw versus rendered delta · Blocked by challenge
Run these on my site