 Are you building a single page app with JavaScript that has lots of frequently changing content? Then your web app might benefit from dynamic rendering, and that's what we're going to look at in this video. For this video, we will use AffiliCats as our sample application. It is a single page app, built as a progressive web app as well, that lets you search for cats and great deals on them online. We won't go much into the details of this app and focusing on implementing dynamic rendering instead. But wait, what is dynamic rendering? It is a technique where you switch between client-side rendered content and pre-rendered content for certain user agents. This is useful because you can deliver the full client-side rendered experience to users while getting as much content as possible to crawlers such as Googlebot. As discussed earlier in this series, that means your content is crawled and indexed without needing to execute JavaScript first. Alright, let's get started. First, we take a look at our web app. It loads a list of cats and shows cuteness along with its price at different affiliates. When we put the URL into the mobile friendly test though, we only see the loading view rather than the actual content. As the cats and the affiliate deals keep changing, we won't be able to pre-render them easily. Switching entirely to server-side rendering might be a little too much on our plates right now. So we want to look into dynamic rendering instead. We will write a server so that our users see the app the way it is right now. But Googlebot and a few other bots get a version that was rendered on demand in a headless chromium using Rendertron. We start by deploying a Rendertron instance. I chose to use Google Cloud for this, but you can deploy Rendertron to your own infrastructure as well. I also set up the cache because starting a headless browser and render the page on every request will take some time and we want to serve the page as quickly as possible to avoid timeouts. With our Rendertron server running, we install Express and the Rendertron middleware from NPM. Now we can write a small Express server to host our web app. Then we add the Rendertron middleware and configure it to use the default Rendertron user agent list. But we add Googlebot to also use it for Google search. Even though Googlebot can execute JavaScript, we don't want to rely on that now. The last two steps are setting up the middleware to use our Rendertron server to pre-render pages and we write a little function as part of the server start to request our single page app so that the cache is ready to serve pages without having to wait for the headless browser to run. We will rerun this function periodically to make sure the cache data is not too old. So this video has concluded our JavaScript SEO series. If you would like to see more JavaScript SEO content or any other SEO topics on our channel, please let us know and submit your ideas in the comments below.