DAS Werkzeug für den Tag Manager entdecken.Zum GTMSPY

Race Condition
Automatisierte Whitelist für Google Shopping mit AdWords Scripts
Google Ads

7. August 2017

Automatisierte Whitelist für Google Shopping mit AdWords Scripts

Senken Sie Ihren CPC durch automatische Segmentierung von Suchanfragen

Wenn Sie bereits mit regulären Textanzeigen in AdWords zu tun hatten, sind Sie sicherlich daran gewöhnt, Anzeigen exakt anhand den von Ihnen definierten Keywords auszuspielen. Wie Sie wahrscheinlich wissen, ist bei Google Shopping alles anders. Google bestimmt, für welche Art von Suchanfragen Ihre Produkte angezeigt werden, je nachdem, was Ihr Feed bietet und was Googles Algo-Magie daraus macht.

Dies ist zum einen praktisch, da Google im Wesentlichen die Keyword-Recherche für Ihre Produkte durchführt. Andererseits wissen wir, dass nicht alle Keywords gleich sind, insbesondere im Hinblick auf den heiligen Gral, der Conversion Rate. Dies ist in vielen der Standard Funnels veranschaulicht, d.h. wir gehen regelmäßig davon aus, dass Kunden, die Short Tail-Anfragen stellen, auf den höheren Ebenen des Kauftrichters stehen (allgemeines Interesse, Produktunwissen) und Kunden, die Long Tail-Anfragen stellen, auf den unteren Ebenen des Kauftrichters (Entscheidung getroffen, nahe an der Conversion).
Infolgedessen möchten Vermarkter in der Regel unterschiedliche maximale cpcs auf Schlüsselwörter in AdWords anwenden, um bestimmte Renditeziele zu erreichen. Mit nur einer Google Shopping-Kampagne können Sie maximale cpcs auf Produktebene definieren, jedoch nicht pro Keyword oder Keywordsatz.
Aber: Während Sie bei Shopping-Kampagnen keine expliziten Keywords festlegen können, ist es zumindest möglich, negative Begriffe hinzuzufügen. Wenn man dazu noch die Prioritätseinstellungen der Einkaufskampagne hinzufügt, haben wir eine Möglichkeit, Google Shopping auf Schlüsselwortebene zu verwalten.

Die Jungs von CPC Strategy haben bei der Erläuterung des Konzepts im Jahr 2016 unter dem Begriff ISO-Kampagne großartige Arbeit geleistet. Im Wesentlichen können Sie die Reihenfolge der Durchführung der Kampagne festlegen und so durch die Verwendung negativer Schlüsselwörter unterschiedliche Niveaus von maximalen cpcs für Gruppen von Schlüsselwörtern strukturieren.

Wie die Experten von crealytics demonstrieren, wird Google Ihre Produkte für eine breite Palette von Schlüsselwörtern abspielen, je nachdem, wie weit Sie Ihren cpc erhöhen. Der Trick dabei ist, dass Sie zwar den cpc für gut funktionierende Suchanfragen auf das maximal erreichbare Trafficniveau erhöhen sollten, aber vorsichtig sein sollten, wenn Sie zu viele teure Klicks von Oberbegriffen mit vergleichsweise niedrigeren Conversion Rates kaufen. Deshalb kommt es am Ende des Tages darauf an, Ihre Einkaufskampagnen zu strukturieren und zu segmentieren.

Jetzt ist es an der Zeit, sich an die Arbeit zu machen. Obwohl Sie in vielen Fällen nicht wirklich die Hilfe von Skripten für die Verwaltung Ihrer Keyword Negatives benötigen, kann es in bestimmten Szenarien bzw. Accounts sinnvoll sein.

Hier werden wir nun ein Skript schreiben, das die Suchbegriffe, die wir erhalten, automatisch kontrolliert, indem es alle Suchphrasen ausschließt, die nicht in unseren durch reguläre Ausdrücke definierten Bereich zulässiger Begriffe passen. Ob Sie dies zur Strukturierung von Kampagnen mit unterschiedlichen Prioritätseinstellungen nutzen wollen oder ob Sie einfach nur nicht übereinstimmende Begriffe vollständig vom Bieten ausschließen wollen, bleibt Ihnen überlassen.

In dem theoretischen Fall hier haben wir zwei identische Einkaufskampagnen - mit Ausnahme ihrer jeweiligen Prioritätseinstellungen. Unsere hochpriorisierte Kampagne dient als Landing-Kampagne für alle Keywords, die Google sich für unsere Produkte vorstellt, da Google sie zuerst ausführt. Dann haben wir eine Kampagne mit mittlerer Priorität, bei der wir alles, was wir von der High-Prio-Kampagne ausschließen, mit anderen cpcs bedienen. Wir wissen bereits, dass bestimmte Begriffe für uns super-relevant sind, nämlich alle

  • Keywords, die das Element 'Schlüssel' enthalten, daher möchten wir Suchanfragen wie Schlüsselloch, Schlüsselanhänger und Schlüssel zur Stadt auf unsere priorisierte Kampagne verlagern

  • Schlüsselwörter, die eine 3-stellige Größe enthalten, z.B. 200 Gallonen Smart Pot sowie 250 Gallonen Smart Pot

Wir sind faul und haben keine Lust mehr, Berichte mit Suchbegriffen zu überfliegen, daher werden wir die Aufgabe der ständigen Überwachung und des Ausschlusses von Suchbegriffen in der High-Prio-Kampagne unserem neuen AdWords-Skript überlassen.

Zunächst werden wir ein sehr einfaches Google-Spreadsheet erstellen, um die Verwaltung unserer regulären Ausdrücke der Whitelist zu erleichtern. Betrachten Sie dieses Beispiel. Die ersten drei Spalten definieren, wo unser Whitelist-Skript gelten soll, d. h. wir geben Adgruppennamen, Kampagnen-Prios (in diesem einfachen Fall muss sich die Prio-Einstellung im Namen der Kampagne widerspiegeln: der Kampagnenname muss PX oder P-X enthalten, wobei X zwischen 1 und 3 liegt) und einen einfachen An/Aus-Zustand. In den folgenden Spalten können wir alle Begriffe hinzufügen, die durch Tests mit regulären Ausdrücken positiv gefunden werden sollten, was dazu führt, dass die entsprechenden Suchbegriffe nicht ausgeschlossen werden.

In AdGroup1 wollen wir alles behalten, was Schlüssel enthält, daher reicht hier die Angabe von Schlüssel aus. In AdGroup2 müssen wir jedoch bereits die regexp-Syntax implementieren, da wir dynamische Größenmuster abrufen wollen. Dies erreichen wir, indem wir [0-9]{3} zu unserem Blatt hinzufügen. Dadurch werden alle Suchanfragen mit 3-stelligen Zahlen nicht ausgeschlossen.

Fügen Sie nun das folgende Skript zu Ihrem Konto hinzu und lassen Sie es so oft laufen, wie Sie möchten. Fühlen Sie sich frei, beliebige Änderungen nach Ihren Wünschen vorzunehmen. Sie werden feststellen, dass der Code weder schön noch umfangreich ist, aber als erster Start und Inspirationsquelle dient er durchaus.

/*
 * Specify the link to your spreadsheet and the name of the relevant sheet here. You can use sheets to manage multiple accounts.
*/
function getSpreadsheet() {
  var spreadsheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1vBAiXAb38Fdhwz00B7-sE3HMQJvQnUtc3amgunsvQcM/");
  var sheet = spreadsheet.getSheetByName( "AccountName" );
  return sheet.getRange("A:Z").getValues();
}

function main() {
  
  /*
   * You can modify the timerange for the search query lookup here. Currently the previous 30 days.
  */
  var today = new Date();
  var end = new Date( new Date().setDate(today.getDate()-1) ).toISOString().slice(0,10).replace(/-/g,"");
  var start = new Date( new Date().setDate(today.getDate()-30) ).toISOString().slice(0,10).replace(/-/g,"");
  
  var whitelist = {};
  var wl = [];
  var exclude = {};
  var sharedList = {};
  var sharedListExcludes = {};
  
  /*
   * Load Whitelists from Spreadsheet
  */
  var data = getSpreadsheet();
  
  for( var r=1; r < data.length; r++ ) {
    
    if( data[r][0].length == 0)
      break;
    
    if( data[r][3] != 'On')
      continue;
    
    whitelist[ data[r][0]+data[r][1] ] = [];
    wl.push( data[r][0]+data[r][1] );
    
    if( data[r][2].length > 0 ) {
      sharedList[ data[r][0]+data[r][1] ] = data[r][2];
    }
    
    for( var key in data[r] ) {
      if( key < 5 )
        continue;
      whitelist[ data[r][0]+data[r][1] ].push( data[r][key] );
    } 
    
  }
  
  /*
   * Load Search Query Report
  */  
  var report = AdWordsApp.report(
    'SELECT CampaignName, AdGroupName, AdGroupId, Query' +
    ' FROM SEARCH_QUERY_PERFORMANCE_REPORT ' +
    ' WHERE ' +
    ' Clicks >= 1 ' +
    ' AND CampaignStatus = ENABLED ' +
    ' AND AdGroupStatus = ENABLED ' +
    ' DURING ' + start + ',' + end );
  var rows = report.rows();
    
  while (rows.hasNext()) {
    var r = rows.next();
    var name = r.AdGroupName + r.CampaignName.replace(/.*(P\-?[0-9]).*/g,'$1').replace(/\-/g,'');
    
    if( wl.indexOf( name ) == -1 )
      continue;
    
    if( !(new RegExp( '.*(' + whitelist[ name ].join('|') + ').*') ).test(r.Query) ) {
      if(sharedList[name]) {
        if( typeof( sharedListExcludes[name] ) == "undefined" ) {
          sharedListExcludes[name] = [];
        }
        sharedListExcludes[name].push( r.Query );        
      } else {
        if( typeof( exclude[r.AdGroupId] ) == "undefined" ) {
          exclude[r.AdGroupId] = [];
        }
        exclude[r.AdGroupId].push( r.Query );
      }
    }

  }
  
  /*
   * Create the collected negative keywords
  */
  for( var aId in exclude ) {
    var a = AdWordsApp.shoppingAdGroups().withIds([parseInt(aId)]).get().next();
    for( var i = 0;i < exclude[aId].length; i++ ) {
      a.createNegativeKeyword('['+ exclude[aId][i] +']');
    }
  }
  
  for( var listName in sharedListExcludes ) {
    var l = AdWordsApp.negativeKeywordLists().withCondition('Name = "' + listName + '"').get().next();
    for( var i = 0;i < sharedListExcludes[listName].length; i++ ) {
      l.addNegativeKeyword('['+ sharedListExcludes[listName][i] +']');
    }
  }
 
}

Wenn dieses Skript nun ausgeführt wird, werden alle Suchanfragen, die unsere Whitelist nicht bestehen, als [exact negative] von unserer P1-Kampagne ausgeschlossen. Fantastisch.