Paralleles Tracking für Google Ads: Betrifft mich das?

12. Oktober 2018 | Von in SEA

Am 30. Oktober wird Google Ads auf paralleles Tracking umgestellt. Wer davon betroffen ist und wie man das herausfindet, klären wir in diesem Post. Zur Unterstützung stellen wir dazu auch ein AdWords/Ads Script bereit.

Was ist eigentlich paralleles Tracking?

Beim Klick auf eine Anzeige wird ein Nutzer möglicherweise nicht direkt zur Zielseite weitergeleitet. Durch Weiterleitungen geht dann Zeit verloren:

Die zusätzlichen Wartezeiten können dazu führen, dass Nutzer vorzeitig aufgeben. Um das zu verhindern, nutzt Google ggf. eine Funktion, die neuere Browser anbieten. Dadurch läuft das Tracking im Hintergrund ab und verlängert nicht die Wartezeit des Nutzers:

Wer ist davon betroffen?

Über paralleles Tracking müssen sich nur Werbetreibende Gedanken machen, die Nutzer über Tracking-URLs umleiten.

In Google Ads wird das Tracking gesondert von der tatsächlichen Zielseite über eine sogenannte Tracking-Vorlage eingerichtet. Dort gibt es zwei Arten von Vorlagen:

  1. An die Zielseite werden Parameter angehängt: {lpurl}?parameter1=test&…
    Hier erfolgt keine Weiterleitung, sondern es werden lediglich zusätzliche Informationen angefügt. Mit parallelem Tracking hat man hierbei also nichts zu tun.
  2. Die Zielseite wird nicht direkt angesteuert: https://www.tracker.de/?redirect={lpurl}&parameter1=…
    Hier erfolgt also eine Weiterleitung. In diesem Fall muss sichergestellt werden, dass paralleles Tracking funktioniert.

Ausschlaggebend ist, wo auf die Zielseite verwiesen wird: Steht {lpurl} nicht am Anfang der Tracking-Vorlage, dann muss sichergestellt werden, dass paralleles Tracking unterstützt wird.

Wie prüft man das?

Am Wichtigsten ist die Prüfung der Kontoeinstellung. Diese findet man unter Alle Kampagnen > Einstellungen > Kontoeinstellungen. Wenn dort unter Tracking nichts festgelegt wurde, ist schon alles OK. Ansonsten muss geprüft werden, ob eine Tracking-Vorlage eingerichtet wurde und ob {lpurl} am Anfang steht. Steht {lpurl} nicht am Anfang, dann muss man sich um paralleles Tracking kümmern.

Tracking-Vorlagen gibt es ansonsten innerhalb des Kontos an vielen Stellen. Dazu zählen Kampagnen, Anzeigengruppen, Anzeigen und allerlei Ausrichtungskriterien (insbesondere Keywords). Diese kann man entweder manuell durchgehen, oder man nutzt das unten stehende Script.

Sonderfall: Shopping-Feeds

Auch in Produktdatenfeeds können Tracking-URLs vorkommen. Diese stehen dann im Attribut adwords_redirect bzw. ads_redirect. Die dort hinterlegte Domain muss inzwischen mit der Domain des Produkts (steht im link-Attribut) übereinstimmen, um paralleles Tracking zu unterstützen.

Herkömmliche Weiterleitungen über Tracking-Domains sind weiterhin möglich, müssen nun aber per Tracking-Vorlage in Google Ads eingerichtet werden. Mehr dazu steht in der Merchant-Center-Hilfe.

Script: Bereitschaft für paralleles Tracking prüfen

Damit in den Tiefen eines Kontos keine problematischen Tracking-Vorlagen unbemerkt bleiben, haben wir ein Script entwickelt. Das Script geht ein oder mehrere Konten durch und prüft die Tracking-Vorlagen von Kampagnen, Anzeigengruppen, Anzeigen und Ausrichtungskriterien.

Falls es problematische Vorlagen findet, meldet es diese im Protokoll. Das sieht dann so aus:

Ein paar technische Punkte zum Script:

  • Das Script läuft in einzelnen Konten oder in MCC-Verwaltungskonten. Es erkennt selber, wo es läuft – keine Anpassung nötig.
  • Das Script verändert nichts in den Konten. Es kann auch problemlos im Vorschaumodus ausgeführt werden.
  • Das Script kann bis zu 50 Konten parallel verarbeiten. Falls in einem MCC-Konto mehr Konten sind, geht es den Rest anschließend einzeln durch. Möglicherweise stößt es dabei an ein Zeitlimit.
  • Bei Bedarf kann man Konten im MCC labeln und das Label unter accountLabelName am Anfang des Scripts eintragen. Das Script geht dann genau diese Konten durch.

Generell ist keine Einrichtung nötig: Einfach den Code kopieren und das Script starten.

Für den Scriptcode bitte aufklappen

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Ready for parallel tracking? (Deutsche Version)
* © 2018 Martin Roettgerding, Bloofusion Germany GmbH.
* www.bloofusion.de
*
* Hintergrund
* Am 30. Oktober müssen alle Google-Ads-Kampagnen paralleles Tracking unterstützen. Wer ohne Tracking-URLs auskommt, hat damit kein Problem.
* Wer URLs allerdings per Tracking-Vorlage über eine Domain weiterleitet, muss sicherstellen, dass dabei paralleles Tracking unterstützt wird. Dieses Skript prüft, ob sich solch eine Einstellung möglicherweise irgendwo eingeschlichen hat.
* Geprüft werden aktive Kampagnen, Anzeigengruppen, Anzeigen und Ausrichtungskriterien (z. B. Keywords, Zielgruppen). Nicht geprüft werden Kontoeinstellungen, Sitelinks oder Produktdatenfeeds.
* 
* Die Kontoeinstellung sollte in jedem Fall manuell geprüft werden.
* Das geht so: Alle Kampagnen (keine auswählen!) > Einstellungen (graue Navigation) > Kontoeinstellungen (zweite obere Navigation) > Tracking
* Dort prüfen, ob eine Tracking-Vorlage gesetzt ist. Falls diese leer ist oder mit {lpurl} oder {unescapedlpurl} beginnt, ist alles gut.
*/

// Um nur bestimmte Konten in einem MCC zu prüfen, müssen diese mit einem Label versehen werden. Der Name des Labels ist dann hier einzutragen:
var accountLabelName = "";

function main() {
  Logger.log("Achtung: Per Script können Kontoeinstellung, Sitelinks oder Produktdatenfeeds nicht geprüft werden.");
  Logger.log("Es wird empfohlen, die Kontoeinstellung sowie ggf. Produktdatenfeeds selbst zu prüfen.");
  Logger.log("Weitere Infos: https://blog.bloofusion.de/paralleles-tracking-fuer-google-ads/");
  Logger.log("---------------------------------------------------------------------------------------------------");
    
  // Check if this is running on MCC level or account level.
  if(typeof MccApp !== 'undefined'){
    // Based on https://outshine.com/blog/run-your-adwords-scripts-across-a-lot-of-accounts
    var accountSelector = MccApp.accounts();
    if(accountLabelName) accountSelector = accountSelector.withCondition("LabelNames CONTAINS '" + accountLabelName + "'");
    
    var accountIterator = accountSelector.get();
    var accountIds = [];
    while (accountIterator.hasNext()) {
      var account = accountIterator.next();
      accountIds.push(account.getCustomerId());
    }
    var parallelIds = accountIds.slice(0, 50);
    var sequentialIds = accountIds.slice(50);
    	
    Logger.log(accountIds.length + " Konten zu verarbeiten.");
    var params = { "sequentialIds" : sequentialIds };
    MccApp.accounts().withIds(parallelIds).executeInParallel("checkParallelTrackingStatus", "allDone", JSON.stringify(params));

  }else{
    var params = JSON.stringify({ });
    checkParallelTrackingStatus(params);
  }
}

function checkParallelTrackingStatus(params){
  var currentAccountName = AdWordsApp.currentAccount().getName();
  if(currentAccountName == "") currentAccountName = AdWordsApp.currentAccount().getCustomerId();
  
  var trackingUrlTemplates = {};
  
  trackingUrlTemplates = checkForTrackingUrlTemplates(trackingUrlTemplates, "campaigns");
  trackingUrlTemplates = checkForTrackingUrlTemplates(trackingUrlTemplates, "adgroups");
  trackingUrlTemplates = checkForTrackingUrlTemplates(trackingUrlTemplates, "ads");
  trackingUrlTemplates = checkForTrackingUrlTemplates(trackingUrlTemplates, "criteria");
	
  var foundSomething = false;
  for(var trackingUrlTemplate in trackingUrlTemplates){
    if(!isTrackingUrlTemplateReadyForParallelTracking(trackingUrlTemplate)){
      foundSomething = true;
      var levels = "";
      for(var level in trackingUrlTemplates[trackingUrlTemplate]){
        if(levels == "") levels = level;
        else levels += ", " + level;
      }
        
      Logger.log("-- Möglicherweise problematische Tracking-Vorlage im Konto '" + currentAccountName + "': " + trackingUrlTemplate + " (gefunden auf folgenden Ebenen: " + levels + ").");
    }
  }
  if(!foundSomething){
    Logger.log("+ Kein Problem gefunden im Konto '" + currentAccountName + "'.");
  }

  return JSON.stringify({ "params" :  JSON.parse(params) });
}

function isTrackingUrlTemplateReadyForParallelTracking(trackingUrlTemplate){
  if(trackingUrlTemplate.match(/^\{(lpurl|unescapedlpurl)\}/)) return true;
  return false;
}

function checkForTrackingUrlTemplates(trackingUrlTemplates, level){
  var field = "TrackingUrlTemplate";
  var awql;
  switch(level){
    case "campaigns":
      awql = "SELECT " + field + " FROM CAMPAIGN_PERFORMANCE_REPORT WHERE CampaignStatus = 'ENABLED' AND " + field + " != '{lpurl}' AND " + field + " != ''";
      break;
    case "adgroups":
      awql = "SELECT " + field + " FROM ADGROUP_PERFORMANCE_REPORT WHERE CampaignStatus = 'ENABLED' AND AdGroupStatus = 'ENABLED' AND " + field + " != '{lpurl}' AND " + field + " != ''";
      break;
    case "ads":
      field = "CreativeTrackingUrlTemplate";
      awql = "SELECT " + field + " FROM AD_PERFORMANCE_REPORT WHERE CampaignStatus = 'ENABLED' AND AdGroupStatus = 'ENABLED' AND Status = 'ENABLED' AND " + field + " != '{lpurl}' AND " + field + " != ''";
      break;
    case "criteria":
      awql = "SELECT " + field + ", CriteriaType FROM CRITERIA_PERFORMANCE_REPORT WHERE CampaignStatus = 'ENABLED' AND AdGroupStatus = 'ENABLED' AND Status = 'ENABLED' AND " + field + " != '{lpurl}' AND " + field + " != ''";
      break;
  }
  
  var reportRows = AdWordsApp.report(awql).rows();
  
  // Translate level name into something easier to understand.
  var levelTranslations = {
	'campaigns' : 'Kampagne',
	'adgroups' : 'Anzeigengruppe',
	'ads' : 'Anzeige'
  };  
  if(levelTranslations.hasOwnProperty(level)) var translatedLevel = levelTranslations[level];
  else var translatedLevel = level;

  while(reportRows.hasNext()){
    var row = reportRows.next();
    if(row[field] == '{lpurl}' || row[field] == '') continue;
    
    if(level == "criteria"){
      translatedLevel = row['CriteriaType'];
    }
    
    if(!trackingUrlTemplates.hasOwnProperty(row[field])) trackingUrlTemplates[row[field]] = {};
    if(!trackingUrlTemplates.hasOwnProperty(row[field][translatedLevel])) trackingUrlTemplates[row[field]][translatedLevel] = 0;
    trackingUrlTemplates[row[field]][translatedLevel]++;
  }
  return trackingUrlTemplates;
}
  
function allDone(results){
  var params;
  for (var i = 0; i < results.length; i++) { if(results[i].getStatus() == "OK"){ params = JSON.parse(results[i].getReturnValue())['params']; break; } } if(!params){ Logger.log("Keine erfolgreich durchlaufenen Konten - breche ab ..."); return; } if(params['sequentialIds'].length > 0){
    Logger.log("Noch " + params['sequentialIds'].length + " Konten sequenziell zu verarbeiten.");
    
    var accountIterator = MccApp.accounts().withIds(params['sequentialIds']).get();
    while(accountIterator.hasNext()){
      var account = accountIterator.next();
      MccApp.select(account);
      results = checkParallelTrackingStatus(JSON.stringify(params));
      // Logger.log(account.getName() + ": erfolgreich verarbeitet");
    }    
  }
  Logger.log("Verarbeitung abgeschlossen.");
}

[collapse]

Was tun, wenn man problematische Tracking-URLs im Konto hat?

Als Werbetreibender kann man üblicherweise nichts tun, außer bei dem zuständigen Dienstleister nachzufragen – und das sollte man auch tun.

Der Anbieter des entsprechenden Tracking-Dienstes muss sicherstellen, dass paralleles Tracking unterstützt wird. Viele Dienstleister kennen diese Anforderung und stellen sicher, dass sie spätestens zum Stichtag am 30. Oktober erfüllt wird. Das gilt allerdings nicht für alle. Wir haben die Erfahrung gemacht, dass einzelne Anbieter von der Frage überrascht wurden.

Falls ein Anbieter die Umstellung zum Stichtag nicht schafft, sollten die entsprechenden Tracking-Vorlagen vorübergehend entfernt werden.

Fazit

Viele Werbetreibende sind von parallelem Tracking gar nicht betroffen. Prüfen sollte man es aber auf jeden Fall, um unliebsamen Überraschungen vorzubeugen.

Unser nächstes Webinar am 25. Januar 2019: 10 SEO-Mythen: Was stimmt, was stimmt nicht?

Das weiß doch jeder: Duplicate Content führt zu Abstrafungen. Blogs sind gut für SEO. Soziale Signale sind wichtig für organische Rankings. Oder etwa doch nicht? In diesem Webinar gibt es einen differenzierten Blick auf viele bekannte Mythen, denn im manchen Mythos steckt natürlich trotzdem ein bisschen Wahrheit.

Jetzt kostenlos anmelden:
10 SEO-Mythen: Was stimmt, was stimmt nicht?

Alle kommenden Webinare:
Bloofusion-Webinare im Überblick

The following two tabs change content below.

Martin Röttgerding

Martin Röttgerding ist Head of SEA in der Online-Marketing-Agentur Bloofusion und schreibt schwerpunktmäßig über Google AdWords im Bloofusion-Blog, im suchradar und hin und wieder in seinem AdWords-Profi-Blog PPC Epiphany.

Martin Röttgerding ist unter anderem in den folgenden sozialen Netzwerken zu finden:

Kommentieren