11 400 дублей фильтров: как мы сжали каталог в четыре раза
Каталог на 2 900 товаров отдавал поиску 11 400 адресов: правило отбора посадочных, процедура расчёта риска и порог в 7% визитов до начала работ.
Каталог из 2 900 товаров отдавал поисковику 11 400 адресов. Разница — комбинации фильтров: цвет, сечение, производитель, наличие, сортировка и номер страницы в любом порядке. Через семь месяцев работы в индексе осталось 2 760 адресов, а органика выросла на 34%.
Разбираем механику целиком: из чего состояли эти 11 400 адресов, по какому правилу мы решали, что оставить, как считали риск потери трафика до начала работ и на чём в итоге ошиблись.
Проект под NDA. Клиент согласовал цифры, но не название, поэтому в списке работ на сайте его нет: туда попадают только проекты, которые можно назвать. Ближайший по устройству каталог, который назвать можно, — оптовый каталог электротехники на 9 200 позиций. Разница в истории: там подбор по характеристикам проектировался с нуля и адреса фильтров решались до первой строчки вёрстки, а здесь пришлось разбирать живой магазин, который к моменту нашего прихода работал несколько лет и успел сменить платформу.
Откуда берутся дубли
Механика простая. Каждый фильтр добавляет параметр в адрес, порядок параметров не фиксирован, сортировка тоже параметр, и пагинация тоже. Три фильтра по четыре значения дают 64 комбинации на раздел, и половина из них ведёт на страницу с двумя товарами. Товаров при этом не становится больше: одна и та же карточка кабеля попадает в десятки комбинаций, каждая со своим адресом.
К этому добавляются технические близнецы: адрес со слешем на конце и без, с параметром сессии от старой версии сайта, с меткой рекламной кампании. Ни один из них не заводили специально — они появляются сами, по одному на каждое изменение платформы за годы работы сайта.
Дальше это стоит денег двумя способами. Первый — обход: по логам мы увидели, что бот тратил 61% обходов на страницы, которые не давали ни одного визита за полгода. Пока он ходит по комбинациям с двумя товарами, новые карточки ждут своей очереди. Второй — конкуренция страниц между собой: у десятка почти одинаковых адресов один и тот же текст и один и тот же спрос, и поиск выбирает из них сам, каждый раз заново.
Из чего состояли 11 400 адресов
| Тип адреса | Было | Что сделали | Осталось |
|---|---|---|---|
| Разделы и карточки, адрес без параметров | 2 448 | Не трогали: это и есть каталог | 2 448 |
| Сочетания фильтров со спросом | 312 | Перевели на чистый адрес, свой заголовок и описание | 312 |
| Остальные комбинации, сортировка, пагинация, метки и сессии | 8 640 | Канонический адрес на раздел, директивы для робота, нормализация порядка параметров | 0 |
| Итого в карте сайта | 11 400 | Пересобрали заново | 2 760 |
Два уточнения к таблице. 2 448 — это 2 760 минус 312 новых посадочных: на этих адресах каталог и держится, и за семь месяцев они не менялись. А 2 900 товаров живут на 2 448 адресах потому, что варианты по цвету и сечению — это выбор внутри одной карточки, а не отдельные страницы. Из этого же растёт и число комбинаций: чем богаче выбор внутри карточки, тем больше фильтров нужно каталогу и тем быстрее множатся адреса.
Заливкой — адреса, которые мы хотим видеть в индексе; контуром — закрытые комбинации. Ширина полосы пропорциональна числу адресов, обе полосы в одном масштабе.
Правило отбора: спрос, товары, свой текст
Правило одно: страница живёт в индексе, если под неё есть спрос и на ней есть товары. Практически это значит три условия, и выполняться должны все три.
- У сочетания фильтров есть частота хотя бы 30 показов в месяц по Вордстату. Порог низкий специально: в узких нишах спрос вида «кабель ВВГнг 3х2,5 медный» весь низкочастотный, и планка выше отрезала бы половину денег.
- На странице не меньше трёх товаров, причём в наличии. Страница с одной позицией — это карточка товара, и продвигать её надо карточкой.
- У страницы есть свой заголовок и описание, а не шаблон с подставленными параметрами. Написать 312 текстов дороже, чем сгенерировать, но шаблон «Купить кабель цвет белый сечение 2.5 наличие да» не выигрывает ни одного запроса.
Под сочетания, прошедшие все три условия, мы делаем нормальные посадочные с человеческим адресом — раздел плюс значение фильтра, без параметров. Их получилось 312. Всё остальное остаётся доступным человеку: фильтры работают, страницы открываются, ссылки из рассылок и рекламы живут. Закрыть от индексации и убрать с сайта — разные операции, и путать их нельзя: комбинация с двумя товарами покупателю нужна, поиску — нет.
Тот же отбор мы делаем на любом магазине и каталоге, и делаем его до вёрстки. От него зависит и структура шаблонов, и то, как собираются внутренние ссылки; на живом сайте эта же работа стоит вдвое дороже, потому что часть решений уже застыла в коде.
Процедура расчёта риска
Склейка — операция с необратимой частью: трафик, который шёл на закрытые страницы, вернётся не сразу и не весь. Поэтому до работ считается риск, и считается он по шагам.
- Выгрузить полный список адресов, попадающих под закрытие, — из логов сервера и из карты сайта, а не только из панели вебмастера: адреса, которых нет в карте, туда и не попадут.
- Посчитать по этому списку визиты и заявки за последние 12 месяцев и их долю в общем объёме. У нас вышло 4,8% визитов и 2,1% заявок.
- Сравнить с порогом. Порог мы задаём себе заранее: не больше 7% визитов. Если выходит больше, значит фильтры давно работают посадочными страницами, и склейку надо не отменять, а дробить на этапы с проверкой после каждого.
- Выписать исключения — адреса с параметрами, которые дают заявки регулярно, а не однажды. Их оказалось 26; они не закрывались, а превращались в полноценные посадочные, даже если по частоте не проходили.
- Проверить спрос по каждому сочетанию, которое собираетесь закрыть, а не по разделу в среднем. Это тот шаг, на котором мы и ошиблись, — про него ниже.
- Зафиксировать точку отсчёта на дату старта: визиты, заявки, число адресов в индексе, доля полезных обходов в логах. Без замера «до» через семь месяцев нечем будет подтвердить результат, а спорить придётся именно тогда.
Порог, заданный до начала работ, — единственное, что отличает разбор от объяснения задним числом. Когда цифра просела, а порога нет, всегда находится версия про сезонность и алгоритмы. В истории с переездом домена нам этого правила и не хватило: две недели падения мы объясняли рынком, пока не полезли в логи. Порог в 7% визитов родился в том числе оттуда.
Техническая часть склейки
Канонический адрес на всех вариантах с параметрами указывает на чистый раздел. Сортировка и пагинация закрыты от индексации через директивы в файле для роботов и подтверждены каноническим адресом: две меры вместо одной, потому что каноникал — рекомендация, а не команда.
Порядок параметров нормализуется на сервере: любой набор приводится к одному виду редиректом. Здесь важно, что редирект один и всегда один. Цепочка из двух прыжков в нормализации появляется незаметно — сначала правило про порядок, потом правило про слеш, — и стоит она столько же, сколько стоила нам на переезде домена.
Внутренние ссылки переписаны на чистые адреса. Это оказалось самой долгой частью, 40 часов, потому что ссылки собирались в шаблонах в четырёх местах: в меню, в блоке «смотрите также», в хлебных крошках и в самом фильтре. Порядок работ при этом обратный привычному: сначала появляются чистые адреса и ссылки на них, и только потом закрывается старое. Наоборот новые страницы неделю стоят без единой внутренней ссылки.
Карта сайта пересобрана и содержит только 2 760 адресов, которые мы хотим видеть в индексе. Она же служит проверкой: если в логах бот приходит на адрес, которого в карте нет, значит где-то осталась внутренняя ссылка на старый вид адреса.
Результат за семь месяцев
Адресов в индексе — с 11 400 до 2 760. Доля полезных обходов в логах — с 39% до 82%. Органика — плюс 34%, заявки из органики — плюс 27%. Замер месяц к месяцу с тем же периодом прошлого года: у ниши сезонность, и без поправки цифры были бы красивее, чем есть.
Растянуто это на семь месяцев не потому, что работы много, а потому, что проверять результат приходится в логах и в выдаче ещё несколько месяцев после релиза. По той же причине склейка входит в работы по продвижению, а не сдаётся отдельным техническим релизом: закрыть адреса можно за неделю, а понять, что закрыли лишнее, — только к третьему-четвёртому замеру.
Где мы ошиблись: брендовые запросы
На третьей неделе мы закрыли раздел с фильтром по производителю целиком, не проверив спрос отдельно по каждому значению. Логика была та же, что и с цветом: сочетаний много, товаров в каждом мало. И мы потеряли 380 визитов в месяц по брендовым запросам — люди искали не «кабель 2,5», а конкретного производителя, и такие запросы ведут себя иначе: частота у них скромная, а конверсия выше средней.
Вернули за пять недель, сделав под шесть крупных производителей отдельные посадочные с ассортиментом, ценами и сроками поставки. По сути это те же 312 посадочных, только шесть из них появились не сразу, а после потери.
Это была не техническая ошибка, а невнимательность при разборе кластеров, и она стоила клиенту примерно двух недель роста. Обиднее всего, что своё же правило мы к тому моменту уже написали: брендовый спрос считается отдельно от остального и не смешивается со средним по разделу — почему так, разобрано в статье про видимость по кластерам. В процедуре расчёта риска пятый шаг стоит именно из-за этой истории, и формулировка у него теперь жёсткая: спрос проверяется по каждому сочетанию, а не по разделу.