CiteStat/Wiki/JavaScript SEO — JS-rendered content for Google and AI crawlers

JavaScript SEO — JS-rendered content for Google and AI crawlers

Technical SEO

TL;DR

Googlebot runs JavaScript in a separate rendering step with headless Chromium. The major AI crawlers (GPTBot, ClaudeBot, PerplexityBot, CCBot) did not run JavaScript in the largest public measurement (Vercel + MERJ, December 2024). Text that only appears after JS runs is invisible to them.

Explain Simply

Imagine a shop that keeps its shelves empty and only puts the goods out when a customer presses a button. Google presses the button, a little later. Most AI visitors never press it: they see empty shelves and leave.

How Google handles JavaScript: Google processes a JavaScript page in three phases: crawling, rendering and indexing. Googlebot queues every 200 page for rendering; "the page may stay on this queue for a few seconds, but it can take longer than that." Then a headless Chromium runs the JavaScript. AI Overviews and AI Mode draw on the same index, and Gemini uses Googlebot's infrastructure, so JS-rendered content can reach Google's AI features.

How AI crawlers handle it: no AI vendor documents JavaScript rendering for its bots. The largest public measurement (Vercel and MERJ, December 2024) found that "none of the major AI crawlers currently render JavaScript": GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, PerplexityBot, Bytespider, Meta-ExternalAgent and CCBot. ChatGPT and Claude did fetch JS files (11.5% and 23.8% of their requests) without executing them. AppleBot did render JavaScript.

What must be in the first HTML response: the main text, the title, the meta description, the canonical, the H1, JSON-LD, and navigation as real <a href> links. Interactive extras can stay client-side.

How to get there: server-side rendering (SSR), static generation (SSG) or pre-rendering. Frameworks such as Next.js, Nuxt and Astro do this by default; a pure single-page app (SPA) does not.

⚡Why It Matters

A page that shows text only after JavaScript runs can rank in Google and still be empty for ChatGPT, Claude and Perplexity, so it cannot be cited in their answers. Google itself recommends server-side or pre-rendering, "because it makes your website faster for users and crawlers, and not all bots can run JavaScript."

🔍How CiteStat Checks

CiteStat fetches the page's raw HTML without running JavaScript, the same view an AI crawler gets, and counts the words visible there. The rules engine flags a page with fewer than 50 such words ("Content should not require JavaScript to render") and suggests server-side rendering below 100 words. It also checks that links are real <a href> anchors, that a single-page app routes with the History API instead of # fragments, and that it returns meaningful HTTP status codes.

CiteStat Score Impact

Rules engine: "Content should not require JavaScript to render" (warning, weight 6), "Consider server-side rendering for JavaScript-heavy pages" (info, weight 5), "Links should be crawlable HTML anchors" (info, weight 8), "Single-page apps should use History API, not fragments" (warning, weight 7), "JavaScript SPAs should use meaningful HTTP status codes" (warning, weight 6).

Fix Difficulty

Editor: Hard | Developer: Medium | AI Agent: Medium