Earlier quoted context omitted.
But before you use RPC, try rendering your markup on the server. That, too, reduces a lot of complexity.
At cost of reducing cache ability though no? It is cheaper for me to put my react app in front of a cdn, split out my app into an api and front end than for me to have my site be entirely uncacheable. I can also cache certain endpoints behind the cdn that are mostly invariant for users. And, the network egress of json is much lesser than the egress of markup.
In the boring old days we just did it all on the server and used the semantics of HTTP to handle caching ... it worked great.