Не получится ли что я "притяну за уши" реакт?
Ну, во-первых, действительно, примерно так и получается с виду.
Во-вторых, как выше писали, можно подключить SSR, но это => на сервере Node.JS (без Ноды будет ещё то извращение).
В-третьих, есть возможность делать на сервере "обычный" Web 1.0 функционал (все страницы отдаются сервером с перезагрузкой), но при этом на фронте уметь реактом эти же страницы перерисовывать, получая с бэка только данные.
По 3-му варианту вам нужно будет дописать несколько контроллеров, условно дублирующих основные, вроде такого:
- /catalog/category/id/page/n - отдаёт всю HTML-страницу
- /api/v1/catalog/category/id/page/n - отдаёт только JSON-массив товаров на странице