In 2026 Googlebot renders JavaScript, but most AI crawlers (ChatGPT, Perplexity, Claude) do not. To be visible in both search and AI answers, serve your primary content in server-rendered HTML rather than relying on client-side rendering.
For a decade the JavaScript SEO question was simply "can Googlebot render my page?" In 2026 that question has a second half that matters just as much: "can the AI crawlers?" And for most of them, the answer is no. Here is how rendering really works now and what to do about it.
The rendering gap between Google and AI crawlers
Googlebot renders JavaScript. It fetches your HTML, queues the page, runs a modern Chromium instance, and indexes the resulting DOM. That two-stage process has been reliable for years, so a well-built client-side app can rank in traditional Google search.
The AI crawlers are a different story. The bots feeding ChatGPT, Perplexity, Claude, and Google's own AI systems mostly fetch raw HTML and do not execute JavaScript. They are built for speed and scale across billions of URLs, and running a full browser for each one is expensive. So they read what the server sends and move on.
This creates a rendering gap. A page that Googlebot patiently renders can look completely empty to an LLM crawler. If your content, headings, and links only exist after JavaScript runs, you can rank in Google while being invisible in AI answers, exactly the surface where visibility is growing fastest in 2026.
Two crawler families to keep straight:
- Training/indexing crawlers (e.g. GPTBot, ClaudeBot) that gather content for models and retrieval.
- Live retrieval fetchers that pull a page in real time to answer a specific query. These are the most impatient of all and almost never wait for rendering.
SSR vs CSR: pick the safe default
The architecture choice decides whether your content survives this gap.
- Client-side rendering (CSR). The server sends a near-empty HTML shell plus a JavaScript bundle; the browser builds the page. Great for app-like interactivity, dangerous for crawlability. Non-rendering bots see the empty shell.
- Server-side rendering (SSR). The server returns fully-formed HTML on every request, then JavaScript hydrates it for interactivity. Every crawler gets the content immediately.
- Static site generation (SSG). Pages are pre-rendered to HTML at build time. The fastest and most crawler-friendly option for content that doesn't change per request.
My default recommendation is blunt: serve your primary content in the initial HTML, via SSR or SSG. Reserve pure CSR for genuinely interactive, behind-login, or non-indexable surfaces. If your value is content and you want it in AI answers, it must be in the HTML the server sends.
Hydration pitfalls that quietly break you
Even teams that adopt SSR trip over hydration, the step where client JavaScript "takes over" the server HTML. Watch for these:
- Content that only appears after hydration. If tabs, accordions, or "read more" sections inject their real text via JavaScript, non-rendering crawlers miss it. Put the full text in the server HTML and toggle visibility with CSS.
- Hydration mismatches. When server and client HTML disagree, some frameworks discard the server markup and re-render on the client, briefly recreating a CSR problem. Keep server and client output identical.
- Streaming and partial hydration edge cases. Modern frameworks stream HTML in chunks. Make sure the meaningful content ships in the initial document, not in a late-arriving async boundary.
- Client-only routing. If internal navigation happens entirely in JavaScript with no real
<a href>, crawlers can't follow it. Always render genuine anchor tags with real URLs.
Make content crawlable for both
A practical checklist I apply to every JavaScript-heavy site:
- Put the core content server-side. Main copy, H1–H3, product details, and internal links belong in the raw HTML.
- Use real links.
<a href="/real-url">, not<div onclick>. This is how both Google and LLM crawlers discover your site. - Render metadata on the server. Title, meta description, canonical, and structured data (JSON-LD) should be present without JavaScript.
- Don't block resources in robots.txt. If you rely on Googlebot rendering, it needs your CSS and JS. Blocking them breaks the render.
- Add structured data. Schema.org markup helps every parser, and clean, well-labeled HTML is what LLMs extract most reliably.
- Keep an eye on crawler access. Decide deliberately whether to allow AI crawlers. Blocking them in robots.txt is a visibility trade-off, not a neutral default.
How to test what crawlers actually see
Stop trusting the rendered view in DevTools. That shows the post-JavaScript DOM, which is what Googlebot sees but not what raw fetchers see. Instead:
- View raw source. Use
curl -A "Mozilla/5.0" https://yoursite.com/pageor your browser's View Source (not Inspect). Confirm your main text, headings, and links are present in that HTML. - Compare against the rendered DOM. The delta between raw source and rendered DOM is exactly what JavaScript-dependent crawlers miss.
- Use Google's URL Inspection tool in Search Console to see Googlebot's rendered HTML, and disable JavaScript in your browser to simulate a non-rendering bot.
- Check your server logs for AI crawler user agents to learn who is actually fetching you and how often.
The gap between View Source and the rendered DOM is your AI-visibility risk in a single measurement. If your content lives only in the rendered DOM, you have work to do.
The takeaway
In 2026, rendering is no longer a Google-only concern. Googlebot will run your JavaScript, but the AI crawlers deciding whether you appear in ChatGPT and Perplexity answers usually won't. Serve your real content in server-rendered HTML, use real links and server-side metadata, and test with View Source rather than DevTools. Do that and you are legible to every system that matters, not just the one that happens to run a browser.
FAQ
Do AI crawlers execute JavaScript in 2026?
Mostly no. Googlebot renders JavaScript, but the crawlers behind ChatGPT, Perplexity, and Claude generally fetch raw HTML and skip client-side rendering. Content that only appears after JavaScript runs is often invisible to them.
Is SSR or CSR better for SEO and AI visibility?
Server-side rendering (SSR) or static generation is safer because the full content is in the initial HTML for every crawler. Client-side rendering (CSR) risks empty pages for bots that don't execute JavaScript, including most LLM crawlers.
How do I check if my content is crawlable without JavaScript?
View the raw HTML with curl or your browser's "View Source," not the rendered DOM in DevTools. If your main text, links, and headings are missing from that source, JavaScript-dependent crawlers cannot see them.
Occasional notes on SEO & GEO. No spam.