Google AdWords: как отобрать хорошие места размещения при помощи скриптов
Google Display Network (GDN) – одна изо двух рекламных сетей в Google AdWords, позволяющая передавать рекламные объявления на большом количестве различных сайтов. Можно этот инструмент и более «пассивен», нежели реклама Google в поиске, он содержит значительно большую аудиторию.
Проблема GDN
«Темной стороной» контекстной рекламы в Google Display Network является ведь, что ее настройка требует бессчетно времени на отбор качественных площадок. Все-таки эффективной реклама будет только в томище случае, если объявления будут изображаться на подходящих площадках. А фильтрация тысяч площадок – сие настоящая проблема для специалиста после контекстной рекламе.
Хорошая новость в томище, что Google AdWords дает маза управлять вашими рекламными кампаниями около помощи скриптов. Так что существует осуществимость автоматического отбора качественных площадок.
Автор решили разобраться с этим вопросом и произвести эффективное решение. За основу взяли хитрость Алексея Ярошенка и Derek Martin и разработали свою методологию работы скрипта ради «чистки» площадок в Google Display Network.
Отгадка
Для понимания, как работает наше иджма в целом, разберем вначале его базовые этапы.
Начальные клаузула
Наш скрипт обращается к отчету по мнению площадкам AdWords за определенный тайм времени и отбирает места размещения, удовлетворяющие различным условиям:
- расходы на площадку составляют более X USD и как не бывало конверсий;
- стоимость конверсии с площадки боле X USD;
- количество показов площадки больше X, CTR не так Y и нет конверсий;
- количество показов площадки вяще X, CTR больше Y и нет конверсий.
Перечисленные меньше условия могут меняться вручную в конфигурационном файле Google Spreadsheet.
Нежелательные домены
Следующая перекличка отсеивает площадки без конверсий, в домене которых присутствуют нежелательные языкоблудие, и заносит их в black list.
Сарацинское пшено. 1. Пример Google Spreadsheet со словами, после которым отсеиваются домены
Список исключений
Отобранные скриптом площадки заносятся в противень исключений на уровне «Shared library» в аккаунте AdWords.
Падди. 2. Пример списков исключений в «Shared library»
Чалтык. 3. Пример отчета работы скрипта в Google Spreadsheet
Уведомления о работе скрипта по мнению email
После выполнения скрипта результаты его работы высылаются сверху email, указанный в конфигурационном файле. В письме содержится сводная статистика числом обработанным площадкам и ссылка на райтс с полным отчетом.
Пошаговое решение
1. Распознавание рабочего Google Spreadsheet и имя проекта.
var config = {
SPREADSHEET_URL:Link to the Google Spreadsheet’,
PROJECT_NAME:’Name of the project’,
}
2. Детерминирование списка, в который будут заноситься «плохие», отфильтрованные площадки.
function getConfigData(spreadsheet) {
var excludeDomainSheet = spreadsheet.getSheetByName(‘exclude_domain’),
values =exclude DomainSheet.getSheetValues(1,1,excludeDomainSheet.getLastRow(),1);
config.exclude = [];
if (typeof values == "object") {
for (i=0; i < values.length; i++) {
config.exclude.push(values[i][0]);
}
}
Logger.log (config.exclude)
3. Дефиниция списка для площадок, по которым далеко не будет вноситься статистика.
var except DomainSheet = spreadsheet.getSheetByName(‘except_domain’),
values = except DomainSheet.getSheetValues(1,1,exceptDomainSheet.getLastRow(),1);
config.except = [];
if(typeof values == "object"){
for (i=0; i < values.length; i++) {
config.except.push(values[i][0]);
}
}
Logger.log (config.except)
4. Решение условий отбора площадок:
- название списка,
- соединительный email,
- отчетный период,
- максимальная ставка клика,
- максимальная стоимость конверсии,
- минимальное мера показов,
- максимальный CTR.
var configSheet = spreadsheet.getSheetByName(‘config’);
config.email = configSheet.getRange(1,2,1,1).getValues();
config.timeperiod = configSheet.getRange(2,2,1,1).getValue();
config.listCost = configSheet.getRange(3,2,1,1).getValue();
config.list2ConversionCost = configSheet.getRange(4,2,1,1).getValue();
config.list3Impressions = configSheet.getRange(5,2,1,1).getValue();
config.list3Ctr = configSheet.getRange(6,2,1,1).getValue();
config.list4Impressions = configSheet.getRange(7,2,1,1).getValue();
config.list4Ctr = configSheet.getRange(8,2,1,1).getValue()
5. Оживление названия документа с учетом даты запуска скрипта.
function main() {
var spreadsheet = SpreadsheetApp.openByUrl(config.SPREADSHEET_URL);
var curDate = Utilities.formatDate(new Date(), "GMT+3", "yyyy-MMMM-dd");
getConfigData(spreadsheet);
spreadsheet.setName("GDN Report " + config.PROJECT_NAME + " " + curDate)
6. Порождение отчета.
var body = "<h2>Google Display Network – Report on underperforming placements</h2>";
body += "<h3>Placements that spent more than " + config.listCost + " USD and did not bring conversions:</h3> " ;
body += "<ul>";
var list = runHightCostAndNoConvertingReport();
varrows = [];
for (i=0; i < list.length; i++) {
body += "<li>" + list[i].placementОднакоlist[i].cost + ‘ USD ‘ + "</li>";
}
addPlacementList(‘list1’,list,spreadsheet);
body += "</ul>";
body += "<h3>Placements with the conversion cost more than " + config.list2ConversionCost + " USD:</h3> ;
body += "<ul>";
var list2 = runHighCostOfConversionsReport();
for (i=0; i < list2.length; i++) {
body += "<li>" + list2[i].placementБудеlist2[i].cost + ‘ USD ‘ + ‘ — The cost of conversion — ‘ + list2[i].costperconversion + ‘ USD ‘ + "</li>";
}
addPlacementList(‘list2’,list2,spreadsheet);
body += "</ul>";
body += "<h3>Placements with more than " + config.list3Impressions + " impressions and CTR less than " + config.list3Ctr + "%:</h3> " ;
body += "<ul>";
var list3 = runBadCtrNoConversionsReport();
body += "<li>The number of exceptions — " + list3.length + "</li>";
addPlacementList(‘list3’,list3,spreadsheet);
body += "</ul>";
body += "<h3>Placements with more than " + config.list4Impressions + " impressions and CTR more than " + config.list4Ctr + "%:</h3> " ;
body += "<ul>";
var list4 = runHighCtrReport();
body += "<li>The number of exceptions — " + list4.length + "</li>";
addPlacementList(‘list4’,list4,spreadsheet);
body += "</ul>";
body += "<h3>The placements, which domain name contains the unwanted word:</h3> " ;
body += "<ul>";
var list5 = gamePlacements();
body += "<li> The number of exceptions — " + list5.length + "</li>";
addPlacementList(‘list5’,list5,spreadsheet);
body += "</ul>";
body += "<a href=’"+spreadsheet.getUrl()+"’>Link to the report Google Spreadsheet</a>";
7. Отправка email с результатами.
if(config.email.length){
MailApp.sendEmail(config.email,’Display Network Alerts — ‘ + config.PROJECT_NAME + " — " + curDate, body, {htmlBody: body});
}
8. Эксплуатация функций для добавления площадок в исключения.
function addPlacementList(nameList,list,spreadsheet) {
var rows = [],
sheet,
range,
listSharedExcludedPlacementIterator;
sheet = spreadsheet.getSheetByName(nameList);
sheet.clear();
range = sheet.getRange(1, 1, 1, 7).setValues([[‘Exclusion URL’,’Impressions’,’Clicks’,’CTR’,’Cost’,’Conversions’,’Cost Per Conversion’]]);
range.setBackground("yellow");
listSharedExcludedPlacementIterator = AdWordsApp.excludedPlacementLists()
.withCondition("Name CONTAINS ‘" + nameList + "’").get();
while (listSharedExcludedPlacementIterator.hasNext()) {
listSharedExcludedPlacement = listSharedExcludedPlacementIterator.next();
}
for (i=0; i < list.length; i++) {
listSharedExcludedPlacement.addExcludedPlacement(list[i].placement);
rows.push([list[i].placement, list[i].impressions, list[i].clicks, list[i].clicks / list[i].impressions * 100 + "%", list[i].cost, list[i].conversions, list[i].costperconversion])
}
if(rows.length)
sheet.getRange(2, 1, rows.length, 7).setValues(rows).sort({column: 2, ascending: false});
}
function runHightCostAndNoConvertingReport() {
list = [];
var periodString = »;
if(config.timeperiod) {
periodString = ‘DURING ‘ + config.timeperiod;
Logger.log(periodString);
} else {
Logger.log(‘DURING ALL TIME’);
}
9. Установление площадок, которые потратили более X USD и безлюдный (=малолюдный) принесли конверсий.
var report = AdWordsApp.report(
‘SELECT Domain, Clicks, Impressions, CostPerConversion, Conversions, Cost ‘ +
‘FROM AUTOMATIC_PLACEMENTS_PERFORMANCE_REPORT ‘ +
‘WHERE Cost > ‘ + config.listCost * 1000000 + " " +
‘AND Conversions < 1 ‘ +
periodString);
var rows = report.rows();
while (rows.hasNext()) {
var row = rows.next();
var anonymous = row[‘Domain’].match(new RegExp(config.except.join(‘|’).replace(/./g,’\.’),’g’));
if (anonymous == null) {
var placementDetail = new placementObject(row[‘Domain’], row[‘Clicks’], row[‘Impressions’], row[‘CostPerConversion’],row[‘Conversions’], row[‘Cost’]);
list.push(placementDetail);
}
}
return list;
}
function runHighCostOfConversionsReport() {
list = [];
var periodString = »;
if(config.timeperiod) {
periodString = ‘DURING ‘ + config.timeperiod;
Logger.log(periodString);
} else {
Logger.log(‘DURING ALL TIME’);
}
10. Атрибут площадок с конверсиями, которые стоят больше X USD.
var report = AdWordsApp.report(
‘SELECT Domain, Clicks, Impressions, CostPerConversion, Conversions, Cost ‘ +
‘FROM AUTOMATIC_PLACEMENTS_PERFORMANCE_REPORT ‘ +
‘WHERE CostPerConversion > ‘ + config.list2ConversionCost * 1000000 + " " +
‘AND Conversions > 1 ‘ +
periodString);
var rows = report.rows();
while (rows.hasNext()) {
var row = rows.next();
var anonymous = row[‘Domain’].match(new RegExp(config.except.join(‘|’).replace(/./g,’\.’),’g’));
if (anonymous == null) {
var placementDetail = new placementObject(row[‘Domain’], row[‘Clicks’], row[‘Impressions’], row[‘CostPerConversion’], row[‘Conversions’], row[‘Cost’]);
list.push(placementDetail);
}
}
return list;
}
function runBadCtrNoConversionsReport() {
list = [];
var periodString = »;
if(config.timeperiod) {
periodString = ‘DURING ‘ + config.timeperiod;
Logger.log(periodString);
} else {
Logger.log(‘DURING ALL TIME’);
}
11. Установление площадок без конверсий с более нежели X показами CTR менее Y %.
var report = AdWordsApp.report(
‘SELECT Domain, Clicks, Impressions, CostPerConversion, Conversions, Cost ‘ +
‘FROM AUTOMATIC_PLACEMENTS_PERFORMANCE_REPORT ‘ +
‘WHERE Impressions > ‘ + config.list3Impressions + " " +
‘AND Ctr < ‘ + config.list3Ctr * 0.01 + " " +
‘AND Conversions < 1 ‘ +
periodString);
var rows = report.rows();
while (rows.hasNext()) {
var row = rows.next();
var anonymous = row[‘Domain’].match(new RegExp(config.except.join(‘|’).replace(/./g,’\.’),’g’));
if (anonymous == null) {
var placementDetail = new placementObject(row[‘Domain’], row[‘Clicks’], row[‘Impressions’], row[‘CostPerConversion’], row[‘Conversions’], row[‘Cost’]);
list.push(placementDetail);
}
}
return list;
}
function runHighCtrReport() {
list = [];
var periodString = »;
if(config.timeperiod) {
periodString = ‘DURING ‘ + config.timeperiod;
Logger.log(periodString);
} else {
Logger.log(‘DURING ALL TIME’);
}
12. Микроопределе площадок без конверсий с более нежели X показами и CTR большим, чем Y %.
var report = AdWordsApp.report(
‘SELECT Domain, Clicks, Impressions, CostPerConversion, Conversions, Cost ‘ +
‘FROM AUTOMATIC_PLACEMENTS_PERFORMANCE_REPORT ‘ +
‘WHERE Impressions > ‘ + config.list4Impressions + " " +
‘AND Ctr > ‘ + config.list4Ctr * 0.01 + " " +
‘AND Conversions < 1 ‘ +
periodString);
var rows = report.rows();
while (rows.hasNext()) {
var row = rows.next();
var anonymous = row[‘Domain’].match(new RegExp(config.except.join(‘|’).replace(/./g,’\.’),’g’));
if (anonymous == null) {
var placementDetail = new placementObject(row[‘Domain’], row[‘Clicks’],row[‘Impressions’], row[‘CostPerConversion’], row[‘Conversions’], row[‘Cost’]);
list.push(placementDetail);
}
}
return list;
}
function gamePlacements() {
list = [];
var periodString = »;
if(config.timeperiod) {
periodString = ‘DURING ‘ + config.timeperiod;
Logger.log(periodString);
} else {
Logger.log(‘DURING ALL TIME’);
}
13. Прирезка в исключения площадок без конверсий, в домене которых содержатся нежелательные трепология.
var report = AdWordsApp.report(
‘SELECT Domain, Clicks, Impressions, CostPerConversion, Conversions, Cost ‘ +
‘FROM AUTOMATIC_PLACEMENTS_PERFORMANCE_REPORT ‘ +
‘WHERE Conversions < 1 ‘ +
periodString);
var rows = report.rows();
while (rows.hasNext()) {
var row = rows.next();
var anonymous = row[‘Domain’].match(new RegExp(config.except.join(‘|’).replace(/./g,’\.’),’g’));
if (anonymous == null) {
var placement = row[‘Domain’];
var clicks = row[‘Clicks’];
var impressions = row[‘Impressions’];
var costperconversion = row[‘CostPerConversion’]
var conversions = row[‘Conversions’];
var cost = row[‘Cost’];
var placementDetail = new placementObject(placement, clicks, impressions, costperconversion, conversions, cost);
if (containsAny(placement.toString(), config.exclude)) {
var placementDetail = new placementObject(placement, clicks, impressions, costperconversion, conversions, cost);
list.push(placementDetail);
}
}
}
return list;
}
function containsAny(str, substrings) {
for (var i = 0; i != substrings.length; i++) {
var substring = substrings[i];
if (str.indexOf(substring) != — 1) {
return substring;
}
}
return null;
}
function placementObject(placement, clicks, impressions, costperconversion, conversions, cost) {
this.placement = placement;
this.clicks = clicks;
this.impressions = impressions;
this.costperconversion = costperconversion;
this.conversions = conversions;
this.cost = cost;
}
Результаты
Автор тестировали работу скрипта, используя следующие критерии отбора площадок:
Питание письма:
Размещения, которые потратили больше 300 USD и не принесли конверсий: 0
Размещения со стоимостью конверсии сильнее чем 500 USD: 0
Размещения с более нежели 100 показами и CTR, менее 0.05%: 3
Размещения с сильнее чем 50 показами и CTR более 8%: 7
Размещения, содержащие в домене нежелательные словоблудие: 382
Заключительные комментарии
При использовании нашего решения нужно запечатлиться в (память о следующих моментах:
- «Отсеивающие» параметры дозволено и нужно прописывать с учетом особенностей вашего проекта.
- Ваша милость можете настроить автоматический запуск скрипта, (пред)положим, еженедельно.
- Если ваш аккаунт немерено старый, мы рекомендуем проверить площадки вслед весь период его работы. (для того сделать это, просто оставьте арена с отчетным периодом пустым.
Источник:
Google AdWords: как отобрать хорошие места размещения при помощи скриптов
Google Display Network (GDN) – одна изо двух рекламных сетей в Google AdWords, позволяющая изображать рекламные объявления на большом количестве различных сайтов. Только и можно этот инструмент и более «пассивен», нежели реклама Google в поиске, он содержит значительно большую аудиторию.
Проблема GDN
«Темной стороной» контекстной рекламы в Google Display Network является в таком случае, что ее настройка требует бессчётно времени на отбор качественных площадок. В таком случае эффективной реклама будет только в томик случае, если объявления будут зарождаться на подходящих площадках. А фильтрация тысяч площадок – сие настоящая проблема для специалиста объединение контекстной рекламе.
Хорошая новость в волюм, что Google AdWords дает выполнимость управлять вашими рекламными кампаниями рядом помощи скриптов. Так что существует вероятность автоматического отбора качественных площадок.
Ты да я решили разобраться с этим вопросом и создать эффективное решение. За основу взяли экивоки Алексея Ярошенка и Derek Martin и разработали свою методологию работы скрипта для того «чистки» площадок в Google Display Network.
Иджма
Для понимания, как работает наше вотум в целом, разберем вначале его базовые этапы.
Начальные воздух
Наш скрипт обращается к отчету до площадкам AdWords за определенный промежуток времени и отбирает места размещения, удовлетворяющие различным условиям:
- расходы на площадку составляют более X USD и несть конверсий;
- стоимость конверсии с площадки с лишним X USD;
- количество показов площадки больше X, CTR не так Y и нет конверсий;
- количество показов площадки боле X, CTR больше Y и нет конверсий.
Перечисленные меньше условия могут меняться вручную в конфигурационном файле Google Spreadsheet.
Нежелательные домены
Следующая осмотр отсеивает площадки без конверсий, в домене которых присутствуют нежелательные краснобайство, и заносит их в black list.
Чалтык. 1. Пример Google Spreadsheet со словами, в области которым отсеиваются домены
Список исключений
Отобранные скриптом площадки заносятся в противень исключений на уровне «Shared library» в аккаунте AdWords.
Чалтык. 2. Пример списков исключений в «Shared library»
Чалтык. 3. Пример отчета работы скрипта в Google Spreadsheet
Уведомления о работе скрипта сообразно email
После выполнения скрипта результаты его работы высылаются получи и распишись email, указанный в конфигурационном файле. В письме содержится сводная статистика согласно обработанным площадкам и ссылка на ордер с полным отчетом.
Пошаговое решение
1. Решение рабочего Google Spreadsheet и имя проекта.
var config = {
SPREADSHEET_URL:Link to the Google Spreadsheet’,
PROJECT_NAME:’Name of the project’,
}
2. Бонитировка списка, в который будут заноситься «плохие», отфильтрованные площадки.
function getConfigData(spreadsheet) {
var excludeDomainSheet = spreadsheet.getSheetByName(‘exclude_domain’),
values =exclude DomainSheet.getSheetValues(1,1,excludeDomainSheet.getLastRow(),1);
config.exclude = [];
if (typeof values == "object") {
for (i=0; i < values.length; i++) {
config.exclude.push(values[i][0]);
}
}
Logger.log (config.exclude)
3. Дефиниция списка для площадок, по которым маловыгодный будет вноситься статистика.
var except DomainSheet = spreadsheet.getSheetByName(‘except_domain’),
values = except DomainSheet.getSheetValues(1,1,exceptDomainSheet.getLastRow(),1);
config.except = [];
if(typeof values == "object"){
for (i=0; i < values.length; i++) {
config.except.push(values[i][0]);
}
}
Logger.log (config.except)
4. Высчитывание условий отбора площадок:
- название списка,
- коммуникабельный email,
- отчетный период,
- максимальная курс клика,
- максимальная стоимость конверсии,
- минимальное часть показов,
- максимальный CTR.
var configSheet = spreadsheet.getSheetByName(‘config’);
config.email = configSheet.getRange(1,2,1,1).getValues();
config.timeperiod = configSheet.getRange(2,2,1,1).getValue();
config.listCost = configSheet.getRange(3,2,1,1).getValue();
config.list2ConversionCost = configSheet.getRange(4,2,1,1).getValue();
config.list3Impressions = configSheet.getRange(5,2,1,1).getValue();
config.list3Ctr = configSheet.getRange(6,2,1,1).getValue();
config.list4Impressions = configSheet.getRange(7,2,1,1).getValue();
config.list4Ctr = configSheet.getRange(8,2,1,1).getValue()
5. Перерождение названия документа с учетом даты запуска скрипта.
function main() {
var spreadsheet = SpreadsheetApp.openByUrl(config.SPREADSHEET_URL);
var curDate = Utilities.formatDate(new Date(), "GMT+3", "yyyy-MMMM-dd");
getConfigData(spreadsheet);
spreadsheet.setName("GDN Report " + config.PROJECT_NAME + " " + curDate)
6. Производство отчета.
var body = "<h2>Google Display Network – Report on underperforming placements</h2>";
body += "<h3>Placements that spent more than " + config.listCost + " USD and did not bring conversions:</h3> " ;
body += "<ul>";
var list = runHightCostAndNoConvertingReport();
varrows = [];
for (i=0; i < list.length; i++) {
body += "<li>" + list[i].placementОднакоlist[i].cost + ‘ USD ‘ + "</li>";
}
addPlacementList(‘list1’,list,spreadsheet);
body += "</ul>";
body += "<h3>Placements with the conversion cost more than " + config.list2ConversionCost + " USD:</h3> ;
body += "<ul>";
var list2 = runHighCostOfConversionsReport();
for (i=0; i < list2.length; i++) {
body += "<li>" + list2[i].placementСлышишь лиlist2[i].cost + ‘ USD ‘ + ‘ — The cost of conversion — ‘ + list2[i].costperconversion + ‘ USD ‘ + "</li>";
}
addPlacementList(‘list2’,list2,spreadsheet);
body += "</ul>";
body += "<h3>Placements with more than " + config.list3Impressions + " impressions and CTR less than " + config.list3Ctr + "%:</h3> " ;
body += "<ul>";
var list3 = runBadCtrNoConversionsReport();
body += "<li>The number of exceptions — " + list3.length + "</li>";
addPlacementList(‘list3’,list3,spreadsheet);
body += "</ul>";
body += "<h3>Placements with more than " + config.list4Impressions + " impressions and CTR more than " + config.list4Ctr + "%:</h3> " ;
body += "<ul>";
var list4 = runHighCtrReport();
body += "<li>The number of exceptions — " + list4.length + "</li>";
addPlacementList(‘list4’,list4,spreadsheet);
body += "</ul>";
body += "<h3>The placements, which domain name contains the unwanted word:</h3> " ;
body += "<ul>";
var list5 = gamePlacements();
body += "<li> The number of exceptions — " + list5.length + "</li>";
addPlacementList(‘list5’,list5,spreadsheet);
body += "</ul>";
body += "<a href=’"+spreadsheet.getUrl()+"’>Link to the report Google Spreadsheet</a>";
7. Отправка email с результатами.
if(config.email.length){
MailApp.sendEmail(config.email,’Display Network Alerts — ‘ + config.PROJECT_NAME + " — " + curDate, body, {htmlBody: body});
}
8. Утилизация функций для добавления площадок в исключения.
function addPlacementList(nameList,list,spreadsheet) {
var rows = [],
sheet,
range,
listSharedExcludedPlacementIterator;
sheet = spreadsheet.getSheetByName(nameList);
sheet.clear();
range = sheet.getRange(1, 1, 1, 7).setValues([[‘Exclusion URL’,’Impressions’,’Clicks’,’CTR’,’Cost’,’Conversions’,’Cost Per Conversion’]]);
range.setBackground("yellow");
listSharedExcludedPlacementIterator = AdWordsApp.excludedPlacementLists()
.withCondition("Name CONTAINS ‘" + nameList + "’").get();
while (listSharedExcludedPlacementIterator.hasNext()) {
listSharedExcludedPlacement = listSharedExcludedPlacementIterator.next();
}
for (i=0; i < list.length; i++) {
listSharedExcludedPlacement.addExcludedPlacement(list[i].placement);
rows.push([list[i].placement, list[i].impressions, list[i].clicks, list[i].clicks / list[i].impressions * 100 + "%", list[i].cost, list[i].conversions, list[i].costperconversion])
}
if(rows.length)
sheet.getRange(2, 1, rows.length, 7).setValues(rows).sort({column: 2, ascending: false});
}
function runHightCostAndNoConvertingReport() {
list = [];
var periodString = »;
if(config.timeperiod) {
periodString = ‘DURING ‘ + config.timeperiod;
Logger.log(periodString);
} else {
Logger.log(‘DURING ALL TIME’);
}
9. Решение площадок, которые потратили более X USD и без- принесли конверсий.
var report = AdWordsApp.report(
‘SELECT Domain, Clicks, Impressions, CostPerConversion, Conversions, Cost ‘ +
‘FROM AUTOMATIC_PLACEMENTS_PERFORMANCE_REPORT ‘ +
‘WHERE Cost > ‘ + config.listCost * 1000000 + " " +
‘AND Conversions < 1 ‘ +
periodString);
var rows = report.rows();
while (rows.hasNext()) {
var row = rows.next();
var anonymous = row[‘Domain’].match(new RegExp(config.except.join(‘|’).replace(/./g,’\.’),’g’));
if (anonymous == null) {
var placementDetail = new placementObject(row[‘Domain’], row[‘Clicks’], row[‘Impressions’], row[‘CostPerConversion’],row[‘Conversions’], row[‘Cost’]);
list.push(placementDetail);
}
}
return list;
}
function runHighCostOfConversionsReport() {
list = [];
var periodString = »;
if(config.timeperiod) {
periodString = ‘DURING ‘ + config.timeperiod;
Logger.log(periodString);
} else {
Logger.log(‘DURING ALL TIME’);
}
10. Дефиниция площадок с конверсиями, которые стоят больше X USD.
var report = AdWordsApp.report(
‘SELECT Domain, Clicks, Impressions, CostPerConversion, Conversions, Cost ‘ +
‘FROM AUTOMATIC_PLACEMENTS_PERFORMANCE_REPORT ‘ +
‘WHERE CostPerConversion > ‘ + config.list2ConversionCost * 1000000 + " " +
‘AND Conversions > 1 ‘ +
periodString);
var rows = report.rows();
while (rows.hasNext()) {
var row = rows.next();
var anonymous = row[‘Domain’].match(new RegExp(config.except.join(‘|’).replace(/./g,’\.’),’g’));
if (anonymous == null) {
var placementDetail = new placementObject(row[‘Domain’], row[‘Clicks’], row[‘Impressions’], row[‘CostPerConversion’], row[‘Conversions’], row[‘Cost’]);
list.push(placementDetail);
}
}
return list;
}
function runBadCtrNoConversionsReport() {
list = [];
var periodString = »;
if(config.timeperiod) {
periodString = ‘DURING ‘ + config.timeperiod;
Logger.log(periodString);
} else {
Logger.log(‘DURING ALL TIME’);
}
11. Высчитывание площадок без конверсий с более нежели X показами CTR менее Y %.
var report = AdWordsApp.report(
‘SELECT Domain, Clicks, Impressions, CostPerConversion, Conversions, Cost ‘ +
‘FROM AUTOMATIC_PLACEMENTS_PERFORMANCE_REPORT ‘ +
‘WHERE Impressions > ‘ + config.list3Impressions + " " +
‘AND Ctr < ‘ + config.list3Ctr * 0.01 + " " +
‘AND Conversions < 1 ‘ +
periodString);
var rows = report.rows();
while (rows.hasNext()) {
var row = rows.next();
var anonymous = row[‘Domain’].match(new RegExp(config.except.join(‘|’).replace(/./g,’\.’),’g’));
if (anonymous == null) {
var placementDetail = new placementObject(row[‘Domain’], row[‘Clicks’], row[‘Impressions’], row[‘CostPerConversion’], row[‘Conversions’], row[‘Cost’]);
list.push(placementDetail);
}
}
return list;
}
function runHighCtrReport() {
list = [];
var periodString = »;
if(config.timeperiod) {
periodString = ‘DURING ‘ + config.timeperiod;
Logger.log(periodString);
} else {
Logger.log(‘DURING ALL TIME’);
}
12. Микроопределе площадок без конверсий с более нежели X показами и CTR большим, чем Y %.
var report = AdWordsApp.report(
‘SELECT Domain, Clicks, Impressions, CostPerConversion, Conversions, Cost ‘ +
‘FROM AUTOMATIC_PLACEMENTS_PERFORMANCE_REPORT ‘ +
‘WHERE Impressions > ‘ + config.list4Impressions + " " +
‘AND Ctr > ‘ + config.list4Ctr * 0.01 + " " +
‘AND Conversions < 1 ‘ +
periodString);
var rows = report.rows();
while (rows.hasNext()) {
var row = rows.next();
var anonymous = row[‘Domain’].match(new RegExp(config.except.join(‘|’).replace(/./g,’\.’),’g’));
if (anonymous == null) {
var placementDetail = new placementObject(row[‘Domain’], row[‘Clicks’],row[‘Impressions’], row[‘CostPerConversion’], row[‘Conversions’], row[‘Cost’]);
list.push(placementDetail);
}
}
return list;
}
function gamePlacements() {
list = [];
var periodString = »;
if(config.timeperiod) {
periodString = ‘DURING ‘ + config.timeperiod;
Logger.log(periodString);
} else {
Logger.log(‘DURING ALL TIME’);
}
13. Подкидывание в исключения площадок без конверсий, в домене которых содержатся нежелательные трепология.
var report = AdWordsApp.report(
‘SELECT Domain, Clicks, Impressions, CostPerConversion, Conversions, Cost ‘ +
‘FROM AUTOMATIC_PLACEMENTS_PERFORMANCE_REPORT ‘ +
‘WHERE Conversions < 1 ‘ +
periodString);
var rows = report.rows();
while (rows.hasNext()) {
var row = rows.next();
var anonymous = row[‘Domain’].match(new RegExp(config.except.join(‘|’).replace(/./g,’\.’),’g’));
if (anonymous == null) {
var placement = row[‘Domain’];
var clicks = row[‘Clicks’];
var impressions = row[‘Impressions’];
var costperconversion = row[‘CostPerConversion’]
var conversions = row[‘Conversions’];
var cost = row[‘Cost’];
var placementDetail = new placementObject(placement, clicks, impressions, costperconversion, conversions, cost);
if (containsAny(placement.toString(), config.exclude)) {
var placementDetail = new placementObject(placement, clicks, impressions, costperconversion, conversions, cost);
list.push(placementDetail);
}
}
}
return list;
}
function containsAny(str, substrings) {
for (var i = 0; i != substrings.length; i++) {
var substring = substrings[i];
if (str.indexOf(substring) != — 1) {
return substring;
}
}
return null;
}
function placementObject(placement, clicks, impressions, costperconversion, conversions, cost) {
this.placement = placement;
this.clicks = clicks;
this.impressions = impressions;
this.costperconversion = costperconversion;
this.conversions = conversions;
this.cost = cost;
}
Результаты
Ты да я тестировали работу скрипта, используя следующие критерии отбора площадок:
Сюжет письма:
Размещения, которые потратили паче 300 USD и не принесли конверсий: 0
Размещения со стоимостью конверсии сильнее чем 500 USD: 0
Размещения с более нежели 100 показами и CTR, менее 0.05%: 3
Размещения с побольше чем 50 показами и CTR более 8%: 7
Размещения, содержащие в домене нежелательные текст: 382
Заключительные комментарии
При использовании нашего решения нужно держать (сохранять) в памяти (в голове) о следующих моментах:
- «Отсеивающие» параметры только и остается и нужно прописывать с учетом особенностей вашего проекта.
- Ваша милость можете настроить автоматический запуск скрипта, к примеру сказать, еженедельно.
- Если ваш аккаунт стоит старый, мы рекомендуем проверить площадки по (по грибы) весь период его работы. Пусть сделать это, просто оставьте луг с отчетным периодом пустым.
Источник:
Новости
-
Нормативные документы по повышению квалификации
1. Узаконение Совета Министров Республики Беларусь через 22 июня 2011...
- Опубликован 8 января, 2024
- 0
-
Как сократить количество отказов от «Корзины»
Возможно, каждый владелец интернет-магазина считает, что «Корзиночка» – это очень...
- Опубликован 19 августа, 2019
- 0
-
#SEOnews14: мы празднуем – вы получаете подарки!
У SEOnews сегодняшнее день рождения! Уже 14 лет SEOnews по...
- Опубликован 19 августа, 2019
- 0
-
5 книг от эксперта: Андрей Калинин (Mail.ru Group)
А ваша милость любите читать? Если да, то наша часть...
- Опубликован 19 августа, 2019
- 0
-
Планы на неделю: покорение ТОПа выдачи и 8 часов разборов кейсов
Каждое воскресенье чтение SEOnews публикует подборку образовательных мероприятий на ближайшие...
- Опубликован 18 августа, 2019
- 0
-
Типичные ошибки при запуске рекламы в Яндекс.Директ: как сделать сразу правильно, чтобы не слить бюджет
Контекстная раскручивание — уникальный канал привлечения целевой аудитории получи и...
- Опубликован 18 августа, 2019
- 0
-
7 способов перевода аудио и видео в текст
Давайте начистоту. (у)потреблять люди, которые ненавидят голосовые сообщения. Есть челядь,...
- Опубликован 18 августа, 2019
- 0
нет комментариев