Это вторая статья из нашей серии о том, как использовать кастомные скрипты для автоматизации задач РРС-специалистов. В первой мы рассказали, как можно быстро удалить неявные дубли из семантического ядра. А из этой статьи вы узнаете, как за пару минут сгруппировать сотни ключевых фраз в 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 Таблицах, вы можете заказать у нас кастомный скрипт для автоматизации этих задач и экономии своего времени. Для этого свяжитесь с нами любым удобным способом: ссылка на все наши контакты.

Андрей Осянин
PPC Team Lead
Как автоматизировать группировку фраз из семантического ядра в Google Таблице
3 min read · Sep 26, 2025
Полезное
Вернуться в блог
отправить
Это колл-ту-экшн, друг:
Бриф
Пожалуйста, выделите 3-5 минут своего времени, чтобы заполнить бриф. Это поможет нам изучить ваш бизнес перед тем, как связываться с вами. Если это вам неудобно, свяжитесь с нами напрямую.
Адрес
Кыргызская Республика, Бишкек
ул.Аалы Токомбаева 31/1, 6 этаж, кабинет 605
Контакты
Peklo Studio 2016 - 2025
Error get alias