Автоматизация товаров Google AdWords в зависимости от наличия
Часто, при работе с рекламными кампаниями по контекстной рекламе, приходится сталкиваться с ситуацией включения/выключения групп объявлений (ключевых слов, объявлений) по наличию товара на сайте. Конечно, если у Вас на ведении небольшой интернет-магазин (до 50 товаров), то этот момент можно отслеживать и вручную производить указанные действия. Но что делать, когда у Вас на сайте 1000 или 10000 товаров? На проверку наличия каждого из них будет тратиться огромное количество времени и, по-сути, вся работа ppc-шника будет сводится к круглосуточному отслеживанию наличия. Это время можно потратить на выполнение более интересных, важных и нужных задач.
Выход из этой ситуации был предложен на сайте FreeAdWordsScripts.com (пример скрипта, описание функций и изменений — по ссылке). Для частных случаев можно использовать скрипты, которые включают/отключают объявления, паузят группы объявлений по наличию товаров на сайте. Суть в том, что данный скрипт парсит страницы сайта по указанным ссылкам в объявлениях на наличие указанных Вами в скрипте кусков html отображающих наличие/отсутствие товара.
Рис.2 — товара нет в наличии
А что делать в ситуациях, когда ссылки установлены на уровне ключевых слов и нет возможности отслеживать наличия товаров по каждому из них?
Для этого случая за основу использовался скрипт с FreeAdWordsScripts.com переделанный для проверки ссылок на уровне ключевых слов и включению/остановке непосредственно самих ключевых по наличию/отсутствию товаров на сайте.
/************************************
* Item Out Of Stock Checker
***********************************/
var URL_LEVEL = ‘Keyword’;
var ONLY_ACTIVE = false; // set to false for all ads or keywords
var CAMPAIGN_LABEL = ‘указываем_установленный_на кампании_ярлык; // set this if you want to only check campaigns with this label
var STRIP_QUERY_STRING = true; // set this to false if the stuff that comes after the question mark is important
var WRAPPED_URLS = true; // set this to true if you use a 3rd party like Marin or Kenshoo for managing you account
// This is the specific text to search for
// on the page that indicates the item
// is out of stock.
var OUT_OF_STOCK_TEXT = ‘текст_нет_в_наличииt’;
function main() {
var alreadyCheckedUrls = {};
var iter = buildSelector().get();
while(iter.hasNext()) {
var entity = iter.next();
if(entity.urls().getFinalUrl()){
var url = cleanUrl(entity.urls().getFinalUrl(), entity);
if(alreadyCheckedUrls[url]) {
if(alreadyCheckedUrls[url] === ‘out of stock’) {
entity.pause();
} else {
entity.enable();
}
} else {
var htmlCode;
try {
htmlCode = UrlFetchApp.fetch(url).getContentText();
} catch(e) {
Logger.log(‘There was an issue checking:’+url+’, Skipping.’);
continue;
}
if(htmlCode.indexOf(OUT_OF_STOCK_TEXT) >= 0) {
alreadyCheckedUrls[url] = ‘out of stock’;
entity.pause();
} else {
alreadyCheckedUrls[url] = ‘in stock’;
entity.enable();
}
}
Logger.log(‘Url: ‘+url+’ is ‘+alreadyCheckedUrls[url]);
}
}
}
function cleanUrl(url, entity) {
if (url) {
if(WRAPPED_URLS) {
url = url.substr(url.lastIndexOf(‘http’));
if(decodeURIComponent(url) !== url) {
url = decodeURIComponent(url);
}
}
if(STRIP_QUERY_STRING) {
if(url.indexOf(‘?’)>=0) {
url = url.split(‘?’)[0];
}
}
if(url.indexOf(‘{‘) >= 0) {
//Let’s remove the value track parameters
url = url.replace(/\{[0-9a-zA-Z]+\}/g,»);
}
}
else Logger.log(‘Что-то пошло не так, в урле нулл: ‘+url+’ ‘+ entity.getCampaign.getName+ ‘ -> ‘ +entity.getAdGroup.getName);
return url;
}
function buildSelector() {
//var selector = (URL_LEVEL === ‘Keyword’) ? AdWordsApp.ads() : AdWordsApp.keywords();
var selector = (URL_LEVEL === ‘Keyword’) ? AdWordsApp.keywords() : AdWordsApp.ads();
selector = selector.withCondition(‘CampaignStatus != DELETED’).withCondition(‘AdGroupStatus != DELETED’);
if(ONLY_ACTIVE) {
selector = selector.withCondition(‘CampaignStatus = ENABLED’).withCondition(‘Status = ENABLED’);
if(URL_LEVEL !== ‘Keyword’) {
selector = selector.withCondition(‘AdGroupStatus = ENABLED’);
}
}
if(CAMPAIGN_LABEL) {
var label = AdWordsApp.labels().withCondition(«Name = ‘»+CAMPAIGN_LABEL+»‘»).get().next();
var campIter = label.campaigns().get();
var campaignNames = [];
while(campIter.hasNext()) {
campaignNames.push(campIter.next().getName());
}
selector = selector.withCondition(«CampaignName IN [‘»+campaignNames.join(«‘,'»)+»‘]»);
}
return selector;
}
Важно для работы скрипта:
- Обязательно ставим ярлык на кампанию и прописываем его в скрипте, чтобы указать, какую именно кампанию скрипт должен проверять.
- Обязательно прописываем html-параметр наличия товара, а не текст «нет в наличии».
- Количество ключевых слов, содержащих ссылку, необходимо ограничивать опытным путем, т.к. время работы скрипта, установленное AdWords, не должно превышать 30 минут (на практике удалось получить не более 3500 ключевых слов с ссылками).
- Все ссылки должны быть рабочими. Наличие битых ссылок в разы повышает время работы скрипта, и Вы можете не уложится в отведенное время.
- Обязательно задаем расписание работы скрипта, чтоб нам не пришлось каждый раз запускать его вручную.
Обязательно прописываем html-параметр наличия товара, а не текст «нет в наличии».
что такое html-параметр
Собственно, речь идет о html-коде, показывающем, что товар находится в наличии на сайте. На примере показано, что в данном случае это значения «instock» — товар есть в наличии и «not-available» — товар не в наличии. Для Вашего сайта, значения html могут отличаться