Пожиратели трафика: автоматизируем поиск каннибализации на Python с выгрузкой в Google Таблицы

Знакомая боль: позиции сайта начинает штормить, трафик проседает, а в Яндекс Вебмастере творится какая-то дичь. Начинаешь разбираться и видишь классику — две страницы насмерть бьются за один поисковый интент. Поисковик не понимает, какой урл релевантнее, и постоянно их тасует. В итоге обе страницы болтаются далеко за пределами топа.

Искать такие пересечения руками, если на проекте больше пары сотен страниц — чистый мазохизм. Выгружать сырые данные из Вебмастера или Метрики, писать ВПР-ки в Экселе, сводить всё в единый тяжеленный файл… Это долго, нудно и съедает время, которое нужно тратить на аналитику и тестирование гипотез, а не на возню с ячейками.

Эту рутину пора делегировать скриптам. Ниже разберем логику Python-скрипта, который сам вытащит данные по запросам, найдет конфликтующие страницы и аккуратно сложит их в Google Таблицу.

Кого мы вообще ищем?

Нам не нужны абсолютно все запросы, по которым ранжируется больше одного урла. Если по ключу выводится две страницы, но у первой 5000 показов, а у второй — два случайных, это не каннибализация. Это обычный шум выдачи или временный тест алгоритмов Яндекса.

Нас интересуют жесткие пересечения. Для скрипта задаем следующие условия:

  • Один поисковый запрос ведет на два и более уникальных URL вашего сайта.
  • У обоих урлов есть значимая доля показов. Например, разрыв между ними составляет не более 60-70%.
  • Страницы ранжируются относительно близко друг к другу.

Подготовка окружения

Для автоматизации нам не понадобится ничего экзотического. Хватит базового стека Python для работы с API и массивами данных:

  • pandas — для группировки, фильтрации и математики (наша главная рабочая лошадка).
  • requests — чтобы дергать API Яндекс Вебмастера.
  • gspread и oauth2client — для авторизации и прямой записи готового отчета в облако.

Чтобы скрипт мог забирать данные из Вебмастера, нужно получить OAuth-токен Яндекса. А для записи в таблицы — создать сервисный аккаунт в Google Cloud Console, получить JSON-ключ и расшарить целевую таблицу на email этого сервисного аккаунта.

Алгоритм работы под капотом

Весь процесс разбивается на три логических этапа. Скрипт можно повесить на крон на сервере, чтобы он собирал стату раз в неделю, или просто запускать с ноута, когда берете новый проект на аудит.

Шаг 1. Забор сырых данных

Стучимся по API в Яндекс Вебмастер и вытягиваем статистику поисковых запросов за последний месяц. Нам нужно сгруппировать данные по двум параметрам: текст запроса и URL страницы. В ответ получаем массив, в котором к каждому ключу привязаны урлы, показы, клики и средняя позиция.

Шаг 2. Фильтрация через Pandas

Загружаем полученный массив в датафрейм. Сначала группируем строки по запросам и считаем количество уникальных URL. Сразу дропаем все ключи, где страница только одна — там проблем нет.

Дальше начинается самое важное: отсев мусора. Пишем условие, которое оставляет только те строки, где на условный URL-2 приходится хотя бы 15-20% от показов основного URL-1. Так мы отсекаем случайные вбросы в индекс и оставляем только реальных каннибалов, которые жрут друг у друга трафик.

Шаг 3. Экспорт в Google Таблицы

Анализировать датафреймы в консоли неудобно. Поэтому финальную выборку пушим прямиком в таблицу. С помощью библиотеки gspread скрипт коннектится к нужному документу, очищает старый лист (чтобы данные не дублировались) и заливает свежий отчет.

Колонки в итоговом файле делаем такие:

  • Поисковый запрос
  • URL 1 (главный)
  • Показы и позиция URL 1
  • URL 2 (каннибал)
  • Показы и позиция URL 2
  • Разница в показах (%)

Что делать с полученными данными

Вместо того чтобы полдня парсить и сводить таблицы руками, вы просто открываете готовый файл за утренним кофе и сразу видите фронт работ. Вот жирный запрос, а вот две страницы, которые мешают друг другу расти.

Дальше включается классическое SEO:

  • Если страницы идентичны по смыслу — клеим их через 301 редирект.
  • Если одну нужно оставить для других каналов, но в органике она не нужна — прописываем rel="canonical" на основную.
  • Если смешались интенты — жестко их разводим. Информационный контент уносим в блог, коммерцию оставляем на листинге.
  • В крайнем случае просто деоптимизируем страницу-каннибал: сносим точные вхождения ключа из Title, H1 и текста.

Такой скрипт пишется за пару часов, зато потом годами экономит часы рутины на проектах любого размера, выдавая вам чистую фактуру для принятия решений.

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (Пока оценок нет)
Загрузка...
logo