Ideally, client-side and server-side rendering should be balanced for user experience and performance:
Server-side rendering can be used for critical parts (for example an initial page layout or the main content in the page)
Client-side rendering can be used for non-critical parts (for example comments in a content page or other side-functional parts in a page)
Full SEO support
: Fully formed pages are served. Pages are easier to crawl with search engine crawlers. Also, faster page loading assures better page rankings.
Flexibility of client-side
: With the balance of server-side and client-side, it is possible to have better web apps. Despite server-side rendering, flexibility of client-side is still useable.
: As the same code is shared by both the client and the server, we don’t have to write logics twice. There is less code and it is easier to maintain the code.
Old device support
: As rendered pages are served, it is not a problem to support old devices. (It is a problem in SPA frameworks/libraries)
Better user experience
: By balancing rendering of pages will create a better user experience. Important parts of a page will be rendered in server and will be shown to user initially. Other parts can be rendered in client-side after these important parts of page are loaded.
Lots of logic should be handled in server-side. Handling Http requests, routing, rendering, styling and module loading can be difficult and external libraries would be needed in server-side rendering. They should be handled in the same way both in server-side and client-side.
Server-side and client-side are different environments with different dynamics. Using same code may be problematic in different cases.