Glossary

JavaScript rendering

JavaScript rendering is the practice of building a page's content in the browser rather than sending it complete from the server. The consequence is that the HTML a server returns may contain little more than an empty container, and everything meaningful appears only after scripts have downloaded and executed. Google renders pages and sees that content; a great many other consumers — social platforms, some crawlers, simple HTTP clients — do not.

Who renders and who does not

Google renders pages with a current version of its browser engine, in a second pass after the initial fetch. Content built by scripts is generally indexed, with a delay that varies.

Social platforms fetching Open Graph tags generally do not execute scripts, so tags injected by JavaScript are not seen.

Many smaller search engines, aggregators, monitoring tools and HTTP clients do not render either.

Assistive technology renders, because it works through the browser — so client-side rendering is not an accessibility problem in itself, though the patterns that accompany it frequently are.

What breaks when nothing renders

The title, meta description, canonical tag and Open Graph tags, if they are set by scripts rather than served.

Links, if navigation is implemented with click handlers rather than anchor elements with `href` attributes. A crawler that does not render finds no links at all and discovers nothing.

Structured data injected after load, which some consumers read and others do not.

The status code is a separate matter: a client-side router that renders a not-found view under a 200 response is a soft 404 regardless of rendering.

Anything reading the page without a browser at all: a script checking whether a price changed, a feed reader, a monitoring check asserting that a phrase appears on the page.

The approaches that avoid the problem

Server-side rendering: the server returns the complete HTML and scripts take over afterwards. The page is correct for every consumer from the first byte.

Static generation: pages are built ahead of time and served as files, which is the same benefit without a rendering server.

Hybrid approaches, where the content that matters is served and only interactive parts are built in the browser.

Whichever is chosen, the test is the same: what does the HTML contain before any script runs?

How to check what is served

`curl -s https://example.com/page` returns exactly what the server sent. If the meaningful content is not in that output, it does not exist for anything that does not render.

Compare it against the rendered DOM in the browser's element inspector. The difference is precisely what depends on JavaScript.

Disable JavaScript in the browser and reload. What remains is roughly what a non-rendering consumer sees.

Search Console's URL inspection shows the rendered HTML Google produced, which is the authoritative answer for Google specifically.

Frequently asked questions

Can Google index JavaScript-rendered content?
Yes. Google renders pages in a second pass with a current browser engine. The delay varies, and many other consumers do not render at all.
Why does my shared link show no preview?
Social platform crawlers generally do not execute JavaScript, so Open Graph tags injected by scripts are never seen. They must be in the served HTML.
Do links created by JavaScript get followed?
Only by consumers that render. Navigation built from click handlers rather than anchor elements with href attributes is invisible to the rest.

Sources

Related

VeriFixScan crawls a site and applies its checks to every page it reaches, keeping the evidence behind each finding. Scanning one website is free.

Scan a website