JavaScript SEO: JS vs No-JS Comparison
Diff one page rendered against raw, or read every page of a sitemap as raw HTML. That second view is what GPTBot and ClaudeBot actually get.
Why JavaScript rendering matters for SEO
JavaScript SEO fails because of one thing: Google delays JS execution by hours or days, and AI crawlers like GPTBot and ClaudeBot don't run JavaScript at all. If your React or Vue app renders content in the browser, those bots see an empty <div id="app"> and move on. Your content exists, it's just invisible to half the web.
This JavaScript rendering checker fetches your page two ways: raw HTML and full browser render. It diffs the headings, links, and full text between both versions, so you can see exactly what disappears without JS. If your main content only shows up after client-side rendering, you have an indexing problem. Now you can prove it.
One page at a time is the right depth for a diagnosis and the wrong shape for an audit. Switch to Whole site and it reads every URL in your sitemap as raw HTML and reports what a crawler that never runs JavaScript receives on each one: how many words, whether there is an H1, whether any JSON-LD survives, and whether the page is an empty framework container with the content still in a JSON payload.
How does Google render JavaScript?
Google does render JavaScript, but not the way most developers assume. Googlebot crawls a URL, queues the page for rendering, waits until Google's render service has capacity, then processes it with a headless Chromium. The render queue can take hours on smaller sites, days on larger ones. Bing has similar latency, and AI crawlers like GPTBot and ClaudeBot skip JavaScript entirely. Client-side rendering works for Google. It just works slower.
SSR vs. CSR for SEO
Server-side rendering wins on SEO, full stop. SSR means your server returns fully-rendered HTML to the browser and every crawler, whether or not they execute JavaScript. CSR builds the HTML in the browser, which means anything before the JS runs is a blank shell. SSR is more work for your developers, but it's also the only way to guarantee AI crawlers see your actual content.
Common JavaScript SEO problems
The same patterns show up in every JS SEO audit. Content that only exists in useEffect hooks and never renders for bots. Client-side routing that doesn't update meta tags or the canonical URL. Infinite scroll without a fallback that loads all content at once. Loading states that return a spinner as the visible text. Buttons that trigger a route change without a real href. Each of these is invisible to AI crawlers and makes your page hard for Google to index properly.
What a whole-site scan can and can't tell you
The site mode reads raw HTML only. No browser, no rendering, one unmetered request per page, so a 122-page site finishes in about twenty seconds instead of the twenty minutes a render per page would cost.
That trade buys precision on one question and gives up another. It tells you exactly what a non-rendering crawler receives, because that is literally the bytes it fetched. It cannot tell you what JavaScript would have added, because it never ran any. A page reading 40 words might be a broken React shell or it might be a contact form that genuinely has 40 words.
So the verdict is deliberately narrow. Shell means there is framework evidence and almost no text: an empty #root or #__next container, or a hydration payload sitting next to under 150 words. Thin means little text and no framework at all, which is a content observation and not a rendering bug. When a row looks wrong, open that URL in Compare and render it.
Explore more tools
Crawler Access
Check AI & search crawler access.
Semantic HTML
Check semantic structure & accessibility.
Tech Stack
Detect frameworks & JS libraries.
GEO Readiness
Check if your site is ready for AI search engines.
llms.txt Generator
Create AI crawler guides for your site.
FAQ
Lumina compares JS vs No-JS content automatically and highlights the differences.
Add Lumina to Chrome — Free