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.
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.
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
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.