У вас должно быть два обработчика одного урл.
Один - на клиенте, чтобы при клике на урл на загруженной странице ваше приложение этот клик отловило и запустило клиентский роутер.
Второй - на сервере, чтобы при первоначальном открытии страницы браузера по такой ссылке сервер вернул уже сформированные данные.
Поэтому и роутер изоморфный, он, сконфигурированный одинаково, может работать как на сервере, так и на клиенте. Но проблему индексации он вам не решит, решать ее вам придется самостоятельно. А он всего лишь инструмент.
History API в этом деле краеугольный камень, потому что именно он позволяет управлять адресной строкой страницы без ее перезагрузки, используя обычные ссылки без #
Схема такая - вы кликаете на ссылку, ее отлавливает скрипт, забирает из ссылки url, через History API заменяет адрес в адресной строке браузера (страница не перезагружается), срабатывает History API событие об изменении адреса в адресной строке, вы это событие перехватываете и скармливаете новый адрес роутеру, например вашему изоморфному.