100 миллионов показов за один вечер.
Все собирают семантику одинаково: ищут, что бы ещё добавить. Вордстат, ключи конкурентов, подсказки, собственные догадки. Мы зашли с другой стороны – ничего не искали. Взяли всю базу поисковых запросов и стали вычитать лишнее. Из ста миллионов поисков осталось полторы тысячи страниц, и это оказалась совсем другая карта спроса.
Сложение против вычитания
Посмотрите, как семантику собирают сейчас. Открывают Вордстат, вбивают маску – «психолог», «отношения», «окна». Выгружают пару тысяч фраз. Потом идут к конкурентам и снимают их ключи через сервис. Потом добавляют подсказки из поисковой строки. Потом дописывают то, что придумали сами на планёрке. Всё это сваливают в один файл, чистят от очевидного мусора, разбивают на группы – и называют семантическим ядром.
Каждый из этих источников – чей-то фильтр. Вордстат показывает не спрос, а срез по одному слову. Конкуренты показывают свои догадки, вместе со своими ошибками и слепыми зонами. Подсказки – то, что поисковик решил подсказать. Собственные придумки – ваш язык, а не язык вашего клиента.
Складывая эти источники, вы получаете объединение чужих слепых зон. И называете это картой спроса.
Мы сделали наоборот. Есть полная база поисковых запросов региона – всё, что люди вообще набирали. Не выборка, не топ, не срез по маске. Всё. Значит, искать ничего не нужно: нужное там уже есть по определению. Задача сводится к обратной – убрать лишнее. То, что останется после вычитания, и есть спрос, без посредников между вами и людьми.
Задача была такая: собрать ядро для геозависимого сайта психолога с узкой специализацией, в одном регионе. Ниша, где спрос выражен живой речью, а не терминами, и где обычные способы сбора семантики ломаются особенно наглядно. Что из этого выросло, можно посмотреть в кейсе – сайт психолога, который публикует статьи сам.
Сколько всего люди спрашивают
Начнём с масштаба, потому что он объясняет остальное. Региональная база запросов по Новосибирской области за один месяц:
| ПОКАЗАТЕЛЬ | ЗНАЧЕНИЕ |
|---|---|
| Разных формулировок | 23 541 022 |
| Показов за месяц | 100 862 682 |
| В среднем на одну фразу | 4,3 |
Сто миллионов поисков за месяц в одном регионе. Население области – 2,8 миллиона человек, то есть примерно 36 запросов на человека, включая младенцев и глубоких стариков.
Но интереснее второе число. Эти сто миллионов размазаны по 23,5 миллионам разных формулировок. В среднем каждую фразу за месяц набрали четыре раза. Люди почти никогда не спрашивают одинаково: у одной и той же проблемы десятки словесных обличий, и большинство из них встречается однажды.
Вот как распределяется спрос по частоте:
| ЧАСТОТА ФРАЗЫ | ДОЛЯ ФРАЗ | ДОЛЯ ПОКАЗОВ |
|---|---|---|
| 1 раз за месяц | 59,4% | 13,9% |
| 2 раза | 19,7% | 9,2% |
| 3–4 раза | 10,8% | 8,4% |
| 50 и больше | 0,7% | 43,8% |
Почти шестьдесят процентов формулировок встречаются ровно один раз – и вместе дают четырнадцать процентов всего спроса. Четырнадцать процентов от ста миллионов – это четырнадцать миллионов показов в месяц. А высокочастотное ядро, за которое дерутся все, – это семь десятых процента фраз.
Все конкуренты бьются за 0,7% формулировок. Не потому что там весь спрос, а потому что больше ничего не видно.
Почему Вордстат отдаёт не то, что нужно
Мы тоже начали с привычного пути – взяли выгрузки по маскам «психолог» и «отношения», по две тысячи фраз в каждой. Суммарная частота выглядела внушительно: 237 тысяч показов у первой маски и 697 тысяч у второй.
Потом разобрали руками по смыслу. В маске «психолог» оказалось: 170 фраз про учёбу и поступление, 126 про школу и детский сад, 64 про медкомиссии и справки, 63 про работу и вакансии. Плюс поиск конкретных людей – «психолог юлия», «психолог елена». Плюс обрубки самого Вордстата: «психолог ли», «психолог где».
С «отношениями» вышло ещё хуже:
| ЧТО ВНУТРИ МАСКИ «ОТНОШЕНИЯ» | ПОКАЗОВ |
|---|---|
| Знакомства и Мамба | 55 489 |
| Юридическое «в отношении лица» | 25 606 |
| Кино и сериалы | 21 551 |
| Гадания и гороскопы | 21 138 |
| «Токсичные отношения» – всего фраз | 7 |
Семьсот тысяч показов, из которых к психологии не относится почти ничего. При этом «кризис в отношениях» – две фразы на всю выгрузку. Слово оказалось слишком многозначным, чтобы быть маской.
Это не претензия к Вордстату – он делает ровно то, что умеет: показывает фразы, содержащие ваше слово. Беда в том, что спрос живёт не в словах, а в проблемах, и одна проблема выражается сотней способов, где вашего слова может не быть вовсе.
Почему правила не ловят смысл
Следующая естественная мысль – написать правила. Словарь корней под каждую тему, регулярное выражение, прогон по всей базе. Мы так и сделали. В теме «Семья и отношения» поймалось вот это:
695 расставить знаки препинания 289 департамент земельных и имущественных отношений мэрии 139 россия азербайджан отношения на сегодняшний день 5 сгупс международные отношения 3 соотношение сухих дрожжей к свежим
Добавили якорь – фраза идёт в тему только если рядом стоит проблемная рамка («что делать», «как», «почему»). Стало чище, но принципиально ничего не изменилось. Потому что проблема была не в качестве правил.
Заказчик подкинул несколько живых формулировок, и каждая пробила очередную версию фильтра:
| ФРАЗА | ПОЧЕМУ ПРАВИЛО ЕЁ НЕ ВИДИТ |
|---|---|
| как подружиться с тёщей | ни одного «психологического» слова |
| свекровь ненавидит меня что делать | то же самое |
| мыслить денежно | нет ни темы, ни вопросительной формы |
| подковёрные игры | метафора вместо термина |
| люди не слышат, задачи не исполняются | язык клиента, а не поисковика |
Отдельная находка: на странице бизнес-консультаций лежало сорок формулировок болей, написанных языком самого клиента – «делегирование не работает», «зумеры не хотят работать», «пора резать косты». Ни одна не ловилась ни одним правилом.
Пробовали заходить от формы запроса – собрать всё, что начинается с «как», «что делать если», «почему я». Получили 215 тысяч фраз, а вместе с ними «как отделаться от парня за 10 дней фильм 2003» и «как научить собаку команде голос».
Никакая сеть из слов не полна. Правило может решать только, кого показать модели, но не кто из них наш.
Как вычитать по смыслу
Рабочая схема получилась такой.
Шаг первый – убрать заведомо чужое. Вот здесь правила уместны, потому что задача обратная: не «найти нужное», а «выкинуть очевидно ненужное». Порно, кино, игры, товары, авто, госуслуги, медицина, учёба. Ошибиться сложно, а объём падает сразу: с 23,5 до 18,5 миллионов.
Шаг второй – перевести все фразы в векторы. Каждая фраза прогоняется через
нейросеть-энкодер и превращается в эмбеддинг – вектор из 384 чисел, где близость
векторов означает близость смысла. Модель взяли
intfloat/multilingual-e5-small: она многоязычная, понимает русский и при
этом достаточно лёгкая, чтобы крутиться на домашней видеокарте. Считали локально,
на GTX 1060, в половинной точности fp16: 2 963 фразы в секунду, полный проход по
базе – около часа сорока. Результат – матрица 18,5 млн × 384 на 14 гигабайт, лежит
файлом и читается через memmap, то есть не требует загрузки в оперативную память
целиком. Ни рубля за API, ни одна фраза не ушла наружу.
Здесь стоит оговориться про чанки. В обычных задачах поиска по документам – том самом RAG, когда нейросеть отвечает на вопрос по вашей базе знаний, – длинный текст сначала режут на куски по несколько сотен слов, и каждый кусок векторизуют отдельно. Иначе смысл размазывается: у документа на десять страниц вектор получается усреднённый и бесполезный. У нас чанкование не нужно вовсе: единица смысла уже задана самой задачей – это поисковая фраза из двух-семи слов. Разбивать нечего, и в этом редкое удобство поисковой семантики как материала.
Механика же дальше ровно та, что работает под капотом любого RAG: векторное представление запроса, поиск ближайших соседей по косинусной близости, ранжирование выдачи. Разница в цели. В RAG мы ищем куски текста, чтобы ответить на вопрос пользователя. Здесь – ищем сами вопросы пользователей, чтобы понять, о чём писать. Тот же инструмент, развёрнутый в обратную сторону.
Шаг третий – описать, что мы ищем, примерами. Не словами, не правилами, а фразами: 203 эталона, написанных так, как пишет человек в поисковой строке. «Нет сил ни на что». «Просыпаюсь с чувством тревоги». «Муж меня не уважает». Каждый эталон превращается в такой же вектор, что и фразы из базы, – и дальше мы работаем не с текстом, а с геометрией: ищем точки, которые лежат рядом. Плюс 16 антиэталонов – примеры того, что похоже, но не наше: они задают границу области.
Шаг четвёртый – найти всех, кто близок к эталонам по смыслу. Дальше отобранные фразы кластеризуются – склеиваются в группы по взаимной близости векторов, каждая группа это одна будущая страница. Затем в дело входит языковая модель: она читает кластер и решает, наш он или нет, к какой теме относится, какой у человека интент – ищет информацию, ищет специалиста или сравнивает варианты, – и как назвать страницу. Векторы отвечают за «про что это», модель – за «нужно ли нам это». В конце сливаются страницы, оказавшиеся про одно и то же.
Вот что получилось на выходе смыслового поиска – в скобках близость к эталону:
+0.920 нет сил ни на что +0.825 не знаю чего хочу от жизни +0.790 выгорание на работе что делать +0.762 как отпустить бывшего +0.726 муж меня не уважает +0.680 подковерные игры
Последняя строка – та самая боль со страницы бизнес-консультаций, которую не ловило ни одно правило. У неё нет ни одного общего слова с эталонами. Нашлась по смыслу.
Грабли, на которые уже наступил
Общие фразы липнут ко всему. Первый прогон дал полный мусор – в «отношения» попали «пасьянс косынка» и «бонгакамс пары», в «саморазвитие» – «курс доллара» и «поиск по фото». Причина в устройстве векторного пространства: у коротких общих фраз эмбеддинг размытый, в нём преобладает общая для всего языка составляющая, и такая фраза оказывается близка сразу ко всему. Лечится центрированием – из каждого вектора вычитается средний вектор всего корпуса. Общая компонента уходит, остаётся то, чем фраза отличается от прочих, и темы расходятся. Без этого шага метод не работает вовсе.
Порог близости бессмыслен. Интуиция подсказывает поставить отсечку – берём всё, у чего косинусная близость выше 0,8. На практике у этой модели все сходства сжаты в узкую полосу 0,80–0,95, и слово «телефон» стоит в 0,86 от чего угодно. Абсолютные значения косинуса тут ничего не значат, значим только порядок. Поэтому работает не отсечка, а top-K: берём фиксированное число ближайших соседей к каждому эталону. Рейтинг вместо порога.
Дубли не видны глазом. В первой версии карты оказалось восемь разных страниц про одно и то же: «как забыть бывшего», «не могу забыть партнёра», «как отпустить человека», «расставание как пережить». Общих слов нет, корни разные – механическая склейка их не видит, а вот в векторном пространстве они стоят вплотную. Если бы мы этого не заметили, восемь текстов съели бы друг друга в выдаче.
Что осталось после вычитания
Вся воронка целиком:
23 541 022 запросов в базе
18 499 982 после отсева заведомо чужого
58 828 отобрано по смыслу
18 074 кластеров
10 289 размечено моделью
3 716 признано нашими
1 595 после слияния почти-дублей <- карта страниц
Полторы тысячи страниц. Не «идей для контент-плана», а конкретных страниц, у каждой из которых есть заголовок, набор реальных запросов и понятная частота. Год работы вперёд, где на каждый текст известно, кто и какими словами его ищет.
И главное отличие от привычного ядра: сюда попали темы, которых нет ни у одного конкурента – просто потому, что их не видно в Вордстате. Направления «Карьера» и «Бизнес», которые при словарном отборе выглядели пустыми – 142 и 52 фразы, – после смыслового поиска ожили.
Дальше карта превращается в страницы обычным программатик-SEO: шаблон плюс данные, генерация страниц под запросы партиями. Как это устроено технически, я разбирал отдельно – программатик-SEO: 100 страниц за ночь, которые не бесят Google.
Что это меняет на практике
Метод вычитания требует того, чего обычно не бывает у SEO-специалиста: полной базы запросов и умения считать смысл, а не слова. Зато он даёт три вещи, которых нельзя получить сложением.
| ЧТО ДАЁТ | ПОЧЕМУ СЛОЖЕНИЕМ ТАК НЕ ВЫЙДЕТ |
|---|---|
| Полнота | вы не можете пропустить тему, потому что не искали её: начинали со всего массива и только убирали |
| Язык клиента | в карту попадают формулировки, которых нет у конкурентов – они их тоже не нашли |
| Весь длинный хвост | не «низкочастотка на потом», а 14 миллионов показов в месяц, за которые никто не борется |
Сложение семантики было нормальным решением, пока считать смысл было дорого. Ещё несколько лет назад векторизация двадцати трёх миллионов фраз означала кластер серверов или счёт за API на десятки тысяч. Сейчас это полтора часа на видеокарте, которой девять лет, и ноль рублей: модели-энкодеры лежат в открытом доступе, весят сотни мегабайт и работают локально. Значит, исчезла причина, по которой мы все эти годы собирали ядро по кусочкам из чужих выгрузок.
Спрос не нужно искать. Он уже собран – в базе поисковых запросов. Нужно только убрать все лишнее.
Вопросы и ответы
Где взять полную базу поисковых запросов?
Готовые выгрузки продают агрегаторы вроде Букварикса – региональная база на 23,5 миллиона фраз занимает около 7 гигабайт и стоит недорого. Федеральная больше на порядок, но для поиска тем хватает региональной: это почти точная проекция федеральной, отличаются только цифры частот.
Сколько это стоит по деньгам и по времени?
Векторизация 18,5 миллионов фраз – полтора часа на домашней видеокарте и ноль рублей, модель бесплатная и работает локально. Платить приходится только за разметку кластеров языковой моделью, и это сотни рублей на весь проект. Основные затраты не в вычислениях, а в том, чтобы точно сформулировать, что вы ищете.
Можно ли обойтись без своей видеокарты?
Да, эмбеддинги считаются и на процессоре – просто дольше, порядка суток на такой объём. Либо через облачный API, но тогда за 18 миллионов фраз придётся заплатить, и все запросы уйдут наружу. Локальный вариант дешевле и приватнее.
Чем это отличается от кластеризации по топам выдачи?
Кластеризация по топам группирует уже собранные ключи по признаку «выдача похожа», и это работает. Но она ничего не добавляет к вашему списку: чего в нём не было, того и не появится. Вычитание решает более раннюю задачу – какие фразы вообще существуют и какие из них ваши.
Подходит ли метод не для психологии, а для обычного бизнеса?
Да, и чем «разговорнее» ниша, тем больше выигрыш. Ремонт техники, юридические услуги, медицина, обучение – везде, где люди описывают проблему своими словами, а не термином из прайса. Для узких технических ниш с устоявшейся терминологией разрыв с обычным сбором меньше.
Что делать с картой на полторы тысячи страниц дальше?
Публиковать партиями, начиная с тем с подтверждённой частотой, и следить, чтобы каждая страница была полезна сама по себе. Технически это обычная seo-оптимизация плюс генерация страниц под запросы по шаблону: одна тема – одна страница, без дублей, с перелинковкой внутри кластера.