Новый скрипт управления ставками в AdWords — по проценту полученных показов

Руководитель отдела контекстной рекламы в агентстве Mello Андрей Педченко подготовил скрипт для управления ставками в Google AdWords с учетом нового показателя. Чем этот подход отличается от уже существующих, читайте ниже.

Вы не поверите, но ниже описан действительно новый вариант назначения ставок для поисковых кампаний в AdWords. Сам не верю, но он появился, и именно этот вариант хотелось реализовать больше всего. Но обо всем по порядку.

Как управляют ставками существующие скрипты:

  • По позиции. Cкрипт берет статистику по средней позиции ключевой фразы за заданный период и повышает/понижает ставку. Минусом такого подхода является то, что фраза может, например занимать позицию 1,1, но при этом не будет выигрывать все аукционы и процент показа может быть около 70%.

  • По ориентировочным ставкам (для показа над органикой или на первой странице поисковой выдачи). Недостаток очевиден: приходится ориентироваться на какую-то ставку, предлагаемую AdWords; нет гарантии, что объявление действительно попадет в нужный блок; неизвестно, какой процент полученных показов будет.

  • Разные варианты сочетания статистики по показам, кликам, CTR.

Недавно в скриптах AdWords появилась возможность работы с таким показателем как «Процент полученных показов в поиск. сети»; доступны еще не все возможности и в справке о нем немного информации, однако для управления ставками его можно использовать.

Как нам поможет процент полученных показов? Это единственная метрика, показывающая, как часто люди ищут наши товары/услуги и как часто наши объявления появляются им в ответ. Опираясь на этот процент при управлении ставками, мы не будем отвлекаться на показатели только выигранных аукционов, мы будем знать, сколько аукционов было всего и в какой их доле мы победили.

Работает это так: получаем статистику за заданный период и, если процент высокий, можем понизить ставку, если низкий, то ставку повышаем.

Несколько недель назад в справке по скриптам AdWords появился нужный нам скрипт, но он не учитывает ситуацию, когда у фразы нет данных по проценту полученных показов. Кроме того, желаемый процент полученных показов задается числом от 1 до 100, что на деле не работает, диапазон должен быть от 0.01 до 1, что эквивалентно 1-100%.

Итак, давайте посмотрим на дополненный скрипт:

////////Начало
// Желаемое значение процента полученных показов от 0 до 1
var TARGET_IMPRESSION_SHARE = 0.95; 

// Множитель ставки
var BID_ADJUSTMENT_COEFFICIENT = 1.25;

// Верхний порог ставки
var max = 40;

// Ставка для фраз без показов
var noImp = 30;

// Нижний порог ставки
var min = 15;

// Условие отбора фраз, например "имя кампании содержит"
var cond = "CampaignName CONTAINS 'brand'";

// Период для отбора
var period = 'LAST_14_DAYS';

// Основная функция, без нее никуда
function main() {
  // Ф-я подъема ставок
  raiseKeywordBids();
  // Ф-я снижения ставок
  lowerKeywordBids();
  // Ф-я установки ставок для фраз с нулем показов
  noImpressionsKeywordBids();
}

// Ф-я подъема ставок
function raiseKeywordBids() {
  Logger.log("Повышаем");
  var keywordsToRaise = getKeywordsToRaise();
  while (keywordsToRaise.hasNext()) {
    var keyword = keywordsToRaise.next();
    keyword.bidding().setCpc(getIncreasedCpc(keyword.bidding().getCpc()));
    Logger.log(keyword.getText()+" - "+keyword.getCampaign().getName());
  }
}

// Ф-я снижения ставок
function lowerKeywordBids() {
  Logger.log("Понижаем");
  var keywordsToLower = getKeywordsToLower();
  while (keywordsToLower.hasNext()) {
    var keyword = keywordsToLower.next();
    keyword.bidding().setCpc(getDecreasedCpc(keyword.bidding().getCpc()));
    Logger.log(keyword.getText()+" - "+keyword.getCampaign().getName());
  }
}

// Ф-я установки ставок для фраз с нулем показов
function noImpressionsKeywordBids() {
  Logger.log("Ставим фиксированную ставку");
  var keywordsToLower = getKeywordsNoImpressions();
  while (keywordsToLower.hasNext()) {
    var keyword = keywordsToLower.next();
    keyword.bidding().setCpc(noImp);
    Logger.log(keyword.getText()+" - "+keyword.getCampaign().getName());
  }
}

// Ф-я повышения ставки
function getIncreasedCpc(cpc) {
  var bid = cpc * BID_ADJUSTMENT_COEFFICIENT; if (bid>max) {bid=max;} else if (bid<min) {bid=min;}
  return bid;
}

// Ф-я снижения ставки
function getDecreasedCpc(cpc) {
  var bid = cpc / BID_ADJUSTMENT_COEFFICIENT; if (bid<min) {bid=min;} else if (bid>max) {bid=max;}
  return bid;
}

// Ф-я получения ключевых слов, которым надо поднять ставку
function getKeywordsToRaise() {
  return AdWordsApp.keywords().withCondition(cond)
      .withCondition("Impressions > 0")
      .withCondition('Status = ENABLED')
      .withCondition('SearchImpressionShare < ' + TARGET_IMPRESSION_SHARE)
      .orderBy('SearchImpressionShare ASC')
      .forDateRange(period)
      .get();
}

// Ф-я получения ключевых слов, которым надо опустить ставку
function getKeywordsToLower() {
  return AdWordsApp.keywords().withCondition(cond)
      .withCondition("Impressions > 0")
      .withCondition('SearchImpressionShare > ' + TARGET_IMPRESSION_SHARE)
      .withCondition('Status = ENABLED')
      .orderBy('SearchImpressionShare DESC')
      .forDateRange(period)
      .get();
}


// Ф-я получения ключевых слов, у которых не было показов
function getKeywordsNoImpressions() {
  return AdWordsApp.keywords().withCondition(cond)
      .withCondition("Impressions = 0")
      .withCondition('Status = ENABLED')
      .forDateRange(period)
      .get();
}
///////Конец

Комментариев достаточно, можете проверять работоспособность.

Примеры выполнения из отчета и журнала:

Вот и всё, ставить скрипты все уже умеют. Будьте внимательны с кавычками и апострофами, можно использовать либо обычные одинарные, либо обычные двойные, но без завитушек и уголков. Расписание рекомендую назначить на каждый день или неделю, выполнять скрипт каждый час не имеет смысла.

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: