Всем привет! С вами на связи автор надстройки !SEMTools для Excel Дмитрий Тумайкин.
Вчера (20 марта 2024) я провел стрим, где подробно разобрал обновления своих инструментов для работы с CSV-файлами и кластеризации семантики. Если вы пропустили — вот запись:
В этой статье — структурированный пересказ с акцентом на технические нюансы, примеры и выводы. Поехали!
Часть 1: Инструмент для обработки CSV — как я сократил объем данных в 3 раза
Проблема стандартных выгрузок
Исходные CSV-файлы из Букварикса содержат избыточность: каждый запрос повторяется 9-15 раз (по числу доменов в выдаче). Например, для Москвы размер файла достигал 90 ГБ в UTF-8.
Формат вывода одной ключевой фразы до оптимизации:
"купить пуф", 1500, 300, 10000, hof.ru
"купить пуф", 1500, 300, 10000, ozon.ru
... и так 10 раз.
Что было сделано:
- Объединение доменов в одну ячейку.
Теперь все домены из топ-10 выводятся через пробел в одной ячейке. Это сократило объем файлов в 4–5 раз.
Новый формат:
"купить пуф", 1500, 300, 10000, hoff.ru ozon.ru wildberries.ru .... - Конвертация в Windows-1251.
Кодировка Windows-1251 занимает на 30–40% меньше места для кириллицы. - Файлы сжаты в 7z и выложены в telegram-канале (МСК и СПб).
После двух первых этапов, файл для Москвы уменьшился с ~95 ГБ до ~20 ГБ, СПб с ~65 до ~10 ГБ
В сжатом формате файлы весят всего 3,5 и 2 GB, архивы выложены у меня в telegram-канале @semtools
Часть 2: Кластеризация — новый алгоритм и вложенные запросы
Новый алгоритм: транзитивность и веса
- Весовые коэффициенты для позиций:
По умолчанию рекомендованы значения
1-я позиция → 120 баллов,
1-2 → 60 за каждое совпадение, итого 120
1-3 → 40 за каждое совпадение, итого 120
1-4 → 30 за каждое совпадение, итого 120
1-5 → 26 за каждое совпадение, итого 120
1-10 - 40 за каждое совпадение, итого 400
Итоговый максимум - 1000 (целиком совпадают первые 5 включая позиции, остальные 6-10 совпадают без учета позиций
Пороговое значение - для доменов рекомендуется 700, для URL достаточно 500
- Транзитивность.
Если запросы A и B находятся в одном кластере, а B и C — тоже, то A и C автоматически объединяются, даже если их схожесть между собой не превышает указанный порог.
Старый алгоритм создал бы два кластера: A-B и B-C. Новый объединяет A-B-C в один.
Вложенные запросы для нескольких родителей
Раньше инструмент искал вложенные запросы только по вхождению слов (например, если родитель — «пуф», система находила все фразы, содержащие это слово). Теперь добавлены два новых режима:
- Совпадение с фразой-родителем — запрос должен содержать все слова родителя в любом порядке.
- Совпадение с несколькими родителями — запрос должен соответствовать хотя бы одному родителю из списка (т.е. содержать все его слова).
Пример 1: Один родитель
- Родитель: «купить пуф Москва».
- Вложенные запросы:
«пуф Москва купить» ✔️ (все слова есть, порядок не важен),
«Москва недорого купить пуф» ✔️,
«пуф Москва недорого» ❌ (нет слова «купить»),
«купить пуф недорого» ❌ (нет слова «Москва»).
Пример 2: Несколько родителей
- Родитель 1: «купить пуф»,
- Родитель 2: «Москва мебель».
Вложенные запросы будут включать:
- Все фразы, где есть оба слова из родителя 1 («купить» + «пуф»):
«пуф купить»,
«купить недорогой пуф». - Все фразы, где есть оба слова из родителя 2 («Москва» + «мебель»):
«мебель для кухни Москва»,
«Москва недорогая мебель». - Не войдут:
«пуф Москва» ❌ (нет «купить» или «мебель»),
«купить мебель» ❌ (нет «пуф» или «Москва»).
Почему это удобнее?
- Точность. Исключаются фразы с частичным совпадением (например, «спуфинг» больше не попадает в выборку, т.к. сравниваются слова целиком.
- Гибкость. Можно одновременно искать запросы из разных категорий. Например:
Родитель 1: «угловой стол»,
Родитель 2: «офисный стол».
Система найдет все фразы, содержащие либо «угловой» + «стол», либо «офисный» + «стол». - Экономия времени. Не нужно вручную прописывать все варианты перестановок и чистить семантику от слов из другой тематики.
Итог
Теперь инструмент работает как «умный фильтр»:
- Вы задаете список родительских фраз,
- Система находит все запросы, которые полностью соответствуют хотя бы одному родителю (все слова из фразы-родителя есть, порядок не важен).
Часть 3: Борьба с мусором и дубликатами
Фильтрация нерелевантных запросов
На стриме я столкнулся с проблемой: запросы вроде «спуфинг» (от англ. spoofing) попадали в кластеры из-за частичного совпадения с «пуф». Т.к. изначально думал, что сочетание букв редкое и в других тематиках особо не встречается.
Решение:
- Извлек все нужные словоформы слов, и удалил строки, где ничего не извлеклось. Это позволило быстро почистить таблицу уже после выгрузки, не усложняя запрос к CSV.
- Анализ доменов. Если в топе доминируют информационные сайты (wikipedia.org, bolshoyvopros.com, yandex.ru это yandex.ru/q/), запрос исключается.
- Ручное удаление уже после кластеризации. Нерелевантные запросы попадают в свои кластеры, их их можно удалить все разом уже после.
Часть 4: Кейс — анализ конкурентов на примере тематики по пуфам
- Выгрузка данных.
Извлек все запросы, где в топ-10 есть сайт DreamBag.ru. или puff.ru - Составил список доменов и отранжировал по убыванию суммарной точной частотности
- Обнаружил несколько других прямых конкурентов
- Фильтрация.
Удалил информационные фразы («как выбрать», «отзывы») и некоммерческие домены. - Кластеризация.
Обнаружил новые ключевые слова, вообще не содержащие "пуф". Таковых оказалось очень много.
Часть 5: Сложности и нерешенные проблемы
- Большие кластеры.
Из-за доминирования маркетплейсов в топе, несхожие запросы объединяются в гигантские группы (800+ фраз).
Временное решение: Ручная постобработка (повторная разбивка больших кластеров с повторной кластеризацией и более высоким порогом - Дубликаты.
Запросы «пуф купить» и «купить пуф» считаются разными.
Возможный фикс: Нормализация (удаление предлогов, сортировка слов). - Скорость обработки.
Анализ 2000 строк занимает 12 секунд. Но сложность алгоритма квадратичная - с двукратным увеличением количества строк, время растет четырехкратно. 20.000 строк (в 10 раз больше) - уже 1200 секунд (в 100 раз больше времени, в минутах 20 минут).
Планы: Научиться использовать многопоточность (несколько ядер процессора). - Отсутствие полных URL в выдаче Букварикса (снижает качество кластеризации).
Часть 6: Планы на будущее
- Парсинг XML-выдачи.
Интеграция с прямыми выгрузками из поисковиков для работы с урлами (например, /category/pufy вместо общего домена). - Автоматическая постобработка.
Автоматическая разбивка слишком больших кластеров и повторная кластеризация с повышенным порогом схожести. - Поддержка многогопоточности (задействование более 1 ядра)
Практическое применение инструментов
- Для SEO. Кластеры помогают группировать запросы под одну посадочную страницу. Это минимизирует внутреннюю конкуренцию страниц и повышает релевантность и полноту контента (если использовать все или большую часть фраз и слов-синонимов в кластере). Привел пример с угловыми столами, они же Г-образные.
- Для анализа конкурентов. Выгрузка запросов, по которым конкурент находится в топ-10, позволяет находить «окна» в их семантике.
- Для контекстной рекламы. Группы запросов по интенту будут иметь более высокий CTR за счет релевантности объявлений.
Где следить за обновлениями?
Если хотите первыми узнавать о новых функциях !SEMTools, участвовать в стримах в реальном времени и смотреть разборы кейсов:
- VK Video: https://live.vkvideo.ru/semtools — записи прошедших стримов и инструкции по работе с семантикой в Excel.
Спасибо за внимание! Если есть вопросы или идеи — пишите в комментариях или в Telegram. До встречи в эфире! 😊