Зачем нужен SEO-бот
SEO-специалист тратит до 60% рабочего времени на рутинные задачи: сбор семантического ядра, кластеризация запросов, создание контент-планов, написание мета-тегов, генерация текстов. Всё это можно автоматизировать с помощью AI-бота, который будет выполнять эти задачи по расписанию или по команде.
В этом туториале мы создадим SEO-бота, используя Claude API, MCP-серверы и Playwright. Бот будет:
- Собирать поисковые подсказки и связанные запросы
- Кластеризовать запросы по интенту
- Генерировать SEO-оптимизированные тексты
- Автоматически публиковать контент
Весь процесс разработки — через вайбкодинг в Claude Code.
Архитектура бота
Компоненты
Бот состоит из четырёх модулей:
- Collector — сбор семантического ядра через поисковые подсказки и API
- Clusterer — кластеризация собранных запросов по темам и интенту
- Generator — генерация текстов и мета-тегов через Claude API
- Publisher — автоматическая публикация в CMS (WordPress или Hugo)
Технологический стек
- Python 3.12
- Claude API (Anthropic SDK)
- Playwright для парсинга поисковых подсказок
- SQLite для хранения семантического ядра
- FastAPI для API-интерфейса (опционально)
Шаг 1: Модуль сбора семантики (Collector)
Сбор поисковых подсказок
Поисковые подсказки — один из лучших источников для семантического ядра. Google и Яндекс подсказывают запросы, которые реально ищут пользователи.
Мы используем Playwright для автоматизации сбора. Промпт для Claude Code:
«Создай класс SuggestCollector на Python. Метод collect(seed_keyword: str) -> list[str] принимает базовое ключевое слово, открывает Google через Playwright, вводит ключевое слово + каждую букву алфавита (а-я), собирает подсказки из выпадающего списка. Возвращает дедуплицированный список подсказок. Добавь задержку 1-2 секунды между запросами для избежания блокировки».
Обогащение данных
После сбора подсказок бот обогащает каждый запрос дополнительными данными:
- Примерная частотность (через Яндекс.Wordstat API или оценку на основе конкуренции)
- Тип интента (информационный, транзакционный, навигационный)
- Длина запроса (количество слов)
Определение интента происходит через Claude API: «Определи тип поискового интента для запроса “{query}”: информационный, транзакционный, навигационный или коммерческий. Ответь одним словом».
Хранение в базе данных
Все собранные запросы сохраняются в SQLite-базу с полями:
id— уникальный идентификаторkeyword— поисковый запросseed— исходное ключевое словоintent— тип интентаcluster_id— ID кластера (заполняется позже)created_at— дата сбора
Шаг 2: Кластеризация (Clusterer)
Алгоритм кластеризации
Кластеризация запросов — группировка похожих запросов, которые можно покрыть одной страницей. Мы используем комбинацию двух подходов.
Семантическая кластеризация через Claude:
Отправляем пакет из 50-100 запросов в Claude API с промптом: «Сгруппируй следующие поисковые запросы в тематические кластеры. Каждый кластер = одна потенциальная страница. Для каждого кластера укажи: название темы, основной запрос (наиболее частотный), список запросов. Формат ответа — JSON».
Пороговая кластеризация по SERP:
Для более точной кластеризации проверяем пересечение поисковой выдачи. Если два запроса имеют более 3 одинаковых URL в топ-10, они попадают в один кластер. Playwright парсит поисковую выдачу для каждого запроса.
Приоритизация кластеров
После кластеризации бот оценивает каждый кластер по приоритету:
- Количество запросов в кластере
- Суммарная частотность
- Преобладающий интент (транзакционные кластеры — приоритет)
- Конкурентность (оценка через количество результатов в выдаче)
Шаг 3: Генерация контента (Generator)
Промпт для генерации текста
Ключевой элемент — промпт, который обеспечивает SEO-оптимизированный текст. Вот структура промпта, которую использует наш бот:
Бот отправляет в Claude API структурированный запрос с информацией о кластере (основной запрос, дополнительные запросы, интент) и требованиями к тексту (длина, структура, ключевые слова, мета-теги).
Генерация мета-тегов
Отдельный промпт для мета-тегов: «Для статьи с заголовком “{title}” о теме “{topic}” создай: 1) meta description (150-160 символов, с ключевым словом в начале), 2) 5-7 тегов для категоризации, 3) Open Graph описание (до 200 символов)».
Контроль качества
Бот автоматически проверяет сгенерированный контент:
- Длина текста: минимум 1000 слов
- Наличие ключевых слов: основной запрос кластера встречается 3-5 раз
- Структура: минимум 3 заголовка H2, наличие списков
- Уникальность: проверка через API антиплагиата (опционально)
- Читабельность: оценка длины предложений и абзацев
Если текст не проходит проверку, бот автоматически перегенерирует его с уточнённым промптом.
Шаг 4: Автопубликация (Publisher)
Публикация в WordPress
Для WordPress бот использует REST API:
- Создание поста с заголовком, контентом и мета-данными
- Загрузка обложки через media API
- Установка категорий и тегов
- Планирование публикации на заданную дату
Публикация в Hugo
Для Hugo (как в нашем случае) бот создаёт Markdown-файлы:
- Формирование frontmatter (title, slug, date, description, tags, categories)
- Сохранение в нужную директорию (
content/blog/) - Git commit и push для автоматического деплоя через CI/CD
Расписание публикаций
Бот поддерживает планирование публикаций:
- Равномерное распределение по дням (1-2 статьи в день)
- Учёт часовых поясов (публикация в 09:00 МСК)
- Возможность ручного утверждения перед публикацией
Оркестрация: собираем всё вместе
Основной пайплайн
Полный цикл работы бота выглядит так:
- Ввод: список seed-ключевых слов
- Collector: сбор 500-1000 подсказок по каждому seed
- Clusterer: группировка в 50-100 кластеров
- Приоритизация: выбор топ-10 кластеров для контента
- Generator: генерация текстов для выбранных кластеров
- Publisher: публикация по расписанию
Запуск через CLI
Бот управляется через командную строку:
python seo_bot.py collect --seed "SEO оптимизация"
python seo_bot.py cluster
python seo_bot.py generate --limit 10
python seo_bot.py publish --schedule daily
Запуск через cron
Для автоматической работы настройте cron-задачи:
- Сбор семантики: раз в неделю
- Кластеризация: после каждого сбора
- Генерация: ежедневно (1-2 текста)
- Публикация: ежедневно в заданное время
Оптимизация расходов на Claude API
Выбор модели
Для разных задач используйте разные модели:
- Claude Haiku: определение интентов, классификация запросов (дёшево и быстро)
- Claude Sonnet: генерация мета-тегов и коротких текстов
- Claude Opus: генерация длинных экспертных статей (дороже, но качественнее)
Батчинг запросов
Вместо отправки каждого запроса отдельно, группируйте их:
- Определение интентов: 50-100 запросов в одном промпте
- Кластеризация: пакеты по 100-200 запросов
- Генерация мета-тегов: 10-20 за раз
Батчинг снижает расходы на 50-70% за счёт уменьшения накладных расходов на каждый вызов API.
Кэширование
Кэшируйте результаты для избежания повторных вызовов API:
- Интенты запросов (меняются редко)
- Кластеры (пересчитывать только при добавлении новых запросов)
- Шаблонные части контента (вступления, заключения)
Результаты
Метрики бота за первый месяц работы
- Собрано ключевых слов: 12 000+
- Сформировано кластеров: 340
- Сгенерировано статей: 30
- Расходы на Claude API: ~$45
- Расходы на время разработки: 2 часа на базовую версию, 8 часов на доработки
- Индексация: 90% статей проиндексированы в течение 72 часов
- Трафик: +2 400 визитов в первый месяц
Выводы
- SEO-бот через вайбкодинг — реалистичный проект для одного вечера. Базовая версия (сбор семантики + генерация текстов) создаётся за 2 часа. Полноценная система с кластеризацией и автопубликацией — за 1-2 дня.
- Автоматизация рутины освобождает SEO-специалиста для стратегической работы: анализ конкурентов, оптимизация конверсий, работа с внешними ссылками.
- Качество AI-контента зависит от промптов. Инвестируйте время в настройку промптов для генерации — это окупится сторицей.
- Оптимизация расходов на API критична для рентабельности: используйте разные модели для разных задач, батчинг и кэширование.
- Контроль качества нельзя полностью автоматизировать. Периодически проверяйте сгенерированный контент вручную и корректируйте промпты.
