Строку поиска на сайте ставят для юзабилити и забывают, что её результаты — это страницы с URL, которые Googlebot и Яндекс точно так же обходят. Разбираю, когда /search реально приносит трафик не хуже категории каталога, когда это чистый дубль, который жуёт crawl budget, и свою ошибку с «ничего не найдено», из-за которой Google индексировал 4000 пустых страниц одного магазина.
Внутренний поиск почти всегда проектируют как UX-фичу. Разработчик сделал, маркетолог протестировал на удобство, SEO не звали вообще. А зря — на крупном каталоге страницы результатов поиска по трафику иногда обгоняют карточки товара, потому что человек печатает ровно то, что ищет, без промежуточных кликов по меню.
Зачем вообще об этом думать
На каталоге из пары тысяч товаров внутренний поиск генерирует URL вида /search?q=коврик+для+ванной на каждый введённый запрос. Если движок сайта не режет мусор, за полгода таких URL накапливается десятки тысяч — и большая часть из них никому не нужна: опечатки, единичные запросы, бессмысленные комбинации символов. Гуглобот тратит бюджет на обход этого хлама вместо того, чтобы чаще заходить на страницы товара, которые реально продают.
Но запрос «коврик для ванной» с нормальной частотностью и релевантной выдачей — это, по сути, бесплатная тематическая страница под низкочастотник, который в каталоге как отдельная категория не заведён. Выкидывать такие URL из индекса огульно — то же самое, что сжигать деньги.
Где проходит граница: открывать или закрывать
| Тип запроса | Что делать | Почему |
|---|---|---|
| Частотный запрос, 5+ релевантных товаров в выдаче, стабильно повторяется в логах поиска по сайту | Открыть в индекс через ЧПУ, не параметр | Фактически бесплатная НЧ-страница под спрос, который уже подтверждён своими же пользователями |
| Опечатка или единичный заход (1-2 раза за полгода) | noindex, canonical можно не ставить | Нет повторяемого спроса — страница не принесёт трафика, только раздувает индекс |
| «Ничего не найдено» | noindex + статус 200 (не 404!), либо мягкий редирект на близкую категорию | 404 на легитимный пользовательский запрос — плохой UX; индексация пустой страницы — мусор в выдаче |
| Одинаковый запрос с разным порядком слов / регистром | canonical на основную версию | Технический дубль одной и той же выдачи, разный URL |
Ключевое отличие от фильтров каталога (о них отдельно писал) — у поиска нет предсказуемой структуры комбинаций. Фильтр «цвет=красный&размер=M» можно просчитать и решить разом по правилу. Поисковый запрос — это свободный ввод человека, и правило приходится строить не по URL-паттерну, а по частотности самого запроса в логах.
«Ничего не найдено» — самая частая технической дыра
Дефолтная страница пустой выдачи на многих движках отдаёт статус 200 и текст «по вашему запросу ничего не найдено» — визуально нормально, технически хуже. Если на сайте нет синонимов и нормализации опечаток, таких страниц плодится огромное количество: человек написал «кофе машина» вместо «кофемашина» — и получил пустоту вместо товара, который у магазина есть. Это теряет конверсию здесь и сейчас, а не только портит SEO.
Три вещи чинят это сразу: словарь синонимов и опечаток (хотя бы топ-200 по частотности из логов), fallback-выдача «похожие товары» вместо пустого экрана, и noindex на сам шаблон пустой страницы, если синонимы всё равно не покрывают всё. Запрос ты не предскажешь на 100% — но закрыть от индекса пустой результат можно всегда.
Техническая реализация: canonical, noindex, статус-коды
- ЧПУ для топовых запросов —
/search/kovriki-dlya-vannoy/, не/search?q=.... Параметр в URL Google ещё обходит нормально, Яндекс — заметно хуже ранжирует при прочих равных. - Для остальных параметрических вариаций — canonical на страницу с нормализованным запросом (нижний регистр, обрезанные пробелы, сортировка слов по алфавитному индексу запроса, если движок это умеет).
- robots.txt не трогаем для поиска вообще — Disallow на /search блокирует обход, но не снимает уже проиндексированные URL из выдачи, они просто зависают там навечно без возможности их почистить через noindex.
- Для пустой выдачи — meta robots noindex,follow прямо в шаблоне, статус-код 200 (не 404, чтобы не ломать UX человеку, который просто ошибся в написании).
Моя ошибка: 4000 индексированных пустых страниц
Вёл каталог одного магазина бытовой техники — движок у них отдавал страницу «ничего не найдено» с кодом 200 и без noindex, по умолчанию так было настроено ещё при разработке, никто не трогал. За два года в индекс Google утекло порядка 4000 таких URL — по всем опечаткам, которые вообще кто-либо вводил в поиск. Трафик на них — ноль, конверсия — ноль, а в Search Console раздел Coverage показывал десятки тысяч просканированных страниц, из-за которых реальные обновления карточек товара индексировались на 5-7 дней дольше обычного.
Закрыл шаблон пустой выдачи через noindex, подчистил список через GSC Removals для срочного эффекта, и спустя три недели количество URL в индексе упало с 11 с лишним тысяч до 7. Время на индексацию новых карточек товара вернулось к привычным 1-2 дням.
Ты вообще смотрел в Search Console, сколько страниц поиска по сайту у тебя в индексе прямо сейчас, или внутренний поиск для тебя до сих пор чисто фронтендовая фича, про которую SEO-разбор никто не делал?
Про фильтры каталога и Clean-param — отдельно в SEO-фильтры интернет-магазина. Про пагинацию с тем же классом проблем — в пагинация в интернет-магазине. Про каннибализацию между похожими НЧ-страницами — в каннибализация ключей.