


Как сделать ИИ-агента для сбора ключевых слов и генерации тем для статей
Частая задача при работе с контентом — продумать темы для статей и постов, которые будут интересны целевой аудитории. Обычно редакторы, SEO-специалисты и маркетологи делают это вручную: открывают Яндекс Вордстат, выписывают ключи и потом думают, какие темы могут быть интересны пользователям.
Мы решили автоматизировать этот процесс и создали ИИ-агента, который будет самостоятельно выгружать списки ключевых слов, разбивать их на родственные группы и потом придумывать темы для статей.
| Важно! Строить агента мы будем на платформе n8n. Если до этого вы с ней не взаимодействовали, сначала рекомендуем пройти наш мини-курс по агентам. Иначе разобраться в гайде будет сложно. |
А если не хотите читать гайд — смотрите короткий видеообзор, где мы разбираемся со структурой агента и показываем, как он работает.
Шаг 1. Подключаем нужные сервисы
Нам понадобятся:
- OpenRouter или другая нейросеть на ваш выбор: ChatGPT, Gemini, Claude и т. д;
- Google-таблицы.
Если ранее не подключали к n8n Google-сервисы, сначала изучите наш другой гайд:
Шаг 2. Строим бота
В этом гайде мы покажем простой способ настройки. Для этого вам понадобится просто скачать файлы с готовой структурой бота и импортировать их в редактор.
Файлы для скачивания лежат в этой папке.
Создаем основу
Сначала создайте новый workflow и импортируйте файл Keyword Planner.json. Это — основа будущего агента. Здесь нужно проставить данные своих аккаунтов. На скрине ниже я выделил элементы, в которых нужно активировать свои аккаунты.

Настраиваем таблицы
Для этого нужно открыть ноды с иконкой Google Sheets и указать название таблицы и листа, куда будет записываться информация.

Таблица должна быть определенного вида с несколькими столбцами:
- Niche
- Group_Number
- Group_Name
- Keywords
- Topic_Number
- Topics
Чтобы не собирать таблицу вручную, можете создать копию моей: шаблон таблицы.
Важно! При создании копии выскочит окошко с информацией, что вместе с таблицей вы скопируете скрипт. Не пугайтесь, это безопасный скрипт, он нужен для работы таблицы, причину объясню ниже.
Как работать с агентом
Агент работает в Google таблицах. Чтобы начался процесс сбора ключей и генерации тем, в ячейку A2 нужно ввести тему, по которой нужно собрать ключи. Например, «Нейросеть», «Нейросеть для фото» и т. д.
Под капотом все работает так: вы вводите название темы → агент собирает список ключевых слов (250 самых популярных запросов) → разбивает их на родственные группы → по каждой группе предлагает 10 тем.

На всех этапах задействуются нейросети: для извлечения ключей, для распределения их по группам и для генерации тем. В каждой нейросети используется свой промпт. В агентах Keyword Extractor1 и AI Keyword Grouping промпты можете не менять, а вот в SEO Title Generation1 можете поменять запрос под себя. Сейчас он выглядит так:
Ты — эксперт по контент-маркетингу. Создай темы статей на основе ключевых слов.
Группа ключевых слов: {{ $json.Keywords }}
Номер группы: {{ $json.Group_Number }}
Основная ниша: {{ $json.Niche }}
Инструкции:
1. Создай 10 привлекательных тем статей для этой группы ключевых слов
2. Темы должны покрывать все ключевые слова из группы
3. Используй SEO-оптимизированные заголовки
4. Делай заголовки кликабельными и полезными
ВАЖНО: Верни ответ точно в таком формате:
Тема 1: [заголовок статьи]
Тема 2: [заголовок статьи]
Тема 3: [заголовок статьи]
Тема 4: [заголовок статьи]
Тема 5: [заголовок статьи]
Тема 6: [заголовок статьи]
Тема 7: [заголовок статьи]
Тема 8: [заголовок статьи]
Тема 9: [заголовок статьи]
Тема 10: [заголовок статьи]
Никаких дополнительных текстов!
Важно! Ты передаешь только темы. Ты не пишешь никаких вводных предложений и вообще ничего не говоришь. Только передаешь темы.
Этой простой и короткий промпт, по которому получаются неплохие темы для статей за счет уже подготовленных ключевых запросов.
Зачем в таблице используется скрипт
К сожалению, я столкнулся с нерешаемой проблемой — функционал n8n не позволяет внутри одного листа записать список тем для каждой группы ключевых запросов. Агент записывает только последние 10 тем. Поэтому пришлось пойти таким путем:
- Все темы поступают в ячейку F2 (напомню, агент генерирует 10 тем для статей по каждой группе ключевых запросов)
- После попадания списка тем в ячейку F2 запускается триггер со скриптом, который переносит все темы на новую страницу и разбивает их на группы. Чтобы работать с темами было удобно.
Вот скрипт, который используется в таблице:
function processTopicsFromF2() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const mainSheet = spreadsheet.getActiveSheet();
const topicsCell = mainSheet.getRange('F2');
const topicsText = topicsCell.getValue();
if (!topicsText || topicsText.toString().trim() === '') {
SpreadsheetApp.getUi().alert('Ячейка F2 пуста');
return;
}
const timestamp = new Date().toISOString().slice(0,16).replace(/[:-]/g, '').replace('T', '_');
const newSheetName = `Topics_${timestamp}`;
const newSheet = spreadsheet.insertSheet(newSheetName);
newSheet.getRange('A1:C1').setValues([['Группа', 'Темы статей', 'Количество тем']]);
newSheet.getRange('A1:C1').setFontWeight('bold');
const groups = parseTopicsByGroups(topicsText.toString());
let row = 2;
groups.forEach((group, index) => {
newSheet.getRange(row, 1).setValue(group.groupName);
const formattedTopics = group.topics.map((topic, topicIndex) => {
return `Тема ${topicIndex + 1}: ${topic}`;
}).join('\n\n');
newSheet.getRange(row, 2).setValue(formattedTopics);
newSheet.getRange(row, 3).setValue(group.topics.length);
row++;
});
SpreadsheetApp.getUi().alert(`Создан лист "${newSheetName}"`);
}
function parseTopicsByGroups(text) {
const groups = [];
const parts = text.split(/==========.*?==========/);
parts.forEach((part, index) => {
if (index === 0) return;
const topics = [];
const lines = part.split('\n');
lines.forEach(line => {
const match = line.match(/^Тема\s+\d+:\s*(.+)$/);
if (match) {
topics.push(match[1].trim());
}
});
if (topics.length > 0) {
groups.push({
groupName: `Группа ${index}`,
topics: topics
});
}
});
return groups;
}
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('🚀 Обработка тем')
.addItem('📝 Создать лист с темами', 'processTopicsFromF2')
.addToUi();
}
Важно! После добавления скрипта сохраните его.
Разрешите запуск скрипта, авторизуйтесь через Google аккаунт. Скрипт запустится.
После этого вернитесь в таблицу — на верхней панели появится кнопка «Обработка тем».
После появления тем (они все запишутся в ячейку F2), кликните на кнопку «Обработка тем» → «Создать лист с темами» → создастся новый лист, где темы будут разбиты по группам.

Сколько стоит содержать такого агента
Конкретную сумму назвать, все сильно зависит от размера ваших системных промптов, используемых нейросетей и количества генерируемых тем. Я, например, тестировал все на Gemini 2.5 flash и pro и один запрос стоит меньше цента.