Общие наборы и конфликты минус-слов

С помощью минус-слов можно предотвратить показ объявлений по нерелевантным поисковым запросам. Однако неверно подобранный тип соответствия для минус-слов может привести к тому, что они не будут показываться по некоторым релевантным запросам и эффективность кампании снизится.

В этом руководстве мы расскажем о том, как автоматизировать удаление конфликтующих минус-слов с помощью AdWords API, а также о применении общих наборов для управления минус-словами и местами размещения.

Пример

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

Так произошло потому, что в вашей кампании были применены ключевые слова с широким соответствием, такие как "шелковые галстуки", "шерстяные шарфы" и "подарки для мужчин". Поэтому вы решаете добавить "шелковые шарфы" в список минус-слов, однако не знаете, какой тип соответствия выбрать.

В таблице ниже показано, как выбор типа соответствия повлияет на показ объявлений по некоторым поисковым запросам.

Поисковый запрос Минус-слово
-шелковые шарфы
(минус-слово с широким соответствием)
-"шелковые шарфы"
(минус-слово с фразовым соответствием)
-[шелковые шарфы]
(минус-слово с точным соответствием)
мужские шарфы
мужские галстуки
шарфы шелковые Перечеркнутый круг
шелковые галстуки
шелковые подарочные шарфы Перечеркнутый круг
шелковые шарфы Перечеркнутый круг Перечеркнутый круг Перечеркнутый круг
шелковые шарфы в подарок Перечеркнутый круг Перечеркнутый круг
шелковые галстуки шерстяные шарфы Перечеркнутый круг
женские шелковые шарфы Перечеркнутый круг Перечеркнутый круг
шерстяные шарфы

Обратите внимание, что минус-слово -шелковые шарфы с широким соответствием блокирует показ рекламы по таким релевантным запросам, как "шелковые галстуки шерстяные шарфы".

Автоматическое выявление конфликтующих минус-слов

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

Для простоты примера предположим, что все ключевые слова применяются на уровне групп объявлений, а все минус-слова – на уровне кампании.

Получение списка минус-слов

Минус-слова, применяемые на уровне кампании, можно получить с помощью отчета по эффективности минус-слов на уровне кампании, как это показано в примере ниже.

def retrieve_negative_keywords(report_utils)
  report_definition = {
    :selector => {
      :fields => ['CampaignId', 'Id', 'KeywordMatchType', 'KeywordText']
    },
    :report_name => 'Negative campaign keywords',
    :report_type => 'CAMPAIGN_NEGATIVE_KEYWORDS_PERFORMANCE_REPORT',
    :download_format => 'CSV',
    :date_range_type => 'TODAY',
    :include_zero_impressions => true
  }

  campaigns = {}

  report = report_utils.download_report(report_definition)
  # Slice off the first row (report name).
  report.slice!(0..report.index("\n"))

  CSV.parse(report, { :headers => true }) do |row|
    campaign_id = row['Campaign ID']

    # Ignore totals row.
    if row[0] != 'Total'
      campaigns[campaign_id] ||= Campaign.new(campaign_id)
      negative = Negative.from_csv_row(row)
      campaigns[campaign_id].negatives << negative
    end
  end

  return campaigns
end

Получение списка ключевых слов

Создайте отчет по эффективности ключевых слов. С помощью параметра allowed_values вы сможете отфильтровать кампании, группы объявлений и ключевые слова, которые нужно учитывать, по их статусу (параметр может принимать значения PAUSED и REMOVED).

def retrieve_positive_keyword_report(report_utils, allowed_values)
  report_definition = {
    :selector => {
      :fields => ['CampaignId', 'CampaignName', 'AdGroupId', 'Id',
                  'KeywordMatchType', 'KeywordText'],
      :predicates => [
        {
          :field => 'CampaignStatus',
          :operator => 'IN',
          :values => allowed_values
        },
        {
          :field => 'AdGroupStatus',
          :operator => 'IN',
          :values => allowed_values
        },
        {
          :field => 'Status',
          :operator => 'IN',
          :values => allowed_values
        },
        {
          :field => 'IsNegative',
          :operator => 'IN',
          :values => ['false']
        }
      ]
    },
    :report_name => 'Ad group keywords',
    :report_type => 'KEYWORDS_PERFORMANCE_REPORT',
    :download_format => 'CSV',
    :date_range_type => 'TODAY',
    :include_zero_impressions => true
  }

  report = report_utils.download_report(report_definition)
  # Slice off the first row (report name).
  report.slice!(0..report.index("\n"))

  return report
end

Выявление конфликтующих минус-слов

Минус-слова блокируют показ объявлений в соответствии со следующей логикой:

  • Минус-слова с широким соответствием блокируют показ объявления, если поисковый запрос содержит ВСЕ слова из минус-слова. Например, минус-слово -шелковые шарфы заблокирует показ по запросу "шарфы в подарок шелковые", но не по запросу "шерстяные шарфы".
  • Минус-слова с фразовым соответствием блокируют показ объявления, если поисковый запрос содержит все слова в том порядке, в котором они присутствуют в минус-слове. Например, минус-слово -"шелковые шарфы" заблокирует показ по запросу "шелковые шарфы в подарок", но не по запросу "шарфы в подарок шелковые".
  • Минус-слова с точным соответствием блокируют показ по запросам, которые точно соответствуют этому минус-слову. Например, минус-слово -[шелковые шарфы] заблокирует показ по запросу "шелковые шарфы", но не запросу "красные шелковые шарфы".
  • Минус-слова нечувствительны к регистру.
  • Минус-слова не влияют на показ близких вариантов ключевых слов. Например, минус-слово -шелковые шарфы не заблокирует показ объявления по запросу "шелковый шарф", хотя последний представляет собой один из возможных грамматических вариантов минус-слова.

Описанную логику реализует метод, приведенный ниже.

def compare_keywords(negatives, positive)
  negatives.each do |negative|
    match_type = negative.match_type.downcase
    negative_text = negative.text.downcase
    positive_text = positive.text.downcase

    match = false

    # Exact matching with negative keywords triggers only when the full text of
    # the keywords is exactly the same.
    # E.g. a negative "silk scarves" will only match "silk scarves", not
    # "red silk scarves".
    if match_type == 'exact'
      match = (negative_text == positive_text)
    end

    # Phrase matching with negative keywords triggers when the negative phrase
    # is present in the target, completely unmodified.
    # E.g. a negative "silk scarves" will match "gift silk scarves", but not
    # "silk gift scarves".
    if match_type == 'phrase'
      negative_tokens = negative_text.split(' ')
      positive_tokens = positive_text.split(' ')

      positive_tokens.each_with_index do |positive_token, positive_index|
        # Iterate until the current token matches the first token in the
        # negative keyword.
        if positive_token == negative_tokens.first
          candidate_match = true
          # Do all of the subsequent tokens also match?
          negative_tokens[1..-1].each_with_index do |token, index|
            if token != positive_tokens[positive_index + index + 1]
              candidate_match = false
              break
            end
          end

          match = candidate_match
        end
      end
    end

    # Broad matching with negative keywords triggers when all of the words are
    # present and exactly the same.
    # E.g. a negative "silk scarves" will match "silk gift scarves", but not
    # "wool scarves".
    if match_type == 'broad'
      negative_tokens = negative_text.split(' ')
      positive_tokens = positive_text.split(' ')

      candidate_match = true

      negative_tokens.each do |token|
        if !positive_tokens.include?(token)
          candidate_match = false
          break
        end
      end

      match = candidate_match
    end

    negative.add_blocked(positive) if match
  end
end

Удаление конфликтующих минус-слов

Выявив конфликтующие минус-слова, вы можете сделать следующее:

  • удалить их с помощью сервиса CampaignCriterionService;
  • создать отчет с минус-словами, а затем удалить их вручную.

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

Полный пример кода

Приведенные выше полные примеры кода можно найти в клиентской библиотеке AdWords API для Ruby.

Общие наборы

Если вы хотите применить одинаковые минус-слова или исключенные места размещения сразу к нескольким кампаниям, создайте общий набор – единый список минус-слов и мест размещения, который удобно добавлять в любые кампании AdWords.

Применение общих наборов избавит вас от необходимости копирования минус-слов и исключенных мест размещения внутри аккаунта AdWords, а следовательно сделает управление этими критериями более эффективным.

В этом разделе мы расскажем, как применять AdWords API для создания общих наборов и работы с ними.

В примерах ниже представлен код из библиотеки AdWords API для Java. Примеры кода для других библиотек можно найти по этой ссылке.

Создание общих наборов

Для начала вам потребуется создать новый общий набор, а затем заполнить его ключевыми словами, которые вы хотите исключить. Ниже приведен фрагмент для создания общего набора минус-слов с помощью сервиса SharedSetService.


// Создание операции.
SharedSetOperation operation = new SharedSetOperation();
operation.setOperator(Operator.ADD);

// Создание общего набора.
SharedSet sharedSet = new SharedSet();
sharedSet.setName("API Negative keyword list for demo");

// Указание типа общего набора (минус-слова или места размещения).
sharedSet.setType(SharedSetType.NEGATIVE_KEYWORDS);
operation.setOperand(sharedSet);

SharedSetReturnValue retval = sharedSetService.mutate(
    new SharedSetOperation[] {operation});
for (SharedSet set : retval.getValue()) {
  System.out.println("Shared set with id = " + set.getSharedSetId() + ", name = " +
      set.getName() + ", type = " + set.getType() + ", status = " + set.getStatus() +
      "was created.");
}

SharedCriterionService можно использовать также для добавления минус-слов к созданному набору. Ниже представлен фрагмент кода, с помощью которого в общий набор добавляется два таких слова.

String[] keywordTexts = new String[] {"mars cruise", "mars hotels"};

List operations = new ArrayList();
for (String keywordText: keywordTexts) {
  // Создание общего критерия.
  Keyword keyword = new Keyword();
  keyword.setText(keywordText);
  keyword.setMatchType(KeywordMatchType.BROAD);

  SharedCriterion sharedCriterion = new SharedCriterion();
  sharedCriterion.setCriterion(keyword);
  sharedCriterion.setNegative(true);
  sharedCriterion.setSharedSetId(sharedSetId);

  SharedCriterionOperation operation = new SharedCriterionOperation();
  operation.setOperator(Operator.ADD);
  operation.setOperand(sharedCriterion);
  operations.add(operation);
}

SharedCriterionReturnValue retval = sharedCriterionService.mutate(operations.toArray(
    new SharedCriterionOperation[operations.size()]));
for (SharedCriterion sharedCriterion : retval.getValue()) {
  Keyword keyword = (Keyword) sharedCriterion.getCriterion();
  System.out.println("Added keyword with id = " + keyword.getId() + ", text = " +
      keyword.getText() + ", matchtype = " + keyword.getMatchType() + " to shared " +
      "set with id = " + sharedSetId + ".");
}

Определить количество минус-слов или мест размещения в общем наборе можно с помощью поля memberCount. А в поле referenceCount приведена информация о том, со сколькими кампаниями этот общий набор связан.

Применение общих наборов к кампаниям

С помощью сервиса CampaignSharedSetService общие наборы можно добавлять в разные кампании. Ниже приведен пример кода для этого.

// Создание общего набора для кампании.
CampaignSharedSet campaignSharedSet = new CampaignSharedSet();
campaignSharedSet.setCampaignId(campaignId);
campaignSharedSet.setSharedSetId(sharedSetId);

CampaignSharedSetOperation operation = new CampaignSharedSetOperation();
operation.setOperator(Operator.ADD);
operation.setOperand(campaignSharedSet);

CampaignSharedSetReturnValue retval = campaignSharedSetService.mutate(
    new CampaignSharedSetOperation[] {operation});
for (CampaignSharedSet attachedCampaignSharedSet : retval.value) {
  System.out.println("Attached shared set with id = " +
      attachedCampaignSharedSet.getSharedSetId() + " to campaign id " +
      attachedCampaignSharedSet.getCampaignId() + ".");
}

В примере ниже показано, как с помощью метода CampaignSharedSetService.get() получить список кампаний, к которым был применен определенный общий набор.

// Создание селектора.
Selector selector = new Selector();
selector.setFields(new String[] {"SharedSetId", "CampaignId", "SharedSetName",
   "SharedSetType", "Status"});

// Фильтрация результатов по идентификатору кампании.
Predicate predicate = new Predicate();
predicate.setField("CampaignId");
predicate.setOperator(PredicateOperator.EQUALS);
predicate.setValues(new String[] {campaignId.toString()});

// Фильтрация результатов по типу общего набора.
Predicate predicate1 = new Predicate();
predicate1.setField("SharedSetType");
predicate1.setOperator(PredicateOperator.IN);
predicate1.setValues(new String[] {"NEGATIVE_KEYWORDS", "NEGATIVE_PLACEMENTS"});

selector.setPredicates(new Predicate[] {predicate});

CampaignSharedSetPage page = campaignSharedSetService.get(selector);
if (page.getEntries() != null) {
  for (CampaignSharedSet campaignSharedSet : page.getEntries()) {
    System.out.println("Shared set with id = " + campaignSharedSet.getSharedSetId() +
        ", name = " + campaignSharedSet.getSharedSetName() + ", type = " +
        campaignSharedSet.getSharedSetType() + " and status = " +
        campaignSharedSet.getStatus() + " was found.");
    }
  }
}

Отчетность

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

Оставить отзыв о...

Текущей странице
Нужна помощь? Обратитесь в службу поддержки.