Widersprüchliche auszuschließende Keywords und freigegebene Sätze

Mit auszuschließenden Keywords wird verhindert, dass Anzeigen bei irrelevanten Suchergebnissen ausgeliefert werden. Eine falsche Keyword-Option in Ihrer Liste auszuschließender Keywords kann jedoch irrtümlich die normalen Keywords-Optionen blockieren. Die Effizienz Ihrer Kampagne nimmt dann ab.

In diesem Leitfaden erfahren Sie, wie die Beseitigung widersprüchlicher auszuschließender Keywords mithilfe der AdWords API automatisiert werden kann. Außerdem wird die Verwendung freigegebener Sätze zur Verwaltung auszuschließender Keywords und Placements behandelt.

Szenario

Angenommen, Sie besitzen ein Bekleidungsgeschäft für Männer und möchten die Zugriffe auf Ihre Website steigern, indem Sie eine spezielle Winterurlaubskampagne für Herrenaccessoires schalten. Sie haben kürzlich in einem Bericht zu Suchbegriffen gesehen, dass die Anzeigen in Ihrer Kampagne für Herrenaccessoires auch dann ausgeliefert werden, wenn Nutzer nach Seidenschals für Frauen suchen.

In Ihrer Keywords-Liste befinden sich die weitgehend passenden Keywords "seide krawatten", "wolle schals" und "geschenke für männer". Sie möchten "seide schals" als auszuschließendes Keyword hinzufügen. Welche auszuschließende Keyword-Option sollten Sie verwenden?

Die Tabelle unten führt einige Suchbegriffe auf und gibt für jede der drei auszuschließenden Keyword-Optionen an, ob eine Anzeige blockiert wird.

Suchbegriff Auszuschließendes Keyword
-seide schals
(auszuschließen, weitgehend passend)
-"seide schals"
(auszuschließende Wortgruppe)
-[seide schals]
(auszuschließen, genau passend)
herren schals
herren krawatten
schals seide Kreis mit Schrägstrich
seide krawatten
seide geschenk schals Kreis mit Schrägstrich
seide schals Kreis mit Schrägstrich Kreis mit Schrägstrich Kreis mit Schrägstrich
seide schals geschenke Kreis mit Schrägstrich Kreis mit Schrägstrich
seide krawatten wolle schals Kreis mit Schrägstrich
frauen seide schals Kreis mit Schrägstrich Kreis mit Schrägstrich
wolle schals

Sie sehen, wie das weitgehend passende auszuschließende Keyword -seide schals einige gültige Suchbegriffe wie "seide krawatten wolle schals" blockiert.

Widersprüchliche auszuschließende Keywords in großen Mengen identifizieren

Es kann einfach festgestellt werden, welche auszuschließenden Keywords im Widerspruch zu einzuschließenden Keywords stehen, wenn Sie nur wenige Keywords verwenden. Erheblich schwieriger wird es, wenn es Tausende von Keywords und Hunderte von auszuschließenden Keywords in Ihrem Konto gibt. Im Folgenden erfahren Sie, wie dieser Vorgang mithilfe der AdWords API automatisiert werden kann.

Um die Sache zu erleichtern, beschränken wir das Szenario auf einzuschließende Keywords auf der Anzeigengruppenebene und auszuschließende Keywords auf der Kampagnenebene.

Auszuschließende Keywords abrufen

Sie rufen die Liste der auszuschließenden Keywords auf Kampagnenebene ab, indem Sie einen Leistungsbericht zu auszuschließenden Keywords der Kampagne erstellen:

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

Einzuschließende Keywords abrufen

Generieren Sie einen Keywords-Leistungsbericht, um die Liste der einzuschließenden Keywords abzurufen. Mit dem Filter allowed_values können Sie Kampagnen, Anzeigengruppen und Keywords nach ihrem Status filtern. Er akzeptiert die Werte PAUSED und 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

Widersprüchliche auszuschließende Keywords identifizieren

Auszuschließende Keywords folgen dieser Logik:

  • Ein weitgehend passendes auszuschließendes Keyword blockiert einen Suchbegriff, wenn der Suchbegriff alle Wörter im auszuschließenden Keyword enthält. So blockiert beispielsweise -seide schals "seide geschenk schals", nicht jedoch "wolle schals".
  • Ein auszuschließendes Keyword für eine Wortgruppe blockiert einen Suchbegriff, wenn der Suchbegriff alle Wörter im auszuschließenden Keyword in einer einzelnen Wortgruppe enthält. So blockiert beispielsweise -"seide schals" "geschenk seide schals", nicht jedoch "seide geschenk schals".
  • Ein genau passendes auszuschließendes Keyword blockiert einen Suchbegriff nur dann, wenn der Suchbegriff damit genau übereinstimmt. So blockiert beispielsweise -[seide schals] "seide schals", nicht jedoch "rot seide schals".
  • In Keywords wird die Groß-/Kleinschreibung nicht beachtet.
  • Sehr ähnliche Keyword-Varianten gelten für auszuschließende Keywords nicht. So blockiert beispielsweise -seide schals "seide schal" nicht, obwohl dieses Keyword dem Keyword "seide schals" sehr ähnlich ist.

Mit der folgenden Methode wird diese Logik implementiert:

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

Widersprüchliche auszuschließende Keywords löschen

Nachdem Sie die widersprüchlichen auszuschließenden Keywords identifiziert haben, gibt es zwei Möglichkeiten:

  • Löschen Sie die widersprüchlichen auszuschließenden Keywords mit CampaignCriterionService.
  • Generieren Sie einen Bericht und löschen Sie sie manuell.

Sie sollten diesen Vorgang in regelmäßigen Abständen wiederholen, um sicherzustellen, dass Änderungen an Ihren Listen mit Keywords oder auszuschließenden Keywords nicht neue Konflikte verursacht haben.

Vollständiges Codebeispiel

Die oben verwendeten vollständigen Codebeispiele gehören zur AdWords API-Ruby-Clientbibliothek.

Freigegebene Sätze

Wenn Sie einen Satz Keywords oder Placements verwenden, der unerwünschte Impressionen oder Klicks bei mehreren Kampagnen erzielt, können Sie in AdWords eine gemeinsame Liste dieser auszuschließenden Keywords oder Placements erstellen und allen Kampagnen hinzufügen. Diese Funktion wird als freigegebene Sätze bezeichnet.

Mit freigegebenen Sätzen können Sie auszuschließende Keywords und Placement-Ausschlüsse effizienter verwalten, weil Sie Entitäten nicht mehr zwischen Konten duplizieren müssen.

In diesem Abschnitt wird erläutert, wie Sie freigegebene Sätze mit der AdWords API erstellen und bearbeiten.

In den Codebeispielen wird die AdWords API-Java-Bibliothek verwendet. Es gibt aber auch Codebeispiele für andere unterstützte Clientbibliotheken.

Freigegebene Sätze erstellen

Um einen freigegebenen Satz auszuschließender Keywords zu verwenden, müssen Sie den freigegebenen Satz (SharedSet) erstellen und dann mit der Liste der Keywords füllen, die Sie ausschließen möchten. Im folgenden Code-Snippet wird mit SharedSetService ein freigegebener Satz auszuschließender Keywords erstellt:


// Create the operation.
SharedSetOperation operation = new SharedSetOperation();
operation.setOperator(Operator.ADD);

// Create the shared set.
SharedSet sharedSet = new SharedSet();
sharedSet.setName("API Negative keyword list for demo");

// Set the type of the shared set. This may be negative keywords or placements.
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.");
}

Nachdem Sie den freigegebenen Satz erstellt haben, können Sie ihm mit SharedCriterionService Keywords hinzufügen. Mit dem folgenden Code-Snippet werden dem freigegebenen Satz zwei neue Keywords hinzugefügt:

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

List operations = new ArrayList();
for (String keywordText: keywordTexts) {
  // Create the shared criterion.
  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 + ".");
}

Das Feld memberCount enthält die Anzahl der Keywords oder Placements in einem freigegebenen Satz. Ein weiteres nützliches Feld ist referenceCount. Es gibt an, mit wie vielen Kampagnen ein freigegebener Satz verknüpft ist.

Freigegebene Sätze auf eine Kampagne anwenden

Nachdem Sie einen freigegebenen Satz erstellt haben, können Sie ihn mit CampaignSharedSetService auf mehrere Kampagnen anwenden. Der folgende Code zeigt dies anhand eines vorhandenen freigegebenen Satzes:

// Create the campaign shared set
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() + ".");
}

Mit der Methode CampaignSharedSetService.get() können Sie die freigegebenen Sätze abrufen, die auf eine vorhandene Kampagne angewendet wurden:

// Create the selector.
Selector selector = new Selector();
selector.setFields(new String[] {"SharedSetId", "CampaignId", "SharedSetName",
   "SharedSetType", "Status"});

// Filter your results by specific campaign id.
Predicate predicate = new Predicate();
predicate.setField("CampaignId");
predicate.setOperator(PredicateOperator.EQUALS);
predicate.setValues(new String[] {campaignId.toString()});

// Filter your results by the type of shared set.
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.");
    }
  }
}

Berichte

Daten für freigegebene Sätze können Sie mit dem Bericht zu freigegebenen Sätzen abrufen. Mit dem Kampagnenbericht zu freigegebenen Sätzen können Sie Daten für freigegebene Sätze auf Kampagnenebene abrufen. Der Bericht zu Kriterien für freigegebenen Satz enthält eine Übersicht der Kriterien für einen freigegebenen Satz, die Sie herunterladen können.

Feedback geben zu...