×
Россия +7 (495) 139-20-33

Нетривиальный способ управления ставками в AdWords

Россия +7 (495) 139-20-33
Шрифт:
0 11994

Разберем сложный, но интересный способ управления ставками в AdWords. Помогут нам в этом Analytics, Google Таблицы и скрипты AdWords. В качестве подопытного выступит торговая кампания в тематике «Товары для женщин» с таргетингом на всю Россию.

Однажды мы захотели назначать ставки в AdWords, не прибегая к сторонним оптимизаторам. Поставили задачу написать скрипт, который будет сам рассчитывать ставку на основе ДРР, стоимости конверсии, числа транзакций и чего-нибудь еще. Вроде все логично, но как занести в скрипты AdWords данные о доходах? Легко! В общем, совместно с агентством Digital Strategy, тренируясь на общем клиенте, мы это сделали.

Когда-то давно в одном из ресурсов Google Analytics были настроены вычисляемые показатели:

1.png

– и созданы отчеты по эффективности платного трафика.

2.png

Теперь надо экспортировать нужные данные из Google Analytics в AdWords. Так как API AdWords мы не используем, включили промежуточное звено в виде Google Таблиц.

Создаем пустую таблицу и устанавливаем дополнение Google Analytics из библиотеки дополнений.

3.png

Это расширение позволит создавать любые отчеты в Google Таблицах на основе данных Analytics.

Мы создали отчет с нужными нам данными:

4.png

– и настроили ежедневное обновление.

5.png

Теперь на одной из вкладок этой таблицы у нас всегда будет актуальная интересующая нас информация за последние 30 дней.

6.png

Что делаем дальше? Мы можем редактировать данные на этой вкладке, но при каждом новом обновлении отчета все наши правки будут затираться. Поэтому для экспериментов мы создаем новую вкладку и первым делом через ссылки переносим значения из текущей вкладки на новую, вот так:

=report!A16

7.png

Мы протянули формулу со ссылкой на несколько тысяч строк вниз, пока что во всех ячейках стоят ссылки, в третьем столбце стоит формула, приводящая ga:keyword к нужному виду. Так как в отчете стоит фильтр только на одну торговую кампанию, то на самом деле под ключевой фразой здесь подразумевается группа товаров.

На следующем шаге мы создаем свои вычисляемые показатели на основе имеющихся данных.

8.png

В столбце I мы приводим СРО к виду целого числа, с помощью формулы

=ЛЕВСИМВ(G1;НАЙТИ(".";G1)-1)

В столбце J рассчитываем ставка для эдвордс

=ЕСЛИОШИБКА(((5/H1)-4*H1);(5/D1)*50)

Эта формула ни на что не претендует, однако в тестах скрипта для этой торговой кампании она сработала хорошо. Будьте осторожны, могут возникать сложности с типами данных ячеек, возможно какие-то столбцы придется приводить к общему типу, какие-то к текстовому и перебирать разные формулы пока не будет получен нужный результат.

Итак, у нас есть таблица, в которой данные по ставкам обновляются раз в день, остается начать назначать эти ставки в AdWords.

Открываем редактор скриптов и вставляем этот код:

function main() {

// входные параметры

var SPREADSHEET_URL = 'https://docs.google.com/spreadsheets/……………….'; // указываем url таблицы

var sheet_name = 'Лист1'; // указываем имя нужной вкладки, где рассчитывается ставка

var file = SpreadsheetApp.openByUrl(SPREADSHEET_URL); // открываем файл

var sheet = file.getSheetByName(sheet_name); // получаем лист

var lastColumnName = 'J'; // последний столбец

//var setBid = 18; // ставка для фраз без кликов

var dateRange = 'LAST_30_DAYS';

Logger.log('Вкладка '+sheet.getName()+' со ставками получена.'); // выводим имя листа

function getRange(){

// получаем количество строк

var sheet_name = 'report'; // указываем имя вкладки c отчетом

var file = SpreadsheetApp.openByUrl(SPREADSHEET_URL); // открываем файл

var sheet = file.getSheetByName(sheet_name); // получаем лист

Logger.log('Вкладка '+sheet.getName()+' с отчетом получена.');

var lastRow = sheet.getLastRow(); //получаем последнюю строку

var lastColumn = sheet.getLastColumn(); //получаем последний столбце

var lastCell = sheet.getRange(lastRow, lastColumn).getA1Notation() //имя последней ячейки

var numRows = Number(lastCell.slice(1))-15; //считаем число непустых строк, исключая шапку отчета

Logger.log('В отчете '+numRows+' строк с данными');

return numRows;

}

function getCampaignNames2(){

// получаем словарь с кампаниями и индексами

// перебираем столбец кампаний и запоминаем с какой строчки по какую идут данные по той или иной РК

var campaignNames = []; //создаем пустой массив имен кампаний

var indexCampaignNames = []; //создаем пустой массив номеров строчек

var last = getRange();

var name = '';

var j = 1;

for (var i = 1; i <= last; i++){ //в это цикле наполняем созданные массивы

var r = 'A'+String(i);

name = sheet.getRange(r).getValue();

if (name == campaignNames[campaignNames.length-1]) {j++;}

else {campaignNames.push(name); indexCampaignNames.push(j); j++;}

}

Logger.log('Список кампаний: '+campaignNames); Logger.log('Список индексов: '+indexCampaignNames);

var dict = []; // создаем словарь кампаний и индексов и заполняем его

dict.campaigns = campaignNames;

indexCampaignNames.push(last+1);

dict.index = indexCampaignNames;

return dict;

}

function dictionary(a,z){

// получаем словарь из массивов ключевых слов и ставок

var dict = {};

var keywords = [];

var bids = [];

var c = 'A'+String(a);

dict.campaign = sheet.getRange(c).getValue();

while ( a < z) { Logger.log('Фраза с индексом '+a+' учтена. Идём до '+z);

var k = 'C'+String(a);

keywords.push(sheet.getRange(k).getValue());

var b = lastColumnName+String(a);

bids.push(sheet.getRange(b).getValue()); a++;

}

dict.keywords = keywords;

dict.bids = bids;

Logger.log('Получен словарь '+dict.keywords+' '+dict.bids);

return dict;

}

function bids(){

// назначаем ставки

var dictcai = getCampaignNames2();

for (var i = 0; i < dictcai.campaigns.length; i++) {

var dict = dictionary(dictcai.index[i],dictcai.index[i+1]);

//перебираем массив кампаний и для каждой РК выбираем продуктовые группы за последние 30 дней,

// где было более 0 кликов

var adGroupIterator = AdWordsApp.productGroups()

.withCondition('CampaignName = "'+dict.campaign+'"')

.withCondition('Clicks > 0')

.forDateRange(dateRange)

.get(); Logger.log('Кампания '+dict.campaign);

// перебираем продуктовые группы

while(adGroupIterator.hasNext()){

var adGroup = adGroupIterator.next();

//находим в массиве ключевых слов (продуктовых групп), полученных из гугл-таблицы,

// соответствия в списке продуктовых групп, полученных в данный момент после перебора РК

// определяем индексы этих групп и в массиве ставок по такому же индексу находим значение ставки

var index = dict.keywords.indexOf(adGroup.getValue());

var bid = dict.bids[index];

try { // пытаемся назначать те ставки, что есть в массиве, используя при этом ограничения.

if (bid<=2){bid=2;}

if (bid>=20){bid=20;}

if (bid==undefined) {bid=2;}

adGroup.setMaxCpc(bid.toFixed(2)); Logger.log(adGroup.getValue()+' - '+dict.bids[index]);

}

// если какие-то проблему возникнут на нашем пути, то в консоли можно будет увидеть ошибку,

// а ставка будет установлена в размере 10 руб.

catch(e){adGroup.setMaxCpc(10); Logger.log(adGroup.getValue()+' - '+dict.bids[index]); Logger.log(e);}

}

}

}

function bids2(){

// назначаем ставки для фраз без кликов

var dictcai = getCampaignNames2();

for (var i = 0; i < dictcai.campaigns.length; i++) {

var dict = dictionary(dictcai.index[i],dictcai.index[i+1]);

var campaignName = dict.campaign;

var adGroupName = 'Ad Group #1'; // в нашей рк всего 1 группа, поэтому такое условие

var adGroupIterator = AdWordsApp.productGroups()

.withCondition("CampaignName = '" + campaignName +

"' and AdGroupName = '" + adGroupName + "'")

.withCondition('Clicks < 1')

.forDateRange(dateRange)

.get(); Logger.log('Кампания '+dict.campaign);

while(adGroupIterator.hasNext()){

var adGroup = adGroupIterator.next();

var bid = 18;

adGroup.setMaxCpc(bid); Logger.log(adGroup.getValue()+' - '+bid);

}

}

}

bids(); // запускаем скрипт

bids2(); // запускаем скрипт

Logger.log('Скрипт выполнен!');

}

Примерно такие сообщения будут в консоли:

9.png

10.png

Как нам не хотелось сделать универсальный скрипт для всех типов кампаний, этого не вышло. Получился вариант для торговых кампаний с одной группой, с множеством групп, для поисковых кампаний и для КМС. Данный скрипт рассчитан на торговые кампании с одной группой. Если внимательно изучить его, то станет понятна логика работы:

1. открываем таблицу и проходимся по столбцу кампаний, на основе этих данных формируются два списка с названиями кампаний и номерами строк – с какой по какую идет каждая РК;

2. проходимся по столбцам ставок и ключевых слов (продуктовых групп) и также формируем два списка;

3. создаем словари, в которых становится понятно, какие продуктовые группы и ставки принадлежат конкретным кампаниям;

4. перебираем продуктовые группы аккаунта AdWords на основе условий из списка кампаний, выбираем продуктовые группы с 1 и более кликами;

5. находим соответствия полученных продуктовых групп с группами и списков, находим соответствие ставок и выставляем их;

6. выбираем продуктовые группы без кликов и назначаем им какую-нибудь ставку.

Самое главное, что данный метод работы с таблицами и скриптами позволит вносить любые доступные изменения в аккаунт на основе любых данных, доступных для импорта в Google Таблицы. Остается только пробовать и внедрять.

Давайте теперь посмотрим, что нам дало использование скрипта в торговой кампании.

Долгое время ставки назначались руками, с 9 февраля их стал назначать скрипт.

11.png

Теперь давайте сравнивать разные показатели за 2 периода: 13 февраля – 2 апреля и 14 декабря – 5 февраля. 7 полных недель, и там, и там было немало праздничных дней, но на работе кампании это особо не сказывалось.

12.png

Результат очень радует. Хотя в начале марта и был большой простой кампании, ДРР снизился на 77%, СРО снизился на 75%, доход и число транзакций выросли в разы. При том, что расходы на эту кампанию увеличились всего на 15 тыс. (мы увеличили бюджет после первых снижений ДРР).

Также можем сравнить другие периоды, исключающие совсем праздничные дни и простои, но также до и после 9 февраля: 13 марта – 2 апреля и 16 января – 5 февраля, по 3 полных недели.

13.png

Также заметно снижение ДРР и СРО, рост дохода и числа транзакций.

Рассматриваемый способ управления ставками непрост, местами неудобен, но он может отлично решать ваши задачи. Например, вы можете построить отчет, в котором видно, какая площадка в КМС или ключевая фраза, или аудитория приносит конверсии, что именно за цели при этом достигаются, на каких устройствах, в каких городах, при каком проценте отказов…

Вы можете с помощью скриптов Google парсить любые сайты (это очень просто, вот немного об этом) и заносить в Google Таблицы данные о пробках, погоде, ТВ-программе, ценах. Рассчитывать ставки с помощью формул и далее с помощью скриптов назначать нужные ставки в кампаниях.

Если у вас возникли трудности со скриптами, то подтяните свои знания JS и AdWords Scripts. Если не получается настроить фильтр в отчете Google Таблицы, то изучите этот материал.

(Голосов: 5, Рейтинг: 5)
Читайте нас в Telegram - digital_bar

Есть о чем рассказать? Тогда присылайте свои материалы Даше Калинской


Новые 
Новые
Лучшие
Старые
Сообщество
Подписаться 
Подписаться на дискуссию:
E-mail:
ОК
Вы подписаны на комментарии
Ошибка. Пожалуйста, попробуйте ещё раз.
Отправить отзыв
ПОПУЛЯРНЫЕ ОБСУЖДЕНИЯ НА SEONEWS
Google Data Studio: делаем красивые отчеты по контекстной рекламе для клиентов
Светлана Зубрицкая
1
комментарий
0
читателей
Полный профиль
Светлана Зубрицкая - Нужно убрать пробелы между строк и заменить кавычки на вот такие "
#SEOnews14: мы празднуем – вы получаете подарки!
Анна Макарова
359
комментариев
0
читателей
Полный профиль
Анна Макарова - Гость, добрый день! С победителями мы связывались сразу после розыгрыша. Если мы вам не написали, значит, ваш номер не выпал. Но не расстраивайтесь, у нас обязательно будут новые розыгрыши!
Как ускорить сайт на WordPress, чтобы получить 100/100 в Google PageSpeed Insights
Георгий
1
комментарий
0
читателей
Полный профиль
Георгий - Все что рекомендуется в этой статье есть у w.tools. Ни разу не пожалел что подключился. Своя CDN сеть, кеш статики и динамики, минификация js\css и кешируемого html, оптимизация всех типов картинок и еще куча всего полезного. Сайт летает и я не знаю проблем. Могу рекомендовать от души.
Война с дубликатами. Как нужно и как не нужно канонизировать URL
Ann Yaroshenko
5
комментариев
0
читателей
Полный профиль
Ann Yaroshenko - Дмитрий, добрый день! Если вы проставили на странице с автозапчастями rel=canonical ( а я вижу в коде, что не проставили) или в HTTP хедере, то бот, как правило: выберит ту страницу главной, которую вы указали в rel=canonical ссылке. Eсли же вы этого не сделали, то бот сам выберит оригинал (алгоритмы, по которым бот это делает, скрыты Googl-ом)
«Аудит, чтобы ты заплакала…», или Что делать, когда получил сторонний аудит сайта
Евгений
1
комментарий
0
читателей
Полный профиль
Евгений - Воообще, на самом деле здесь двоякое впечатление от таких аудитов. Конечно, для полного глубокого анализа и подготовки рекомендаций по сайту - нужны доступы к системам аналитики и инструментам вебмастера. Но если оценивать подобные аудиты с точки зрения чистого SEO (которое все больше и больше становится лишь малой частью digital-маркетинга, лишь одним из каналов) - они имеют место быть. Но с оговоркой, что они сделаны с учетом анализа конкурентов/отрасли. Современные инструменты и алгоритмы позволяют делать это маркетологам в автоматическом режиме, и даже давать рекомендации - возможностями машинного обучения уже никого не удивишь. Да, полное перечисление "мифического" списка ошибок, построенного по предикативным правилам, да еще и с учетом устаревших особенностей ПС - это явный признак некачественного аудита. В первую очередь потому, что эти "ошибки" следует рассматривать в качестве рекомендаций от ПС (как и говорится в справочнике вебмастера у Яндекса/Google). Однако если эти данные даются с отсылкой на данные о конкурентах, об отрасли, используются методы ML и Natural language processing для обработки исходных данных, кластеризации запросов, классификации страниц/запросов/сайтов, определения структуры документа - такие отчеты имеют право на существование. Но ключевым моментом является то, что подобные инструменты достаточно сложны в разработке, а значит требуют квалифицированных специалистов для их разработки. Которых просто нет у студий рассылающих подобные "сео отчеты". Подобные отчеты по "ошибках" тоже неплохой источник информации, но лишь на 0 этапе анализа сайта. И в принципе, теоретически, возможно почти полное составление "хороших аудитов" без участия маркетолога, на основе лишь открытых данных сайта/внешних источников, но только при соответствующем применении всех современных возможностей анализа данных и рекомендательных систем. И в любом случае подобный "хороший отчет" требует конечного заключения от эксперта.
От мечты стать юристом к собственному SMM-агентству. Как найти себя в современном цифровом мире
Виктор Брухис
5
комментариев
0
читателей
Полный профиль
Виктор Брухис - Статья выглядит так, как пожелали редакторы и интервьюер) Вопросы к интервью подбирал не я)) Хотя, в целом я согласен с вашим видением. А за пожелание удачи большое спасибо!
Как провести анализ содержания страниц товаров и категорий
Никита Седнин
3
комментария
0
читателей
Полный профиль
Никита Седнин - Спасибо!
BDD 2019: Как перестать убивать время на сбор и обработку тонны данных для SEO-аудита
Feth
1
комментарий
0
читателей
Полный профиль
Feth - Тот момент, когда от статьи в интернете получаешь больше полезных знаний и навыков, чем от своего начальства. По статьям нетпиковцев можно учебник про SEO уже сшивать, ребята молодцы. Спасибо, что делитесь информацией.
Как вывести сайт в ТОП 10 Google в 2019 году
Ирина
8
комментариев
0
читателей
Полный профиль
Ирина - Работают. Как естественные, так и закупные. >Мои сайты в первую очередь заточены на яндекс Соболезную. >Насколько поисковые алгоритмы с гугловскими у него. Разница в 10 лет. Вон в Яше все долбят на ключи, на вхождения и прочий трэш из древностей. А у Гугла, вон почитайте про eat, ymyl Не все понятно но спасибо за ответы. Я так понимаю что с ссылками деть никто точно не знает) Ну это и хорошо вообщем. Самому разбираться как то интересней. Но не всегда. Есть к примеру 2captcha.com/ru и на него 100к ссылок есть. Ну а смысл какой?
10 элементов сайта, которые гарантированно отпугнут посетителей
Андрей
2
комментария
0
читателей
Полный профиль
Андрей - Ну типа потому что клиентское seo больше для коммерции предназначено. Типа контентники и сами знают что делать. В коммерции можно тысячу причин найти чтобы поработать с сайтом, а с контентными такие фокусы уже не прокатят, поэтому и не пишут. Всё продвижение для контентников сеошники описывают в трех словах: скорость, качество, систематичность. А, ну ещё конечно же СЯ, как же я про него забыл (фундамент жеть!).
ТОП КОММЕНТАТОРОВ
Комментариев
910
Комментариев
834
Комментариев
554
Комментариев
540
Комментариев
483
Комментариев
373
Комментариев
359
Комментариев
262
Комментариев
249
Комментариев
171
Комментариев
156
Комментариев
137
Комментариев
121
Комментариев
107
Комментариев
97
Комментариев
97
Комментариев
96
Комментариев
80
Комментариев
79
Комментариев
77
Комментариев
67
Комментариев
60
Комментариев
59
Комментариев
57
Комментариев
55

Отправьте отзыв!
Отправьте отзыв!