- Регистрация
- 21 Окт 2020
- Сообщения
- 87
О скрипте
Новый способ подсчета трафика опубликован в статье Search Engine Land. Скрипт ежедневно формирует отчет, где отображается процент кликов, показов и даже расходов по неопознанным запросам, то есть те данные, которые Google Ads больше не афиширует. Количество дней, за которое формируется метрика, а также предмет исследования рекламодатель может настроить самостоятельно.
Скрипт работает с фильтром Ad Network Type = Search и берет информацию из двух отчетов:

Чтобы увидеть результаты, необходимо скопировать скрипт аккаунта, который нужно проанализировать и внести в код следующие изменения:

Скрипт для работы:
/***************************************************
* Undefined Search Terms Report
* @version 1.1
* @author: Naman Jindal (Optmyzr)
****************************************************/
var LAST_N_DAYS = 30; // Number of previous days to include in report
var EMAILS = ['example@example.com']; // Array of Emails to be notified and given access to the results in a Google Sheet
var PRIMARY_METRIC = 'Cost'; // E.g. Impressions, Cost, Clicks
function main() {
var map = {};
var DATE_RANGE = getAdWordsFormattedDate(LAST_N_DAYS, 'yyyyMMdd') + ',' + getAdWordsFormattedDate(1, 'yyyyMMdd');
var query = [
'SELECT Date, Impressions, Cost, Clicks FROM ACCOUNT_PERFORMANCE_REPORT',
'WHERE AdNetworkType1 = SEARCH', 'DURING', DATE_RANGE
].join(' ');
var rows = AdsApp.report(query).rows();
while(rows.hasNext()) {
var row = rows.next();
map[row.Date] = {
'ACTUAL': 0,
'QUERIES': 0
};
map[row.Date].ACTUAL = parseInt(row[PRIMARY_METRIC], 10);
}
var query = [
'SELECT Date, Query, Impressions, Cost, Clicks FROM SEARCH_QUERY_PERFORMANCE_REPORT',
'WHERE AdNetworkType1 = SEARCH',
'DURING', DATE_RANGE
].join(' ');
var rows = AdsApp.report(query).rows();
while(rows.hasNext()) {
var row = rows.next();
map[row.Date].QUERIES += parseInt(row[PRIMARY_METRIC], 10);
}
var output = [];
for(var date in map) {
output.push([date, map[date].ACTUAL, map[date].QUERIES, (map[date].ACTUAL - map[date].QUERIES) / map[date].ACTUAL]);
}
if(!output.length) {
Logger.log('No data in the account');
}
var TEMPLATE_URL = 'https://docs.google.com/spreadsheets/d/1G1-zPqm0kqQjZSPEwS8cfndYVzkswbyl80SiLlqiPF8/edit#gid=0';
var template = SpreadsheetApp.openByUrl(TEMPLATE_URL);
var ss = template.copy(AdsApp.currentAccount().getName() + ' - Undefined Search Terms Report by ' + PRIMARY_METRIC);
ss.addEditors(EMAILS);
var tab = ss.getSheets()[0];
tab.getRange(2,1,tab.getLastRow(),tab.getLastColumn()).clearContent();
tab.getRange(2,1,output.length,output[0].length).setValues(output).sort([{'column': 1, 'ascending': true}]);
var msg = 'Hi,\nPlease find below the undefined search terms report for your Google Ads account:\n'+ss.getUrl();
MailApp.sendEmail(EMAILS.join(','), AdsApp.currentAccount().getName() + ' - Undefined Search Terms Report by ' + PRIMARY_METRIC, msg);
Logger.log("Your report is ready at " + ss.getUrl());
}
function round_(num,n) {
return +(Math.round(num + "e+"+n) + "e-"+n);
}
function getAdWordsFormattedDate(d, format){
var date = new Date();
date.setDate(date.getDate() - d);
return Utilities.formatDate(date,AdsApp.currentAccount().getTimeZone(),format);
}
Эффективность кода
В качестве исследования выбраны аккаунты, где только одна активная кампания.
Вот таблица со значениями после загрузки скрипта, а также график отчета:


За сентябрь (начиная с первых чисел) процент трафика по скрытым запросам вырос с нуля до 55% и в дальнейшем не особо менялся в показателях. Какие именно запросы приводят большую часть трафика – неясно. До нововведений в отчете отображались запросы, связанные с видоизменением оборудования (например, «столы нсо 1м87Б»), а теперь Google показывает только очевидные.



Данные индивидуальны и полностью зависят от настроек кампании, однако общий вывод сделать можно: почти половина трафика теперь идет по скрытым запросам.
Как теперь собирать семантику и откуда брать минус-слова
Можно попробовать создавать отдельные группы объявлений под каждый ключ в точном соответствии – данные по ключевым словам будут равноценны информации по запросам. Однако это занимает кучу времени, так что заниматься этим невыгодно.
Альтернативные варианты:
Пробуйте запускать кампанию по ключам в точном соответствии, а не в широком. Так есть шанс минимизировать количество скрытых запросов. Хоть отчет и урезан системой, но он все еще работает. Поэтому, есть смысл анализировать его и по возможности добавлять минус-слова.
Источник
Новый способ подсчета трафика опубликован в статье Search Engine Land. Скрипт ежедневно формирует отчет, где отображается процент кликов, показов и даже расходов по неопознанным запросам, то есть те данные, которые Google Ads больше не афиширует. Количество дней, за которое формируется метрика, а также предмет исследования рекламодатель может настроить самостоятельно.
Скрипт работает с фильтром Ad Network Type = Search и берет информацию из двух отчетов:
- Отчет об эффективности аккаунта, где отображаются все данные по кликам;
- Отчет об эффективности поискового запроса, где хранится информация только по известным запросам.

Чтобы увидеть результаты, необходимо скопировать скрипт аккаунта, который нужно проанализировать и внести в код следующие изменения:
- Открыть доступ к отчету. Для этого пишем свой email в строку var EMAILS;
- Указать метрику, по которой нужен срез данных. В строке var PRIMARY_METRIC указываем нужное значение – Cost (стоимость), Clicks (клики) или Impressions (показы).
- Указать период формирования статистики. Это можно сделать в строке var LAST_N_DAYS, изначально там стоит 30 дней, но лучше задать 60.

Скрипт для работы:
/***************************************************
* Undefined Search Terms Report
* @version 1.1
* @author: Naman Jindal (Optmyzr)
****************************************************/
var LAST_N_DAYS = 30; // Number of previous days to include in report
var EMAILS = ['example@example.com']; // Array of Emails to be notified and given access to the results in a Google Sheet
var PRIMARY_METRIC = 'Cost'; // E.g. Impressions, Cost, Clicks
function main() {
var map = {};
var DATE_RANGE = getAdWordsFormattedDate(LAST_N_DAYS, 'yyyyMMdd') + ',' + getAdWordsFormattedDate(1, 'yyyyMMdd');
var query = [
'SELECT Date, Impressions, Cost, Clicks FROM ACCOUNT_PERFORMANCE_REPORT',
'WHERE AdNetworkType1 = SEARCH', 'DURING', DATE_RANGE
].join(' ');
var rows = AdsApp.report(query).rows();
while(rows.hasNext()) {
var row = rows.next();
map[row.Date] = {
'ACTUAL': 0,
'QUERIES': 0
};
map[row.Date].ACTUAL = parseInt(row[PRIMARY_METRIC], 10);
}
var query = [
'SELECT Date, Query, Impressions, Cost, Clicks FROM SEARCH_QUERY_PERFORMANCE_REPORT',
'WHERE AdNetworkType1 = SEARCH',
'DURING', DATE_RANGE
].join(' ');
var rows = AdsApp.report(query).rows();
while(rows.hasNext()) {
var row = rows.next();
map[row.Date].QUERIES += parseInt(row[PRIMARY_METRIC], 10);
}
var output = [];
for(var date in map) {
output.push([date, map[date].ACTUAL, map[date].QUERIES, (map[date].ACTUAL - map[date].QUERIES) / map[date].ACTUAL]);
}
if(!output.length) {
Logger.log('No data in the account');
}
var TEMPLATE_URL = 'https://docs.google.com/spreadsheets/d/1G1-zPqm0kqQjZSPEwS8cfndYVzkswbyl80SiLlqiPF8/edit#gid=0';
var template = SpreadsheetApp.openByUrl(TEMPLATE_URL);
var ss = template.copy(AdsApp.currentAccount().getName() + ' - Undefined Search Terms Report by ' + PRIMARY_METRIC);
ss.addEditors(EMAILS);
var tab = ss.getSheets()[0];
tab.getRange(2,1,tab.getLastRow(),tab.getLastColumn()).clearContent();
tab.getRange(2,1,output.length,output[0].length).setValues(output).sort([{'column': 1, 'ascending': true}]);
var msg = 'Hi,\nPlease find below the undefined search terms report for your Google Ads account:\n'+ss.getUrl();
MailApp.sendEmail(EMAILS.join(','), AdsApp.currentAccount().getName() + ' - Undefined Search Terms Report by ' + PRIMARY_METRIC, msg);
Logger.log("Your report is ready at " + ss.getUrl());
}
function round_(num,n) {
return +(Math.round(num + "e+"+n) + "e-"+n);
}
function getAdWordsFormattedDate(d, format){
var date = new Date();
date.setDate(date.getDate() - d);
return Utilities.formatDate(date,AdsApp.currentAccount().getTimeZone(),format);
}
Эффективность кода
В качестве исследования выбраны аккаунты, где только одна активная кампания.
- Онлайн-магазин оборудования для общественного питания
Вот таблица со значениями после загрузки скрипта, а также график отчета:


За сентябрь (начиная с первых чисел) процент трафика по скрытым запросам вырос с нуля до 55% и в дальнейшем не особо менялся в показателях. Какие именно запросы приводят большую часть трафика – неясно. До нововведений в отчете отображались запросы, связанные с видоизменением оборудования (например, «столы нсо 1м87Б»), а теперь Google показывает только очевидные.

- Онлайн-магазин товаров для детей

- Онлайн-сервис для малого бизнеса

Данные индивидуальны и полностью зависят от настроек кампании, однако общий вывод сделать можно: почти половина трафика теперь идет по скрытым запросам.
Как теперь собирать семантику и откуда брать минус-слова
Можно попробовать создавать отдельные группы объявлений под каждый ключ в точном соответствии – данные по ключевым словам будут равноценны информации по запросам. Однако это занимает кучу времени, так что заниматься этим невыгодно.
Альтернативные варианты:
- Необходимо досконально собирать семантику до запуска рекламной кампании. Это можно сделать с помощью QA-площадок (например, Ответы Mail.ru) или Xpath, установив расширение Scraper для Chrome.
- Нужно прорабатывать минус-слова до запуска кампании на уровне аккаунта, кампании и группы объявлений.
- Стоит обратить внимание на автоматические стратегии в Google Ads. Может сработать, а может и нет – нужно тестить.
Пробуйте запускать кампанию по ключам в точном соответствии, а не в широком. Так есть шанс минимизировать количество скрытых запросов. Хоть отчет и урезан системой, но он все еще работает. Поэтому, есть смысл анализировать его и по возможности добавлять минус-слова.
Источник
Последнее редактирование: