All SEO News

Published on 7 October 2026Nicolas Sacotte

Checking JavaScript Rendering: What Google and AI Crawlers Actually See

A page can look flawless in the browser and yet appear almost empty to crawlers. The reason is JavaScript: many modern websites initially deliver only an HTML shell and assemble the actual content in the browser. Google has handled this for years, though not without risk. The crawlers behind ChatGPT, Claude or Perplexity are a different matter: as things stand, they do not execute JavaScript. Whatever is absent from the delivered HTML simply does not exist for them. Whether your own site is affected can be checked in two minutes.

The Two-Minute Test: What Does the Delivered HTML Contain?

The test requires no tool, only Chrome. It shows the HTML that the server delivers before JavaScript has changed anything. This is exactly the version every crawler sees first, and many never see any other.

  1. Open the page in Chrome.

  2. Right-click on the page, select Inspect, switch to the Network tab and click the Doc filter.

  3. Reload the page, click the page name on the left and open the Response tab on the right.

  4. Use CTRL+F (Mac: CMD+F) to search for something important: the main heading, a service description, a price, an FAQ answer.

If the searched text appears, it is present in the delivered HTML. If it is missing despite being visible in the browser, it was inserted afterwards via JavaScript.

For an even quicker check: CTRL+U opens the page source and shows the same raw HTML.

The Catch: The Elements Tab Shows Something Different

A common mistake occurs immediately after clicking "Inspect". The Elements tab does not show the delivered HTML but the finished DOM after JavaScript has run. Everything is always present there. For the purposes of this check, only the Response in the Network tab or the page source counts.

One further note on context: the test shows what the server sends to your own browser. If a website delivers different content to bots, or if a firewall blocks certain crawlers, this will not be apparent here. More on that below.

What JavaScript Rendering Means

Rendering is the step in which code becomes a finished page. The browser loads HTML, CSS and JavaScript, executes the scripts and builds the DOM from them — the structure that ultimately appears on screen.

On a traditional website, this step is unremarkable. The HTML from the server already contains headings, text and links. JavaScript adds at most a menu or a slider.

On many modern websites, the opposite is true. The server sends an almost empty shell with a reference to a JavaScript bundle. Only the script then fetches the content via an API and writes it into the page. In the source code, this looks roughly like:

<body>\n <div id="root"></div>\n <script src="/assets/app.4f2a.js"></script>\n</body>

There are therefore two versions of every page:

  • Raw HTML: what the server delivers as a response.

  • Rendered HTML: what is present in the browser after JavaScript has executed.

Users always see the second version. A crawler only sees it if it brings its own browser and executes JavaScript. This consumes processing time, and that is precisely why many bots skip this step.

CSR, SSR, SSG: Where Content Is Assembled

Whether a page includes content in its raw HTML depends on where it is assembled. This is described by the rendering model.

Client-Side Rendering (CSR) means: the page is assembled in the visitor's browser — on the client. The server delivers only the empty shell and the script. This is the default mode of classic single-page applications built with React, Vue or Angular. CSR is therefore the cause of exactly the problem the test above reveals.

Model

Where is the HTML assembled?

What is in the raw HTML?

Typical use

CSR (Client-Side Rendering)

In the browser, via JavaScript

Empty shell plus script

Logins, dashboards, web apps

SSR (Server-Side Rendering)

On the server, on every request

Full content

Shops, portals, frequently changing content

SSG (Static Site Generation)

At build time, once in advance

Full content

Guides, blogs, landing pages

Prerendering

In advance via a headless browser

Full content as a snapshot

Retrofitting existing SPAs

Frameworks such as Next.js, Nuxt or SvelteKit support SSR and SSG out of the box. Importantly, a modern framework alone is no guarantee. Even in a server-rendered page, any content that a component fetches from an API after loading will be absent from the HTML.

CSR is therefore not inherently wrong. For everything behind a login, visibility is irrelevant. It becomes critical for pages that need to be found and cited.

How Google Handles JavaScript

According to its own documentation, Google processes JavaScript pages in three phases:

  1. Crawling: Googlebot fetches the URL, reads the raw HTML and collects the links from href attributes.

  2. Rendering: Pages with status code 200 enter a render queue. Once resources are available, a headless Chromium executes the JavaScript.

  3. Indexing: Google indexes the rendered HTML and sends the links found there back into the crawl queue.

This works reliably in most cases. Nevertheless, the detour via rendering has weaknesses that SEOs should be aware of:

  • Time delay: According to Google, a page often spends only seconds in the queue, but it can take longer. Content and links that only exist after rendering are discovered correspondingly later.

  • No interaction: Google does not scroll or click. Content that only loads after a user action is not seen by Google.

  • Error pages: For status codes other than 200, Google may skip rendering.

  • noindex in the initial HTML: If Google encounters a noindex tag there, rendering may also be skipped. A script that removes the tag afterwards never gets a chance to run.

  • Blocked resources: JavaScript files blocked via robots.txt are not executed by Google.

There is also the simple matter of failure. If a script breaks or an API responds too slowly, the page remains empty for Google while everything looks fine in your own browser.

Google itself draws a clear conclusion from this. Server-side rendering or prerendering remains a good idea, its documentation states: it makes websites faster for users and crawlers, and not all bots can execute JavaScript.

At least it is possible to check what Google has received. The URL Inspection tool in Search Console shows the rendered HTML along with a screenshot under View Crawled Page. The Rich Results Test does the same for any URL.

AI Crawlers: No JavaScript, No Second Pass

For most AI crawlers, the rendering stage is currently absent entirely. They fetch the raw HTML and work with whatever is in it. There is no queue for a later second pass.

The most important source of data is an analysis by Vercel and MERJ from December 2024. It evaluated access logs across the Vercel network, including 569 million requests from GPTBot and 370 million from Claude in a single month. The finding: none of the major AI crawlers renders JavaScript. ChatGPT and Claude do download JavaScript files (11.5% and 23.84% of their requests respectively), but do not execute them.

Crawler

Operator

Executes JavaScript?

Googlebot (also for Gemini)

Google

Yes

Applebot

Apple

Yes

GPTBot, OAI-SearchBot, ChatGPT-User

OpenAI

No

ClaudeBot

Anthropic

No

PerplexityBot

Perplexity

No

Meta-ExternalAgent

Meta

No

Bytespider

ByteDance

No

CCBot

Common Crawl

No

Little has changed since then. Search Engine Journal still lists GPTBot, ClaudeBot, PerplexityBot and CCBot as crawlers without JavaScript rendering as of April 2026. Glenn Gabe demonstrated in a case study in August 2025 what this means in practice: ChatGPT, Perplexity and Claude were simply unable to find client-side rendered content on a website.

Direct Page Retrieval Also Reads Only Raw HTML

An interesting test by Andre Alpar from June 2026 is worth noting. He gave twelve AI assistants a URL in the chat. The raw HTML contained an incorrect value; the correct one was only inserted via JavaScript.

ChatGPT, Claude, Gemini, Perplexity, Meta AI and Microsoft Copilot all returned the value from the raw HTML. Only DeepSeek, ERNIE, Qwen, Kimi and Mistral returned the correct value. Gemini was particularly surprising, reading only the raw HTML despite Google's rendering infrastructure.

The test is a snapshot with one website and one prompt per assistant. It does, however, fit the broader picture.

Why Blanket Statements Still Fall Short

"AI ignores JavaScript entirely" is a claim one often encounters. It is not quite that simple:

  • Google's AI answers in search are built on the search index, which does include rendered content. The live retrieval in the Gemini chat, however, behaved differently in the test.

  • Agentic browsers such as ChatGPT Atlas or Perplexity Comet are real browsers and see the finished page. They operate for an individual user, however, and do not build an index.

  • Data in the HTML can be received even if it is not visibly rendered. Vercel notes that language models can, for example, read embedded JSON from the initial server response.

  • Providers change their systems without announcement. What applies today may be outdated in six months.

In practice, this means: AI crawlers very likely have problems with JavaScript content, but in any individual case one cannot be certain. Assuming the worst case puts you in the right position for all systems.

The Real Problem: No Search Console for AI Crawlers

Google provides a control mechanism. URL Inspection shows in black and white what HTML Google has after rendering. For ChatGPT, Claude or Perplexity, nothing comparable exists. No provider shows website owners what its crawler actually saw at a given URL. Glenn Gabe called for exactly this as early as 2025, under the heading "AI Search Console".

Simply asking the chatbot is only partially helpful. In Alpar's test, Perplexity claimed in the chat that it could not reach the page. According to the server log, its own crawler had already fetched it with status code 200 at that point. Self-reports from assistants are not a measurement.

What remains are checks that replicate crawler behaviour:

  • Check the raw HTML: The two-minute test above is the most important check. Whatever is missing there is very likely also missing for AI crawlers.

  • Disable JavaScript in the browser: In Chrome DevTools, open the command menu with CTRL+SHIFT+P, type "Disable JavaScript" and reload the page. Whatever is still visible works without JavaScript.

  • Fetch via curl: The command fetches the page without a browser and with a bot's user agent. This also reveals whether a firewall or CDN treats bots differently from visitors.

  • Crawl without rendering: SEO crawlers such as Screaming Frog can crawl a website once without and once with JavaScript rendering. The comparison shows, across the entire site, which content and links only exist in the rendered version.

  • Analyse server logs: Logs show which AI bots are fetching which URLs and what status codes they receive. It is the only place where the actual behaviour of bots becomes visible.

curl -s -A "GPTBot" https://www.example.com/page | grep -i "searched text"

If the command returns no output, the searched text is not present in the delivered HTML. One limitation remains: IP-level blocks are not detected by curl, as the request originates from your own machine.

Common Pitfalls

It is not only pure single-page applications that are affected. On traditionally built websites too, individual pieces of content can quietly disappear from the HTML. The most common cases:

  • Content behind clicks: Tabs, accordions or "Show more" buttons that fetch their text from the server only on click. Content that is present in the HTML but merely collapsed via CSS is not a problem.

  • Lazy loading on scroll: Infinite scroll and text blocks that only load as the user scrolls down.

  • Structured data via Tag Manager: Google can process JSON-LD inserted via JavaScript. Crawlers without rendering never see it.

  • Title, description and canonical via JavaScript: Google adopts the rendered values. Everyone else sees the placeholder from the shell — often the same title for every URL.

  • Internal links without href: Navigation that relies solely on click events. Google only follows genuine links with an href attribute.

  • Embedded widgets: Reviews, prices, availability information or job listings from third-party providers loaded via script.

  • Error pages in SPAs: The router displays "Page not found" but the server responds with status code 200. The result is soft 404 errors.

Structured data and meta information inserted via JavaScript are particularly insidious. Google usually processes them correctly, so nothing appears amiss in Search Console. The problem only becomes apparent when content is missing from AI responses.

What to Do Now

For SEOs, this results in a manageable list:

  1. Test page types: Check one URL per template — homepage, category, product or service page, and guide. For each, look for the H1, key body text, price, FAQ, internal links and JSON-LD.

  2. Move critical content into the HTML: Main content, title, description, canonical, navigation, internal links and structured data all belong in the server response.

  3. Use JavaScript for enhancements: Counters, chat widgets, personalisation and interactive elements can continue to be assembled in the browser. Vercel recommends the same approach.

  4. Clarify the rendering model with development: Plan for SSR or SSG for all indexable page types. For existing SPAs, prerendering can bridge the gap until a full migration.

  5. Check regularly: Re-test after every relaunch, every template change and every new tracking or consent setup.

The last point is most often overlooked in practice. Rendering problems rarely arise at launch; they emerge months later through an inconspicuous change in the frontend. The check therefore needs to be a fixed task with a named owner in every technical audit.

Conclusion

Looking at the raw HTML takes two minutes and answers a question that was long relevant only for Google: does the content arrive without JavaScript?

For Google, JavaScript is a detour with risks. For most AI crawlers, it is currently a dead end. And unlike with Google, there is no tool there to flag problems.

The conclusion is the same one Google has recommended for years: everything that needs to be found and cited belongs in the HTML the server delivers. Anyone who ensures this does not need to bet on which crawler will gain which capabilities and when.

Sources

Nicolas Sacotte, founder of Tasketeer

About the author

Nicolas Sacotte

SEO and GEO expert, Founder of Tasketeer

Nicolas Sacotte is founder of Tasketeer and has worked in search engine optimisation since 1998. He started during his business studies by building and optimising his own websites. Since 2012 he has run the SEO and content marketing agency ContentKing.de and advises companies in the DACH region, including Commerzbank, comdirect, Interhyp, O2, SIXT, BURDA and sevDesk.

Tasketeer grew out of this agency practice: SEO rarely fails for lack of analysis, but because insights never become tasks with owners and deadlines.

He shares his knowledge in workshops, as a speaker at conferences such as SEOday and CAMPIXX, and as an author of specialist articles in Tasketeer SEO News, on contentking.de and in trade magazines such as WebsiteBoosting. He also developed the SEO and GEO training in Tasketeer.

All SEO News

Published on 5 October 2026Nicolas Sacotte

Google Revises Helpful Content Documentation: Main Content Takes Centre Stage

In early October 2026, Google updated its documentation on helpful, reliable, and people-first content. At the heart of the revision is a concept many previously knew only from the Quality Rater Guidelines: Main Content — the core substance of a page. Dr Marie Haynes drew attention to the changes in a detailed analysis. Her argument: anyone who wants to understand what Google's ranking systems reward will find more guidance in this document than in any list of ranking factors.

Read article

Published on 2 October 2026Nicolas Sacotte

Google Search Console: New Multimodal Filter Reveals Visual Search Data

Google Search is becoming increasingly visual. Users have long since moved beyond text-only queries, now searching with photos, screenshots, or directly via their smartphone camera. Google has continued to drive this shift this year, integrating images, videos, and Chrome tabs into its AI-powered search experience. The problem until now: how much reach and traffic is generated through such multimodal searches was barely measurable in Search Console as a separate category. That is about to change. Google is introducing a new reporting feature for multimodal web search and has announced the global rollout on LinkedIn.

Read article

Published on 1 October 2026Nicolas Sacotte

Google Spam Update September 2026

Google's Search Quality Team rolls out so-called spam updates at irregular intervals alongside the well-known core updates. The target is sites that exploit Google search results through unwanted SEO practices and/or spammy content. The time has come again, and the new spam update has been rolling out since 24 September 2026. Initial effects are already visible — and are currently hitting scaled content projects that generate mass AI content particularly hard.

Read article

Ready to get SEO work in order?

Projects, tasks, Search Console and Analytics in one place. 14-day trial, set up in a few minutes.