Cookie và phương pháp nhận dạng người dùng

Để Google Analytics xác định được hai lượt truy cập riêng biệt thuộc về cùng một người dùng thì một giá trị nhận dạng duy nhất, liên kết với người dùng cụ thể đó, phải được gửi cùng với mỗi lượt truy cập.

Thư viện analytics.js thực hiện việc này thông qua trường Client ID (Mã ứng dụng khách). Đây là một chuỗi duy nhất, được tạo ngẫu nhiên và được lưu trữ trong cookie của trình duyệt, nhờ đó, các lượt truy cập tiếp theo vào cùng một trang web có thể được liên kết với cùng một người dùng.

Theo mặc định, analytics.js sử dụng một cookie của bên thứ nhất duy nhất có tên _ga để lưu trữ Mã ứng dụng khách, nhưng bạn có thể tuỳ chỉnh tên, miền và thời gian hết hạn của cookie đó. Các cookie khác do analytics.js tạo ra bao gồm _gid, AMP_TOKEN_gac_<property-id>. Các cookie này lưu trữ các mã nhận dạng được tạo ngẫu nhiên khác và thông tin về chiến dịch về người dùng.

Việc sử dụng cookie cho phép analytics.js xác định người dùng riêng biệt trên các phiên duyệt web, nhưng không thể xác định người dùng riêng biệt trên các trình duyệt hoặc thiết bị khác nhau. Nếu trang web của bạn có hệ thống xác thực riêng thì bạn có thể sử dụng tính năng User ID, ngoài Client-ID, để xác định chính xác hơn người dùng trên tất cả các thiết bị mà họ sử dụng để truy cập vào trang web của bạn.

Hướng dẫn này giải thích cách tuỳ chỉnh các chế độ cài đặt cookie cũng như cách đặt trường mã nhận dạng người dùng để đo lường chính xác hơn hoạt động của người dùng trên các phiên.

Bảng sau đây hiển thị các giá trị của trường cookie mặc định mà analytics.js sử dụng:

Tên trường Loại giá trị Giá trị mặc định
cookieName văn bản _ga
cookieDomain văn bản Kết quả của biểu thức JavaScript sau:
document.location.hostname
cookieExpires số nguyên 63072000 (hai năm, tính bằng giây)
cookieUpdate boolean true
cookieFlags văn bản

Để sửa đổi bất kỳ giá trị nào trong số này, bạn có thể chỉ định các giá trị đó trong fieldObject khi truyền lệnh create. Ví dụ:

ga('create', 'UA-XXXXX-Y', {
  'cookieName': 'gaCookie',
  'cookieDomain': 'blog.example.co.uk',
  'cookieExpires': 60 * 60 * 24 * 28  // Time in seconds.
  'cookieUpdate': 'false',
  'cookieFlags': 'SameSite=None; Secure',
});

Trường cookie phổ biến nhất cần đặt là cookieDomain. Do đó, lệnh create sẽ chấp nhận trường cookieDomain làm tham số thứ ba không bắt buộc để thuận tiện:

ga('create', 'UA-XXXXX-Y', 'blog.example.co.uk');

Thẻ Google Analytics được đề xuất sẽ đặt chuỗi 'auto' cho trường cookieDomain:

ga('create', 'UA-XXXXX-Y', 'auto');

Việc chỉ định 'auto' làm cookieDomain sẽ bật cấu hình miền cookie tự động. Nhờ đó, analytics.js sẽ tự động xác định miền cookie tốt nhất để sử dụng.

Cấu hình miền cookie tự động sẽ đặt cookie _ga trên miền cấp cao nhất có thể. Ví dụ: nếu địa chỉ trang web của bạn là blog.example.co.uk, thì analytics.js sẽ đặt miền cookie thành .example.co.uk. Ngoài ra, nếu analytics.js phát hiện thấy bạn đang chạy một máy chủ cục bộ (ví dụ: localhost), thì Analytics sẽ tự động đặt cookieDomain thành 'none'.

Mỗi khi một lượt truy cập được gửi đến Google Analytics, thời gian hết hạn của cookie sẽ được cập nhật thành thời gian hiện tại cộng với giá trị của trường cookieExpires. Điều này có nghĩa là nếu bạn sử dụng thời gian cookieExpires mặc định là hai năm và một người dùng truy cập vào trang web của bạn mỗi tháng, thì cookie của họ sẽ không bao giờ hết hạn.

Nếu bạn đặt thời gian cookieExpires thành 0 (0) giây, thì cookie này sẽ chuyển thành cookie dựa trên phiên và hết hạn khi phiên trình duyệt hiện tại kết thúc:

Khi bạn đặt cookieUpdate thành true (giá trị mặc định), analytics.js sẽ cập nhật cookie trên mỗi lần tải trang. Thao tác này sẽ cập nhật thời hạn sử dụng cookie tương ứng với lượt truy cập gần đây nhất vào trang web. Ví dụ: nếu thời hạn cookie được đặt thành 1 tuần và người dùng truy cập bằng cùng một trình duyệt 5 ngày một lần, thì thời hạn sử dụng cookie sẽ được cập nhật ở mỗi lượt truy cập và do đó sẽ không bao giờ hết hạn.

Khi bạn đặt chính sách này thành false, cookie sẽ không được cập nhật trong mỗi lần tải trang. Điều này khiến cho thời hạn cookie được đặt dựa trên lần đầu tiên người dùng truy cập vào trang web.

Thêm các cờ bổ sung vào cookie khi đặt cookie. Cờ phải được phân tách bằng dấu chấm phẩy.

Bạn không nên truy cập trực tiếp vào các tập hợp cookie analytics.js, vì định dạng cookie có thể thay đổi trong tương lai. Thay vào đó, nhà phát triển nên sử dụng readyCallback để đợi cho đến khi analytics.js được tải, sau đó nhận giá trị clientId được lưu trữ trên trình theo dõi.

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

Tắt cookie

Trong một số trường hợp, bạn có thể muốn sử dụng cơ chế lưu trữ của riêng mình (chẳng hạn như localStorage hoặc Service Worker) để duy trì Client-ID trong các phiên mà không cần sử dụng cookie. Bạn có thể ngăn analytics.js đặt cookie bằng cách đặt trường storage thành 'none'.

ga('create', 'UA-XXXXX-Y', {
  'storage': 'none'
});

Nếu tự lưu trữ trường clientId, bạn cần đảm bảo đặt trường cliendId khi tạo công cụ theo dõi.

ga('create', 'UA-XXXXX-Y', {
  'storage': 'none',
  'clientId': '76c24efd-ec42-492a-92df-c62cfd4540a3'
});

Để tắt cookie _gac_<property-id>, hãy đặt trường storeGac thành false trong lệnh create:

ga('create', 'UA-XXXXX-Y', {
  storeGac: false,
});

Sử dụng localStorage để lưu trữ Client-ID

Mã mẫu sau đây cho biết cách bạn có thể sửa đổi thẻ JavaScript để sử dụng localStorage cho việc lưu trữ Mã ứng dụng khách thay vì cookie:

var GA_LOCAL_STORAGE_KEY = 'ga:clientId';

if (window.localStorage) {
  ga('create', 'UA-XXXXX-Y', {
    'storage': 'none',
    'clientId': localStorage.getItem(GA_LOCAL_STORAGE_KEY)
  });
  ga(function(tracker) {
    localStorage.setItem(GA_LOCAL_STORAGE_KEY, tracker.get('clientId'));
  });
}
else {
  ga('create', 'UA-XXXXX-Y', 'auto');
}

ga('send', 'pageview');

User ID

Mã nhận dạng người dùng cho phép bạn phân tích các nhóm phiên trên nhiều thiết bị bằng cách sử dụng chuỗi giá trị nhận dạng duy nhất, cố định và không nhận dạng cá nhân để đại diện cho một người dùng. Để tìm hiểu lý do bạn nên triển khai User ID, hãy xem phần Lợi ích khi sử dụng tính năng User ID.

Cách triển khai User ID bằng analytics.js:

  1. Cung cấp mã nhận dạng chuỗi duy nhất, cố định và không nhận dạng cá nhân của riêng bạn để biểu thị cho từng người dùng đã đăng nhập. Mã nhận dạng này thường do hệ thống xác thực cung cấp.
  2. Đặt Mã nhận dạng người dùng trên trình theo dõi:
ga('create', 'UA-XXXXX-Y', 'auto', {
  userId: USER_ID
});
ga('send', 'pageview');

Xử lý việc xác thực sau khi tải trang

Khi tạo Ứng dụng trang đơn hoặc các trang web động khác có xử lý hoạt động đăng nhập của người dùng sau lượt tải trang ban đầu, quá trình đặt giá trị mã nhận dạng người dùng trên trình theo dõi không thể diễn ra tại thời điểm tạo.

Trong những trường hợp như vậy, bạn có thể sử dụng lệnh set để đặt giá trị trên trình theo dõi ngay khi được biết.

// Creates the tracker and sends a pageview as normal
// since the `userId` value is not yet known.
ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');

// At a later time, once the `userId` value is known,
// sets the value on the tracker.
ga('set', 'userId', USER_ID);

// Setting the userId doesn't send data to Google Analytics.
// You must also use a pageview or event to send the data.
ga('send', 'event', 'authentication', 'user-id available');

Khi sử dụng phương pháp này, các lượt truy cập được gửi trước khi đặt trường userId sẽ không chứa giá trị mã nhận dạng người dùng. Tuy nhiên, thông qua một quy trình gọi là Hợp nhất phiên, Google Analytics có thể liên kết các lượt truy cập này với đúng người dùng tại thời điểm xử lý.