Ручной сбор семантики занимает 2 рабочих дня: брейнсторм, парсинг сайта, прогон через Wordstat, классификация по intent. Аналитик за это время устаёт и допускает ошибки. Когда нужно прогонять GEO-аудит для десятков клиентов в месяц — этот путь не масштабируется.

Альтернатива — связка YandexGPT + Wordstat API. YandexGPT генерирует 50 кандидатов под нишу за 10 секунд. Wordstat отсеивает нулёвки и шум за ещё 20 секунд. На выходе — 20 топ-запросов с живой частотностью и intent-метками. В aiseen эту связку используем как ядро pipeline.

Почему YandexGPT, а не ChatGPT для русской семантики?

YandexGPT обучен на русском поисковом потоке Яндекса. Модель видит реальные паттерны поисковых запросов в РФ — как пользователи пишут, какие сокращения используют, какие конструкции работают. ChatGPT и Claude обучены на большем мировом корпусе, но для русской поисковой семантики дают больше шума.

По нашим внутренним замерам, при генерации 50 запросов под русскую нишу: YandexGPT — 3–4 запроса оказываются нулёвками после Wordstat. GPT-4o-mini — 8–10 нулёвок. Claude Haiku — 11–14. Разница ощутимая. YandexGPT угадывает «создать чат-бот», ChatGPT придумывает «чат-бот платформа разработка интеграция b2b», которого никто не ищет.

Цена: YandexGPT-pro обходится в ~3 ₽ за генерацию 50 запросов. ChatGPT GPT-4o-mini — ~1.5 ₽. Разница 1.5 ₽, но уровень шума у YandexGPT в 3 раза ниже — экономия времени на валидации перевешивает.

50 запросов
за 15 минут вместо 2 дней
~3 ₽
цена прогона YandexGPT-pro
3 из 50
типичный шум, отсекает Wordstat

Готовый промпт для генерации 50 запросов

Промпт ниже — production-версия из pipeline aiseen. Генерирует 50 запросов, разбитых на 4 intent-сегмента (транзакционные, информационные, локальные, сравнительные). На выходе — JSON-структура, готовая для дальнейшего прогона через Wordstat.

Шаблон промпта для YandexGPT
Копируйте промпт ниже в API-запрос. Подставьте свою нишу, бренд, основные продукты, регион. Промпт работает с любым русскоязычным сегментом — от оптик до SaaS.
PROMPT · YandexGPT для семантики
Ты — SEO-аналитик для русского рынка. Сгенерируй 50 поисковых запросов
для бренда {BRAND} в нише {NICHE}.

Контекст:
- Сайт: {URL}
- Основные продукты: {PRODUCTS}
- Регион: {REGION}

Правила:
1. Запросы должны быть на русском, как реальные люди пишут в Яндексе
2. Длина 1-5 слов, без кавычек и спецсимволов
3. Распределение по intent (ровно 50 запросов):
   - 15 транзакционных ("купить", "заказать", "цена")
   - 15 информационных ("как", "что такое", "почему")
   - 10 локальных (с городом или "рядом")
   - 10 сравнительных ("vs", "лучшие", "топ")

Формат ответа — строго JSON:
{
  "queries": [
    {"q": "запрос 1", "intent": "transactional"},
    {"q": "запрос 2", "intent": "informational"},
    ...
  ]
}

Без комментариев, без markdown, только JSON.

Какие параметры модели использовать?

Для генерации семантики оптимальные параметры YandexGPT-pro: temperature: 0.5, maxTokens: 2000, response_format: json_object. Низкая температура (0.3) даёт скучную, дубликатную семантику. Высокая (0.9) — креатив, но больше выдумок. 0.5 — золотая середина для разнообразия без шума.

maxTokens: 2000 — достаточно для 50 запросов в JSON-формате. Если поставите 500 — модель оборвёт ответ на 30-м запросе. Если 5000 — платите за неиспользуемый буфер. json_object заставляет модель отдавать валидный JSON, избегаете парсинг markdown с wrappers типа ```json.

В n8n настройки YandexGPT-ноды: модель yandexgpt/latest, temperature 0.5, output format JSON. Folder ID из Yandex Cloud — обязательно. API-ключ через credentials, не inline. После каждого прогона проверяйте размер ответа: если меньше 4 КБ — модель срезала, увеличьте maxTokens.

Как подключить Wordstat для отсева нулёвок?

После генерации 50 запросов — прогон через Wordstat API. Эндпоинт /v1/keywordsresearch/searchqueries принимает массив фраз и возвращает частотность по каждой. Для 50 запросов один батч-запрос, 15–20 секунд.

Фильтр на выходе: оставляем только запросы с частотностью > 30 показов в месяц (для b2c) или > 15 (для b2b). Из 50 кандидатов остаётся 35–45 валидных. Дальше — классификация уже сделана YandexGPT при генерации, остаётся только отобрать топ-20 с балансом по 4 intent-сегментам.

Дополнительно проверяем дубликаты: «чатбот» и «чат-бот» — одна и та же фраза, оставляем с большей частотностью. После всех фильтров — 20 финальных запросов с intent-метками и частотностями. Эти 20 идут в runner, который прогоняет их через Я.Нейро и Google AIO.

Готовый код на Python (структура)

PYTHON · YandexGPT + Wordstat pipeline
import requests
import json
from collections import defaultdict

YGPT_KEY = "your-yandex-cloud-api-key"
FOLDER_ID = "your-folder-id"
DIRECT_TOKEN = "your-yandex-direct-oauth-token"

def generate_queries(brand, niche, url, products, region):
    prompt = f"""Ты — SEO-аналитик. Сгенерируй 50 запросов для {brand}
    в нише {niche}. Сайт: {url}. Продукты: {products}. Регион: {region}.
    Распределение: 15 транзакционных, 15 информационных, 10 локальных,
    10 сравнительных. Формат: JSON {{"queries":[{{"q":"...","intent":"..."}}]}}."""

    response = requests.post(
        "https://llm.api.cloud.yandex.net/foundationModels/v1/completion",
        headers={"Authorization": f"Api-Key {YGPT_KEY}"},
        json={
            "modelUri": f"gpt://{FOLDER_ID}/yandexgpt/latest",
            "completionOptions": {"temperature": 0.5, "maxTokens": 2000},
            "messages": [{"role": "user", "text": prompt}]
        }
    )
    text = response.json()["result"]["alternatives"][0]["message"]["text"]
    return json.loads(text)["queries"]

def validate_with_wordstat(queries):
    phrases = [q["q"] for q in queries]
    response = requests.post(
        "https://api.direct.yandex.ru/v5/keywordsresearch",
        headers={"Authorization": f"Bearer {DIRECT_TOKEN}"},
        json={"method": "search", "params": {"Phrases": phrases}}
    )
    freq_map = {item["Phrase"]: item["Shows"] for item in response.json()["result"]}
    for q in queries:
        q["shows"] = freq_map.get(q["q"], 0)
    return [q for q in queries if q["shows"] >= 30]

def pick_top_20(validated):
    by_intent = defaultdict(list)
    for q in validated:
        by_intent[q["intent"]].append(q)
    for intent in by_intent:
        by_intent[intent].sort(key=lambda x: x["shows"], reverse=True)
    return (by_intent["transactional"][:5] + by_intent["informational"][:6]
            + by_intent["local"][:5] + by_intent["comparative"][:4])

# Использование:
raw = generate_queries("BotCraft", "разработка чат-ботов",
                       "https://bot-craft.ru", "Salebot, Telegram-боты", "РФ")
validated = validate_with_wordstat(raw)
final_20 = pick_top_20(validated)

Что делать с дубликатами и шумом?

Дубликаты убираются в 3 шага: нормализация (нижний регистр, удаление дефисов «чат-бот» → «чатбот»), сравнение по нормализованной форме, удаление пар с меньшей частотностью. После Wordstat-фильтра 35–45 запросов; после удаления дубликатов — обычно 30–38.

«Шум» — это запросы с частотностью > 30, но коммерчески нерелевантные. Например, «чат-бот скачать бесплатно» с частотностью 1200 в месяц — живой запрос, но для платного b2b-SaaS бесполезный. Stop-list со словами «скачать», «бесплатно», «своими руками», «c++», «c sharp» убирает такие запросы. У нас в pipeline есть универсальный stop-list плюс ниша-specific (для медицины — «народные средства», для b2b — «своими руками»).

Сколько стоит прогон 50 запросов через YandexGPT?

YandexGPT-pro: 1.20 ₽ за 1000 input-токенов, 2.40 ₽ за 1000 output-токенов. Промпт + контекст — ~600 токенов input. Ответ JSON с 50 запросами — ~800 output-токенов. Итого: 0.72 ₽ + 1.92 ₽ = 2.64 ₽ за генерацию.

Wordstat API через Яндекс.Директ бесплатный. Итоговая стоимость семантики на одного клиента — 3 ₽. При цене продукта 2990 ₽ это 0.1% от выручки — семантика становится практически бесплатной операцией. Это и есть ключевой unit-экономики GEO-аудита через API: то, что у агентства стоит 8–15 тыс. (день работы аналитика), у нас стоит 3 ₽ и 15 секунд compute.

Когда YandexGPT даёт плохую семантику?

YandexGPT срывается на нишах с узкой профессиональной лексикой — фармакология, инженерные стандарты, юридические термины. Модель догадывается о терминах, но путает технические нюансы. Запросы вроде «купить азитромицин 500мг 6 таблеток» она генерирует криво — получается «азитромицин таблетки купить» без дозировки и количества.

Для таких ниш промпт нужно усиливать: подкладывать список технических терминов, давать 3–5 примеров правильных запросов через few-shot. Простой fix: вместо «продукты: {PRODUCTS}» давать «продукты с примерами запросов: {PRODUCTS_WITH_EXAMPLES}». 3 примера правильных запросов разгоняют модель.

Не хотите интегрировать API самостоятельно?

aiseen автоматизирует весь pipeline — YandexGPT генерация, Wordstat валидация, прогон через Я.Нейро и Google AIO, расчёт метрик и план действий. Готовый отчёт за 15 минут.

Заказать GEO-аудит за 2 990 ₽

Частые вопросы

Помогает ли GPT-4o-mini вместо YandexGPT?
Для русской семантики GPT-4o-mini генерирует больше шума: 8–10 из 50 запросов оказываются нулёвками или придуманными конструкциями. YandexGPT — 3–4 шумных. Причина: YandexGPT обучен на русском поисковом потоке Яндекса, видит частотные паттерны. Если бюджет важнее — GPT-4o-mini пройдёт, но с большим коэффициентом отсева.
Что лучше — yandexgpt-pro или yandexgpt-lite?
Для генерации семантики — pro. Lite модель дешевле, но даёт больше выдуманных запросов и хуже держит структуру JSON-ответа. Разница в цене мизерная: pro обойдётся в 3 ₽ за прогон 50 запросов, lite — в 1 ₽. Экономия 2 ₽ не стоит ухудшения качества.
Сколько времени занимает один прогон 50 запросов?
YandexGPT генерация — 8–12 секунд. Wordstat валидация через API — 15–20 секунд. Итого 30–40 секунд на полный цикл «промпт → 50 идей → 20 финальных». В n8n workflow с retry-логикой и timeout — около 60 секунд.
Можно ли использовать DeepSeek вместо YandexGPT?
Можно как fallback. DeepSeek-V3 даёт неплохую русскую семантику и стоит в 4–5 раз дешевле YandexGPT-pro. Минус: модель не видит русский поисковый поток, поэтому уровень шума выше — 6–8 из 50 нерелевантные. Используйте DeepSeek для черновых прогонов, YandexGPT — для финального production.
Нужно ли проверять каждый сгенерированный запрос вручную?
Нет. Wordstat-фильтр автоматически отсеет нулёвки. Дополнительная проверка нужна только для запросов, прошедших фильтр, но звучащих странно — обычно 2–3 на 50. Это 30 секунд глазами на финальной выборке. Полностью ручная валидация — overkill, при правильном промпте и Wordstat-фильтре её можно пропускать.
Влияет ли температура модели на качество семантики?
Да, значительно. При temperature=0.3 модель даёт скучную, предсказуемую семантику — много дубликатов. При temperature=0.9 — креатив, но больше выдумок. Оптимум для генерации запросов — 0.5–0.6: достаточно разнообразия для покрытия 4 intent-сегментов, но без шума.