Stay organized with collections
Save and categorize content based on your preferences.
Dynamic rendering as a workaround
On some websites, JavaScript loads additional content when the page is open in a browser.
This is called client-side rendering. Google Search sees this content along with the content in the HTML of a website. Keep in mind that there are some limitations for JavaScript in Google Search
and some pages may encounter problems with content not showing up in the rendered HTML. Other search engines may choose to ignore JavaScript and won't see JavaScript-generated content.
Dynamic rendering is a workaround for websites where JavaScript-generated content is not available to search engines.
A dynamic rendering server detects bots that may have problems with JavaScript-generated content and serves a server-rendered version
without JavaScript to these bots while showing the client-side rendered version of the content to users.
Dynamic rendering is a workaround and not a recommended solution, because it creates additional complexities and resource requirements.
Dynamic rendering requires your web server to detect crawlers (for example, by checking the
user agent). When your web server identifies a request from a crawler that does not support JavaScript or the JavaScript features required to render your content,
this request is routed to a rendering server. Requests from users and crawlers without JavaScript issues are served normally.
The rendering server responds to requests with a version of the content that's suitable to the crawler, for example, it may serve a static HTML version.
You can choose to enable the dynamic renderer for all pages or on a per-page basis.
Dynamic rendering is not cloaking
Googlebot generally doesn't consider dynamic rendering as cloaking.
As long as your dynamic rendering produces similar content, Googlebot won't view dynamic rendering as cloaking.
When you're setting up dynamic rendering, your site may produce error pages. Googlebot doesn't consider these error pages as cloaking and treats the error as any other error page.
Using dynamic rendering to serve completely different content to users and crawlers can be considered cloaking.
For example, a website that serves a page about cats to users and a page about dogs to crawlers is cloaking.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-03-06 UTC."],[[["\u003cp\u003eDynamic rendering was a temporary solution for search engines having trouble accessing JavaScript-generated content, and it is not recommended for long-term use.\u003c/p\u003e\n"],["\u003cp\u003eWebsites may utilize dynamic rendering to present a server-rendered version of their content to search engine bots while displaying the client-side rendered version to users.\u003c/p\u003e\n"],["\u003cp\u003eModern solutions like server-side rendering, static rendering, or hydration are preferred over dynamic rendering.\u003c/p\u003e\n"],["\u003cp\u003eDynamic rendering is not considered cloaking by Google as long as the content served to bots is similar to that presented to users.\u003c/p\u003e\n"],["\u003cp\u003eWebsites with rapidly changing JavaScript-generated content or using JavaScript features unsupported by crawlers might have previously used dynamic rendering as a workaround.\u003c/p\u003e\n"]]],["Dynamic rendering serves search engine crawlers a server-rendered version of content, while users see client-side rendered content, as a workaround for JavaScript limitations. It detects crawler requests and routes them to a rendering server for static HTML delivery. While not considered cloaking if content is similar, serving entirely different content is. This method is complex and not recommended long-term; server-side, static rendering, or hydration are preferred alternatives. Dynamic rendering was used for public, rapidly changing or incompatible Javascript content.\n"],null,["Dynamic rendering as a workaround Dynamic rendering was a workaround and not a long-term solution for problems with JavaScript-generated content in search engines. Instead, we recommend that you use [server-side rendering](https://web.dev/articles/rendering-on-the-web#server-side), [static rendering](https://web.dev/articles/rendering-on-the-web#static), or [hydration](https://web.dev/articles/rendering-on-the-web#rehydration) as a solution.\n\n\nOn some websites, JavaScript loads additional content when the page is open in a browser.\nThis is called [client-side rendering](https://web.dev/articles/rendering-on-the-web#client-side). Google Search sees this content along with the content in the HTML of a website. Keep in mind that there are some [limitations for JavaScript in Google Search](/search/docs/crawling-indexing/javascript/javascript-seo-basics#write-compatible-code)\nand some pages may encounter problems with content not showing up in the rendered HTML. Other search engines may choose to ignore JavaScript and won't see JavaScript-generated content.\n\n\nDynamic rendering is a workaround for websites where JavaScript-generated content is not available to search engines.\nA dynamic rendering server detects bots that may have problems with JavaScript-generated content and serves a server-rendered version\nwithout JavaScript to these bots while showing the client-side rendered version of the content to users.\n\n\nDynamic rendering is a workaround and not a recommended solution, because it creates additional complexities and resource requirements. \n\nSites that might use dynamic rendering\n\n\nDynamic rendering was a workaround for indexable, public JavaScript-generated content that changes rapidly, or\ncontent that uses [JavaScript features that aren't supported by the crawlers](/search/docs/guides/rendering)\nyou care about. Not all sites need to use dynamic rendering, and there are better solutions than dynamic rendering as explained in\n[an overview of rendering on the web](https://web.dev/articles/rendering-on-the-web).\n\nUnderstand how dynamic rendering works\n\n\nDynamic rendering requires your web server to detect crawlers (for example, by checking the\nuser agent). When your web server identifies a request from a crawler that does not support JavaScript or the JavaScript features required to render your content,\nthis request is routed to a rendering server. Requests from users and crawlers without JavaScript issues are served normally.\nThe rendering server responds to requests with a version of the content that's suitable to the crawler, for example, it may serve a static HTML version.\nYou can choose to enable the dynamic renderer for all pages or on a per-page basis.\n\nDynamic rendering is not cloaking\n\n\nGooglebot generally doesn't consider dynamic rendering as [cloaking](/search/docs/essentials/spam-policies#cloaking).\nAs long as your dynamic rendering produces similar content, Googlebot won't view dynamic rendering as cloaking.\n\n\nWhen you're setting up dynamic rendering, your site may produce error pages. Googlebot doesn't consider these error pages as cloaking and [treats the error as any other error page](/search/docs/crawling-indexing/javascript/javascript-seo-basics#use-meaningful-http-status-codes).\n\n\nUsing dynamic rendering to serve completely different content to users and crawlers can be considered cloaking.\nFor example, a website that serves a page about cats to users and a page about dogs to crawlers is cloaking."]]