Domainübergreifende Messung

In diesem Leitfaden wird beschrieben, wie Sie mit analytics.js Ereignisse über mehrere Domains hinweg erfassen.

Überblick

Die analytics.js-Bibliothek verwendet eine eindeutige Client-ID, um festzustellen, ob es sich um einen neuen oder wiederkehrenden Nutzer handelt. Ein Nutzer gilt als wiederkehrend, wenn bereits ein Treffer mit einer übereinstimmenden Client-ID an dieselbe Property gesendet wurde.

Standardmäßig wird die Client-ID in den Cookies des Browsers gespeichert. Das bedeutet, dass nur Seiten derselben Domain auf sie zugreifen können. Verwenden Sie domainübergreifendes Tracking, um dieselbe Client-ID für einen bestimmten Nutzer domainübergreifend zu erfassen.

Wenn Sie eine Client-ID domainübergreifend freigeben möchten, können Sie sie als Suchparameter an URLs anhängen, die von der aktuellen Domain (Quelldomain) zur Zieldomain verweisen, die Sie messen möchten. Wenn ein Nutzer in der Quelldomain auf einen Link klickt oder ein Formular sendet und zur Zieldomain navigiert, kann der Code auf der Zielseite aus der URL auslesen und so auf die Client-ID zugreifen.

Client-ID in der Quelldomain abrufen

Um eine Client-ID in der Quelldomain abzurufen, verwenden Sie die Methode get:

ga(function(tracker) {
  var clientId = tracker.get('clientId');
});

Sobald die Client-ID der Quelldomain zugeordnet ist, können Sie sie Links hinzufügen, die auf die Zieldomain verweisen.

<a href="https://destination.com/?clientId=XXXXXX">destination.com</a>

Client-ID in der Zieldomain festlegen

Sie können einem Tracker-Objekt in der Zieldomain mitteilen, welche Client-ID verwendet werden soll, indem Sie das Client-ID-Feld im Befehl create angeben:

ga('create', 'UA-XXXXX-Y', 'auto', {
  'clientId': getClientIdFromUrl()
});

Wenn in der Zieldomain bereits eine Client-ID vorhanden ist, wird sie mit dieser Methode überschrieben.

URL-Freigabe erkennen

Ein potenzielles Problem bei der Übergabe der Client-ID in einer URL besteht darin, dass Nutzer URLs gemeinsam nutzen und es möglich ist, dass ein Nutzer eine URL weitergibt, die eine Client-ID enthält, die einer anderen Person gehört.

Eine Möglichkeit, dieses Problem zu vermeiden, besteht darin, der Client-ID einen Zeitstempel hinzuzufügen. So können Sie feststellen, wann die URL ursprünglich erstellt wurde. Falls bereits zu viel Zeit vergangen ist, können Sie die Client-ID als ungültig betrachten. Zusätzlich zu einem Zeitstempel kannst du den User-Agent-String oder andere browser- oder gerätespezifische Metadaten anhängen. Wenn die Metadaten in der Zieldomain nicht übereinstimmen, wissen Sie, dass die Client-ID von einer anderen Person stammt.

Auf sich selbst verweisende Verweise ignorieren

Eine neue Verweiskampagne wird immer dann erstellt, wenn die Dokumentverweis einer Seite von einem Hostnamen stammt, der mit keinem der Einträge in der Verweis-Ausschlussliste für Ihre Property übereinstimmt.

Standardmäßig enthält die Verweis-Ausschlussliste nur die Domain, die Sie bei der Erstellung der Property angegeben haben. Um zu verhindern, dass neue Empfehlungskampagnen generiert werden, wenn Nutzer zu einer anderen Domain navigieren, müssen Sie für jede Domain, die Sie messen möchten, einen Eintrag in der Verweis-Ausschlussliste hinzufügen.

iFrames

Für das oben beschriebene Verfahren ist JavaScript-Code erforderlich, der nach dem Laden von analytics.js ausgeführt wird. Da <iframe>-Elemente in der Regel auf der Seite vorhanden sind, bevor analytics.js geladen wird, ist das Anhängen der Client-ID an die URL im Quellparameter des iFrames oft keine Option.

Zur Lösung dieses Problems können Sie die Seite innerhalb des iFrames so konfigurieren, dass die Erstellung des Trackers verzögert wird, bis die Client-ID-Daten von der übergeordneten Seite empfangen wurden. Auf der übergeordneten Seite konfigurieren Sie ihn so, dass die Client-ID mithilfe von postMessage an die iFrame-Seite gesendet wird.

Hier ein Beispiel für den Code der übergeordneten Seite auf source.com:

<iframe id="destination-frame" src="https://destination.com"></iframe>

<script>
ga('create', 'UA-XXXXX-Y', 'auto');
ga(function(tracker) {
  // Gets the client ID of the default tracker.
  var clientId = tracker.get('clientId');

  // Gets a reference to the window object of the destionation iframe.
  var frameWindow = document.getElementById('destination-frame').contentWindow;

  // Sends the client ID to the window inside the destination frame.
  frameWindow.postMessage(clientId, 'https://destination.com');
});
</script>

Und mit diesem Code würde die Nachricht im auf destination.com gehosteten iFrame empfangen:

window.addEventListener('message', function(event) {
  // Ignores messages from untrusted domains.
  if (event.origin != 'https://destination.com') return;

  ga('create', 'UA-XXXXX-Y', 'auto', {
    clientId: event.data
  });
});

Möglicherweise wird analytics.js auf der übergeordneten Seite nicht geladen und die Seite im iFrame erhält die Client-ID dann nicht. Wie Sie mit diesem Fall umgehen, hängt davon ab, wie wichtig es ist, dass die Client-IDs übereinstimmen.

Wenn Sie nur dann Daten erfassen möchten, wenn Sie wissen, dass die Client-IDs identisch sind, ist der Code oben ausreichend. Wenn Sie Daten auf der Seite im Frame unabhängig davon erfassen möchten, ob sie die Client-ID von der übergeordneten Seite erhält, müssen Sie ein Fallback hinzufügen.

Im folgenden Code wird auf der Seite im iFrame ein Zeitlimit verwendet, wenn die übergeordnete Seite langsam ist oder die Client-ID nicht gesendet werden kann:

// Stores whether or not the tracker has been created.
var trackerCreated = false;

function createTracker(opt_clientId) {
  if (!trackerCreated) {
    var fields = {};
    if (opt_clientId) {
      fields.clientId = opt_clientId;
    }

    ga('create', 'UA-XXXXX-Y', 'auto', fields);
    trackerCreated = true;
  }
}


window.addEventListener('message', function(event) {
  // Ignores messages from untrusted domains.
  if (event.origin != 'https://destination.com') return;

  // Creates the tracker with the data from the parent page.
  createTracker(event.data);
});


// Waits for three seconds to receive the client ID from the parent page.
// If that doesn't happen, it creates the tracker as normal.
setTimeout(createTracker, 3000);