English version: README.md
Identifiziere mit diesem Google Ads Script alle Suchbegriffe, die nicht in der angedachten Anzeigengruppe matchen und schließe diese automatisch aus.
- Installation
- Erste Ausführung & Übersicht der Spalten im Sheet
- Planung / regelmäßige Ausführung
- Funktionsbeschreibungen
- Funktionsparameter
Öffne Dein Google Ads Konto oder Dein MCC und navigiere zu "Tools und Einstellungen > Bulk-Aktionen > Scripts".
Der Search Query Duplicator ist auf zwei Scripts aufgeteilt.
Das erste Script bereitet die Daten zur Weiterarbeitung vor und schreibt sie in ein Google Sheet.
Einrichtung:
Erstelle ein neues Google Ads Script (Namensvorschlag: "SQ Deduplicator 22.1 Prepare Data") und überschreibe den Inhalt mit der passenden Code-Vorlage:
- Einzelnes Konto: single_account_prepare_data.js
- MCC-Version: mcc_version_prepare_data.js
Das zweite Script verarbeitet die noch nicht verarbeiteten Zeilen aus dem Google Sheet und schreibt den Verarbeitungsstatus in die jeweilige Datenzeile zurück.
Einrichtung:
Erstelle ein neues Google Ads Script (Namensvorschlag: "SQ Deduplicator 22.1 Process Data") und überschreibe den Inhalt mit der passenden Code-Vorlage:
- Einzelnes Konto: single_account_process_data.js
- MCC-Version: mcc_version_process_data.js
Für die Zwischenspeicherung und Weiterverarbeitung der Suchbegriffe wird ein Google Sheet verwendet. Die Vorlage kannst Du mit folgendem Google Drive Link kopieren: adtraffic Search Query Deduplicator Google Sheet Template
Füge die ID Deines neu erstellten Google Sheets in beiden Scripts an der Stelle "{{Search Query Deduplicator Google Sheet ID}}" ein.
Um Direktlinks zu den Google Ads Anzeigengruppen zu generieren, wird die "ocid" zum jeweiligen Google Ads Konto benötigt.
Diese "ocid" kann aus der Response des BatchService auf MCC-Ebene für alle untergeordneten Konten ausgelesen werden. Um die Response als Object im Script zur Verfügung zu stellen, gehe wie folgt vor:
- Öffne das betreffende MCC und navigiere zu "Konten > Leistung"
- Öffne die Entwicklertools des Browsers und wähle den Reiter "Network" aus
- Lade die Seite neu und filtere die Einträge mit "batch account"
- Klicke den Eintrag an, der mit "Batch?authuser=" beginnt und wähle rechts die "Response" aus
- Kopiere den kompletten Inhalt der Response und füge ihn im Script 1 - "SQ Deduplicator 22.1 Prepare Data" an der Stelle "{{BatchService Response}}" ein.
Alternativ:
Entferne die Stelle "{{BatchService Response}}", sodass folgender Inhalt in der Zeile stehen bleibt:
let batchAccountSnippet = new Object();
Für Einzelkonten kann die "ocid" aus der Adressleiste abgelesen werden.
- Melde Dich in dem betreffenden Google Ads Konto an und kopiere die Ziffern hinter "ocid=" aus der Adressleiste Deines Browsers
- Füge die kopierten Ziffern im Script 1 - "SQ Deduplicator 22.1 Prepare Data" an der Stelle "{{ocid}}" ein.
Alternativ:
Entferne die Stelle "{{ocid}}", sodass folgender Inhalt in der Zeile stehen bleibt:
const ocid = '';
Füge die Account IDs der zu verarbeitenden Konten als kommagetrennte Strings in beiden Scripts an der Stelle "{{Accound IDs Array}}" ein.
Beispielsyntax:
'123-456-7890','456-123-7890','654-321-7890','321-654-7890'
Alternativ:
Entferne die Stelle "{{Accound IDs Array}}", sodass folgender Inhalt in der Zeile stehen bleibt:
let accountIds = [];
Bei der ersten Ausführung des Script 1 - "SQ Deduplicator 22.1 Prepare Data" wird im Google Sheet für jedes verarbeitete Konto ein neues Tabellenblatt mit der jeweiligen Account ID als Tabellenblattname mit elf Spalten angelegt:
- searchTerm
- matchType
- campaignId
- adgroupId
- campaignName
- adGroupName
- deepLink
- impressions
- clicks
- conversions
- processed
Die ersten sechs Spalten sind selbsterklärend.
Die Spalte "deepLink" enthält einen direkten Link zur Anzeigengruppe des jeweiligen Suchbegriffs (sofern die "ocid" verfügbar ist - siehe Installation Schritt III). Die Spalten "impressions", "clicks" und "conversions" enthalten die jeweiligen Werte für den abgefragten Zeitraum (standardmäßig die letzten 30 Tage).
Die letzte Spalte "processed" kann nach der Ausführung des Script 2 - "SQ Deduplicator 22.1 Process Data" sechs verschiedene Rückgabewerte enthalten:
Wert | Bedeutung |
---|---|
Term skipped | Der Suchbegriff entspricht keinem aktiv gebuchten Keyword im Konto. Es wurde kein auszuschließendes Keyword angelegt. |
Campaign Negative added | Der Suchbegriff entspricht einem aktiv gebuchten Keyword in einer anderen Kampagne. Es wurde ein auszuschließendes Keyword in der Kampagne des gefundenen Suchbegriffs angelegt. (*) |
Campaign Negative skipped | Der Suchbegriff entspricht einem aktiv gebuchten Keyword in einer anderen Kampagne. Es wurde aber kein auszuschließendes Keyword in der Kampagne des gefundenen Suchbegriffs angelegt, weil dort bereits ein entsprechendes auszuschließendes Keyword gebucht ist. |
AdGroup Negative added | Der Suchbegriff entspricht einem aktiv gebuchten Keyword in einer anderen Anzeigengruppe derselben Kampagne. Es wurde ein auszuschließendes Keyword in der Anzeigengruppe des gefundenen Suchbegriffs angelegt. (*) |
AdGroup Negative skipped | Der Suchbegriff entspricht einem aktiv gebuchten Keyword in einer anderen Anzeigengruppe derselben Kampagne. Es wurde aber kein auszuschließendes Keyword in der Anzeigengruppe des gefundenen Suchbegriffs angelegt, weil dort bereits ein entsprechendes auszuschließendes Keyword gebucht ist. |
Comparison failed | Bei der Verarbeitung der Daten aus dem Sheet wurde zwar mindestens ein Duplikat gefunden, allerdings ist beim Abgleich der campaignId ein Fehler aufgetreten. |
(*) Wird das Script im Vorschaumodus ausgeführt, werden keine auszuschließenden Keywords angelegt. Im Script-Editor unter "Änderungen" sieht man, in welchen Kampagnen oder Anzeigengruppen auszuschließende Keywords gebucht werden würden.
Durch die Ausführung des Script 1 - "SQ Deduplicator 22.1 Prepare Data" werden alle Daten im Google Sheet überschrieben. Für die meisten Konten sollte es ausreichen, das Script wöchentlich auszuführen. Bei großen Konten mit täglich mehreren Hundert neu identifizierten Suchanfragen macht eine tägliche Ausführung durchaus Sinn.
Das Script 2 - "SQ Deduplicator 22.1 Process Data" verarbeitet nur Zeilen ohne Wert in der Spalte "processed". Damit das Script bei sehr großen Mengen an zu verarbeitenten Suchbegriffen nicht in einen Timeout läuft, kann ein Limit für die maximal zu verarbeitenden Zeilen definiert werden (standardmäßig: 1.000 Zeilen). Bei der Planung des Script 2 sollte berücksichtigt werden, dass es ausreichend oft ausgeführt wird, um alle identifizierten Suchbegriffe zu verarbeiten.
- main() ⇒
MCC-Version: Lädt die zu verarbeitenden Konten und startet die parallele Ausführung des Scripts.
Single-Account-Version: Entspricht im Grunde der MCC-Funktion processAccount()
- processAccount() ⇒
Führt die Vorbereitung des Google Sheets aus, lädt dann die aktiven Suchbegriffe und startet den Schreibvorgang der aggregierten Suchbegriffe ins Google Sheet.
- prepareSheet() ⇒
Legt im Google Sheet ein neues Tabellenblatt für das zu verarbeitende Konto an oder löscht die darin enthaltenen Daten, sofern bereits ein Tabellenblatt für das jeweilige Konto vorhanden ist.
- getActiveSearchTerms() ⇒
Ruft alle Suchbegriffe ab, die im gegebenen Zeitraum (standardmäßig 30 Tage) nicht mit Match Type EXACT oder NEAR EXACT gematcht haben und eine Mindestanzahl an Impressionen (standardmäßig 30) generiert haben.
- writeData() ⇒
Schreibt die vorbereiteten Daten ins Google Sheet.
- main() ⇒
MCC-Version: Lädt die zu verarbeitenden Konten und startet die parallele Ausführung des Scripts.
Single-Account-Version: Entspricht im Grunde der MCC-Funktion processAccount()
- processAccount() ⇒
Führt die Vorbereitung des Google Sheets aus, lädt dann die aktiven Suchbegriffe und startet den Schreibvorgang der aggregierten Suchbegriffe ins Google Sheet.
- checkForDuplicates() ⇒
Sucht ausgehend vom jeweils verarbeiteten Suchbegriff in allen anderen Anzeigengruppen nach aktiven Keywords, die genau mit dem jeweiligen Suchbegriff übereinstimmen, initiiert im Falle eines Fundes die Erstellung eines auszuschließenden Keywords und lässt dasErgebnis der Verarbeitung ins Google Sheet zurückschreiben.
- createCampaignNegative() ⇒
Erstellt auf Kampagnenebene ein genau passend auszuschließendes Keyword mit dem jeweils verarbeiteten Suchbegriff als Keyword-Text.
- createAdGroupNegative() ⇒
Erstellt auf Anzeigengruppenebene ein genau passend auszuschließendes Keyword mit dem jeweils verarbeiteten Suchbegriff als Keyword-Text.
- readSheet() ⇒
Liest die Daten ohne Kopfzeile aus dem Google Sheet in ein Array.
- updateData() ⇒
Schreibt (je Suchbegriff) das Ergebnis der Verarbeitung ins Google Sheet in die Spalte "processed" der jeweiligen Zeile.
Parameter | Typ | Beschreibung |
---|---|---|
sheetFileId | String | Die ID des zu verwendenden Google Sheets. |
batchAccountSnippet (nur in MCC-Version) |
Object | Der Inhalt der "Batch Service Response". (Wird zur automatischen Ermittlung der ocid benötigt.) |
MCC-Version nachfolgend.
Single-Account-Version siehe processAccount()
Parameter | Typ | Beschreibung |
---|---|---|
accountIds | Array | Beinhaltet die Account IDs der zu verarbeitenden Google Ads Konten. |
MCC-Version nachfolgend.
Wird in Single-Account-Version als main() ausgeführt
Parameter | Typ | Beschreibung |
---|---|---|
accountId | String | Die Account ID des verarbeiteten Kontos. |
ocid | String | Die zum verarbeiteten Konto passende ocid. (Wird benötigt für die Erstellung von Google Ads Deeplinks.) |
sheetStatus | Integer | 2 = neues Tabellenblatt wurde angelegt. 1 = Inhalte wurden aus bestehendem Tabellenblatt entfernt. |
activeSearchTerms | Array | Rückgabewerte aus getActiveSearchTerms() |
Parameter | Typ | Beschreibung |
---|---|---|
sheetFileId | String | Die ID des zu verwendenden Google Sheets. |
accountId | String | Die Account ID des verarbeiteten Kontos. |
ss | Spreadsheet Object | Das zu verwendende Google Sheet |
templateSheet | Sheet Object | Die leere Tabellenblattvorlage innerhalb des verwendeten Google Sheets. (Wird für die Erstellung neuer Tabellenblätter für verarbeitete Konten verwendet.) |
Parameter | Typ | Beschreibung |
---|---|---|
ocid | String | Die zum verarbeiteten Konto passende ocid. (Wird benötigt für die Erstellung von Google Ads Deeplinks.) |
activeSearchTerms | Array | Rückgabewerte für processAccount() |
query | String | GAQL Abfrage zur Ausführung der Suche nach aktiven Suchbegriffen mittels AdsApp.search() |
search | AdsApp.SearchRowIterator | siehe AdsApp.SearchRowIterator |
googleAdsDeeplink | String | Der Google Ads Deeplink zur Anzeigengruppe des jeweiligen Suchbegriffs |
Parameter | Typ | Beschreibung |
---|---|---|
data | Array | Die Rückgabewerte aus getActiveSearchTerms(). |
sheetFileId | String | Die ID des zu verwendenden Google Sheets. |
sheetName | String | Die Account ID des verarbeiteten Kontos. |
sheet | Spreadsheet Object | Das verwendete Google Sheet. |
Parameter | Typ | Beschreibung |
---|---|---|
sheetFileId | String | Die ID des zu verwendenden Google Sheets. |
MCC-Version nachfolgend.
Single-Account-Version siehe processAccount()
Parameter | Typ | Beschreibung |
---|---|---|
accountIds | Array | Beinhaltet die Account IDs der zu verarbeitenden Google Ads Konten. |
MCC-Version nachfolgend.
Wird in Single-Account-Version als main() ausgeführt
Parameter | Typ | Beschreibung |
---|---|---|
accountId | String | Die Account ID des verarbeiteten Kontos. |
sheet | Spreadsheet Object | Das verwendete Google Sheet. |
existingValues | Array | Alle Datenzeilen (ohne Kopfzeile) des Tabellenblatts des verarbeiteten Kontos. |
filteredValues | Array | Gefilterte Zeilen aus existingValues ohne Werte in Spalte "processed". |
count | Integer | Hilfsvariable zur Zählung der bereits verarbeiteten Zeilen |
status | String | Rückgabewert aus checkForDuplicates(). (Siehe Rückgabewerte aus Script 2) |
Parameter | Typ | Beschreibung |
---|---|---|
rowData | Array | Eingabewerte aus processAccount(). (Die zu verarbeitende Zeile aus filteredValues.) |
accountId | String | Die Account ID des verarbeiteten Kontos. |
query | String | GAQL Abfrage zur Ausführung der Suche nach bereits gebuchten Keyword in anderen Anzeigengruppen mittels AdsApp.search() |
search | AdsApp.SearchRowIterator | siehe AdsApp.SearchRowIterator |
Parameter | Typ | Beschreibung |
---|---|---|
term | String | Keyword-Text zur Erstellung des auszuschließenden Keywords. |
campaign | Integer | ID der Kampagne, in der das auszuschließende Keyword erstellt werden soll. |
Parameter | Typ | Beschreibung |
---|---|---|
term | String | Keyword-Text zur Erstellung des auszuschließenden Keywords. |
adgroup | Integer | ID der Anzeigengruppe, in der das auszuschließende Keyword erstellt werden soll. |
Parameter | Typ | Beschreibung |
---|---|---|
sheet | Spreadsheet Object | Das verwendete Google Sheet. |
Parameter | Typ | Beschreibung |
---|---|---|
sheet | Spreadsheet Object | Das verwendete Google Sheet. |
index | Integer | Relative Zeilennummer des verarbeiteten Suchbegriffs im Tabellenblatt |
status | String | Rückgabewert aus checkForDuplicates(). (Siehe Rückgabewerte aus Script 2) |