Задача
У образовательного портала есть раздел каталога, который приносит больше заявок, чем все остальные вместе: 2 992 визита и 99 отправок формы в месяц, конверсия 3,3%, позиции в поиске со второй по шестую.
Проблема в том, откуда взялись карточки. Часть каталога когда-то была сгенерирована нейросетью без сверки с первоисточником. Проверка происхождения показала: 152 карточки из 334 (46%) не подтверждены ничем. И это не хвост, а ядро — на них приходилось 3 328 визитов из 4 577. То есть примерно три четверти заявок шло со страниц, за достоверность которых нельзя было ручаться. У части несуществующих организаций были прописаны телефоны — человек по ним звонил.
Решение
Удалять всё подозрительное скопом — плохой вариант: обрушится раздел, который кормит проект. Нужна была процедура сверки, а не зачистка.
Три правила, которые определили работу:
- Источником считается только сторонний. Обычный веб-поиск по названию карточки возвращает «подтверждение», пересказывая нашу же страницу. Это замкнутый круг, а не доказательство. Опора — открытый государственный реестр лицензий плюс независимые упоминания: сайт организации, карты, сайт городской администрации.
- «Выдумано» и «неактуально» — разные диагнозы. Отсутствие в реестре не равно «не существует»: организация может числиться под другим названием. И наоборот — школа может быть реальной, но давно присоединённой к другой. Первое удаляем как фикцию, второе — как неактуальное, но проверять надо в обе стороны.
- Пустоту закрывает честный текст, а не выдуманная карточка. Если в городе объектов почти нет — так и надо написать, объяснив почему и что человеку делать вместо этого.
Внедрение
Сверка по реестру автоматизирована: скрипт обходит регионы и выгружает организации со статусом «действующая». Поиск дублей — по связке «город + нормализованное название + нормализованный адрес»: одна и та же школа лежала в каталоге в двух-трёх экземплярах, потому что новая выгрузка легла поверх старых карточек из справочников.
Отдельная грабля, из-за которой чуть не построил выводы на неверных числах: у разных партий карточек оказался разный порядок полей, и поиск по шаблону видел только часть каталога — насчитал 159 объектов вместо 288. Пришлось разбирать файл поблочно и вытаскивать поля из каждого блока отдельно. Проверять надо не только данные, но и собственный способ их считать.
Каждая удалённая страница не исчезает, а получает постоянный редирект на раздел — через отдельный файл-реестр удалённых, в котором сейчас 468 записей. Накопленный поисковый вес не теряется, а посетитель из выдачи попадает не на ошибку 404, а в список живых объектов.
Результат
Всё, что ниже, — реально сделанное, а не прогноз.
- 51 группа дублей найдена на 475 карточек; 48 лишних карточек слито с постоянными редиректами, 11 оставшихся дозаполнены полями из удалённых.
- По столице удалено 12 карточек из 13: семь выдуманных (с телефонами в никуда) и пять реально существовавших, но ликвидированных или присоединённых. Осталось две достоверные.
- Вскрылось, что пять городских страниц держались на дублях — после склейки объектов на них стало меньше порога публикации. Это не потеря трафика, а снятие фикции: страницы выглядели наполненными, не будучи такими.
- Для 52 городов, где объектов один-два, вместо выдуманных карточек добавлен честный блок: почему формата почти не осталось и что делать человеку.
- Замерен потолок источника: действующих организаций нужного типа по стране всего 237. Значит, каталог дальше растёт не отсюда — и рычаг найден другой: 36 городов, где не хватает одной-двух карточек до открытия страницы, это порядка +680 кликов в месяц, то есть примерно +20 заявок при текущей конверсии 3,3%.
Главный вывод для владельца сайта: сгенерированный каталог выглядит убедительнее проверенного. Он полный, ровный, с телефонами и адресами — и именно поэтому собирает трафик и заявки, пока кто-нибудь не позвонит.