Раз уж вы упомянули Rails - то дам небольшую справку по этому вопросу.
Для этого существует специальный gem trubolinks. В Rails 4.0 и выше он включён по-умолчанию. Его суть как-раз таки в том, что turbolinks.js перехватывает клик по ссылке, и на адрес, куда вы хотели перейти - отправляет запрос в json, получает ответ в json, после чего перерисовывает внешний вид страницы, и меняет в браузере её адрес.
Но такой подход не подразумевает в принципе одностраничные сайты. Тут суть в том, что мы прогружаем с сервера только то, что нам нужно для отображения.
А вообще самый общий ответ простой - сервер должен уметь отдавать по каждому адресу ответ в том виде, в котором он получает запрос: если это был обычный GET или POST запрос - возвращает HTML-страницу. Пришёл запрос на json - отдаёт json
Например в Rails если по запросу /users/show/1 возвращается html страница, то json будет возвращаться по адресу /users/show/1.json, xml - /users/show/1.xml
То есть самое простое правило выглядит так система по любому адресу сайта должна уметь отдавать как полный html, так частичный, так и json. Чтобы любой пользователь, открывший какую-то страницу мог взять её адрес, переслать другому, и тот увидел бы аналогичное (вне зависимости от истории его нахождения и действий на сайте)
Но я не могу понять - как это соотносится с одностраничными сайтами? Это лишь методика перерисовки изображения страницы без полной её перезагрузки.