Next.js, canonical для search pages без дублей
Одна поисковая выдача может открываться по нескольким адресам. Например /search?category=music&city=london, /search/music/london и /search/music/london?page=1 могут вести к одному набору результатов.
Canonical указывает предпочтительный URL такой страницы. В Next.js App Router его можно задать через metadata.alternates.canonical или вернуть из generateMetadata. Для search pages canonical лучше собирать из тех же нормализованных фильтров, что использует сама страница. Тогда page=1 удаляется, порядок category и city остаётся одинаковым, внутренние ссылки и sitemap ведут на ту же форму адреса.
Статья на Хабр Проект: EventMap Stepik: Next.js III: SEO, i18n 2026
#nextjs #AppRouter #SEO #canonical #searchParams #URLArchitecture #metadata #ServerComponents #TypeScript #webdev
· 21.08
один нюанс из практики: нормализацию фильтров лучше вынести в одну утилиту, которую дёргают и generateMetadata, и сам рендер страницы. иначе через пару итераций каноникал и реальный url тихо разъезжаются, и гугл начинает индексировать мусор. у нас на похожей структуре поиска это всплыло только через месяц, когда в search console полезли дубли
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 21.08
Хорошее замечание про Search Console, как раз тот случай, который такой общий слой должен предотвращать. Реализация в проекте как раз соответствует этому подходу. И страница, и generateMetadata используют общий parseSearchInput, а canonical собирается через тот же buildSearchHref, который используется для URL поиска. Поэтому нормализация category, city и page=1 не размазана по двум местам
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён