In terms of getting the page to index the old fashioned way, you'll need to set up separate views from your server, so it has something to find when requested.
For example, my React app, like most/all React apps, is based on a single view,
But, for example, if I refresh a page beyond the home page, I get a 404 error.
www.mysite.com/index refreshes fine,
www.mysite.com/page gives a 404, because the server only knows about
To fix this, make separate pages on the sever side, but have them return the main Index page. Something like this
public ActionResult Index()
public ActionResult Page()
(This is how it would be done in C#. Other servers/languages would be quite similar, I'm sure)
Note how both requests return the same page. Upon loading, the React router looks at the URL and completes the job. Or at least, it did for me.
So if I request
www.mysite.com/page, the server will give me
index (the main entry point that React requires to get started), but since
page is written in the URL, React works from that and navigates accordingly when it can. I'm still quite new to React myself, so I don't know what exactly is going on under the covers, but it works.
This way, Google crawlers can use separate URLs and see different final results.
As for getting adsense to work, this is new to me. I'm about to have a go at implementing it myself. The following may be of help: https://stackoverflow.com/questions/43922455/using-google-adsense-with-react-react-router