为让 Google Analytics(分析)能够确定两个不同匹配是否属于同一用户,必须将与特定用户关联的唯一标识和每个匹配一同发送。
analytics.js 库通过 Client-ID 字段来完成此任务,Client-ID 是随机生成的独一无二的字符串,生成后的 ID 存储在浏览器的 Cookie 中,这样即可在用户和其访问过的相同网站之间建立关联。
默认情况下,analytics.js 使用一个名为 _ga
的第一方 Cookie 来存储该 Client-ID,但该 Cookie 的名称、网域和有效期均可自定义。analytics.js 创建的其他 Cookie 包括 _gid
、AMP_TOKEN
和 _gac_<property-id>
。这些 Cookie 存储用户的其他随机生成 ID 和广告系列信息。
analytics.js 能够借助 Cookie 跨浏览会话识别唯一身份用户,但无法跨浏览器或跨设备识别唯一身份用户。如果您的网站拥有自己的身份验证系统,则除了客户端 ID 之外您还可以使用 User ID 功能,从而更准确地在用户用于访问您网站的所有设备上跨设备识别用户。
本指南介绍如何自定义 Cookie 设置和如何设置 User ID 字段,以便更准确地跨会话跟踪用户。
配置 Cookie 字段的设置
下表显示了 analytics.js 使用的默认 Cookie 字段值:
字段名称 | 值类型 | 默认值 |
---|---|---|
cookieName |
文字 | _ga |
cookieDomain |
文字 |
以下 JavaScript 表达式的结果:document.location.hostname
|
cookieExpires |
整数 | 63072000 (两年,以秒为单位) |
要修改其中任何一个值,可以在传递 create
命令的 fieldObject
中进行指定。例如:
ga('create', 'UA-XXXXX-Y', {
'cookieName': 'gaCookie',
'cookieDomain': 'blog.example.co.uk',
'cookieExpires': 60 * 60 * 24 * 28 // Time in seconds.
});
由于经常需要设置的 Cookie 字段是 cookieDomain
,为方便起见 create
命令接受 cookieDomain
字段作为可选的第三个参数:
ga('create', 'UA-XXXXX-Y', 'blog.example.co.uk');
自动 Cookie 网域配置
推荐的 JavaScript 跟踪代码段为 cookieDomain
字段设置了字符串 'auto'
:
ga('create', 'UA-XXXXX-Y', 'auto');
将 cookieDomain
指定为 'auto'
会启用自动 Cookie 网域配置,它指示 analytics.js 自动确定要使用的最佳 Cookie 网域。
自动 Cookie 网域配置会在可能的最高级网域上设置 _ga
Cookie。例如,如果您的网址为 blog.example.co.uk
,analytics.js 就会将 Cookie 设置到 .example.co.uk
网域上。此外,如果 analytics.js 检测到您在本地运行服务器(例如 localhost
),则会自动将 cookieDomain
设为 'none'
。
Cookie 有效期
每次当匹配发送至 Google Analytics(分析)时,Cookie 过期时间都会更新为当前时间加上 cookieExpires
字段的值。这意味着,如果您使用默认的 cookieExpires
时间(两年),而用户每个月都会访问您的网站,那么他们的 Cookie 永远都不会过期。
如果您将 cookieExpires
时间设为 0
(零)秒,Cookie 将变成基于会话的 Cookie,并在当前浏览器会话结束后马上过期:
从 Cookie 中获取客户端 ID
您不应该直接访问 analytics.js 设置的 Cookie,因为 Cookie 格式以后可能会变更。相反,开发者应该使用 readyCallback
等待 analytics.js 加载完成,然后获取存储在跟踪器上的 clientId
值。
ga(function(tracker) { var clientId = tracker.get('clientId'); });
停用 Cookie
在某些情况下,您可能希望使用自己的存储机制(例如 localStorage
或 Service Worker)来跨会话存储客户端 ID,而不是使用 Cookie。为此,您可以将 storage
字段设置为 'none'
来禁止 analytics.js 设置 Cookie。
ga('create', 'UA-XXXXX-Y', { 'storage': 'none' });
如果您以自己的方式存储 clientId
字段,则需要确保在创建跟踪器时对 cliendId
字段进行设置。
ga('create', 'UA-XXXXX-Y', { 'storage': 'none', 'clientId': '76c24efd-ec42-492a-92df-c62cfd4540a3' });
要停用 _gac_<property-id>
Cookie,请在 create
命令中将 storeGac
字段设置为 false
。
ga('create', 'UA-XXXXX-Y', {
storeGac: false,
});
使用 localStorage 来存储客户端 ID
以下代码示例显示了如何修改 JavaScript 跟踪代码段以便使用 localStorage
(而非 Cookie)来存储客户端 ID:
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
借助 User ID,您可以使用一个代表用户的固定不变、独一无二的非个人身份 ID 字符串来跨设备分析会话组。要了解为何应实现 User ID,请查看使用 User ID 功能的优势。
要通过 analytics.js 实现 User ID,请按以下步骤操作:
- 提供您自己用于代表每个登录用户的字符串 ID,该 ID 必须具备唯一性,持久化存储,且不可用于识别个人身份。此 ID 通常由身份验证系统提供。
- 在跟踪器上设置 User ID:
ga('create', 'UA-XXXXX-Y', 'auto', { userId: USER_ID }); ga('send', 'pageview');
页面加载后处理身份验证
如果创建初始网页加载后处理用户登录的单页应用或其他动态网站,在创建时不能执行在跟踪器上设置 User ID 值的过程。
在这种情况下,您可以使用 set
命令在获知该值后立即在跟踪器上进行设置。
// 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');
如果使用此方法,在设置 userId
字段前发送的匹配不会包含 User ID 值。然而,利用会话统一这一过程,Google Analytics(分析)可以在处理过程中将这些匹配与正确的用户关联。