REPORTS MIT QF

Sie planen ein Web-Projekt?

Oder wollen den wirtschaftlichen Erfolg Ihrer Website verbessern?
Kontaktieren Sie Max Meyn für ein unverbindliches Erstgespräch.

Telefon: 09 51 - 9 68 51 60
max.meyn(at)blitz.net

Max Meyn macht Direktmarketing seit 1990

Max Meyn, 15.10.2012

Zusammenfassung

Der Qualitätsfaktor (QF) ist vor allem für AdWords Kampagnen auf Google Search wichtig. Allerdings gibt es keine Keyword-Reports mit zuverlässiger QF-Angabe, da der QF erst im Moment der Report-Erstellung errechnet wird. Für Keyword-Reports zur Vergangenheit ist der QF daher oft falsch, da der QF sich zum Teil erheblich und oft ändert. Eine Möglichkeit, Keyword-Reports mit (einigermaßen) zutreffenden QF zu erstellen, besteht z.B. darin, sich selbst ein Archiv in Form einer täglich wachsenden Liste mit Keyword-Reports für den Zeitraum "gestern" zu erstellen. Man kann das mit der Google API machen, aber einfacher geht es mit AdWords Skripts und Google Drive ("dem neuen Zuhause von Google Docs").

Dass bei diesem Verfahren aktuelle Daten (QF, Max. CPC) mit historischen Daten (Clicks, Impressions, Position etc.) zusammengebracht werden, erscheint wegen des kurzen zeitlichen Abstands vertretbar. Benötigt werden: ein AdWords-Konto mit einer Google Search Kampagne und Admin-Rechten, ein Google Drive-Account und ein AdWords Skript. JavaScript-Kenntnisse sind nicht erforderlich.

Das Problem: AdWords bietet keine historischen Daten zum Qualitätsfaktor und zum Max. CPC

Der Qualitätsfaktor (QF) ist der zentrale Wert für die Berechnung des "Cost per Click" (CPC). Jedes Keyword in einem AdWords-Konto hat einen eigenen QF. Mit ihm bewertet Google die Relevanz eines Keywords für die Anzeigenschaltung. Der QF wird entweder in ganzen Zahlen von 1 (schlecht) bis 10 (sehr gut) oder in Zehnteln (1/10, 2/10 bis 10/10) angegeben.

Die Funktion des QF? Kurz gesagt führt ein Keyword mit hohem QF dazu, dass man vergleichsweise weniger für einen Klick auf eine Anzeige zahlt. Und ein höherer QF bringt bei gleichbleibenden Kosten theoretisch eine bessere Platzierung der Anzeige mit sich.

Der QF ist für die Analyse einer Kampagne, speziell für die Keyword-Performance von einiger Bedeutung, denn ein weit verbreiteter Ansatz der AdWords-Optimierung besteht in dem Versuch, den QF von Keywords zu verbessern. Allerdings bekommt man den QF in Keyword-Reports relativ schlecht "zu fassen". Der Grund: AdWords berechnet den QF eines Keywords im Moment der Anzeigenschaltung bzw. im Moment einer Report-Erstellung. Wenn also z.B. ein Keyword-Report am Montag für die Zeit der vergangenen Woche bis einschließlich Sonntag erstellt wird, so weist dieser Report für alle Keywords den QF im Moment der Reporterstellung, also Montag, aus, obwohl dieser bei der Anzeigenschaltung des Reportzeitraums (vielleicht) ein ganz anderer war.

Das Gesagte gilt auch für das Gebot, den "Max. CPC". Für diesen Wert gibt es ebenfalls keine historischen Daten von AdWords, sondern immer nur den "aktuell gültigen" Wert. Wenn ich also mit dem "Max. CPC" experimentiere, fehlt mir in den AdWords Reports in der Regel ein korrekter Wert hierfür.

Gerade im Anfang einer AdWords Kampagne verändert sich der QF häufiger, zumal wenn man aktive Kampagnenoptimierung betreibt. Aber auch bei "reifen" Kampagnen ändert sich der QF von Keywords - manchmal im Verlauf eines Tages mehrfach. Das kann ich feststellen an Hand einer Tabelle mit täglichen Keyword-Reports auf Google Drive, die ich automatisiert erstellen lasse. Nach und nach entsteht daraus ein Archiv historischer AdWords Daten, das mir für die Gestaltung meiner Gebotsstrategie wichtige Erkenntisse liefert.

Die Lösung: Automatisierte Report-Erstellung mit "AdWords Script"

Die zu Grunde liegende Annahme ist: Es ist allenfalls genauer, die täglich ermittelten Werte für "QF" und "Max. CPC" den Werten des jeweils vergangenen Tages ("Clicks", "Impressions", "Position", "CPC") zuzuordnen, als die Werte für "QF" und "Max. CPC" Zeiträumen zuzuordnen, die älter als "gestern" sind. Daher steht im Titel dieses Beitrags die Einschränkung "einigermaßen genau".

1. Schritt: Spreadsheet auf Google Drive anlegen

a.) Auf Google Drive mit dem Button "Erstellen" ein neue Tabelle erstellen und die folgenden Spalten anlegen:
Datum; Kampagne; Anzeigengruppe; Keyword; Gebot; Impressions; Clicks; Av. Pos.; QF; Kosten; CTR; CPC

b.) Titel für die Datei wählen, z.B. Kundenname: Keyword-Report täglich.

c.) Unter "Datei" / "Tabelleneinstellungen" das "Gebietsschema: Deutschland" wählen, damit das richtige Datumsformat und das Dezimalkomma verwendet wird.

d.) Die URL (Adresse) für das neue Tabellendokument wird in einem folgenden Schritt benötigt, und zwar wenn sie in das AdWords Script kopiert werden muss (s.u.).

2. Schritt: AdWords Skript Editor

a.) Wechseln in das AdWords Konto, das die Kampagnen enthält, die mit dem Skript "verfolgt" werden sollen.

b.) Den Tab "Kampagnen" wählen, dann über "Autmatisierung"/"Skripts" AdWords Skript aufrufen. (Dazu mit dem Mauszeiger ganz an den linken Bilschirmrand gehen, dort öffnet sich dann eine vertikale Menüleiste).

c.) AdWords Skript Editor öffnen durch Click auf "+ Skript erstellen".

d.) Das Skript autorisieren, d.h. zustimmen, dass das Skript auf das AdWords Konto zugreifen darf. Dafür sind Admin-Rechte im AdWords Konto erforderlich.

e.) Das Skript benennen.

f.) Das - vorerst rudimentäre - Skript speichern.

g.) Den vorhandenen Text im Editor-Feld ("function main() {}") löschen.

3. Schritt: Das AdWords Skript einfügen

a.) Das gesamte weiter unten im Kasten stehende Skript kopieren und in den Skript-Editor von AdWords Skript einfügen.

b.) In der 2. Zeile des Skripts muss die zuvor kopierte URL der Google Docs-Tabelle eingesetzt werden.

c.) Das Skript speichern.

//Eingabe der URL für das Google Drive-Dokument (Spreadsheet).
var SPREADSHEET_URL = "SPREADSHEET_URL_HIER_EINFÜGEN";

function main() {
// Berücksichtigt die Keywords, die gestern Impressionen erzielt haben.
 var keywordsIterator = AdWordsApp.keywords()
     .orderBy("Impressions DESC")
     .forDateRange("YESTERDAY")
     .withCondition("Impressions > 0")
     .get();

 // Setzt das Betrachtungsdatum auf "gestern".
 var yesterday = new Date(new Date().setDate(new Date().getDate()-1));
 // Öffnet das Spreadsheet.
 var spreadsheet = getSpreadsheet(SPREADSHEET_URL);
 // Verwendet das Standardblatt.
 var sheet = spreadsheet.getActiveSheet();
 // Definiert die letzte Zeile.
 var lastRow = sheet.getLastRow();
 // Schreibt den Inhalt des Berichts.
 for (var row = lastRow +1; keywordsIterator.hasNext(); row ++) {
    var keyword = keywordsIterator.next();
    var stats = keyword.getStatsFor("YESTERDAY");
    var campaign = keyword.getCampaign();
    var adgroup = keyword.getAdGroup();

    sheet.getRange("A" + row).setValue(Utilities.formatDate(yesterday, "CET", "dd.MM.yyyy"));
    sheet.getRange("B" + row).setValue(campaign.getName());
    sheet.getRange("C" + row).setValue(adgroup.getName());
    sheet.getRange("D" + row).setValue(keyword.getText());
    sheet.getRange("E" + row).setValue(keyword.getMaxCpc());
    sheet.getRange("F" + row).setValue(stats.getImpressions());
    sheet.getRange("G" + row).setValue(stats.getClicks());
    sheet.getRange("H" + row).setValue(stats.getAveragePosition());
    sheet.getRange("I" + row).setValue(keyword.getQualityScore());                                       
    sheet.getRange("J" + row).setValue(stats.getCost());
    sheet.getRange("K" + row).setValue(stats.getCtr());
    sheet.getRange("L" + row).setValue(stats.getAverageCpc());
 }

 Logger.log("Report ist fertig! Rufen Sie die folgende URL auf:");
 Logger.log("https://docs.google.com/spreadsheet/ccc?key=" + spreadsheet.getId());
}

function getSpreadsheet(spreadsheetUrl) {
 var matches = new RegExp("key=([^&#]*)").exec(spreadsheetUrl);
 if (!matches || !matches[1]) {
    throw "Ungültige Spreadsheet-URL: " + spreadsheetUrl;
 }
 var spreadsheetId = matches[1];
 return SpreadsheetApp.openById(spreadsheetId);
}

Was dieses Skript tut: Es sucht alle Keywords, die "gestern" Impressionen hatten und schreibt die Daten für jedes einzelne Keyword in die Datei auf Google Drive, beginnend in der letzten, d.h. ersten freien Zeile des Tabellenblattes.

Weiter führende Informationen zu AdWords Skripts.

4. Schritt: Das Skript erstmalig aufrufen und einen Zeitplan erstellen

Unterhalb des Editor-Feldes befindet sich der Button "Skript jetzt ausführen". Nach dem Click auf diesen Button kann man sich für den "Preview"-Modus oder für "Run without previewing" entscheiden. Da dieses Skript keine Änderungen an den Kampagnen vornimmt, kann man es ohne "Previewing" laufen lassen.

Eine andere Möglichkeit, das Skript erstmalig zu starten, geht so: Den Button "Schließen" clicken und das Skript in der Liste über den Button "Ausführen" starten. Sobald das Skript seine Arbeit getan hat, erscheint ein neuer Eintrag unter der Überschrift "Protokolle". (Eventuelle Fehler werden hier ebenfalls dokumentiert.) Wenn unter "Status" in grüner Schrift "abgeschlossen" steht, hat alles geklappt. Jetzt sollte man die Tabelle auf Google Drive öffnen und die neuen Daten begutachten.

Anschließend wird das Skript so konfiguriert, dass es automatisch jeden Tag läuft und Daten liefert. Dazu geht man wieder zurück zu AdWords Skripts. In der Liste der verfügbaren Skripts clickt man auf den Link "Zeitplan erstellen" und wählt unter "Häugfikeit" den Wert "täglich". Als "Stunde" wählt man den Wert "00", was bedeutet, dass er täglich um 0:00 Uhr in der Zeitzone des AdWords-Kontos gestartet wird.

Anschließend auf den Button "Speichern" clicken.

5. Schritt: Auswertungen

Wenn das Skript einige Tage gelaufen ist und genügend Daten vorhanden sind, beginnt die Suche nach Chancen in der Kampagnenoptimierung. Dazu wird das Google Drive-Dokument mit Hilfe von Pivot-Tabellen analysiert. (Was als erstes überrascht, ist sicher, wie oft der QF eines Keywords seinen Wert wechselt.) Interessant hierbei sind folgende Indikatoren:

In Abhängigkeit vom Gebotspreis

  • Durchschnittliche Anzahl Impressions
  • Durchschnittlicher QF
  • Durchschnittliche CTR
  • Durchschnittliche Position

Mit den Daten kann man ermitteln, wie "elastisch" ein Keyword auf eine Gebotsänderung reagiert. Führt z.B. eine Änderung des Gebotspreises um 5% zu einer Steigerung der durchschnittlichen Impressions um 10%, so ist die Elasizität hoch und die Gebotsänderung ist für dieses Keyword ein sehr wirkungsvolles Instrument zur Steuerung der Anzahl an Impressionen.

6. Einschränkungen, Erweiterungen

Das grundlegende Problem habe ich bereits mehrfach angesprochen: die Daten sind nicht kongruent, d.h., dass Daten aus unterschiedlichen Perioden ("gestern" und "jetzt") kombiniert werden.

Um die Ungenauigkeit in Bezug auf die Dokumentation des "Max. CPC" zu eliminieren, kann man sich - zumindest für die Kampagnen mit manueller CPC-Gebotsstrategie - ein weiteres Skript erstellen, das dafür sorgt, dass der Gebotspreis (Max. CPC) für ein Keyword oder eine Anzeigengruppe erst kurz nach dem Aufruf des AdWords Skript geändert wird (Beispiel auf der Google Developers-Seite). In unserem Beispiel wäre das um 01:00 Uhr. Diese Herangehensweise erlaubt eingehende Tests zur "Elastizität" einer Gebotsstrategie.

Datensammlung erweitern um "Conversions". Hierbei ist darauf zu achten, ob die Conversions tatsächlich für "gestern" in AdWords auftauchen. Für Conversions, die aus Google Analytics importiert werden, ist das z.B. fast immer NICHT der Fall, sondern diese kommen häufig erst mit zwei Tagen Verspätung in AdWords an.