Dynamic Rendering
Serving a pre-rendered HTML version of a page to crawlers while delivering a client-rendered version to human visitors of the same URL.
Definition
Dynamic rendering is a setup in which a server detects the requesting user agent and returns server-rendered HTML to search engine crawlers while returning the original JavaScript-driven page to browsers. Google describes it as a workaround rather than a long-term recommendation.
Dynamic rendering emerged as a way to make JavaScript-heavy sites indexable when crawlers struggled to execute scripts. Google states that it was a workaround and not a long-term solution, and now recommends server-side rendering, static rendering or hydration instead. When implemented, dynamic rendering must serve content that matches what users see; serving substantially different content to crawlers can be treated as cloaking. The technique adds operational complexity because it requires a separate rendering pipeline for bots.
Examples
Ecommerce site with JavaScript-rendered product pages
A retailer uses a prerender service that returns static HTML snapshots when the user agent matches Googlebot or Bingbot, while normal visitors receive the React-driven page from the same URL.
Google's guidance on long-term direction
Google's documentation notes that dynamic rendering was a workaround and points teams toward server-side rendering, static rendering or hydration for new builds.
Sources
Related terms
- JavaScript SEOThe practice of making JavaScript-powered websites crawlable, renderable and indexable by search engines.
- Server-Side RenderingA rendering strategy in which the server generates a page's full HTML on each request, rather than leaving the browser to build it with client-side JavaScript.
- IndexingThe process by which a search engine analyses a fetched page and stores information about it so the page can later be returned in search results.
- GooglebotThe generic name for Google's web crawlers — the automated software that discovers and fetches pages for inclusion in Google Search.
Where QueryCatch uses this
Last updated: 12/05/2026