Повторяющийся q в URL
О searchParams обычно думают как о простой детали маршрута. Но даже здесь есть мелочь, которая быстро показывает качество кода. Речь о повторяющемся параметре. Например, страница открывается не как /goods?q=phone, а как /goods?q=phone&q=tv.
На таком URL приложение всё равно должно вести себя предсказуемо. Если код бездумно читает только одно значение или вообще не определяет правило обработки, появляются странности - поле ввода показывает одно, серверный запрос уходит с другим значением, а результат зависит не от явной логики, а от случайности.
Для query-параметров лучше заранее определить политику. Например, брать только первое значение через getAll("q")[0], либо нормализовать URL до одного q. Важна не сама стратегия, а то, что она выбрана сознательно.
Такие вещи выглядят мелочью только до первого продового кейса. В реальной жизни повторяющиеся параметры приходят из внешних ссылок, ручных правок URL, редиректов и неаккуратной интеграции.
Статья на Хабр Проект: Goods Finder Stepik: Next.js I: JavaScript 2026
#nextjs #AppRouter #searchParams #URLSearchParams #querystring #urlstate #navigation #servercomponents #react #javascript #webdev
· 05.05
getAll()[0] — разумный выбор. Я бы добавил ещё один слой: нормализацию на входе.
В Next.js App Router это делается через redirect() в layout.tsx — если видим дублирующийся параметр, сразу приводим к каноническому URL. Решает сразу две проблемы: SEO (один канонический URL) и предсказуемость для всех Server Components ниже по дереву.
Из реальных кейсов: UTM-параметры дублируются чаще всего — скрипты аналитики, редиректы, партнёрские ссылки. getAll('utm_source')[0] стал стандартом на всех проектах где работал.
Хорошее правило: дублирующийся параметр = плохо сформированный URL от внешней системы. Нормализуй на границе, не внутри компонентов.
ответить
коммент удалён
· 05.05
Нормализация через redirect() в layout.tsx хорошее решение для SEO и единой канонической ссылки. Использую аналогичный подход, на входе проверяем дубли, приводим к чистому виду, редиректим.
getAll('param')[0] стандарт для чтения. Явная позиция, задокументированная для команды. UTM-параметры частый источник дублей. Это да, нормализация на границе системы, а не внутри компонентов, предотвращает каскад багов
ответить
ответ удалён