AI Summary: Dynamic rendering detects crawlers that may not execute JavaScript and serves a rendered HTML version, but Google documents it as a workaround rather than a long-term solution. Prefer server-side rendering, static rendering, or hydration; if a renderer remains necessary, keep user and crawler content materially similar and test the extra failure path.
What dynamic rendering does
Dynamic rendering detects a crawler that may have trouble with JavaScript, sends it to a renderer, and returns server-rendered HTML. The goal is compatibility for a public page, not a second editorial version.
Google calls dynamic rendering a workaround and recommends server-side rendering, static rendering, or hydration as longer-term solutions. Google also notes that JavaScript has limitations in Search and that other search engines may ignore JavaScript-generated content. [1] A renderer adds another server, cache, user-agent decision, and failure mode to operate.
Keep representations aligned
The crawler response and the user response do not need identical bytes, but they should communicate substantially the same content and intent. Serving a pre-rendered article to a crawler and an enhanced version to a user can be reasonable. Serving a different topic to each audience is not. Google says materially different content can be considered cloaking. [1]
Treat user-agent detection as a compatibility signal, not identity proof. Define supported bots, unknown-client behavior, refresh lifetime, and renderer timeout handling. Monitor for stale or incomplete output.
| Check | Evidence to verify |
|---|---|
| Necessity | A documented JavaScript limitation justifies the bridge |
| Similarity | Crawler and user content preserve the same topic and answer |
| Freshness | Rendered output changes when the source content changes |
| Failure | Renderer timeout and origin errors return honest statuses |
| Exit plan | SSR, static rendering, or hydration remains the target path |
Verification checklist
Fetch the URL with a browser, supported crawler user agent, unknown user agent, and JavaScript disabled. Compare status, canonical link, title, H1, answer, links, structured data, and dates. Simulate renderer failure and stale cache.
Dynamic rendering can be a measured bridge for a known compatibility problem. It should not become an excuse to maintain two contradictory versions of a page.