A founder reached out last quarter wanting to know why his site was not ranking. Beautiful design. Clean copy. Real product. He had been live for 4 months and his Google Search Console showed 3 indexed pages out of 47 submitted.
I ran one check before our first call. I opened his homepage, hit View Page Source, and scrolled. The body was a handful of empty divs and a script tag. No headlines. No paragraphs. No product descriptions. Nothing Google could read.
His site was built on an AI website builder. The content existed, but only after JavaScript ran in a browser. Googlebot was looking at the same empty shell I was.
The view-source test takes 30 seconds and saves months
I now run this check on every new client site before any other work begins. Right-click, View Page Source, look at what is actually in the HTML body. If the content you can see in the browser is missing from the source, the site is client-side rendered with no server-side rendering configured. Google sees the empty shell.
Then I confirm it inside Google Search Console using the URL Inspection tool. Hit Test Live URL, then View Tested Page, then look at the HTML Googlebot rendered. If that HTML is missing the headlines and body copy that exist on the live page, you have your answer.
Why this category is exploding right now
The AI website builder space has 2 things working at once. The tools have gotten good enough that a non-technical founder can ship a usable v1 in an afternoon. And the tools default to client-side rendering because it is cheaper to host and faster to iterate on.
Most of the popular AI builders run Vite plus React under the hood. Vite is a development server. React is a JavaScript UI library. Together they produce sites where the HTML file shipped to the browser is essentially empty and the actual content is constructed in JavaScript after page load. A human in Chrome sees the page render in 200ms and thinks everything is fine. Googlebot sees an empty shell, tries to render the JavaScript, often fails or partially fails, and indexes nothing.
Google has gotten better at rendering JavaScript over the past 5 years. The official line is that Googlebot can execute JS. The reality I see on client sites is messier. Render budgets are real. Failed renders are silent. And even when rendering works, it adds days or weeks to the indexation timeline because Google holds JS pages in a second-pass rendering queue.
The 4 builders I see most often on incoming clients
| Builder | What it ships | SEO outcome |
|---|---|---|
| Lovable | Vite + React, CSR by default | Empty HTML body, content invisible to Googlebot |
| Bolt.new | Vite + React, CSR by default | Same. Content loads via JS only. |
| v0 (Vercel) | Next.js, SSR available but not always configured | Mixed. Depends on how the founder shipped it. |
| Replit Agent | Varies, often Vite or Express + frontend JS | Almost always CSR unless explicitly configured otherwise |
v0 is the exception that proves the rule. Vercel ships v0 on top of Next.js, which supports server-side rendering and static site generation natively. A v0 site can be configured correctly. Most founders do not configure it. They prompt their way to a working UI and deploy. The result is often the same CSR-only output as the other builders.
What this looks like in Google Search Console
The diagnostic pattern is consistent. Pages submitted via sitemap. Pages discovered but not indexed. Pages crawled but not indexed. Total indexed count flat at 1 or 2 URLs no matter how many you ship.
Before placing any keyword on any page, I run 3 checks: does the keyword match the product and location in reality, would the searcher be satisfied landing here, and does the SERP confirm the intent. On a CSR-only site, none of those checks matter. The pages do not exist in Google's index. The content might be perfect. The keyword targeting might be perfect. Google cannot read any of it.
Why "Request Indexing" will not save you
The most common mistake when fixing crawled-not-indexed pages is clicking Request Indexing on every URL without changing the page first. Google already crawled the page and rejected it. Asking again on an unchanged page gets the same answer.
On a CSR site, the page has not changed between requests. The HTML body is still empty. Hitting Request Indexing 47 times does not change what Googlebot sees. The fix is structural, not procedural.
The fix is a rebuild, and I quote it upfront now
I used to discover this problem in month 2 of a retainer, after the content programme had already started producing pages that would never index. The conversation with the client was painful. They had paid for content. The content was good. None of it was getting indexed. The fix was rebuilding the site on a stack that pre-renders content, which they had not budgeted for.
Now I run the view-source test on every prospect before scoping. If the site is CSR-only, the rebuild is part of the onboarding quote, not a surprise bill 3 months in. The honest version of the proposal includes the truth that the existing site cannot rank, regardless of how much content we add to it.
The rebuild stack depends on the use case. For e-commerce, Shopify with a custom theme or headless Shopify on Next.js. For service businesses and content sites, Next.js with SSG. For founders who want to keep iterating visually, Framer or Webflow both pre-render and both index cleanly.
The takeaway for any founder who shipped on an AI builder
Test before you scale. Open your homepage source. Look at the body. If the content is missing, your site is invisible to Google no matter how much you publish. No amount of SEO work, content production, or backlink building changes that. The foundation has to render server-side.
1 month of SEO work on a CSR-only site produces zero indexable pages. 3 months produces zero indexable pages. 12 months produces zero indexable pages. The compounding only starts after the foundation is fixed. AI builders are excellent for shipping a v1. They are not a permanent stack for a business that wants organic search to be a channel.
Can you fix it without a full rebuild?
Sometimes. Two middle-ground options exist before you commit to rebuilding from scratch.
The first is a prerendering service like Prerender.io. These sit in front of your site, render the JavaScript on a server, and serve the finished HTML to crawlers while regular visitors still get the client-side version. It works, but it adds a monthly cost, another point of failure, and a cache you have to keep fresh. I treat it as a bridge, not a destination.
The second is moving the same content onto a host that pre-renders by default. If your builder runs on Next.js, you can often switch a page to static generation or server rendering without throwing away the design. Framer and Webflow both pre-render every page, so migrating the content there fixes the foundation while keeping the visual workflow a non-technical founder wants.
The full rebuild only becomes necessary when the builder gives you no server-rendering path at all, which is the case with most Vite and React output from Lovable and Bolt today.
What to do this week if your site is not indexing
Run these 5 steps in order. The first 3 are free and take under an hour.
- Open your homepage, right-click, and choose View Page Source. If your headlines and body copy are missing from the HTML, the content is client-side rendered.
- Open Google Search Console, paste the URL into URL Inspection, hit Test Live URL, then View Tested Page, and read the rendered HTML. Confirm the same gap. The full diagnostic walkthrough lives in our guide on how to fix a page that is not indexed.
- Check the Pages report in Search Console. A flat indexed count of 1 or 2 URLs while you keep shipping pages is the signature of a rendering problem, not a content problem.
- Pick a fix path: prerendering bridge, migration to a pre-rendered host, or full rebuild. Match it to whether your builder exposes a server-rendering option.
- Only after the HTML actually contains your content, request indexing and resubmit the sitemap. Doing this before the fix wastes your daily request quota.
Frequently asked questions
How do I know if my website is client-side rendered?
Right-click your live page and choose View Page Source. That shows the raw HTML the server sent, before any JavaScript runs. If the headlines, paragraphs, and product copy you see in the browser are missing from that source, the page is client-side rendered and a crawler sees an empty shell.
Can Google index a JavaScript or React site at all?
Yes, but with conditions. Googlebot can execute JavaScript, and it holds JS-dependent pages in a second rendering pass that can add days or weeks to indexing. Render budgets are finite and failed renders are silent, so a site that depends entirely on client-side JavaScript indexes slowly and unreliably, if at all (Google Search Central).
Will sites built on Lovable, Bolt, or v0 ever rank on Google?
Only after the content is served as real HTML. v0 runs on Next.js and can be configured to pre-render, so a correctly shipped v0 site can rank. Lovable and Bolt default to client-side rendering with no server pass, so their default output cannot rank until you move the content onto a pre-rendered stack.
Does adding a sitemap fix the indexing problem?
No. A sitemap tells Google which URLs exist. It does nothing about what those URLs contain. If the HTML body is empty, submitting a sitemap just helps Google discover more empty pages faster.
Is a full rebuild the only fix?
Not always. A prerendering service can serve rendered HTML to crawlers as a bridge, and content built on Next.js can often switch to static or server rendering without a rebuild. A full rebuild is only forced when the builder gives you no server-rendering path.
How long does indexing take after I switch to server-side rendering?
Once the HTML contains your content, most pages index within 1 to 3 weeks, faster on an established domain. Request indexing in Search Console and resubmit your sitemap to speed up the first crawl.
Does this problem also affect AI search visibility?
Yes. ChatGPT, Perplexity, and Google AI Overviews pull from content they can read. A client-side-rendered page that a crawler sees as empty is invisible to AI engines for the same reason it is invisible to Google. Fixing the rendering foundation is step 1 for both. See our work on generative engine optimization for the AI search side.
Liam Lytton is the founder of The 66th, an SEO and GEO agency in Vancouver that has driven results including 1,500% organic traffic growth, 5x revenue, and 4x lead volume for clients across North America.