Недавно реализовывал такое. Понадобится ajax (можно jquery, можно чистый js) и
history api (тут я только чистый js использовал).
Вкратце алгоритм такой: пользователь нажимает переход на др страницу сайта, событие ловится и через ajax отдаётся на сервер, там скрипт отдаст код страницы, на которую надо перейти. History api должно изменить адрес в адресной строке браузера, ну и если пользователь будет надимать кнопку назад, то и на неё повесить событие (про это всё хорошо расписано в статье, ссылку на которую я выше дал).