AdWords
Сейчас в сети: 1.2K
Сейчас в сети: 1.2K
Ремаркетинг, стратегии в КМС, Редактор AdWords, конверсии и др.
Подсказки
star_border
Ответить

Не отрабатывает скрипт Adwords на 404 ошибку

Студент ✭

Добрый день!

 

Столкнулась с тем что не отрабатывает скрипт 404 ошибки.  Основная проблема - Время ожидания истекло. Для начала я предположила, что урлов в аккаунте слишком много и разбила детально для каждой кампании отдельный скрипт. Но после детализации ошибка "Время ожидания" все равно осталась.  Что характерно: когда Adwords делает 30 секундную проверку скрипта, результаты положительные, тость скрипт отрабатывает нормально.

 

Помогите пожалуйста разобраться какие еще могут быть причины 

 

Вот текст самого скрипта (скрипт стандартный)

 

function main() {

   // можно добавить больше кодов ответа сервера. Укажите свой e-mail.

 var BAD_CODES = [404,301];

 var TO = ['test@gmail.com'/*];

 var SUBJECT = 'site.com Отчет по некорректным url - ' + _getDateString();

 var HTTP_OPTIONS = {

   muteHttpExceptions:true

 };

 

 

   var campaignNameArray = ["campaign_example"];

 

 

     

       for(var index in campaignNameArray)

       {     

               var campaignName = campaignNameArray[index];

               Logger.log("Campaign: " + campaignName);

   //Собираем url всех ключевиков и объявлений

   var iters = [

     // Для url уровня объявлений

     AdWordsApp.ads()

     .withCondition("Status = 'ENABLED'")

     .withCondition("AdGroupStatus = 'ENABLED'")

     .withCondition("CampaignStatus = 'ENABLED'")

     .withCondition("Type = 'TEXT_AD'")

     .get(),

     // Для url уровня ключевиков

     AdWordsApp.keywords()

     .withCondition("CampaignName = '" + campaignNameArray + "'")

     .withCondition("Status = 'ENABLED'")

     .withCondition("DestinationUrl != ''")

     .withCondition("AdGroupStatus = 'ENABLED'")

     .withCondition("CampaignStatus = 'ENABLED'")

     .get()

   ];

  

   var already_checked = {};

   var bad_entities = [];

   for(var x in iters) {

     var iter = iters[x];

     while(iter.hasNext()) {

       var entity = iter.next();

       if(entity.getDestinationUrl() == null) { continue; }

       var url = entity.getDestinationUrl();

       if(url.indexOf('{') >= 0) {

         // Удаляем параметры отслеживания

         url = url.replace(/\{[0-9a-zA-Z]+\}/g,'');

       }

       if(already_checked[url]) { continue; }

       var response_code;

       try {

         Logger.log("Тестовый url: "+url);

         response_code = UrlFetchApp.fetch(url, HTTP_OPTIONS).getResponseCode();

       } catch(e) {

         // Что-то пошло не так, нужно сообщить нам об этом

         bad_entities.push({e : entity, code : -1});

         Logger.log('Ошибка');

         entity.pause();

       }

       if(BAD_CODES.indexOf(response_code) >= 0) {

         // Этот элемент с ошибкой, сохраним его.

         bad_entities.push({e : entity, code : response_code});

         Logger.log('Некорректный url: ' + url);

         entity.pause();

       }

       already_checked[url] = true;

     }

   }

   var column_names = ['Тип','Кампания','Группа','Id','Заголовок/Ключевое слово','Ответ сервера','Адрес(Url)'];

   var attachment = column_names.join(",")+"\n";

   for(var i in bad_entities) {

     attachment += _formatResults(bad_entities[i],",");

   }

   if(bad_entities.length > 0) {

     var options = { attachments: [Utilities.newBlob(attachment, 'text/csv', 'bad_urls_'+_getDateString()+'.csv')] };

     var email_body = "В наличии " + bad_entities.length + " некорректных url. Подробности в приложении.";

    

     for(var i in TO) {

       MailApp.sendEmail(TO[i], SUBJECT, email_body, options);

     }

   }

 }

}

 

 

//Форматирование рядов с результатами, разделяемое SEP

function _formatResults(entity,SEP) {

 var e = entity.e;

 if(typeof(e['getHeadline']) != "undefined") {

   // Элемент объявления

   return ["Ad",

           e.getCampaign().getName(),

           e.getAdGroup().getName(),

           e.getId(),

           e.getHeadline(),

           entity.code,

           e.getDestinationUrl()

          ].join(SEP)+"\n";

 } else {

   // и ключевика

   return ["Keyword",

           e.getCampaign().getName(),

           e.getAdGroup().getName(),

           e.getId(),

           e.getText(),

           entity.code,

           e.getDestinationUrl()

          ].join(SEP)+"\n";

 }

}

 

 

// Вспомогательная функция. Форматирование сегодняшней даты.

function _getDateString() {

 return Utilities.formatDate((new Date()), AdWordsApp.currentAccount().getTimeZone(), "yyyy-MM-dd");

}

 

2 Ответ экспертаverified_user

Re: Не отрабатывает скрипт Adwords на 404 ошибку

Ведущий участник

Если брали исходник тут , то он рабочий.

Но с рядом ограничений (часть сказано в коментариях)

 

Кстати у меня скрипт уперся в лимит выдав ошибку "

Cannot fetch more AdWords entities from iterator: exceeded limit of 50000

Для большого кол-ва url его нужно упрощать или более тщательнее дробить

Если не используете URL на уровне ключевого слова - закоментируйте эту часть

 

// Для url уровня ключевиков
    // AdWordsApp.keywords()
   //  .withCondition("CampaignName = '" + campaignNameArray + "'")
  //   .withCondition("Status = 'ENABLED'")
  //   .withCondition("DestinationUrl != ''")
  //   .withCondition("AdGroupStatus = 'ENABLED'")
 //    .withCondition("CampaignStatus = 'ENABLED'")
  //   .get()

 

C уважением,
Павел

Re: Не отрабатывает скрипт Adwords на 404 ошибку

Ведущий участник

Вижу 2 способа:
1. При обходе ссылок помечать объявки ярлыками. Когда будет таумаут скрипта, можно будет начать с объявлений без ярлыков
2. Как вариант, можете все в spreadsheets выгрузить (кампания>группа>объвление>url), и там настроить всю проверку. Насколько помню, в таблицах ограничения лояльнее.

 

Рекомендую настроить отслеживание 404 в Google Analytics. Если что-то пропустит скрипт, вы сможете увидеть в отчетах.

-------
С уважением, Владимир