Как построить контент-комбайн: от анализа конкурентов до публикации SEO-статей за 15 минут

Главный экран <a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Ft.me%2Frobotseo&postId=2035643" rel="nofollow noreferrer noopener" target="_blank">@robotseo</a>
Главный экран @robotseo

Была поставлена себе задача: создать по-настоящему сквозной автогенератор SEO-контента – от списка ключей до готовой статьи на WordPress. Никакого ручного труда: парсинг выдачи, анализ конкурентов, генерация текста, картинок и публикация – всё в одном конвейере. В этой статье – мой личный кейс с техническими подробностями о том, как это получилось с помощью Python и AI решений.

Парсинг выдачи (через XMLStock) (скрипт первый)

Первый этап – сбор «сырых» данных. По каждому ключевому слову через сервис XMLstock скрипт отправляет запросы в Google и Яндекс, получает результаты выдачи в виде XML. Search API этого сервиса позволяет «быстро парсить поисковую выдачу ПС без прокси и каптчи, что снимает все ограничения обычного скрейпинга. С помощью XML-парсера вытаскиваю список URL топ-10 результатов. Затем скрипт отбирает только нужные сайты: например, фильтрую аггрегаторы, форумы и низкокачественные домены по чёрному списку.

После этого с каждым URL парсер делает обычный запрос (requests/urllib), получает HTML. Из него извлекается <title>, <meta name="description"> и ключевые абзацы текста (через BeautifulSoup или аналог). Получаю таким образом статистику по конкурентам: их заголовки, описания и структуру контента. Эта база служит входными данными для дальнейшего анализа и генерации.

Генерация мета-тегов через AI (DeepSeek) (скрипт второй)

Зная целевой ключ и мета-теги конкурентов, создается промпт для LLM (я тестировал китайские DeepSeek и Qwen) и генерирую Title и meta-description. Шаблоны очень простые: «Title должен быть не длиннее 60 символов, включать ключ, кластер конкурента» и т.д. Примеры промптов (в него подставляем ключ и мета-теги конкурентов):

  • Generate an SEO title under 60 chars for keyword "чат-бот для бизнеса", include the keyword, in Russian.
  • Generate an SEO meta description under 160 chars for keyword "чат-бот для бизнеса" in Russian, starting with the keyword.

Полученные ответы никуда не пускаю без проверок: они привязаны к строгому шаблону. Если модель пытается «фантазировать», система это фиксирует и даёт повторный запрос с более жёсткой формулировкой. Результат — готовые SEO-теги «под ключ», с правильной длиной и ключом.

Структурная аналитика топа: AI находит пробелы и создаёт план статьи (скрипт третий)

Далее скрипт анализирует контент конкурентов. Задача – найти «контент-гэп», то есть недостающие темы в топе, и на основе этого сгенерировать структуру статьи. Для этого используются подходы контент-анализа с LLM. Например, по совокупности текстов топ-10 строится семантический граф ключевых тем. Затем LLM (по мотивам идей «Content Gap Analysis») определяет группы подтем и «пробелы» между ними. InfraNodus описывает похожий подход: сеть тем создаётся на основе поисковой выдачи, а ИИ-ассистент генерирует план статьи, «гарантирующий, что структура касается всех обнаруженных тем» infranodus.com.

В практике это выглядит так: подсказка вроде «Проанализируй тексты из лучших 10 результатов по запросу X и выведи план будущей статьи: пункты и подпункты, покрывающие самые важные темы» даёт нам подробный список разделов. Модель учитывает всё от основ до «длиннохвостых» нюансов: словом, получаем содержательный скелет статьи, перекрывающий каждый пробел в выдаче. Это сильно экономит время – вместо голого текста у нас сразу осмысленная структура.

Генерация статей с HTML-разметкой и строгим форматированием (скрипт четвёртый)

Получив план, задаём ИИ финальное задание: «Напиши статью по этому плану, результат выдай в формате HTML». Важно, чтобы ИИ выводил теги сразу: заголовки <h2>-<h4>, абзацы <p>, списки ,ul><li> и т.д., без лишнего мусора (инлайновых стилей, отладочной разметки). Как показывает практика, сейчас LLM вроде GPT-4o или DeepSeek могут генерировать связный текст целыми блоками и сразу отдать его в HTML.

Далее происходит полная имитация действий человека: скрипт через запускает несколько экземпляров Chrome с разными профилями (аккаунтами), автоматически переключается между ними, вводит промпты и принимает ответы прямо в веб-интерфейсе. Все операции выполняются как будто человек сидит за клавиатурой, но без единого платного API — поэтому весь процесс остаётся бесплатным. При этом любые ограничения на количество запросов обрабатываются за счёт перебора профилей: если на одном аккаунте исчерпан лимит генераций, скрипт просто продолжает работу через следующий.

Результат — полноценная статья в виде «чистого» HTML-кода, готовая к публикации. На этом этапе встроенная «инженерная» проверка форматирования (валидация HTML, контроль объёма разделов и соответствие требованиям Yoast) автоматически выявляет и устраняет ошибки до попадания в CMS.

Формирование промптов для генераторов изображений (скрипт пятый)

После текстов генерируются промпты для иллюстрации. Для каждой статьи анализируется контент и формируются описательные промпты к нейросетям. К примеру, если статья про «чат-бот для бизнеса», в качестве подсказки может быть: «Инфографика о том, как чат-бот помогает бизнесу: графики, иконки чат-бота, мотивирующая цветовая палитра».

Промпты работают как шаблоны с подтекстом. Скрипт поддерживает несколько форматов: «infographic», «illustration», «screenshot interface» и т.п., чтобы PICLum легко «понял», что рисовать. Пример:

  • A clean infographic showing how a chatbot increases sales in a company. Use blue and green colors, include a graph and a chat icon (in Russian).

Генерация таких подсказок автоматизирована: ключевые слова и тематики из структуры статьи подставляются в заранее отлаженный шаблон. Это даёт необходимые данные для следующего шага.

Автоматическая генерация изображений через Piclumen без API (OpenCV + PyAutoGUI) (скрипт шестой)

С выбранными промптами запускаем Piclumen. Код на Python с помощью PyAutoGUI кликает кнопки и вставляет текст, а OpenCV распознаёт нужные элементы по шаблону.

Например, сначала делаем скрин GUI Piclumen и ищем по картинке кнопку «Generate» или поле для ввода. С помощью cv2.matchTemplate находим координаты нужных элементов [КОД OpenCV] и щёлкаем по ним PyAutoGUI. Затем PyAutoGUI вставляет промпт из нашего шаблона и нажимает Enter. После этого скрипт следит за прогрессом: периодически делает скрин и проверяет, не появилась ли страница с готовым результатом. Когда изображение сгенерировано и показано на экране, PyAutoGUI нажимает кнопку Download.

Далее скрипт автоматически переименовывает файл (название по ключу статьи) и перемещает в нужную папку. Путь к скачанному изображению сохраняется в Google Sheets (смотрите следующий пункт). Всё это – по сути эмуляция действий пользователя «на автомате». Кстати, такой способ описан и другими энтузиастами: например, создатель GenPiCam признаётся, что «…using some very inelegant bot interactions with PyAutoGUI (as there’s no API)» simon-aubury.medium.com. То же самое придумали и мы – спасибо открытому исходному коду!

Масштабируемость: пакетная обработка и ночной режим

Весь пайплайн рассчитан на тысячи ключей. Всё встраивается в циклы: считываем из таблицы списка ключей (например, Google Sheets или CSV) и обрабатываем каждый по порядку. По каждому ключу храним статус выполнения (успех, исключение, пропуск). Если дело ночью – нет проблем: задача запускается в фоне или через cron, ресурсы в Windows/Linux выделяем по минимуму, чтобы не мешать дневной работе.

Главное – система смотрит вперёд. Если у нас, скажем, очередь из 1000 запросов, цикл идёт сам, и при сбоях по одной записи просто переходим к следующей. К любому этапу можно подключиться отдельно: например, сразу заново запустить генерацию текста для тех ключей, где метатеги уже сгенерированы, но произошёл сбой.

Интеллектуальная обработка ошибок

Реальные системы никогда не работают без сбоев, поэтому на каждом шаге добавлена защита от падения. Все ключевые места (запросы к внешним сервисам, генерация LLM, парсинг HTML) «упакованы» в try/except. При ошибке логируется подробный стек в общий лог-файл, отмечается запись как «ошибка» и, что важно, даётся системе шанс перезапустить попытку (retry) или спокойно перейти к следующему ключу.

Для логирования используется стандартный модуль logging (можно писать и на диск, и в Google Sheets). Логи помогают увидеть, например, если Piclumen отказал или сеть потерялась. Главное – в графике Цикла ничего не ломается: мы не останавливаем всю партию из-за одной аварии.

Если что-то пойдёт не так — мы об этом узнаем из лога, но скрипт не прервёт весь процесс
Если что-то пойдёт не так — мы об этом узнаем из лога, но скрипт не прервёт весь процесс

Гибкая архитектура

Каждый блок – отдельный скрипт или функция. Парсинг выдачи – в одном модуле, генерация мета-тегов – в другом, генерация текста – в третьем и т.д. Между ними договорённый интерфейс: например, JSON-файлы, Sheets или простые CSV с результатами. Такая модульность даёт шанс быстро менять настройки: захотели протестировать другую LLM – меняем вызов в одном месте. Поменяли систему генерации картинок – лишь поменяется код управления GUI.

Кроме того, у каждого модуля есть свои конфиги: можно заменить язык («переключиться» на английский), поменять нишу, изменить шаблоны промптов – и в целом ничего не разваливается. Практически это похоже на микросервисы внутри одного проекта: общая шина данных (таблица) и «плагины» этапов, которые при необходимости легко переписать под любую другую модель или библиотеку.

Централизация в Google Sheets

Всю работа выводится в Google Sheets. Это своеобразная единая панель мониторинга и управления. В каждой строке – ключ, статус генерации (тегов, текста, изображений, постинга), ссылки на результаты. С помощью [Google Sheets API] читаем и обновляем ячейки прямо из скрипта. Google описывает этот API как «RESTful-интерфейс, который позволяет читать и изменять данные в электронной таблице»

То есть, например, скрипт «генерация текста» сразу записывает в таблицу: «готово», публикует URL картинки и черновика WP. Отсюда же можно вручную вмешаться: исправить заголовок, добавить или убрать какой-то пункт, пересохранить статус. Такой централизованный подход упрощает контроль: одна табличка – и видно весь конвейер.

Публикация в WordPress через REST API (скрипт седьмой)

Когда текст и иллюстрация готовы, отправляем всё на WordPress. Используем REST API WP – обычный POST на /wp-json/wp/v2/posts. Публикуем со статусом draft или сразу publish (настраивается). Тело запроса содержит title, content (наш HTML), а также SEO-поля. С Yoast SEO для этого удобная возможность: в JSON передаём объект metadata, где указываем нужные ключи. Например:

'metadata': { 'yoast_wpseo_focuskw': 'ключевое слово', 'yoast_wpseo_title': 'Сгенерированный SEO Title', 'yoast_wpseo_metadesc': 'Сгенерированный meta-description' }

Как раз так Yoast и ожидает данные для meta-тегов. Настройка категорий идёт тоже программно: по целевой аудитории скрипт через ответ от ИИ проставляет «Новичкам», «Профи» или нужный раздел портала – передаём IDs в JSON.

В итоге получается живой пост на сайте – со всеми нужными SEO-тегами в одном запросе. Это гарантирует, что сразу после публикации материал оптимизирован: Yoast видит title/desc и выставляет оценку SEO.

GUI-оболочка на PyQt5: удобное управление (главный управляющий скрипт)

Последний штрих – собственный GUI на PyQt5 для управления процессом. В главном окне – лог, таблица ключей и кнопки запуска. Здесь можно «по нажатию кнопки» начать полную автогенерацию или, скажем, только конкретный этап (например, только генерация текстов). Окно выводит текущее действие и прогресс, дубль лог-файла можно просмотреть в окошке. Кнопка «авто-ген» запускает всё подряд: уронил чашку кофе – и вернулся, а всё уже сделано за ночь. Такое GUI удобно тем, что коллеги (редакторы) без знания кода могут нажать и всё увидят.

Итог: мы получили очень конкретный инструмент — ни вода, ни пафос, только результат. Просто инженерный кайф, когда весь процесс от ключевика до поста автоматизирован.

Если вам понравился мой кейс (или нужна помощь с автоматизацией) – подписывайтесь на мой Telegram-канал @robotseo. Там я выкладываю много технических фишек по SEO и автоматизации!

4
4 комментария