网域和 Cookie - 网络跟踪 (analytics.js)

本指南介绍了 analytics.js 使用 Cookie 的方式,以及如何配置多网域网站。

概览

默认情况下,analytics.js 库使用名为 _ga 的单一 Cookie 来存储随机生成的唯一客户端标识符(客户端 ID)。ID 生成后会存储在 Cookie 中,并随每个匹配/请求一起发送至 Google Analytics(分析)。Google Analytics(分析)服务器随后将使用此 ID 来计算用户、会话和广告系列等数据。

_ga Cookie 是一种仅允许运行 JavaScript 的网域访问的第一方 Cookie。在某些实现方案中,您可能需要修改 Google Analytics(分析)设置 Cookie 的方法 - 下文将对此进行说明。

实现

analytics.js 的默认 JavaScript 代码段使用 create 方法创建跟踪器:

ga('create', 'UA-XXXX-Y');

这会创建有如下特征的新 Cookie:

  • Cookie 名称为 _ga
  • Cookie 网域为不含 www. 前缀的网站网域。
  • Cookie 设为在 24 个月(2 年)后过期,且有效期在每次系统发送匹配时刷新。

配置默认 Cookie 设置

要修改上述任何值,您应向 create 方法传递一个配置对象作为其最后一个参数。配置对象为普通的老式 JavaScript 对象,其中的每个属性都是您要覆盖的字段的名称。例如:

ga('create', 'UA-XXXX-Y', {
  'cookieName': 'new_cookie_name',
  'cookieDomain': 'mynew.domain.com',
  'cookieExpires': 60 * 60 * 24 * 28  // Time in seconds.
});

这会将默认 Cookie 设置改为相应的值。

自动 Cookie 网域配置

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

在使用 auto 参数时,自动 Cookie 网域配置会自动将 Cookie 写入尽可能最高级的网域,从而简化跨网域跟踪的实现。如果是在 www.example.co.uk 网域上使用,它将尝试按以下顺序写入 Cookie:

  1. co.uk
  2. example.co.uk
  3. www.example.co.uk

Analytics.js 将无法在 co.uk 上写入 Cookie,但能在 example.co.uk 上成功写入。由于 Cookie 已成功在更高级网域上写入,因此系统将跳过 www.example.co.uk

在 localhost 上设置 Cookie

在一些情况下,您可能要在运行于 localhost 上的网络服务器中运行 analytics.js。要设置 analytics.js Cookie,您需要使用以下代码停用默认的 Cookie 网域:

ga('create', 'UA-XXXX-Y', {
  'cookieDomain': 'none'
});

或者直接使用:

ga('create', 'UA-XXXX-Y', 'none');

同一网域上的多个跟踪器

analytics.js 库会设置一个具有唯一客户端 ID 的 Cookie,因此网页上的所有跟踪器都应共用这一个 Cookie。如果要在多个子域上或同个网域的不同子目录上实现 analytics.js,您应执行以下操作:

  • 指定所有跟踪器在尽可能最高的网域上设置 Cookie。
  • 省略网域的“www”和“.”(点号)前缀。

因此如果您的网站有 2 个子域:one.example.comtwo.example.com,您应按如下所示配置两个跟踪器:

// Configuration for one.example.com
ga('create', 'UA-XXXX-Y', {'cookieDomain': 'example.com'});
// Configuration for two.example.com
ga('create', 'UA-XXXX-Y', {'cookieDomain': 'example.com'});

修改 Cookie 有效期

每次当匹配/请求发送至 Google Analytics(分析)服务器时,Cookie 过期时间都会更新为在当前时间基础上加上 cookieExpires 时间值(以秒为单位)所得的未来时间。例如:

ga('create', 'UA-XXXX-Y', {
  'cookieExpires': 60
});

此设置会将 Cookie 过期时间设在 60 秒(1 分钟)以后。

如果您将 cookieExpires 时间设为 0(零)秒,Cookie 将变成基于会话的 Cookie,并在当前浏览器会话结束后马上过期:

ga('create', 'UA-XXXX-Y', {
  'cookieExpires': 0
});

获取客户端 ID

开发者不能直接访问 analytics.js 设置的 Cookie,因为 Cookie 格式可能在毫无征兆的情况下变更。这可能会导致脚本错误和错误的数据。因此,如果需要,开发者应使用 get 命令来获取 clientId 值。具体命令如下:

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

analytics.js 库加载后,传递给 ga 的函数将执行,而 tracker 参数将包含对默认跟踪对象的参考。随后,系统将使用跟踪器对象获取 clientId

停用 Cookie

analytics.js 默认使用单一 Cookie 在各网页上使用固定不变的唯一客户端标识符。在一些情况下,您可能想要使用自己的存储机制并直接将数据发送给 Google Analytics(分析)而不使用 Cookie。

您可以使用以下代码来禁止 analytics.js 设置 Cookie:

ga('create', 'UA-XXXX-Y', {
  'storage': 'none',
  'clientId': '35009a79-1a05-49d7-b876-2b884d0f825b'
});

如果您停用 Cookie 存储,除了使用跨网域链接参数的特殊情况外,您都必须提供自己的 clientId 参数。