In client-side rendering, the server's initial response is a mostly empty HTML shell plus a JavaScript bundle. The browser then runs that JavaScript to build the actual page content and fetch data, rendering everything the visitor sees, rather than receiving a fully-formed page straight from the server.
Because the heavy lifting happens in the browser instead of on the server, CSR keeps server load relatively light even under heavy traffic, and once the JavaScript bundle is cached, later page transitions within the app can feel close to instant. The tradeoff shows up at the start: the first meaningful content can take longer to appear, since the browser has to download and execute the JavaScript before there's anything to show, and search engine crawlers historically struggled to see content that only exists after JavaScript runs. Modern crawlers do execute JavaScript, but rendering still adds a processing step that a fully server-rendered page skips, which is why CSR-heavy sites often pair it with server-side rendering or pre-rendering for the pages that need to be reliably indexed.
