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

Это для меня не удобно, т.к. часто в аккаунтах для, к примеру, горячей кампании нужна позиция 2.4, а для околоцелевой — 4.5, а для еще одной вообще не нужно удерживание позиции, т.к. там уже идет контроль ставок в зависимости от стоимости конверсии.

Пришлось выдохнуть, сесть и написать что-то контролируемое и универсальное. А потом сделать сразу 2 версии: для обычных аккаунтов и для MCC.

Что делает скрипт?

Скрипт запускается каждые 7 дней и поднимает или опускает ставки для тех ключей, которые «съехали» с нужных вам позиций на основании статистики за последние 7 дней.

А чем тогда он отличается от обычного скрипта?

Тут то мы и дошли до сути. Один раз применив скрипт, вы сможете легко задавать целевые позиции для каждой из кампаний, просто применив к кампании ярлыки «positionControl» (включает скрипт) и, к примеру, «targetPosition2.7» (задает позицию).

А если вы зададите скрипт на уровне MCC (сделал версию и для MCC), то чтобы задать нужную позицию, достаточно будет повесить ярлык «positionControl» на аккаунт + ярлыки на кампанию.

Как установить себе в аккаунт?
1) Скопировать скрипт к себе в аккаунт и настроить на выполнение каждую неделю

Код скрипта приведен внизу статьи.

Создаем новый скрипт AdWords и настраиваем его на выполнение каждую неделю

2) Присваиваем кампаниям, которые нужно контролировать, соответствующие ярлыки

  • Чтобы активировать скрипт: ярлык «positionControl«
  • Чтобы выбрать позицию кампании: «targetPosition{позиция}«. Пример: «targetPosition2.4«

Добавляем ярлыки к нужным поисковым кампаниям

Есть еще из настроек 2 дополнительных необязательных параметра в начале кода скрипта:

  • TOLERANCE — Допустимое отклонение для средней позиции. Т.е. если допустимое отклонение = 0.1 а целевая позиция = 2, то скрипт не затронет ключи с позицией 1.9 и 2.1.
  • BID_ADJUSTMENT_COEFFICIENT — Множитель для изменения ставок. Т.е. если он равно 1.05 то ставки опустятся или поднимутся на 5%.

А если у меня MCC аккаунт и я хочу добавить скрипт один раз, чтобы он применялся ко всем аккаунтам?

Я в конце приложил версию скрипта для MCC. Дополнительно нужно будет задать ярлык «positionControl» еще и для аккаунта, чтобы активировать на нем скрипт.

Скрипт для обычного аккаунта
// Допустимое отклонение для средней позиции. Т.е. если допустимое отклонение = 0.1 а целевая позиция = 2, то скрипт не затронет ключи с позицией 1.9 и 2.1.
var TOLERANCE = 0.1;

// Множитель для изменения ставок. Т.е. если он равно 1.05 то ставки опустятся или поднимутся на 5%.
var BID_ADJUSTMENT_COEFFICIENT = 1.05;

function main() {
var campaignsWithPosition = AdWordsApp.campaigns().withCondition(«LabelNames CONTAINS_ANY [‘positionControl’]»).get();
while (campaignsWithPosition.hasNext()) {
var campaign = campaignsWithPosition.next();
var targetPositionLabel = campaign.labels().withCondition(«LabelName STARTS_WITH_IGNORE_CASE ‘targetPosition'»).get().next().getName();
var targetPosition = parseFloat(targetPositionLabel.replace(/[^d.-]/g, »));
Logger.log(campaign.getName() + ‘ — target posinion: ‘ + targetPosition);
raiseKeywordBids(campaign, targetPosition);
lowerKeywordBids(campaign, targetPosition);
}
}

function raiseKeywordBids(campaign, targetPosition) {
var keywordsToRaise = campaign.keywords()
.withCondition(«Status = ENABLED»)
.withCondition(«AveragePosition > » + (targetPosition + TOLERANCE))
.orderBy(«AveragePosition ASC»)
.forDateRange(«LAST_7_DAYS»)
.get();

while (keywordsToRaise.hasNext()) {
var keyword = keywordsToRaise.next();
keyword.setMaxCpc(keyword.getMaxCpc() * BID_ADJUSTMENT_COEFFICIENT);
}
}

function lowerKeywordBids(campaign, targetPosition) {
var keywordsToLower = campaign.keywords()
.withCondition(«Ctr > 0.01»)
.withCondition(«AveragePosition < » + (targetPosition — TOLERANCE))
.withCondition(«Status = ENABLED»)
.orderBy(«AveragePosition DESC»)
.forDateRange(«LAST_7_DAYS»)
.get();

while (keywordsToLower.hasNext()) {
var keyword = keywordsToLower.next();
keyword.setMaxCpc(keyword.getMaxCpc() / BID_ADJUSTMENT_COEFFICIENT);
}
}

Скрипт для MCC
// Допустимое отклонение для средней позиции. Т.е. если допустимое отклонение = 0.1 а целевая позиция = 2, то скрипт не затронет ключи с позицией 1.9 и 2.1.
var TOLERANCE = 0.1;

// Множитель для изменения ставок. Т.е. если он равно 1.05 то ставки опустятся или поднимутся на 5%.
var BID_ADJUSTMENT_COEFFICIENT = 1.05;

function main() {
MccApp.accountLabels().withCondition(«Name = ‘positionControl'»).get().next().accounts().executeInParallel(‘accountBids’);
}

function accountBids() {
var campaignsWithPosition = AdWordsApp.campaigns().withCondition(«LabelNames CONTAINS_ANY [‘positionControl’]»).get();
while (campaignsWithPosition.hasNext()) {
var campaign = campaignsWithPosition.next();
var targetPositionLabel = campaign.labels().withCondition(«LabelName STARTS_WITH_IGNORE_CASE ‘targetPosition'»).get().next().getName();
var targetPosition = parseFloat(targetPositionLabel.replace(/[^d.-]/g, »));
Logger.log(campaign.getName() + ‘ — target posinion: ‘ + targetPosition);
raiseKeywordBids(campaign, targetPosition);
lowerKeywordBids(campaign, targetPosition);
}
}

function raiseKeywordBids(campaign, targetPosition) {
var keywordsToRaise = campaign.keywords()
.withCondition(«Status = ENABLED»)
.withCondition(«AveragePosition > » + (targetPosition + TOLERANCE))
.orderBy(«AveragePosition ASC»)
.forDateRange(«LAST_7_DAYS»)
.get();

while (keywordsToRaise.hasNext()) {
var keyword = keywordsToRaise.next();
keyword.setMaxCpc(keyword.getMaxCpc() * BID_ADJUSTMENT_COEFFICIENT);
}
}

function lowerKeywordBids(campaign, targetPosition) {
var keywordsToLower = campaign.keywords()
.withCondition(«Ctr > 0.01»)
.withCondition(«AveragePosition < » + (targetPosition — TOLERANCE))
.withCondition(«Status = ENABLED»)
.orderBy(«AveragePosition DESC»)
.forDateRange(«LAST_7_DAYS»)
.get();

while (keywordsToLower.hasNext()) {
var keyword = keywordsToLower.next();
keyword.setMaxCpc(keyword.getMaxCpc() / BID_ADJUSTMENT_COEFFICIENT);
}
}

Если у вас есть вопрос, идея или предложение, пишите в комментариях!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *