Якщо ОП чи інші люди все ще шукають спосіб змінити історію браузера, щоб увімкнути стан, використовуючи pushState та substituState, як пропонує IESUS, це "правильний" спосіб зробити це зараз. Головною перевагою порівняно з location.hash є те, що він створює фактичні URL-адреси, а не просто хеші. Якщо історія веб-переглядача з використанням хешів збережена, а потім переглянута з відключеним JavaScript, додаток не працюватиме, оскільки хеші не надсилаються на сервер. Однак якщо pushState було використано, весь маршрут буде відправлений на сервер, який ви зможете побудувати так, щоб відповідати відповідним чином на маршрути. Я бачив приклад, коли однакові шаблони вусів використовувались як на сервері, так і на стороні клієнта. Якщо у клієнта був увімкнутий JavaScript, він отримає швидкі відповіді, уникаючи переходу на сервер, але додаток буде працювати чудово без JavaScript. Таким чином, додаток може виразно погіршитись за відсутності javascript.
Крім того, я вважаю, що там є якась рамка з такою назвою, як history.js. Для браузерів, які підтримують HTML5, він використовує pushState, але якщо браузер цього не підтримує, він автоматично переходить до використання хешей.