If Your Site Uses Client-Side Rendering, You're Invisible to Every AI Crawler Except Google
Vercel and MERJ tracked over 500 million GPTBot fetches and found something that should concern every site owner relying on client-side JavaScript: zero evidence of JavaScript execution. None. GPTBot downloads JavaScript files 11.5% of the time, but it never runs them.
The same is true for ClaudeBot, PerplexityBot, Meta's ExternalAgent, and Bytespider. Not one AI crawler on the market today executes JavaScript. Only Googlebot renders JavaScript, using headless Chrome in a two-phase indexing system. Bing has partial JavaScript support. Everyone else sees static HTML and nothing more.
If your website is built on React, Vue, or Angular with client-side rendering, your content does not exist in the AI crawlers' view of the web.
Not "performs poorly." Not "partially visible." Does not exist.
No AI crawler renders JavaScript. Period.
This distinction trips up a lot of technical teams, like Radiant Elephant, because they've spent years solving JavaScript SEO for Google. They've implemented dynamic rendering, configured prerendering services, and ensured Googlebot can access everything. Then they assume the same solutions cover AI crawlers.
They don't. AI crawlers fetch raw HTML and move on. They do not trigger events. They do not wait for API calls. They do not run hydration steps. If your headings, body text, product descriptions, FAQ answers, or comparison tables are injected after the initial page load by JavaScript, AI crawlers never capture them.
The Vercel/MERJ data is the largest sample anyone has published on this question. 500 million fetches. Zero JavaScript execution. That's not ambiguous.
The visibility impact is binary, not gradual
Glenn Gabe published a case study demonstrating that client-side rendered content was completely invisible to ChatGPT, Perplexity, and Claude. Not partially indexed. Not underperforming. Invisible.
For sites built on React, Vue, or Angular with client-side rendering, the AI visibility impact is total. The content the framework generates after page load simply doesn't exist in the AI's picture of the web. Every beautifully rendered component, every dynamic product grid, every interactive comparison tool produces nothing for AI crawlers to read.
This isn't a performance optimization problem. It's a binary visibility problem. Your site is either serving content in the initial HTML response (visible) or it's not (invisible). There's no middle ground.
The pages most at risk are typically the highest-value ones: product pages, comparison pages, FAQ and documentation pages, and category pages. These are the pages with the most citation potential, and they're often the most JavaScript-dependent.
Training crawlers vs. search crawlers: know the difference
Separately from the rendering issue, there's a crawler access question most brands need to address.
Seventy-nine percent of top news sites block at least one AI training bot (BuzzStream/Hostinger data). But a growing number are adopting a smarter split strategy: blocking training crawlers (GPTBot, ClaudeBot) while allowing search crawlers (OAI-SearchBot, Claude-SearchBot, PerplexityBot).
The distinction matters. Training crawlers ingest your content for use in future model training. Search crawlers retrieve your content in real-time to generate answers to user queries. Blocking training crawlers means you're opting out of contributing to future model knowledge. Blocking search crawlers means you're opting out of appearing in AI search results.
OpenAI updated its crawler architecture in December 2025 so that OAI-SearchBot and GPTBot now share information to avoid duplicate crawling. Blocking GPTBot only affects future training runs. Previously ingested content remains in the model. But blocking OAI-SearchBot means ChatGPT's search feature can't find your content when users ask questions your site could answer.
Most brands should allow search crawlers and make a deliberate decision about training crawlers based on their content strategy and IP concerns.
How to fix this in your next sprint
Test first. Open your browser, disable JavaScript (Chrome DevTools > Settings > Debugger > Disable JavaScript), and navigate your own site. What you see is what AI crawlers see. If your pages show an empty shell, a loading spinner, or a blank content area, you have a rendering problem.
Migrate to server-side rendering or static site generation. Next.js (for React) and Nuxt.js (for Vue) both support server-side rendering out of the box. Your content gets rendered on the server and delivered as complete HTML in the initial response. AI crawlers see everything. If full SSR isn't feasible, static site generation for your highest-value pages is a pragmatic alternative.
Verify critical content is in the initial HTML response. After migration, check the raw HTML source (View Source, not Inspect Element) for your most important pages. Product descriptions, FAQ answers, key statistics, comparison data, and structured data (JSON-LD) should all be present in the source. If any of it loads only after JavaScript executes, it needs to move server-side.
Configure robots.txt deliberately. Allow OAI-SearchBot, Claude-SearchBot, and PerplexityBot access to your content. Block GPTBot and ClaudeBot (the training crawlers) only if you have a specific reason to opt out of model training. Don't block everything by default.
Monitor AI crawler activity through server logs. There is no Search Console equivalent for AI bots. The only way to confirm AI crawlers are accessing your content is to check your server logs for their user-agent strings. Look for GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot, PerplexityBot, and Bytespider.
This is the most binary tactic in all of GEO. You're either visible or you're not. There's no partial credit. And unlike content optimization (which takes time to compound), fixing a rendering problem produces immediate results. The day your pages start serving complete HTML to AI crawlers is the day those pages become eligible for citation.
I covered server-side rendering alongside 14 other evidence-backed GEO tactics in a full research review synthesizing 12 studies and 17 million citations. This is tactic #8, and it's the one with the clearest pass/fail threshold.