Разбор

SEO-кластеризация через Claude API: 500 ключей за 30 минут и 15 рублей

Rush Analytics — от 2500 руб/мес. Claude API с Python — от 10 рублей за прогон и понимает интент там, где алгоритм видит только слова. Разбираю кейс: 300 ключей для магазина сантехники, 23 кластера, 11 рублей.

• 7 мин чтения

Я заплатил 11 рублей за кластеризацию 300 ключей для магазина сантехники. Rush Analytics за тот же объём взял бы около 625 рублей — и это при тарифе 2500 рублей в месяц, в который входит куча функций мне сейчас не нужных.

11₽
300 ключей → 23 кластера с объяснением интента
Стоимость одного прогона через Claude API (claude-sonnet-4-6). На выходе — CSV с группами, названиями кластеров и типами интента

Откуда вообще эта задача

Каждый раз, когда берёшь новый сайт в продвижение, первое с чем сталкиваешься — файл с ключами. Wordstat, KeyCollector, выгрузка из позиций — в сумме получается таблица на 200-800 строк, где перемешано всё: «купить» рядом с «как выбрать», «цена» рядом с «отзывы».

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

Раньше это делалось вручную или через специализированные инструменты. Rush Analytics берёт 2500 руб/мес за базовый план, Keys.so — от 3500 руб/мес. Это подписка, а не оплата за конкретную задачу.

Проблема подписки: я занимаюсь семантикой 2-3 раза в квартал. Держать инструмент ради 6 кластеризаций в год — нецелесообразно. При этом бесплатные инструменты режут объём или дают механические группы без понимания интента.

Сравнение стоимости кластеризации 300 ключей
Rush Analytics
~625 руб (1/4 от тарифа 2500/мес)
Keys.so
~875 руб (1/4 от тарифа 3500/мес)
Claude Sonnet
11 руб за прогон
Стоимость подписок — на момент написания (май 2026). У Claude — реальная стоимость API-вызовов: 6 батч-запросов + финальная консолидация, claude-sonnet-4-6. Оценка «1/4 от тарифа» — если кластеризуешь 4 раза в месяц.

Почему алгоритм ошибается там, где модель понимает

Алгоритмические кластеризаторы работают по частотным совпадениям: «смеситель однорычажный купить» и «смеситель однорычажный как работает» попадают в одну группу, потому что у них 2 общих слова из 3. Формально — правильно. Семантически — катастрофа.

Первый запрос — транзакционный. Человек достал карточку. Ему нужна страница каталога с фильтрами и кнопкой «В корзину». Второй — информационный. Человеку нужна статья с объяснением механизма работы. Если ты направляешь оба запроса на одну страницу — ты не отвечаешь ни на один из них по-настоящему.

Claude разбирает это не по шаблону, а по смыслу. Потому что это языковая модель — она понимает что происходит в голове у человека когда он набирает запрос.

ИНФО
Информационный

«как выбрать смеситель», «что такое термостатический кран», «почему течёт кран»

КОММЕРЧ
Коммерческий

«лучшие смесители 2026», «рейтинг смесителей Grohe», «сравнение hansgrohe и grohe»

ТРАНЗАКЦ
Транзакционный

«купить смеситель для кухни», «заказать ванну недорого», «цена смеситель grohe»

НАВИГ
Навигационный

«официальный сайт hansgrohe», «grohe интернет магазин», «santehnika.ru каталог»

Методология: как это работает технически

Схема простая. Берём список ключей, режем по 50 штук, каждый батч отправляем в API с промптом. Модель возвращает JSON с кластерами. Складываем всё в DataFrame, экспортируем в CSV.

Почему 50 ключей в батче, а не все сразу? Во-первых, контекстное окно не безгранично при большом списке. Во-вторых, меньший батч = более точная кластеризация: модель не пытается удержать сразу 500 строк при принятии решения. 50 — эмпирически хороший баланс.

Промпт, который я использую

Ты SEO-эксперт по русскоязычному поиску.
Проанализируй следующие поисковые запросы для ниши "{niche}".
Сгруппируй их по смыслу и поисковому интенту.

Для каждой группы укажи:
- cluster_name: короткое название кластера (2-4 слова)
- intent: тип интента (информационный / коммерческий / транзакционный / навигационный)
- keywords: список запросов из этого батча, которые в неё входят
- logic: одно предложение — почему эти запросы объединены

Верни ТОЛЬКО валидный JSON массив объектов. Никакого текста вне JSON.

Запросы:
{keywords_list}

Python-скрипт с батч-обработкой

import anthropic
import json
import csv
import time

client = anthropic.Anthropic(api_key="ВАШ_API_КЛЮЧ")

def load_keywords(filepath: str) -> list[str]:
    """Загружает ключи из CSV, по одному на строку."""
    with open(filepath, encoding="utf-8") as f:
        return [line.strip() for line in f if line.strip()]

def cluster_batch(keywords: list[str], niche: str) -> list[dict]:
    """Отправляет батч ключей в Claude и возвращает список кластеров."""
    keywords_str = "\n".join(f"- {kw}" for kw in keywords)
    prompt = f"""Ты SEO-эксперт по русскоязычному поиску.
Проанализируй следующие поисковые запросы для ниши "{niche}".
Сгруппируй их по смыслу и поисковому интенту.

Для каждой группы укажи:
- cluster_name: короткое название кластера (2-4 слова)
- intent: тип интента (информационный / коммерческий / транзакционный / навигационный)
- keywords: список запросов из этого батча, которые в неё входят
- logic: одно предложение почему эти запросы объединены

Верни ТОЛЬКО валидный JSON массив объектов. Никакого текста вне JSON.

Запросы:
{keywords_str}"""

    message = client.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=1500,
        messages=[{"role": "user", "content": prompt}]
    )
    return json.loads(message.content[0].text)

def clusterize(filepath: str, niche: str, batch_size: int = 50) -> list[dict]:
    """Основная функция: разбивает ключи на батчи и собирает результат."""
    keywords = load_keywords(filepath)
    all_clusters: list[dict] = []

    for i in range(0, len(keywords), batch_size):
        batch = keywords[i:i + batch_size]
        batch_num = i // batch_size + 1
        total_batches = (len(keywords) + batch_size - 1) // batch_size
        print(f"Батч {batch_num}/{total_batches}: {len(batch)} ключей...")

        clusters = cluster_batch(batch, niche)
        all_clusters.extend(clusters)

        if i + batch_size < len(keywords):
            time.sleep(0.5)  # небольшая пауза между запросами

    return all_clusters

def save_to_csv(clusters: list[dict], output_path: str) -> None:
    """Сохраняет кластеры в CSV: один ключ — одна строка."""
    rows = []
    for cluster in clusters:
        for kw in cluster.get("keywords", []):
            rows.append({
                "keyword": kw,
                "cluster": cluster.get("cluster_name", ""),
                "intent": cluster.get("intent", ""),
                "logic": cluster.get("logic", "")
            })

    with open(output_path, "w", newline="", encoding="utf-8-sig") as f:
        writer = csv.DictWriter(f, fieldnames=["keyword", "cluster", "intent", "logic"])
        writer.writeheader()
        writer.writerows(rows)

    print(f"Сохранено {len(rows)} строк в {output_path}")

if __name__ == "__main__":
    clusters = clusterize(
        filepath="keywords.csv",
        niche="магазин сантехники",
        batch_size=50
    )
    save_to_csv(clusters, "clustered.csv")
Зависимости: pip install anthropic. API-ключ получить на console.anthropic.com.

Реальный кейс: магазин сантехники, 300 ключей

Исходник: выгрузка из KeyCollector по нише «сантехника» — 300 запросов. Перемешано всё: бренды (Hansgrohe, Grohe, JACOB DELAFON), типы продуктов (смесители, ванны, душевые кабины), интент (купить / выбрать / ремонт / отзывы).

Rush Analytics при ручной кластеризации через алгоритм «по топу» собрал бы примерно 18-20 групп — и положил бы «hansgrohe смеситель купить» и «hansgrohe смеситель обзор» в один кластер, потому что слов совпадает больше.

Claude разделил на 23 кластера за один прогон (6 батчей + консолидация). Стоимость по логам API: $0.12 = 11 рублей при курсе 90 за доллар.

Несколько примеров что получилось:

Симулятор: как Claude группирует запросы сантехники

Выберите тему — увидите реальный результат из кейса

Rush Analytics vs Claude: честное сравнение

Я не собираюсь говорить что Claude везде лучше. У Rush Analytics есть задачи, где он выигрывает с большим отрывом.

ПараметрRush Analytics / Keys.soClaude API
Стоимость разового прогонаНет разового тарифа — только подписка от 2500/мес10–55 руб в зависимости от объёма и модели
Понимание интентаАлгоритм по совпадению слов — часто ошибается на близких запросахСемантический анализ — понимает что хочет пользователь
Объём за один разТысячи ключей в GUI без кодаОптимально до 700 ключей, выше — нужна доработка скрипта
Порог входаБез кода — загрузил файл, нажал кнопкуНужен базовый Python и API-ключ
Объяснение логикиНет — только готовые группыКаждый кластер с объяснением почему так
Интеграция с позициямиВстроено — видишь позиции прямо в кластерахНет — только кластеризация, позиции отдельно
Нестандартные нишиРаботает, но алгоритм обучен на популярных нишахПонимает любую нишу — можно указать контекст в промпте
Регулярная работа (еженедельно)Удобно — автоматизация, история, отчётыКаждый раз запускать скрипт вручную

Мой вывод такой: если делаешь семантику регулярно на больших объёмах — Rush или Keys.so оправданы. Если занимаешься 3-4 раза в год или работаешь с нестандартными нишами где алгоритм путается — Claude дешевле и точнее.

Как Claude различает интенты: проверяй перед использованием

Хочу предупредить об одном месте, где модель иногда ошибается. Запросы с «лучший» и «топ» модель часто кладёт в коммерческий интент — и обычно это правильно. Но иногда «лучшие советы по монтажу» — это информационный запрос, а «топ производителей смесителей» — тоже информационный, не транзакционный.

Проверяй кластеры с «лучший», «топ», «рейтинг» — там процент ошибок выше. Добавь в промпт явное уточнение: «Если “лучший” относится к процессу или мастерству, а не к выбору продукта — это информационный, а не коммерческий».

Ещё один паттерн: навигационные запросы Claude иногда смешивает с транзакционными. «Grohe официальный сайт» — навигационный, человек ищет конкретный ресурс. Но «смеситель grohe официальный» — уже транзакционный, просто с указанием бренда. Разница тонкая, и модель не всегда её ловит.

Квиз: как ты сейчас работаешь с семантикой

SEO-стратегия: проверь свой подход

5 вопросов — поймёшь где теряешь деньги или время

Вопрос 1 из 5
Как ты сейчас кластеризуешь семантику?
Вопрос 2 из 5
Сколько раз в месяц ты делаешь семантику для новых проектов или разделов?
Вопрос 3 из 5
Проверяешь ли ты интент вручную после автоматической кластеризации?
Вопрос 4 из 5
Платишь ли ты за инструмент, который используешь меньше 5 раз в месяц?
Вопрос 5 из 5
Сталкивался ли ты с каннибализацией страниц после кластеризации?

Что делать с результатом

CSV на выходе содержит четыре колонки: сам запрос, название кластера, тип интента, объяснение логики. Дальше — стандартный процесс.

Информационные кластеры идут в контент-план: статьи, гайды, FAQ-страницы. Транзакционные — в структуру каталога и карточки товаров. Коммерческие — страницы сравнений и рейтингов. Навигационные — не трогать, там и так всё понятно алгоритму.

Один лайфхак из практики: после экспорта добавь сортировку по кластеру, а потом вручную пройдись по группам из 3-4 запросов — именно там чаще всего обнаруживается что модель объединила разный интент. Большие кластеры (10+ ключей) обычно кликаются правильно. Маленькие — нет.

Что касается опциональной выгрузки в Google Sheets: установи pip install gspread, создай сервисный аккаунт в Google Console и замени save_to_csv на вызов gspread.authorize().open(название).get_worksheet(0).update(строки). Это 10 дополнительных строк кода.

Скрипт из статьи обрабатывает 300 ключей за 2-4 минуты. 500 ключей — за 4-6 минут, 10 батчей вместо 6. Стоимость при этом вырастет до 14-18 рублей на Sonnet.


Если хочешь попробовать — сохрани скрипт, получи API-ключ на console.anthropic.com (есть бесплатные 5 долларов для новых аккаунтов), загрузи свой список ключей. На первый прогон уйдёт 30 минут максимум.

Источники

Источники

Часто задаваемые вопросы

Сколько стоит кластеризация 300-500 ключей через Claude API?
На claude-sonnet-4-6 — от 10 до 15 рублей за полный прогон 300-500 ключей с батчевой обработкой по 50 штук. На claude-opus-4 будет дороже — около 35-55 рублей. Для большинства задач Sonnet достаточен: он отлично разбирает интент и смысловые группы.
Чем кластеризация через Claude лучше Rush Analytics?
Claude понимает интент и смысловые нюансы: отличит 'купить смеситель' (транзакционный) от 'как выбрать смеситель' (информационный). Алгоритмические инструменты типа Rush или Keys.so кластеризуют по частотным совпадениям слов — они часто кладут эти два запроса в одну группу. Плюс Claude сам объясняет логику каждого кластера.
Когда Rush Analytics всё же лучше Claude для кластеризации?
При работе с тысячами ключей регулярно — Rush и Keys.so удобнее: GUI, автоматический импорт, интеграция с позициями. Claude оптимален для разовых задач 200-700 ключей, нестандартных ниш где алгоритм ошибается, и ситуаций когда нужно понять логику групп, а не просто получить файл.
Как технически работает батчевая кластеризация через Claude API?
Список ключей режется на куски по 50 штук. Каждый батч отправляется отдельным API-запросом с промптом, который просит вернуть JSON с кластерами, их названиями и интент-типами. Результаты собираются в DataFrame и экспортируются в CSV. Итоговый прогон по 300 ключам занимает 2-4 минуты на выполнение и 6 батч-вызовов к API.
Нужно ли программировать, чтобы кластеризовать ключи через Claude?
Базовый Python нужен — скрипт около 80 строк. Достаточно понимать: как установить библиотеку (pip install anthropic), как передать список строк в функцию, как сохранить CSV. Скрипт из статьи работает как есть — нужно только вставить свой API-ключ и путь к файлу с ключами.
Какие типы интента Claude выделяет при кластеризации?
Четыре базовых: информационный ('как', 'что такое', 'почему'), коммерческий ('лучший', 'рейтинг', 'сравнение'), транзакционный ('купить', 'цена', 'заказать'), навигационный (бренды, конкретные сайты). Claude корректно разделяет их даже когда ключи похожи по словам, но различаются по намерению покупателя.
Обсуждение

    Пока без комментариев. Будьте первым.

    Войдите, чтобы отправить комментарий

    Вы сможете комментировать статьи, сохранять материалы

    или войдите по email

    Бесплатная диагностика · 30 минут · без обязательств

    Маркетинг работает, но продажи не растут?

    Отвечу на 3–5 вопросов о вашем бизнесе — и мы вместе разберём, где именно теряются клиенты и что с этим делать.

    Без продаж. Без навязчивых звонков.