מדידה בכמה דומיינים

במדריך הזה נסביר איך למדוד אירועים בכמה דומיינים באמצעות analytics.js.

סקירה

ספריית analytics.js משתמשת במזהה לקוח ייחודי כדי לקבוע אם משתמש הוא חדש או חוזר. משתמש נחשב חוזר אם היט עם מזהה לקוח תואם כבר נשלח לאותו נכס.

כברירת מחדל, מזהה הלקוח מאוחסן בקובצי ה-cookie של הדפדפן, ומשמעות הדבר היא שרק דפים באותו דומיין יכולים לגשת אליו. כדי לעקוב אחר אותו Client-ID של משתמש נתון בדומיינים שונים, צריך להשתמש במעקב בכמה דומיינים.

כדי לשתף מזהה לקוח בדומיינים שונים, אפשר להוסיף אותו כפרמטר של שאילתה לכתובות URL שמפנות מהדומיין הנוכחי (דומיין המקור) אל דומיין היעד שאותו רוצים למדוד. כשמשתמש לוחץ על קישור או שולח טופס בדומיין המקור ועובר לדומיין היעד, הקוד שבדף היעד יכול לגשת למזהה הלקוח על ידי קריאתו מכתובת ה-URL.

קבלת מזהה הלקוח בדומיין המקור

כדי לאחזר מזהה לקוח בדומיין המקור, צריך להשתמש בשיטה get:

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

אחרי שמקבלים את מזהה הלקוח בדומיין המקור, אפשר להוסיף אותו לקישורים שמפנים לדומיין היעד.

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

הגדרת ה-Client ID בדומיין היעד

אפשר להורות לאובייקט מעקב בדומיין היעד באיזה מזהה לקוח להשתמש על ידי ציון השדה של מזהה הלקוח בפקודה create:

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

אם מזהה לקוח כבר קיים בדומיין היעד, השיטה הזו תחליף אותו.

המערכת מבצעת זיהוי של שיתוף כתובת ה-URL

בעיה אפשרית בהעברת מזהה הלקוח בכתובת URL היא שמשתמשים משתפים כתובות URL, ויכול להיות שמשתמש ישתף כתובת URL שמכילה מזהה לקוח ששייך למישהו אחר.

אחת הדרכים להימנע מהבעיה הזו היא לצרף חותמת זמן למזהה הלקוח. כך אפשר לזהות מתי כתובת ה-URL נוצרה במקור, ואם חלף יותר מדי זמן, המשמעות היא שמזהה הלקוח אינו חוקי. בנוסף לחותמת זמן, אפשר לצרף את המחרוזת של סוכן המשתמש או מטא-נתונים אחרים לדפדפן או למכשירים ספציפיים. לאחר מכן, בדומיין היעד, אם המטא-נתונים לא תואמים, אפשר לדעת שמזהה הלקוח הגיע ממישהו אחר.

התעלמות מהפניות עצמיות

המערכת תיצור קמפיין הפניה חדש בכל פעם שמקור ההפניה של המסמך של דף כלשהו מגיע משם מארח שאינו תואם לאף אחד מהערכים שברשימה החרגת הפניות בנכס שלכם.

כברירת מחדל, רשימת החרגות של הפניות כוללת רק את הדומיין שסיפקתם כשהנכס נוצר לראשונה. כדי למנוע יצירה של קמפיינים חדשים של הפניות כאשר משתמשים מנווטים בין דומיינים, עליך להוסיף רשומה לכל דומיין שברצונך למדוד ברשימה 'אי-הכללה של הפניות'.

מסגרות iframe

השיטה המתוארת למעלה מחייבת קוד JavaScript שפועל לאחר טעינת analytics.js. מאחר שרכיבי <iframe> בדרך כלל קיימים בדף לפני טעינת analytics.js, צירוף של מזהה הלקוח לכתובת ה-URL בפרמטר המקור של ה-iframe בדרך כלל לא אפשרי.

כדי לפתור את הבעיה הזו, אתם יכולים להגדיר את הדף בתוך ה-iframe כך שיעכב את יצירת כלי המעקב שלו עד אחרי שהוא יקבל את נתוני מזהה הלקוח מדף ההורה. ובדף ההורה, מגדירים אותו כך שישלח את מזהה הלקוח לדף ה-iframe באמצעות postMessage.

הנה דוגמה לקוד דף ההורה ב-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>

והנה הקוד שיקבל את ההודעה ב-iframe שמתארח ב-destination.com:

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
  });
});

ייתכן ש-analytics.js לא ייטען בדף ההורה, והדף ב-iframe לעולם לא יקבל את מזהה הלקוח. אופן הטיפול בפנייה הזו תלוי במידת החשיבות של ההתאמה בין מזהי הלקוח.

אם רוצים לתעד נתונים רק כאשר יודעים שמזהי הלקוח זהים, הקוד שלמעלה מספיק. כדי לתעד נתונים בדף במסגרת, גם אם הדף מקבל את מזהה הלקוח מדף ההורה, צריך להוסיף חלופה.

הקוד הבא משתמש בזמן קצוב לתפוגה בדף ב-iframe כדי לטפל במקרים שבהם דף ההורה איטי או לא מצליח לשלוח את מזהה הלקוח:

// 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);