A Single Page App has nothing to do with server side rendering. You could very well have a SPA - be it react or AJS that makes an ajax call to a server running your language of choice and return html / css / js that can be injected into the SPA.
Nothing would stop me from assigning ng-app to the top most div in a AJS app - checking the url via ui-router and calling out to index.php (server side render) and returning the contents and injecting it into the div. It would be a bit clunky for sure and I'm not sure why you would want to do it, but it sure is possible.
My use of react in my response is that generally, react apps need to be interpreted and that interpretation generally happens on the server side in NodeJS. Can react be used by itself? Sure! It's just a view - but it's 99% of the time used on the server side, rendered, and just the outcome is sent to the client.
Mario Giambanco
Director of User Experience Development
The term became more popular with NodeJS and Javascript frameworks but it basically means, assembling or compiling the HTML and other various resources on the server side first; then spitting it out to the client.
Before frameworks and libraries and such - you could say most programming languages did this - and still do to a certain point. In PHP for example (cause that's what I know best) - you could do echo "<div>hello world</div>"; on the server and that html would be outputted to the client - server side rendered.
"Rendering" has taken on a much more complex form now though - now, rendering means to determine what is needed; build the components and send that to the client. So in the case of auth - the server might determine the logged in user is an Admin - compile and "render" an Admin menu item and send that to the client.
React and other frameworks rely heavy on this (not a react pro) - they do most of the heavy lifting on the server side and the client gets just what it needs to interact with the page / site.
You could consider it a separation of duties, but IMO, not in a traditional sense. It can be more efficient for the client as your taking the load off of the client and putting it on the server, but it can also be more expensive as now the server is responsible for more heavy lifting (and your paying for the server) and the client is doing less (your not paying for the clients power)