Главное Авторские колонки Вакансии Образование
861 3 В избр. Сохранено
Авторизуйтесь
Вход с паролем

Как работать со скриптами Google Ads, если ты гуманитарий

Запрограммировать работу Google Рекламы, не зная ни одного языка программирования, вполне реально. Основы скриптов Google Ads для гуманитариев: откуда копировать, куда вставлять, и кого звать на помощь.
Мнение автора может не совпадать с мнением редакции

В чем польза скриптов Google Ads и как перестать их бояться

Имея опыт настройки контекстной рекламы, вы должны были слышать о скриптах – самом продвинутом способе управления рекламными системами. Чаще о них вспоминают по отношению к Google, и у специалистов без технического бэкграунда они почти всегда вызывают тревогу и недоумение. Этому нужно положить конец, а зачем и как это сделать, мы сейчас разберемся.

Что такое скрипты

Скрипт Google – это алгоритм, основанный на JavaScript, который управляет данными Google Рекламы. Например, он может обнаруживать и изменять значения любых параметров, корректировать ставки и настройки показа в зависимости от произвольных условий, выполнять массовые операции с ключевыми словами и объявлениями, а также многое другое – то, что задумает его автор.

Скрипты позволяют добавлять в Google Ads нужные функции и инструменты – даже такие, которые не были предусмотрены системой. Отказаться от этой привилегии многих вынуждает именно необходимость работать с программным кодом. Постараемся преодолеть это препятствие и сократить техническую составляющую до минимума.

Преимущества скриптов

Чтобы развеять последние сомнения в необходимости освоения скриптов, взглянем на преимущества их использования. Итак, скрипты Google:

  • выполняют работу любой сложности: анализ многостраничных отчетов, добавление забытых минус-слов, проверка работоспособности каждой ссылки, поиск опечаток в рекламных текстах, регулярная корректировка любого количества ставок и т.п. – все, на что пришлось бы потратить часы собственного времени, может без вашего участия сделать скрипт;
  • избавляют от человеческого фактора: даже если речь идет о более простых операциях, с которыми без труда справляетесь вы сами, от банальной человеческой ошибки не застрахован никто; избавиться от ее риска можно только одним способом – передать работу отлаженному алгоритму;
  • автоматизируют все, что вы захотите: скептики могут резонно заметить, что для части описанных операций есть уже готовые системы автоматизации, созданные профессионалами. Это так, но у любой системы ограниченный функционал, не персонализируемый под каждого рекламодателя. Поэтому если вам нужна конкретная функция, которой нет в существующих сервисах, вы можете легко создать ее с помощью скрипта;
  • знакомы вам до последнего символа: в отличие от встроенных инструментов Google, к своим скриптам у вас есть доступ на уровне кода. Вы точно знаете каждый шаг каждого алгоритма и можете быть уверены, что они действуют полностью в ваших интересах;
  • проще, чем скрипты Яндекс.Директа: для контекстологов, далеких от кодинга, создание скриптов Google существенно проще, чем программирование работы Яндекс.Директа. В случае с последним необходимо создавать самостоятельные сторонние приложения, в то время как скрипты Google пишутся прямо в личном кабинете Google Рекламы.

Посмотрим, как это можно сделать.

Как создать скрипт

Меню скриптов находится в блоке «Массовые операции» верхней панели инструментов Google Рекламы:

b_5c0108df5c6b6.jpgЗайдя в него, нажмите «+» на вкладке «Скрипты»:

b_5c0108fbb9823.jpgВ появившемся поле можно вводить и редактировать код алгоритма:

b_5c01091d2b023.jpg

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

b_5c01093a863c2.jpg

Перейдем к самому интересному: как работать со скриптами Google, не зная JavaScript.

Работа со скриптами без навыков кодинга

Для настоящих гуманитариев существует, по крайней мере, три доступных способа создать скрипт в Google Ads.

Способ 1. Ctrl+C, Ctrl+V

Хорошая новость: множество скриптов уже было написано до вас кем-то другим. Их большая часть находится в свободном доступе – достаточно просто скопировать код в пустое поле, о котором мы говорили выше.

Вот несколько примеров полезных скриптов.

1 Приостановить ключевые слова с низким CTR (первоисточник)

Код алгоритма выглядит следующим образом:

//-----------------------------------
// Pause Ads with Low CTR
// Created By: Russ Savage
// FreeAdWordsScripts.com
//-----------------------------------
function main() {
  // Let's start by getting all of the adGroups that are active
  var ag_iter = AdWordsApp.adGroups()
  .withCondition("Status = ENABLED")
  .get();
 
  // Then we will go through each one
  while (ag_iter.hasNext()) {
    var ag = ag_iter.next();
    var ad_iter = ag.ads()
      .withCondition("Status = ENABLED")
      .forDateRange("ALL_TIME")
      .orderBy("Ctr DESC")
      .get();
    var ad_array = new Array();
    while(ad_iter.hasNext()) {
      ad_array.push(ad_iter.next());
    }
    if(ad_array.length > 1) {
      for(var i = 1; i < ad_array.length; i++) {
        ad_array[i].pause(); //or .remove(); to delete them
      }
    }
  }
}

Полностью очистите поле на вкладке «Скрипты», удалив оттуда пустую функцию, и вставьте все строки приведенного кода. Назовите скрипт и сохраните его. Нажмите кнопку «Просмотр», чтобы увидеть, какие изменения он может внести в аккаунт прямо сейчас.

Все следующие скрипты добавляются в аккаунт таким же образом.

2 Запускать и останавливать кампании, объявления и ключевые слова по расписанию (первоисточник)

/**************************************************
* Pause or Enable Campaigns, Keywords or Ads on a Given Date
* Version 1.2
* Changelog v1.2 - Added ability to pause Campaigns
* Changelog v1.1 - Added ability to run on Ads
* Created By: Russ Savage
* FreeAdWordsScripts.com
**************************************************/
var ENTITY = 'Keyword'; //or Ad or Campaign
var PAUSE_PREFIX = "Pause on "; //look for labels "Pause on 2013-04-11"
var ENABLE_PREFIX = "Enable on "; //look for labels "Enable on 2013-04-11"
 
   
function main() {
  var todayStr = Utilities.formatDate(new Date(), AdWordsApp.currentAccount().getTimeZone(), "yyyy-MM-dd");
  var pauseStr = PAUSE_PREFIX+todayStr;
  var enableStr = ENABLE_PREFIX+todayStr;
  Logger.log("Looking for labels: " + [pauseStr,enableStr].join(' and '));
    
  var labelsArray = buildLabelArray(pauseStr,enableStr);
    
  if(labelsArray.length > 0) {
    var labelsStr = "['" + labelsArray.join("','") + "']";
    var entityIter;
    if(ENTITY === 'Keyword') {
      entityIter = AdWordsApp.keywords().withCondition("LabelNames CONTAINS_ANY "+labelsStr).get();
    } else if(ENTITY === 'Ad') {
      entityIter = AdWordsApp.ads().withCondition("LabelNames CONTAINS_ANY "+labelsStr).get();
    } else if(ENTITY === 'Campaign') {
      entityIter = AdWordsApp.campaigns().withCondition("LabelNames CONTAINS_ANY "+labelsStr).get();
    } else {
      throw 'Invaid ENTITY type. Should be Campaign, Keyword or Ad. ENTITY:'+ENTITY;
    }
      
    while(entityIter.hasNext()) {
      var entity = entityIter.next();
      pauseEntity(entity, pauseStr);
      enableEntity(entity, enableStr);
    }
  }
}
  
//Helper function to build a list of labels in the account
function buildLabelArray(pauseStr,enableStr) {
  var labelsArray = [];
  try {
    var labelIter = AdWordsApp.labels().withCondition("Name IN ['"+pauseStr+"','"+enableStr+"']").get();
    while(labelIter.hasNext()) {
      labelsArray.push(labelIter.next().getName());
    }
    return labelsArray;
  } catch(e) {
    Logger.log(e);
  }
  return [];
}
  
//Helper function to pause entities
function pauseEntity(entity, pauseStr) {
  var labelIter = entity.labels().withCondition("Name = '"+pauseStr+"'").get();
  if(labelIter.hasNext()) {
    entity.pause();
    entity.removeLabel(pauseStr);
  }
}
  
//Helper function to enable entities
function enableEntity(entity, enableStr) {
  var labelIter = entity.labels().withCondition("Name = '"+enableStr+"'").get();
  if(labelIter.hasNext()) {
    entity.enable();
    entity.removeLabel(enableStr);
  }
}

Расписание для кампаний, объявлений и ключевых слов задается с помощью меток вида «Pause on YYYY-MM-DD» и «Enable on YYYY-MM-DD» с указанием нужной даты.

3 Предотвратить превышение месячного бюджета (первоисточник)

var CUTOFF_COST = 10000;
var CUTOFF_LABEL = "Total Spend cutoff";

function main() {
var label = AdWordsApp.labels().withCondition("Name='" + CUTOFF_LABEL + "'").get().next();

if (AdWordsApp.currentAccount().getStatsFor("THIS_MONTH").getCost() > CUTOFF_COST) {
var campaignIterator = label.campaigns().get();

while (campaignIterator.hasNext()) {
var campaign = campaignIterator.next();
campaign.pause();
}
}
}

Месячное ограничение бюджета передается через переменную CUTOFF_COST – в примере выше ее значение равно 10 000.

4 Создать копии объявлений с новым URL (первоисточник)

function 
main() {
// change the CampaignName condition to whatever suits you
 var adIter = AdWordsApp.ads().withCondition("CampaignName contains WP").withCondition("Status = ENABLED").get();
 while(adIter.hasNext()) {
    var ad = adIter.next();
  
   var headline = ad.getHeadline();
   var d1 = ad.getDescription1()
   var d2 = ad.getDescription2();
   var displayUrl = ad.getDisplayUrl();
   var dest = "http://your-url-here.com/";
  
   var camp = ad.getCampaign();
   var adgroup = ad.getAdGroup();
  
   var newAd = adgroup.newTextAdBuilder()
              .withHeadline(headline)
              .withDescription1(d1)
              .withDescription2(d2)
              .withDisplayUrl(displayUrl)
              .withDestinationUrl(dest)
              .build();
  
 }
}

Очень удобно при тестировании лендингов. Новый URL вводится вместо «».

5 Добавить размещение в КМС Google (первоисточник)

function addPlacementToAdGroup() {
  var adGroup = AdWordsApp.adGroups()
      .withCondition("Name = 'INSERT_ADGROUP_NAME_HERE'")
      .withCondition('CampaignName = "INSERT_CAMPAIGN_NAME_HERE"')
      .get()
      .next();

  // Other display criteria can be built in a similar manner using the
  // corresponding builder method in the AdWordsApp.Display,
  // AdWordsApp.CampaignDisplay or AdWordsApp.AdGroupDisplay class.
  var placementOperation = adGroup.display()
      .newPlacementBuilder()
      .withUrl('http://www.site.com')  // required
      .withCpc(0.50)                   // optional
      .build();
  var placement = placementOperation.getResult();
  Logger.log('Placement with id = %s and url = %s was created.',
      placement.getId(), placement.getUrl());
}

Адрес сайта, на котором вы хотите размещать баннеры, введите вместо «www.site.com».

6 Слияние кампаний (первоисточник)

//-----------------------------------
// Merge Multiple Campaigns Together
// Created By: Russ Savage
// FreeAdWordsScripts.com
//-----------------------------------
function main() {
  var DESTINATION_CAMPAIGN_NAME = "dest_camp_name";
  var ORIGIN_CAMPAIGN_NAMES = ["to_merge_camp_name_1","to_merge_camp_name_2"/*,...*/];
  var DEFAULT_KW_BID = 0.01; //used in case we can't get the origin kw bid
   
  //build a list of adgroups in the original
  var dest_adgroups = [];
  var ag_iter = AdWordsApp.adGroups()
    .withCondition("CampaignName = '"+DESTINATION_CAMPAIGN_NAME+"'")
    .get();
   
  while(ag_iter.hasNext()) {
    dest_adgroups.push(ag_iter.next());
  }
   
  var dest_camp;
  if(dest_adgroups.length > 0) {
     dest_camp = dest_adgroups[0].getCampaign();
  }
   
  for(var i in ORIGIN_CAMPAIGN_NAMES) {
    var camp_name = ORIGIN_CAMPAIGN_NAMES[i];
    var kw_iter = AdWordsApp.keywords()
      .withCondition("CampaignName = '"+camp_name+"'")
      .get();
    while(kw_iter.hasNext()) {
      var kw = kw_iter.next();
      var dest_adgroup = _find_adgroup(dest_adgroups,kw.getAdGroup());
      if(!dest_adgroup) {
        dest_adgroup = dest_camp.newAdGroupBuilder()
          .withName(kw.getAdGroup().getName())
          .withStatus((kw.getAdGroup().isPaused()) ? "PAUSED" : "ENABLED")
          .withKeywordMaxCpc(kw.getAdGroup().getKeywordMaxCpc())
          .create();
        dest_adgroups.push(dest_adgroup);
        //now we move all the ads over
        var ad_iter = kw.getAdGroup().ads().get();
        while(ad_iter.hasNext()) {
          var ad = ad_iter.next();
          dest_adgroup.createTextAd(
            ad.getHeadline(),
            ad.getDescription1(),
            ad.getDescription2(),
            ad.getDisplayUrl(),
            ad.getDestinationUrl(),
            { isMobilePreferred : ad.isMobilePreferred() }
          );
          ad.pause();
        }
      }
      var max_cpc = kw.getMaxCpc() || DEFAULT_KW_BID;
      var dest_url = kw.getDestinationUrl() || "";
      var kw_text = kw.getText();
      dest_adgroup.createKeyword(kw_text,max_cpc,dest_url);
 
      kw.pause();
    }
  }
 
  function _find_adgroup(ag_list,ag) {
    for(var i in ag_list) {
      if(ag_list[i].getName() == ag.getName()) {
        return ag_list[i];
      }
    }
    return null;
  }
}

Замените «to_merge_camp_name_1», «to_merge_camp_name_2» на названия кампаний для слияния. Название новой кампании – «dest_camp_name».

Сотни других скриптов вы можете найти на одном из этих ресурсов:

В целом, на этом можно остановиться: огромный выбор совершенно новых функций Google Ads уже практически в вашем аккаунте. Однако для тех, кому недостаточно готовых кодов или требуется понимание принципа их работы, есть еще два пути.

Способ 2. Освоить азы кодинга

Этот путь не настолько тернист, как кажется на первый взгляд. Знание JavaScript вам по-прежнему не понадобится. Язык скриптов Google Apps Script только берет его за основу, и все, что вам необходимо изучить – это основы построения алгоритмов, немного базового синтаксиса и названия параметров, которые вы и так ежедневно видите в Google Ads.

Цикл уроков, который введет в курс дела даже далеких от программирования пользователей, есть по этой ссылке. Из него вы узнаете об основных элементах кода и напишете свой первый скрипт. Более полное, но и более сухое, руководство представлено на портале разработчиков Google – но к нему лучше переходить уже с начальным пониманием темы.

Для знающих английский язык существуют вполне доступные вебинары и онлайн-уроки. Вот три примера полезных ресурсов:

  • Видеокурс O’Reilly с бесплатным 10-дневным пробным периодом.
  • Полный курс на обучающей платформе Udemy за $11,99.
  • Бесплатная подборка уроков по конкретным скриптам в блоге программиста Amit Agarwal.

На YouTube знания о скриптах Google менее упорядочены, но видео по отдельным темам найти несложно. Ответ практически на любой вопрос можно получить на известном форуме кодеров Stack Overflow или на аналогичных русскоязычных порталах вроде CyberForum.ru.

Способ 3. Нанять программиста

Наконец, самый затратный, но и самый надежный способ создать скрипт. Если в корректности открытых скриптов вы не всегда уверены, а в собственном алгоритме легко ошибиться, профессионал, который не получит денег, пока не представит рабочий код, позаботится о его качестве.

Искать программистов со знанием Google Script можно там же, где и остальных фрилансеров. Например:

Критерии подбора подрядчика стандартные: хорошие отзывы, наличие реализованных проектов на Google Apps Script (не JavaScript), финальная оплата по факту. Ставка зависит от опыта фрилансера – но учитывая, что написание скрипта в целом небольшая задача, вы скорее всего сможете уложиться в диапазон 1 000 – 5 000 руб.

Принимая работу, полезно не только проверить скрипт кнопкой «Просмотр», но и прочитать его код. Научиться читать скрипты без знания языка можно по этой ссылке.

Заключение

Со скриптами Google ваши возможности автоматизации практически безграничны. Однако не для каждой операции нужен скрипт – например, создавать и настраивать новые кампании «с нуля» удобнее в бесплатном сервисе Click.ru.

От составления семантики до экспорта готовых креативов в Яндекс и Google – всю трудоемкую рутину возьмет на себя искусственный интеллект. Передайте машине поиск эффективных ключевиков, анализ рекламы конкурентов, медиапланирование, генерацию объявлений и управление ставками, пока сами изучаете продвинутые функции рекламных систем.

+1
В избр. Сохранено
Авторизуйтесь
Вход с паролем
Комментарии
Катков Борис
Произвольные скрипты это вещь. Освоил не так давно, развязывают руки.
Ответить
Senya Divavin
Интересно! Но.. я пожалуй пока обойдусь возможностями клика) как-то сложно все
Ответить
Khuman Beldar
Hello, we are read the article and excited to write the input from our end, There are many online marketplace where we can find freelance work, Here also available the work for new learner too. for example i am "https://www.phpworkplace.com/hire/wordpress-developers"

from website: https://www.phpworkplace.com

Same wise we can find the other freelance work through many other freelance website.

Thank you
Ответить
Выбрать файл
Блог проекта
Расскажите историю о создании или развитии проекта, поиске команды, проблемах и решениях
Написать
Личный блог
Продвигайте свои услуги или личный бренд через интересные кейсы и статьи
Написать

Spark использует cookie-файлы. С их помощью мы улучшаем работу нашего сайта и ваше взаимодействие с ним.