AdWords
Сейчас в сети: 529
Сейчас в сети: 529
Советы и вопросы по использованию скриптов AdWords
Подсказки
star_border
Ответить

Подскажите, пожалуйста, по скриптам

Студент ✭ ✭ ✭

                Здравствуйте.

 

     Помогите, пожалуйста, найти скрипт для удержания цены на уровне оценочной стоимости для первой страницы и для верха. И вообще, как лучше держаться на верху и не дорого? Спасибо.

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

Re: Подскажите, пожалуйста, по скриптам

Магистр ✭ ✭ ✭
Добрый день!

Страничка со скриптами AdWords: https://developers.google.com/adwords/scripts/docs/solutions/

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

А так стратегия зависит от того, чего вы хотите:
1) удерживать позицию ради имиджа или раскрутки акций
2) получать побольше кликов при заданной цене
или
3) оптимизировать конверсии и наращивать ROI.

С удержанием позиции наверху может неплохо справится и пакетная стратегия самого AdWords.
В любом случае надо тестировать!

Re: Подскажите, пожалуйста, по скриптам

Студент ✭ ✭ ✭
Спасибо. А скрипта нет, который держит цены на уровне рекомендованных для первой страницы?

Re: Подскажите, пожалуйста, по скриптам

Магистр ✭ ✭ ✭
Если речь именно о "рекомендованной цене", то на нее ориентироваться не стоит.

Грамотный скрипт ставку назначает исходя из реально занимаемой вами позиции за определенный промежуток времени.
Выставление "рекомендованной цены" также не гарантирует вам показов на 1-й позиции.

Re: Подскажите, пожалуйста, по скриптам

Студент ✭ ✭ ✭
Мне нужно держать цены на уровне цен для первой страницы. Там я нашел скрипт, который это делает. Только я не пойму, как с этой таблицей, я ее должен куда то к себе положить? И скрипт к нему будет обращаться? как это всё делается? Подскажите, пожалуйста. Спасибо.

Re: Подскажите, пожалуйста, по скриптам

Активные участники

Я использую модифицированный скрипт от SeoProfi 

 

Себе туда добавил учет той цены, что вы спрашиваете. Вот он (Обратите внимание на текст выделенный красным. Там регулируется какую цену мы будем учитывать.):

function main() {
  //Массив Ярлыков
  //Если Ярлык один, то писать в таком виде - "ярлык1".
  //Если массив, то писть вот так - ["ярлык1","ярлык2",...,"ярлыкN"] 
  var LabelNames = ["price"];
  var CampaignLabelNames = ["price"];
  //Максимально допустимая цена за клик
  var maxPrice = 17;
  //Минимально допустимая цена за клик
  var minPrice = 0.1;
  //Нижная граница средней позиции
  var customLowerAveragePosition = 2.0;
  //Верхная граница среднец позиции
  var customUpperAveragePosition = 2.5;
  //(%) Шаг изминения цены внутри диапазона
  var customPercent = 0; 
  //(%) Шаг изменения цены вне диапазона
  var stepPercent = 5;
  //Наименьше допустимое значение средней позиции
  var minAveragePosition = 1;
  //Наибольшее допустимое значене средней позиции
  var maxAveragePosition = 7;
  //Расширение базового диапазона
  var diapason = 0.5;

  var typeOfPosition = 'FIRST';
  // TOP - Настройка для сравнении ставки по слову с ориентировочной ставкой для ТОП3
  // FIRST - Настройка для сравнении ставки по слову с ориентировочной ставкой для показа на 1-ой странице


  var tempPercent = customPercent;
  var down_max = customLowerAveragePosition;
  var down_min = down_max - diapason;

  var up_min = customUpperAveragePosition;
  var up_max = up_min + diapason;

  var to_up = maxAveragePosition - customUpperAveragePosition;

  var labelName = "";
  if(LabelNames.constructor === Array){
    labelName = "LabelNames CONTAINS_ANY ['" + LabelNames.join("','") + "']";
  }else{
    labelName = "LabelNames = '" + LabelNames + "'";
  }
  Logger.log("Condition for labels: " + labelName);

// Начала куска для выравнивание Среднего СРС и Максимального СРС 
  var campaignLabelName = "";
  if(CampaignLabelNames.constructor === Array){
    campaignLabelName = "LabelNames CONTAINS_ANY ['" + CampaignLabelNames.join("','") + "']";
  }else{
    campaignLabelName = "LabelNames = '" + CampaignLabelNames + "'";
  }
  Logger.log("Condition for labels: " + campaignLabelName);

  var campaignSelector = AdWordsApp.campaigns()
              .withCondition(campaignLabelName)
              .withCondition("Impressions > 0")
              .forDateRange("LAST_7_DAYS")
              .get();

  var allClicks = 0;
  var allCosts = 0;

  while (campaignSelector.hasNext()) {
    var campaign = campaignSelector.next();
    allClicks = allClicks + campaign.getStatsFor("LAST_7_DAYS").getClicks();
    allCosts =  allCosts + campaign.getStatsFor("LAST_7_DAYS").getCost() ;
  }

  var ppcAvrPrice = (allCosts / allClicks).toFixed(2)

  Logger.log("Avarge CPC for Campaigns: " + ppcAvrPrice);

  if (ppcAvrPrice < maxPrice) {
  Logger.log(1 - ppcAvrPrice / maxPrice);
  maxPrice = (1 + (1 - ppcAvrPrice / maxPrice)) * maxPrice;
  Logger.log("New Max PPC: " + maxPrice);
  }
  else {
    maxPrice = maxPrice * 0.9;
    Logger.log("New Max PPC: " + maxPrice);
  }

// Конец куска для выравнивание Среднего СРС и Максимального СРС

  var selectedKeyword = 0;
  while(down_max > minAveragePosition){
    Logger.log("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
    tempPercent = tempPercent - stepPercent;
    var keywordIterator = AdWordsApp.keywords()
    .withCondition(labelName)
    .withCondition("AveragePosition < " + Number(down_max) + " AND AveragePosition > " + Number(down_min - 0.01))
    .withCondition("Impressions > 0")
    .forDateRange("LAST_7_DAYS")
    .get();
    Logger.log(" AveragePosition < " + Number(down_max) + " AND AveragePosition > " + Number(down_min - 0.01));
    while(keywordIterator.hasNext()){
      selectedKeyword = selectedKeyword + 1;
      Logger.log("   ---------------");
      var keyword = keywordIterator.next();
      Logger.log("   " + selectedKeyword + "   ----------- keyword: " + keyword.getText());
      Logger.log("   Old Price = " + keyword.getMaxCpc());

       var tempPrice = keyword.getMaxCpc() + (keyword.getMaxCpc() * tempPercent)/100;

      if (typeOfPosition == 'TOP') {
      var pagePrice = keyword.getTopOfPageCpc();
      } else {
      var pagePrice = keyword.getFirstPageCpc();
      };

      if (pagePrice == 'NaN'){firstPagePrice = 0};

      if (tempPrice > pagePrice) {

       if (tempPrice > maxPrice) {
         keyword.setMaxCpc(maxPrice);
       }else if (tempPrice < minPrice){
         keyword.setMaxCpc(minPrice);
       }else{
         keyword.setMaxCpc(tempPrice);
       }

      }
      else {

      if (pagePrice > maxPrice) {
         keyword.setMaxCpc(maxPrice);
       }else if (pagePrice < minPrice){
         keyword.setMaxCpc(minPrice);
       }else{
         keyword.setMaxCpc(pagePrice);
       }         
      }
       Logger.log("   New Price = " + keyword.getMaxCpc());
     }
    down_max = down_min - 0.01;
    down_min = down_max - diapason;
  }

  tempPercent = customPercent;

  while(up_min < maxAveragePosition){
    Logger.log("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
    tempPercent = tempPercent + stepPercent;
    var keywordIterator = AdWordsApp.keywords()
    .withCondition(labelName)
    .withCondition("AveragePosition < " + Number(up_max) + " AND AveragePosition > " + Number(up_min-0.01))
    .withCondition("Impressions > 0")
    .forDateRange("LAST_7_DAYS")
    .get();
    Logger.log(" AveragePosition < " + Number(up_max) + " AND AveragePosition > " + Number(up_min-0.01));
     while (keywordIterator.hasNext()){
       selectedKeyword = selectedKeyword + 1;
       Logger.log("   ---------------");
       var keyword = keywordIterator.next();
       Logger.log("   " + selectedKeyword + "   ------------------keyword " + keyword.getText());
       Logger.log("   Old Price = " + keyword.getMaxCpc());
       var tempPrice = keyword.getMaxCpc() + (keyword.getMaxCpc() * tempPercent)/100;

      if (typeOfPosition == 'TOP') {
      var pagePrice = keyword.getTopOfPageCpc();
      } else {
      var pagePrice = keyword.getFirstPageCpc();
      };

       if (pagePrice == 'NaN'){firstPagePrice = 0};

       if (tempPrice > pagePrice) {


       if (tempPrice > maxPrice) {
         keyword.setMaxCpc(maxPrice);
       }else if (tempPrice < minPrice){
         keyword.setMaxCpc(minPrice);
       }else{
         keyword.setMaxCpc(tempPrice);
       }

      }
      else {

      if (pagePrice > maxPrice) {
         keyword.setMaxCpc(maxPrice);
       }else if (pagePrice < minPrice){
         keyword.setMaxCpc(minPrice);
       }else{
         keyword.setMaxCpc(pagePrice);
       }         
      }

       Logger.log("   New Price = " + keyword.getMaxCpc());
     }

    up_min = up_max;
    up_max = up_max + diapason;
  }


}
---------
С уважением Олег Поддубный

Re: Подскажите, пожалуйста, по скриптам

Магистр ✭ ✭ ✭
Вы видимо взяли скрипт: "Инструмент назначения ставок по нескольким параметрам"
Там Google Spreadsheet таблицы.

Возьмите скрипт "Ставки для позиции", он попроще.
https://developers.google.com/adwords/scripts/docs/solutions/bid-to-position#adwordsapp

Еще вариант решения вашей задачи без скриптов, на основе группы правил:
http://yaroshenko.by/autobidder-adwords-rules/

Re: Подскажите, пожалуйста, по скриптам

Студент ✭ ✭ ✭
А что он делает, можно, пожалуйста, поподробнее. Спасибо.

Re: Подскажите, пожалуйста, по скриптам

Магистр ✭ ✭ ✭
Руслан, уточните, кому именно вы задаете вопрос.

По скрипту, который я вам подсказал:
Этот скрипт позволяет размещать объявления на нужной позиции, корректируя ставки для соответствующих ключевых слов
https://developers.google.com/adwords/scripts/docs/solutions/bid-to-position#adwordsapp

Re: Подскажите, пожалуйста, по скриптам

Студент ✭ ✭ ✭
Вот тот, который Вы говорите сложный, там я не могу разобраться вот в чем. Когда скрипт должен понизить цену, он ставит максимально допустимую, а если её убрать, то повышается не реально. Как это можно решить?