В основном механизм завязан не сколько на переход, сколько на замену контента. Т.е у вас на каждой странице есть блок с id="page"
. Вы по нажатию на ссылку, идете по адресу на другую страницу (читай файл) и забираете разметку из такого же id page. Вставляете ее на текущую страницу. И параллельно с этим меняете историю браузера используя History api. Это в общих чертах принцип работы. Но сразу скажу что не смотря на кажущуюся простоту очень много нюансов возникнет именно с историей. Можно использовать для этого готовые инструменты такие как barba js или swup js