Битва за дорослих: як виключати дитячі канали з реклами на Youtube 24/7?

Передісторія

Багато хто пам'ятає нещодавній скандал про відмову великих рекламодавців розміщуватися на YouTube. Причина заключалася ось в чому: їх преролли (платні ролики перед відео, які можна пропустити після 5 секунд) показувалися у відео з небажаним контентом. Однак в нашій статті мова піде про іншу проблему, а саме про дитячий контент. Справа в тім, що навіть при коректних налаштуваннях таргетингу на дорослу аудиторію, величезну кількість (аж до 90%) показів отримують дитячі канали. Пов'язано це з тим, що батьки зі своїх «дорослих» акаунтів на власних пристроях, як мобільних, так і десктопах, ставлять дітям мультики. Зрозуміло, рекламодавцям не хочеться витрачати рекламний бюджет на дітей, які просто переглядають преролли, тому що це не має практично ніякого ефекту. Такі відео і канали можна виключати за допомогою мінус-слів або виключаючи цілі тематики, але це довго, складно і вимкне далеко не всі канали та відео - дитячий контент досить різноманітний. Багато маловідомих дитячих каналів продовжують показувати в своїх відео рекламу. А все через їх загальні, не конкретно дитячі назви, чи через недостатній опис. Проте їх все одно дивляться діти у великій кількості. Я вирішив знайти спосіб, як автоматизувати пошук і вилучення подібних каналів за допомогою скриптів AdWords.

Рішення 1

Отже, я приступив до створення свого першого скрипту для пошуку дитячих каналів. AdWords дозволяє створювати свої скрипти на JS для управління рекламним акаунтом. Вони створені на базі Google Apps Scripts. Їх головною перевагою є інтеграція з іншими сервісами Google, такими, як Google Drive, Spreadsheets, YouTube, Analytics, BigQuery і т.д., а також можливість підключати сторонні API. До цього я вже працював з YouTube Data API v3, щоб знайти відео для розміщення. Постараюся розповісти про це в іншій статті. Так ось, досвідченим шляхом було встановлено, що дитячі відео об'єднуються не за назвами, а за їхніми тегами. Я трохи змінив скрипт для пошуку YouTube відео, і знайшов подібні теги за різними запитами дитячих мультиків. Після цього зберіг їх у Google Spreadsheet для подальшого використання в новому скрипті. Файл публічний, але рекомендую перед налаштуванням скрипта скопіювати його собі в Google Drive, і замінити id файлу в скрипті на новий.

 

Основні моменти для розуміння роботи скрипту:

  1. З URL_PERFORMANCE_REPORTотримуємо всіпосилання з місцями розміщення YouTubе и отримуємоvideoId за вчорашній день.

     var report = AdWordsApp.report(
         'SELECT Url ' +
         'FROM   URL_PERFORMANCE_REPORT ' +
         'WHERE CampaignName CONTAINS "Video" ' +
         'DURING YESTERDAY');
    
      var rows = report.rows();
    
      while (rows.hasNext()) {
        var row = rows.next();
        var videoId = row['Url'].toString().replace('www.youtube.com/video/','');
        videoIdList.push([videoId]);
      }
  2. В циклі відправляємо запити до YouTubе з кожним id відео. Із відповіді отримуємо теги та ID відеоканалу.  Перевіряємовсі теги на пересічність з нашою бібліотекою дитячих тегів
    for (var i = 0; i < videoList.length; i++) {
        
        var results = YouTube.Videos.list('snippet', {id: videoList[i]});
        try {
          if (results.items[0].snippet !== undefined) {
            
            var channelId = results.items[0].snippet.channelId;
            var tags = results.items[0].snippet.tags;
            if (uniqueChannel[channelId] !== true){
              for (var k = 0; k < tags.length; k++) {
                if (tagsObj[tags[k]] !== undefined) {
                  channels.push([channelId]);
                  uniqueChannel[channelId] = true;
                  Logger.log("Добавить в библиотеку исключений - " + channelId);
                  break;
                } else {
                  continue;
                };
              }
            }
          }
        } catch (e) {
          Logger.log(e);
        }
      }

    Якщо який-небудь з тегів відео збігається з тегами з бібліотеки, то id відеоканалу відправляється в масив для виключення, за умови, якщо він вже був доданий через інше відео з цього ж каналу.

  3. Після того, як усі відео були перевірені, запускаємо цикл на додавання всіх каналів в список виключених майданчиків облікового запису AdWords. Список з назвою, ідентичною тому, що в скрипті (у мене просто "Відеоканали") потрібно створити заздалегідь. Ліміт для списку виключених майданчиків в списку становить 65000, проблем з його переповненням виникнути не має.
    var excludedPlacementList = AdWordsApp.excludedPlacementLists().withCondition('Name = "Видеоканалы"').get().next();
      for (var d = 0; d < channels.length; d++) {
        excludedPlacementList.addExcludedPlacement("youtube.com/channel/"+channels[d].toString());
      };

 

Проблеми при використанні першого варіанту скрипту

Досить просте і ефективне рішення, проте, як виявилося, не все так просто. При використанні даного скрипту у мене виникла наступна проблема: під час запуску охоплюючих відеокампаній скрипт не встигав обробити всі відео за вчорашній день - упирався у часовий ліміт 30 хвилин (внутрішнє обмеження AdWords), а також не додавав нові винятки. До того ж, краще додавати відео якомога частіше і швидше, щоб заощадити якомога більше коштів. На жаль, навіть після додавання відео в список виключень вони, як показує досвід, починають діяти не одразу. Техпідтримка Google говорить про термін аж до 2 днів (за спостереженнями це відбувається зазвичай раніше).

Тому в файлі на окремій сторінці вже є список накопичених за час роботи скрипту каналів.  Їх краще додати в виключення заздалегідь.

 

Рішення 2


Після тестування першої версії скрипту зі своїм знайомим,  фанатом автоматизації, я зрозумів, що потрібно робити перевірку щогодини і не звіряти відео, які вже були перевірені раніше. Інакше скрипт починав упиратися в ліміт 30 хвилин вже до опівдня. Рішення було взяте з іншого скрипту для зміни ставок від години до години. Кому цікаво – ось посилання на таке рішення. Все було трохи складніше, якщо порівнювати з першою версією, але результат вийшов відмінним. Доповнили функціоналом збереження в txt-файл вже перевірених відео в Google Drive, туди записуються всі id за сьогодні – для того, щоб порівнювати їх з новим звітом щогодини. Порівняння відбувається за допомогою методу difference з вільної бібліотеки Underscore.js.

var videoList = _.difference(videoIdList, data);

 

На виході отримуємо масив з виключно нових videoId за останню годину, який і перевіряємо за схемою першого скрипта на входження тегів. А по завершенні скрипта додаємо в той же txt файл вже все відео за поточну добу.

Налаштування скрипту

 

  1. Вкажіть назвустворюваного файла в Google Drive 

    var dataFile = "videoIds.txt";

    Якщо такого файла ще немає, то вінстворюється автоматично.

  2. Оберіть кампанії, якінеобхідно перевірити 
    'WHERE CampaignName CONTAINS "(Video)"

    Синтаксис AWQL є в довідці AdWords.

  3. Замініть id файлу Google Spreadsheet на свій 

    var spreadsheet = SpreadsheetApp.openById('11PMGc70yLE88Npi47Hwb6W36Y8yjw2N2CdXXLgdK12o');
  4. Вінтерфейсі AdWords створіть загальний списоктих місць розміщень, які необхідно виключити
    var excludedPlacementList = AdWordsApp.excludedPlacementLists().withCondition('Name = "Видеоканалы"').get().next();

    та вставте його назвузамість «Відеоканали».

  5. Включіть в розширених API YouTube. 
  6. Після перших переглядів включіть YouTube API в Google Developers Console. Посилання буде в журналіпомилок.
  7. Налаштуйте розклад опрацьовування скрипту на «Кожну годину».

Готово!

Фінал

 

В результаті ми отримали скрипт, який перевіряє дитячі канали кожну годину і не упирається в ліміт по часу. Що стосується інших корисних речей: ви можете налаштувати скрипт на будь-яку тематику, додаючи нові теги в файл spreadsheet. Код оновленого скрипта виклав сюди. Із задоволенням відповім на питання і побажання.

Іноді в виключення потрапляють і дорослі канали, але це відбувається досить рідко. Причини можуть бути дві - або власник каналу розміщує в ньому не тільки дорослі, а й дитячі відео, або навмисне використовує дитячі теги для накрутки і розширення аудиторії. За спостереженнями, після того, як ви почнете використовувати скрипт, істотно знизиться коефіцієнт переглядів (VTR, View-through rate), так як дорослі тиснуть кнопку «пропустити» набагато частіше дітей.

Користуйтеся і розміщуйтесь на правильних каналах!

Стаття розміщена на ресурсі https://habrahabr.ru/

Якщо ви хочете працювати з нами,
давайте почнемо з обговорення завдання

Отримати консультацію

Отримуйте новини інтернет-маркетингу

Тільки корисна інформація від експертів Promodo

Якщо ви хочете працювати з нами,
давайте почнемо з обговорення завдання

Отримати консультацію

Отримуйте новини інтернет-маркетингу