Đo lường trên nhiều miền

Hướng dẫn này mô tả cách đo lường các sự kiện trên nhiều miền bằng analytics.js.

Tổng quan

Thư viện analytics.js sử dụng một client ID duy nhất để xác định xem người dùng là người dùng mới hay cũ. Người dùng được coi là quay lại nếu lượt truy cập có ID khách hàng phù hợp đã được gửi đến cùng một tài sản.

Theo mặc định, ID ứng dụng khách được lưu trữ trong cookie của trình duyệt, có nghĩa là chỉ các trang trên cùng một miền mới có thể truy cập ID ứng dụng này. Để theo dõi cùng một Mã ứng dụng khách cho một người dùng nhất định trên các tên miền khác nhau, hãy sử dụng tính năng theo dõi tên miền chéo.

Để chia sẻ một mã ứng dụng khách trên nhiều miền, bạn có thể thêm mã này dưới dạng tham số truy vấn vào những URL trỏ từ miền hiện tại (miền nguồn) đến miền đích mà bạn muốn đo lường. Khi người dùng nhấp vào một liên kết hoặc gửi biểu mẫu trên miền nguồn và điều hướng đến miền đích, mã trên trang đích có thể truy cập ID ứng dụng khách bằng cách đọc mã trên URL.

Lấy mã ứng dụng khách trên miền nguồn

Để truy xuất mã ứng dụng khách trên miền nguồn, bạn hãy sử dụng phương thức get:

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

Sau khi có ID ứng dụng khách trên miền nguồn, bạn có thể thêm ID ứng dụng khách vào các liên kết trỏ đến miền đích.

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

Đặt mã ứng dụng khách trên miền đích

Bạn có thể cho đối tượng trình theo dõi trên miền đích biết mã ứng dụng khách cần sử dụng bằng cách chỉ định trường mã ứng dụng khách trong lệnh create:

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

Nếu một mã ứng dụng khách đã tồn tại trên miền đích, thì phương thức này sẽ ghi đè mã ứng dụng khách.

Phát hiện hoạt động chia sẻ URL

Một vấn đề tiềm ẩn với việc chuyển ID ứng dụng khách vào URL là người dùng chia sẻ URL và có thể người dùng sẽ chia sẻ URL chứa ID ứng dụng khách thuộc về người khác.

Một cách để tránh vấn đề này là thêm dấu thời gian vào ID ứng dụng khách. Điều này cho phép bạn phát hiện thời điểm URL ban đầu được tạo. Nếu đã quá lâu, hãy xem mã ứng dụng khách là không hợp lệ. Ngoài dấu thời gian, bạn có thể thêm chuỗi tác nhân người dùng hoặc siêu dữ liệu khác dành riêng cho trình duyệt hay thiết bị. Sau đó, trên miền đích, nếu siêu dữ liệu không khớp, bạn sẽ biết ID ứng dụng khách đến từ một người khác.

Bỏ qua tự giới thiệu

Chiến dịch giới thiệu mới sẽ được tạo bất cứ khi nào đường liên kết giới thiệu tài liệu của một trang đến từ một tên máy chủ không khớp với bất kỳ mục nhập nào trong danh sách Loại trừ lượt giới thiệu cho tài sản của bạn.

Theo mặc định, danh sách Loại trừ lượt giới thiệu chỉ bao gồm miền mà bạn đã cung cấp khi tài sản được tạo lần đầu tiên. Để ngăn chiến dịch giới thiệu mới được tạo khi người dùng sử dụng nhiều miền, bạn phải thêm một mục nhập cho từng miền mà bạn muốn đo lường trong danh sách Loại trừ lượt giới thiệu.

Iframe

Kỹ thuật được mô tả ở trên yêu cầu mã JavaScript chạy sau khi analytics.js tải. Vì các phần tử <iframe> thường tồn tại trên trang trước khi analytics.js được tải, nên bạn thường không thể thêm ID ứng dụng khách vào URL trong tham số nguồn của iframe.

Để giải quyết vấn đề này, bạn có thể định cấu hình trang bên trong iframe để trì hoãn việc tạo trình theo dõi cho đến khi nhận được dữ liệu ID ứng dụng khách từ trang gốc. Và trên trang chính, bạn định cấu hình ID này để gửi ID ứng dụng khách đến trang iframe bằng cách sử dụng postMessage.

Dưới đây là ví dụ về mã trang mẹ trên 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>

Dưới đây là mã sẽ nhận thông báo trong iframe được lưu trữ trên 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
  });
});

Có thể analytics.js sẽ không tải được trên trang gốc và sau đó, trang trong iframe sẽ không bao giờ nhận được ID ứng dụng khách. Cách bạn xử lý trường hợp này phụ thuộc vào mức độ quan trọng của việc so khớp các mã ứng dụng khách.

Nếu bạn chỉ muốn thu thập dữ liệu khi bạn biết các ID ứng dụng khách giống nhau, thì mã ở trên là đủ. Nếu muốn thu thập dữ liệu trên trang trong khung bất kể trang có nhận được ID ứng dụng khách từ trang gốc hay không, bạn sẽ phải thêm dự phòng.

Mã sau đây sử dụng thời gian chờ trên trang trong iframe để xử lý trường hợp trang gốc bị chậm hoặc không thể gửi ID ứng dụng khách:

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