Dynamic Rendering: Serving Crawlers a Rendered Page

Dynamic rendering serves search engines a fully rendered page while giving users the normal app, bridging JavaScript-heavy pages and crawlability.

Quick Definition

Dynamic Rendering is serving crawlers a rendered page and users the app.

What It Is

Dynamic rendering detects who is asking, serving a fully rendered HTML version to crawlers and the normal app to users.

It was a workaround for JavaScript-heavy sites.

Google has called it a temporary measure, but it still solves real problems.

Why It Matters

  • It exposes content that crawlers cannot execute.
  • It keeps the user experience untouched.
  • It protects pages built before modern crawling.
  • It can be removed once rendering improves.
  • It is simpler than rebuilding the whole app.

How to Do It

  • Detect crawlers by user agent and request type.
  • Render the page to HTML for those requests.
  • Cache the rendered output to keep it fast.
  • Make sure the rendered page matches the user version.
  • Test with the tools Google provides.
  • Plan how and when you will retire it.

What to Avoid

  • Cloaking, or showing different content deliberately.
  • Serving stale renders that drift from the app.
  • Rendering every page with no cache.
  • Forgetting non-Google crawlers.
  • Treating dynamic rendering as a permanent fix.

Common Mistakes

  • Detecting crawlers in ways that are easy to fake.
  • Serving the wrong version to real users.
  • Letting the render queue slow the site down.
  • Hiding content a crawler should see and users want.
  • Never testing the rendered output.
Example in Practice

Before: an ecommerce app hides products from crawlers.

After: the team serves rendered HTML to crawlers only.

The result: products get indexed while the app stays the same.

The lesson: dynamic rendering bridges the gap until the app can render natively.

💡

Quick Tip

Use dynamic rendering as a bridge, not a destination, and keep the rendered output exactly aligned with the user experience.

Frequently Asked Questions

Serving a fully rendered page to crawlers while users get the normal JavaScript app.
Only if the versions differ in content; matching versions are a legitimate technique.
Google still supports it but calls it a temporary workaround, not a long-term architecture.
When a JavaScript-heavy site has crawlability gaps that cannot be fixed by improving rendering alone.
As the app and crawlers improve, remove the split and serve one version to everyone.

Dynamic Rendering, in Short

Dynamic rendering serves two audiences from one site.

Give crawlers the rendered truth and users the app.

Keep the versions aligned and the bridge temporary.