Это вторая статья из нашей серии о том, как использовать кастомные скрипты для автоматизации задач РРС-специалистов. В первой мы рассказали, как можно быстро удалить неявные дубли из семантического ядра. А из этой статьи вы узнаете, как за пару минут сгруппировать сотни ключевых фраз в Google Таблице с помощью простого скрипта, который сэкономит вам часы ручной работы.
Представим: семантическое ядро собрано, дубли удалены и следующий шаг – группировка ключевых фраз.
Группировка ключевых фраз – этап, на котором поисковые запросы необходимо объединить в группы по сходству. Например, фразы “купить цветы” и “купить цветы бишкек” можно отнести к одной группе, а “цветы доставка” и “доставка цветов бишкек” – к другой. Такой подход помогает подготовить рекламные объявления, максимально релевантные поисковому запросу.
Чтобы не разбирать каждый запрос вручную или через фильтры таблицы, мы подготовили скрипт, который делает за нас 90% этой работы.
Кому подойдёт
Этот скрипт создан для PPC-специалистов, SEO-аналитиков и маркетологов, которые работают с семантическими ядрами в Google Таблицах.
Что потребуется
Только сама таблица с ключами — никаких платных сервисов или специальных знаний программирования. Всё, что нужно, это уметь копировать код и вставить его в редактор скриптов
Полезный скрипт от Peklo Company
Для примера возьмём тему “Отдых на Иссык-Куле”. В семантическое ядро попадут разные запросы – туры, цены на отдых, пансионаты, базы отдыха и прочее.
Пример СЯ на тему “Отдых на Иссык-Куле”
Запускаем скрипт и всего за несколько секунд он формирует нам новый лист в Google Таблице, на котором поисковые фразы уже рассортированы по общим признакам:
Пример уведомления: сколько создано групп и из скольких фраз
Пример результата работы скрипта
Среднее время выполнения даже объёмной задачи – менее минуты
- Рекомендуем делать вычитку результатов перед тем, как добавить группы к рекламным кампаниям, чтобы убедиться, что в группу не проскочил лишний ключ.
- При большом количестве строк с поисковыми фразами групп может быть много – это связано с детализацией разбивки результатов. Большинство из них можно вручную объединить между собой. Это займёт какое-то время, но итоговый результат всё равно будет в разы быстрее, чем без помощи скрипта.
Для данного примера: если брать полный список запросов по теме, в нём будет множество строк для отдельных пансионатов – “радуга”, “солнышко”, “звёздочка” и так далее. Скрипт сделает отдельную группу под каждый из них, и логично объединить такие группы в одну – “пансионаты”.
Ниже мы публикуем полный код скрипта. Если вы используете его в вашей работе, будем рады получить фидбек о том, сколько времени это решение сэкономило для вас.
Примечание: вы можете скорректировать скрипт под себя, изменяя настройки параметров MIN_SIMILARITY и MIN_GROUP_SIZE (первый отвечает за то, насколько схожими должны быть фразы для объединения, второй – какое минимальное количество фраз будет в группе). Выставленные настройки являются рекомендованными – при них мы получали наиболее хорошие результаты.
Код скрипта для чистки неявных дублей:
function removeDuplicatePhrases() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const data = sheet.getDataRange().getValues();
// Создаем объект для хранения фраз и их частотностей
const phrasesMap = {};
// Проходим по всем строкам и собираем фразы
for (let i = 0; i < data.length; i++) {
const phrase = data[i][0]; // Столбец A
const frequency = data[i][1]; // Столбец B
if (!phrase || !frequency) continue;
// Нормализуем фразу для сравнения (сортируем слова по алфавиту)
const normalized = normalizePhrase(phrase);
// Если такой вариант уже есть, сравниваем частотность
if (phrasesMap[normalized]) {
if (frequency > phrasesMap[normalized].frequency) {
// Заменяем на вариант с большей частотностью
phrasesMap[normalized] = {
original: phrase,
frequency: frequency,
row: i + 1 // Нумерация строк начинается с 1
};
}
} else {
phrasesMap[normalized] = {
original: phrase,
frequency: frequency,
row: i + 1
};
}
}
// Находим строки для удаления (все, кроме сохраненных в phrasesMap)
const rowsToKeep = new Set();
for (const key in phrasesMap) {
rowsToKeep.add(phrasesMap[key].row);
}
const rowsToDelete = [];
for (let i = 1; i <= data.length; i++) {
if (!rowsToKeep.has(i)) {
rowsToDelete.push(i);
}
}
// Удаляем строки снизу вверх, чтобы не сбить нумерацию
rowsToDelete.sort((a, b) => b - a);
for (const row of rowsToDelete) {
sheet.deleteRow(row);
}
SpreadsheetApp.getUi().alert(`Удалено ${rowsToDelete.length} дубликатов.`);
}
function normalizePhrase(phrase) {
// Удаляем лишние пробелы и приводим к нижнему регистру
const cleaned = phrase.toString().trim().toLowerCase();
// Разбиваем на слова, сортируем и собираем обратно
const words = cleaned.split(/\s+/).filter(word => word.length > 0);
words.sort();
return words.join(' ');
}
Автоматизация работы при помощи кастомных скриптов
Эта задача – не единственная, которую мы решаем при помощи автоматизации. Часть полезных скриптов мы публикуем в нашем блоге в открытом доступе. Некоторые решения мы не можем показать открыто, оставляя эти наработки только для внутреннего пользования.
Если вы в своей работе сталкиваетесь с рутинными задачами в Google Таблицах, вы можете заказать у нас кастомный скрипт для автоматизации этих задач и экономии своего времени. Для этого свяжитесь с нами любым удобным способом: ссылка на все наши контакты.