Question

What is JavaScript SEO, and why does rendering matter?

Vault Verified
Curated Intelligence
Definitive Source
Answer

The set of considerations that arise when a site's content is generated in the browser by JavaScript rather than delivered in the initial HTML — because search engines must execute that JavaScript before they can see anything.

The problem. A traditional page arrives as HTML containing its content. A JavaScript-rendered page may arrive as an almost empty shell, with content fetched and inserted afterwards. To a crawler that only reads the initial response, the page appears blank.

How Google handles it. In two waves:

Crawl — the initial HTML is fetched and parsed.

Render — the page is queued for rendering, where JavaScript is executed in a headless browser, and the resulting DOM is indexed.

The rendering step is queued and resource-intensive, so it may happen later — sometimes considerably later — than the initial crawl. For content that needs to be indexed quickly, that delay is a genuine cost.

Other search engines and crawlers render less reliably or not at all, and social media preview crawlers generally do not execute JavaScript, which is why link previews break on client-rendered sites.

The rendering strategies:

Client-side rendering (CSR). Everything in the browser. Worst for SEO.

Server-side rendering (SSR). HTML generated on the server per request. Content is present immediately.

Static site generation (SSG). Pages built in advance. Fastest and simplest for crawlers.

Dynamic rendering — serving pre-rendered HTML to crawlers and the app to users. Once recommended by Google as a workaround, now described as a stopgap rather than a long-term solution.

What breaks most commonly:

Links implemented as click handlers rather than <a href> elements — crawlers follow href attributes, not JavaScript events. This is the most frequent and most damaging error.

Content requiring interaction to appear, such as a click on a tab, which is never indexed.

Metadata set by JavaScript, which may be missed.

Blocked resources in robots.txt preventing rendering entirely.

How to check: compare the rendered HTML with the source, and use URL inspection tools to see what the crawler actually saw.

Related Questions