Как работают ссылки без решетки # в SPA приложениях?
Обсуждалось кучу раз уже - настройте свой веб-сервер, чтобы он на любой запрос отдавал index.html
Когда вы используете ссылку вида domain.org#/your-path, то сам веб-сервер, что бы там после # ни было, отправляет браузеру index.html, потому что для него это запрос к / (хэш существует только в браузере, на сервер не отсылается)
Когда вы используете ссылку domain.org/your-path, веб сервер пытается найти данные, соотв. этому your-path, которых 99% нет, и отдает вам 404.
Вы настраиваете сервер отдавать этот самый index.html в ответ на любой запрос.
В этом случае всегда загружается один и тот же index.html, который стартует ваше SPA, которое уже на основании window.location разбирается, что ему дальше делать.
Если она стала неработающей - это кривое SPA.
Посмотрите на https://music.yandex.ru - всё красиво и все ссылочки работают.
Читайте доки по history api и смотрте примеры реализации.