
Introduction
There is a gap between what Googlebot sees on your site and what ChatGPT, Claude, and Perplexity see. For the last five years, “Google renders JavaScript eventually” was good enough for most teams — the search bot queued a second pass, executed the JS, and indexed the result. That compromise does not extend to the AI crawlers.
Every major AI crawler tested in 2026 — GPTBot, ClaudeBot, PerplexityBot, ChatGPT-User — fetches the raw HTML, extracts what is there, and moves on. No JavaScript execution. No second pass. If your content only appears after JS runs, AI assistants see an empty page and your site does not get cited. For teams building React or Next.js sites that expected Google's rendering to cover everything, this is a material, measurable regression in visibility that needs a fix, not just a note in a backlog.
This post walks through what changed, how to verify what AI crawlers actually see on your site, and how to configure Next.js (or any SPA-style stack) so the content that matters ships in the initial HTML.
Key Takeaways
- AI crawlers like GPTBot, ClaudeBot, and PerplexityBot fetch raw HTML only — they do not execute JavaScript at all
- Googlebot still renders JavaScript, but that is no longer a sufficient strategy because a meaningful share of searches involve some AI-generated answer component
- Two-minute audit: curl your page with a neutral user agent, then grep for the content you want cited. If it isn't in that response, AI bots aren't seeing it either.
- For Next.js: favor SSR or SSG for content-critical routes; reserve CSR for authenticated or highly interactive UI
- The 2 MB HTML resource ceiling that Googlebot enforces still applies — bloated bundles can cause partial indexing even for rendered pages
What Actually Changed in AI Crawler Behavior?
The pattern was clear enough by early 2026 that multiple independent studies converged on the same finding. Search Engine Land's April 17, 2026 coverage cites a Vercel analysis of over 100,000 Googlebot fetches from July 2024, all of which resulted in full renders, including on JavaScript-heavy sites. But the same piece quotes a Vercel finding that “most AI crawlers don't execute JavaScript; none of them render client-side content.” That two-sentence gap is the whole story.
Independent sources confirm it. Lantern's technical review of AI crawler behavior analyzed over 500 million GPTBot fetches and reports zero evidence of JavaScript execution. Passionfruit's 2026 SPA visibility analysis documents the same pattern for ClaudeBot and PerplexityBot: fetch once, parse raw HTML, do not wait for rendering, do not retry. Glenn Gabe's case-study write-up at GSQI shows real client examples where content buried behind React hydration literally vanished from AI answers despite ranking normally on Google.
The behavioral difference has a technical root. Googlebot runs a headless Chromium instance and queues a second pass specifically to execute JavaScript. Search Engine Land's coverage includes a quote from Zoe Clifford on Google's rendering team: “We just render all of them, as long as they're HTML, and not other content types.” AI crawlers were built with a narrower mandate — retrieve text content cheaply at scale to inform answer generation — and the cost of maintaining a rendering pipeline for every bot is apparently not something OpenAI, Anthropic, or Perplexity have prioritized.
This matters because AI crawler traffic is no longer a rounding error. Our post on the AI bot traffic surge for small businesses covers the broader volume story, and Search Engine Land's log-file analysis coverage breaks down the behavioral patterns: AI training crawlers operate sporadically but deeply, while retrieval bots like ChatGPT-User and PerplexityBot are event-driven and target a narrow set of URLs. If any of those fetches returns an empty <div id="root">, you are not going to be cited for that topic for a while.

How Do You Actually Test What AI Crawlers See?
Before you fix anything, verify the problem exists on your site. The two-minute test is a plain curl with a neutral user agent, followed by a search through the response for content you expect to be cited.
curl -A "Mozilla/5.0 (compatible; ChatGPT-User/1.0)" \ -L -s https://yourdomain.com/your-important-page/ \ > /tmp/raw.html # Did the page body actually render into HTML? grep -o '<h1[^>]*>[^<]*</h1>' /tmp/raw.html grep -c 'your-expected-content-phrase' /tmp/raw.html wc -c /tmp/raw.html
What you want to see: your H1, the body copy you expect to be cited, and a file size somewhere in the tens-to-hundreds of kilobytes range. What signals trouble: an empty body, a <noscript> message, a skeleton with only <script src="..."> tags, or a file under 5 KB. Hall's AI crawler rendering guide walks through variations of this check and lists common false-positive patterns (hydration markers that look like content but aren't).
For a more structured view, the approach in our log file analysis for AI crawlers guide layers real-world bot traffic on top. If GPTBot is fetching a URL but the rendered text in your logs is empty, you have confirmed the problem at both ends.
A few additional checks worth running:
- Disable JavaScript in a browser DevTools and reload your key pages. If the visible content collapses to a spinner, a skeleton, or an empty div, that is exactly what every AI crawler is seeing.
- View source, not inspect. “View source” shows the raw HTML the server sent. “Inspect” shows the post-JS rendered DOM. The gap between the two is your no-JS visibility problem.
- Check your canonicals. Search Engine Land's coverage notes that 2–3% of rendered pages show changed canonical URLs between raw and rendered versions — if your canonical is being injected by JavaScript, AI crawlers are reading a different, often missing, signal than Googlebot does.

What Should Next.js Sites Do About This?
Next.js gives you four rendering options per route: SSR, SSG, ISR, and CSR. For content that should be cited by AI engines, only three of those are viable, and only two are safe.
Static Site Generation (SSG) is the safest choice for content pages. At build time, Next.js produces fully rendered HTML that is served directly. Every crawler — AI or otherwise — gets the full content on the first request. For blog posts, marketing pages, service pages, and documentation, SSG is almost always the right default. The Next.js official rendering strategies documentation treats SSG as the preferred path for content-heavy public pages for this reason.
Server-Side Rendering (SSR) produces the HTML on each request. It is appropriate for content that needs to be personalized or fresh per-user (prices, inventory, dashboards that also need SEO). It comes with the scaling cost of per-request render time, but it ships complete HTML to the crawler. For most small-business sites, SSR is over-engineered for content pages, but correct for transactional flows that should still be indexed.
Incremental Static Regeneration (ISR) is the pragmatic middle ground and, for sites like ours, the one we most often recommend. ISR pre-renders pages at build, then revalidates them in the background at a configured interval. You get SSG's crawler friendliness with SSR's freshness, at much lower runtime cost. Our Next.js best practices guide covers the common ISR patterns in more detail.
Client-Side Rendering (CSR) — where the initial HTML is a shell and content is fetched after JS executes — is the mode that breaks AI crawler visibility. Reserve it for routes that genuinely cannot be rendered without a user session: account dashboards, complex interactive tools, real-time chat. For public, content-carrying routes, CSR is now actively harmful for visibility.
Jasmine Directory's 2026 framework rendering analysis lays out the same hierarchy for other frameworks — Nuxt for Vue, Angular Universal, SvelteKit — with effectively the same guidance. Our piece on Next.js, Svelte, or Astro covers the framework-selection side of this decision for new builds.
A Practical Fix List for an Existing Next.js Site
If you have an existing Next.js codebase, the retrofit path is usually more surgical than a rewrite. Here is the prioritized list we use with web development clients.
| Priority | Check | Fix |
|---|---|---|
| High | Landing pages, service pages, blog posts | Convert to SSG (getStaticProps / generateStaticParams) |
| High | Pages with client-only data fetching for critical content | Move data fetching server-side via getServerSideProps / server components |
| Medium | Dynamic routes with frequent updates | Add ISR with a sensible revalidate value |
| Medium | Canonical tags injected by next/head via effects | Move canonical into static metadata or server-rendered head |
| Medium | Internal navigation requiring JS to reveal links | Render primary nav links in initial HTML, not conditionally |
| Low | Tabs, accordions, modals with unique content | Add HTML fallbacks or progressive enhancement; don't hide content behind UI state |
| Low | Third-party components loading via dynamic imports | Pre-render above-the-fold content; lazy-load only below-the-fold |
Two constraints from Search Engine Land's coverage worth keeping in mind: Googlebot enforces a roughly 2 MB HTML page size cap and the same limit on individual resources like CSS, JavaScript, and image files. Exceeding these can cause partial indexing even for content that does render. AI crawlers have no official published limits, but conservative testing suggests similar ceilings apply. If your rendered HTML is over 1 MB, that alone is worth an audit.
Our web performance optimization guide covers the bundle-size side of this — code splitting, tree shaking, route-based chunks — which complements the rendering-mode work directly.

Progressive Enhancement and Supporting Signals
The old “HTML first, JavaScript as enhancement” pattern is quietly resurgent in 2026 for exactly the reason this post exists. The discipline is simple: write your pages so the core content, navigation, and primary calls-to-action work without JavaScript, and layer interactivity on top for the client experience.
In Next.js specifically, this often looks like:
- Server Components by default, Client Components by exception. The Next.js App Router's server component model aligns naturally with progressive enhancement — JavaScript ships only when it is genuinely needed for interactivity.
- Forms with
actionattributes and server actions. These work without JS and get progressively enhanced client-side for smoother UX. - Links as
<a href="">with client-side navigation as enhancement. The<Link>component handles this automatically, but custom “smart buttons” usingonClickhandlers to navigate often don't — which means AI crawlers cannot follow them. - Content visible, decoration added. Skeleton loaders, fade-in animations, and lazy-loaded rich media can all sit on top of content that is already in the HTML.
The Glenn Gabe AI rendering case study notes that one of the most common real-world failures is an e-commerce product page where product titles and descriptions are fetched client-side from an API. The fix is rarely a rewrite — it is moving that data fetch into a server component or getStaticProps, so the page ships with content in the initial HTML and hydrates into an interactive experience afterward.
Fixing rendering is the prerequisite. A few complementary signals help AI crawlers actually find and prefer your content once it is visible. The first is a well-maintained llms.txt file — covered in our LLMs.txt for AI discoverability piece — which acts as a front-door manifest for AI engines. The second is stable, clean canonicals set server-side. The third is sitemap hygiene: AI crawlers tend to rely on sitemaps more heavily than human-facing search engines because they do not do the same level of link-following.
As Search Engine Land's log-file analysis piece points out, pages buried behind JavaScript-heavy navigation or weak internal linking are significantly less likely to be reached by AI crawlers at all. So even with SSR in place, site architecture still determines whether the bot finds your newly rendered content.

A Fort Wayne Lens: What Small Business Sites Actually Need
Most Fort Wayne and Northeast Indiana small-business sites are not bleeding-edge React SPAs. They are WordPress, Squarespace, Wix, Webflow, or older custom builds. The good news: most of those render HTML server-side by default, so the raw no-JS visibility story is usually intact. The nuances that trip up local sites are usually more mundane:
- Chat widgets and booking tools that replace the contact area on mount. If your core “Call us / Get a quote” block is replaced by a JS-injected widget, the version an AI crawler reads may have no call-to-action at all.
- Review sliders that only load on interaction. Review content is prime AI-citation material; if it's tucked behind a “Load reviews” button that fires a fetch, it's invisible.
- Progressive menus on mobile that collapse all internal navigation into a JS-driven drawer. The drawer links still need to be in the source HTML.
For Fort Wayne remodelers, HVAC companies, law firms, and clinics, the practical audit takes under an hour: curl your top five pages as a neutral user agent, verify your main H1, service descriptions, calls-to-action, and reviews are present in the raw response. If any are missing, fix the specific widget or component, not the whole site.

Ready to Audit What AI Crawlers See on Your Site?
We help Fort Wayne and Northeast Indiana businesses audit their sites for AI-crawler visibility and implement server-side rendering fixes in Next.js, WordPress, and custom stacks. Our web development team can run the audit, prioritize fixes by citation impact, and ship the implementation.
Frequently Asked Questions
Frequently Asked Questions
- Do AI crawlers ever render JavaScript?
- Based on testing reported across multiple independent sources through early 2026, the major AI crawlers — GPTBot, ClaudeBot, PerplexityBot, and ChatGPT-User — do not execute JavaScript. They fetch the raw HTML, extract text content, and move on. This is different from Googlebot, which runs a headless Chromium instance and queues pages for JavaScript rendering on a second pass. If new AI crawlers emerge with JS rendering, that would be worth retesting — but planning around current behavior means assuming no JS execution.
- Is client-side rendering (CSR) still acceptable for any pages in 2026?
- Yes, for pages that are genuinely private or interactive and are not meant to be discovered in search or AI engines. Authenticated dashboards, internal tools, in-app chat interfaces, and highly interactive calculators or configurators are reasonable CSR candidates. Public content — blog posts, service pages, product pages, landing pages — should not be CSR-only.
- How do I convert a CSR Next.js page to SSR or SSG?
- For most content pages, the lowest-friction path is to move data fetching from useEffect hooks into getStaticProps (for SSG), getServerSideProps (for SSR), or server components (in the App Router). The change is often fewer than 30 lines per page. The harder part is auditing which components in your tree need to become server components and which can stay as client components — lean toward server components for anything that does not need browser APIs or interactivity.
- Does this apply to WordPress, Squarespace, or Wix?
- Yes, and this is where most Fort Wayne and Northeast Indiana small-business sites actually live. Most WordPress, Squarespace, and Wix themes render HTML on the server by default, so raw no-JS visibility is usually fine out of the box. The common failure points we see on local sites are third-party plugins and page builders that inject content client-side, chat widgets that replace the "Call us / Get a quote" block on mount, and review or testimonial carousels that lazy-load reviews via JavaScript. The fix is typically to replace the offending plugin or configure it for server-side rendering rather than migrating the whole site.
- How big is the actual business impact of fixing this?
- It varies sharply by site and category. Sites with heavy CSR on content pages that then added server rendering have reported meaningful increases in AI citation frequency within weeks; sites that were already mostly server-rendered see smaller gains. Because AI-sourced traffic is still a modest share of total traffic for most SMBs, the near-term revenue impact can be limited — but the trend line of AI-sourced buyers is rising, and sites that fix this in 2026 are ahead of the curve for 2027.
- How do I verify an AI crawler has actually re-indexed my page after a fix?
- The most reliable method is log-file analysis: watch for the specific crawler user agent hitting the URL after your change, then monitor whether your brand or page starts appearing in relevant AI answers over the following 2–6 weeks. Manual spot-checks on 10–15 buyer-intent prompts in ChatGPT, Claude, and Perplexity after a fix will often reveal early signal. Full re-indexing timelines vary by crawler; training crawlers like GPTBot update infrequently, while retrieval crawlers like ChatGPT-User and PerplexityBot react within days.
- Does Core Web Vitals still matter if I am focused on AI crawlers?
- Yes, though the relationship is indirect. AI crawlers do not measure LCP or CLS directly, but the same engineering that drives strong Core Web Vitals — server rendering, lean bundles, efficient resource delivery — also produces the crawler-friendly HTML that AI engines need. Investment in performance and investment in AI-crawler visibility are largely the same engineering effort in different language.
Sources & Further Reading
- Search Engine Land: No-JavaScript Fallbacks Still Matter in 2026 — primary coverage including Vercel data and the Zoe Clifford quote on Google rendering.
- Search Engine Land: Log File Analysis for AI Crawlers — behavioral patterns for training and retrieval crawlers.
- Lantern: AI Crawlers Do Not Render JavaScript — analysis of 500M+ GPTBot fetches.
- Passionfruit: JavaScript Rendering and AI Crawlers: Can LLMs Read Your SPA? — coverage of ClaudeBot and PerplexityBot behavior.
- GSQI (Glenn Gabe): AI Search and JavaScript Rendering: A Case Study — real client examples of content disappearing from AI answers.
- Hall: Can ChatGPT and AI Crawlers Read JavaScript — practical auditing variations and false-positive patterns.
- Next.js (Vercel): SEO: Rendering Strategies — official guidance for SSG, SSR, ISR, and CSR.
- Jasmine Directory: JavaScript SEO in 2026: Rendering Strategies for Modern Frameworks — cross-framework rendering guidance (Nuxt, Angular, SvelteKit).
