用于实现 AdWords 转化跟踪和再营销的 gtag.js

gtag.js 是新推出的网站代码库,旨在取代 AdWords 网站转化跟踪代码和再营销代码。这样,用于实现转化跟踪和再营销功能的代码现在就合二为一了。此外,还可以使用 gtag.js 将数据发送到其他一些 Google 产品,包括 Google Analytics(分析)。本指南介绍了如何为 AdWords 实现 gtag.js。有关如何为 Google Analytics(分析)实现 gtag.js 的详情,请参阅此指南

请注意,gtag.js 无意取代 Google 跟踪代码管理器,也不能在 Google 跟踪代码管理器中使用。如果在您的网站上已经采用了 Google 跟踪代码管理器,我们建议您继续使用内置的代码模板来实现 AdWords 再营销和转化跟踪,同时配以转化链接器代码,也可达到相同的跟踪准确性。

概括来讲,使用 gtag.js 的标准流程如下所示:

  • 在您网站的每个页面上安装全局网站代码,并通过配置让其与一个或多个 AdWords 帐号配合使用。
  • 使用 gtag.js API 跟踪所需的事件,例如转化或用户与您网站进行的其他有价值的互动。

gtag.js 全局网站代码

概述

gtag.js 全局网站代码用于加载跟踪库并配置用于接收数据的 AdWords 帐号。

与以前版本的 AdWords 转化跟踪代码和再营销代码不同,gtag.js 是一个异步代码库,这意味着浏览器在下载代码时不会影响网页内容的呈现。

gtag.js 全局网站代码应该安装在网站的每个页面上,并在页面 HTML 代码的 <head> 部分中尽可能地将其置于靠前的位置,以便取得最高的跟踪准确性。如果您使用的是 Google 跟踪代码管理器或其他代码管理系统,请参阅此部分了解如何设置转化跟踪和再营销。

下面是 gtag.js 全局网站代码的示例:

<!-- Global Site Tag (gtag.js) - Google AdWords: GOOGLE_CONVERSION_ID -->
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-GOOGLE_CONVERSION_ID"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'AW-GOOGLE_CONVERSION_ID');
</script>

GOOGLE_CONVERSION_ID 占位符值是与每个 AdWords 帐号绑定的唯一数字 ID。当您创建新的转化操作、查看现有的转化操作或为您的网站设置再营销时,可以在 AdWords 界面中找到全局网站代码及其关联的转化 ID。

为多个帐号配置全局网站代码

每个网页只需要一个全局网站代码段。如果您打算向多个 AdWords 帐号发送数据,只需为要使用的每个帐号添加一个对“config”命令的调用,并指定每个帐号的转化 ID,如下例所示:

<!-- Global Site Tag (gtag.js) - Google AdWords: GOOGLE_CONVERSION_ID_1 -->
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-GOOGLE_CONVERSION_ID_1"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'AW-GOOGLE_CONVERSION_ID_1');
  gtag('config', 'AW-GOOGLE_CONVERSION_ID_2');
</script>

您会注意到全局网站代码的第一行嵌入了一个 ID:

<script async src="https://www.googletagmanager.com/gtag/js?id=AW-GOOGLE_CONVERSION_ID"></script>

此 ID 是您获取全局网站代码(例如从 AdWords 或 Google Analytics(分析)帐号中获取)时设置的。此行中的 ID(即 gtag.js ID)并不能决定将由哪个(些)帐号接收代码发送的数据,而只是用于对全局网站代码进行唯一标识。要指定由哪个(些)帐号接收代码发送的数据,应调用 config 命令(并在事件对象中使用 send_to 参数)。例如,如果您使用的是 Google Analytics(分析),那么您的网站上可能已安装 gtag.js 全局网站代码。在这种情况下,gtag.js ID 可能是起初为您提供代码段的 Google Analytics(分析)媒体资源的 ID。要更新您的全局网站代码,使其向 AdWords 也发送数据,请另外为您的 AdWords 帐号插入一个“config”命令,如下所示:

<script async src="https://www.googletagmanager.com/gtag/js?id=GA-PROPERTY_ID"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'GA-PROPERTY_ID');
  gtag('config', 'AW-GOOGLE_CONVERSION_ID');
</script>

请注意,您不需要更改 gtag.js ID。

config 命令将代码配置为向特定的产品和帐号发送数据。要将代码配置为发送再营销数据和转化数据,您需要为每个要接收数据的 AdWords 帐号添加一个 config 命令及转化 ID。对于 AdWords,config 命令还会在网页加载时触发一次再营销匹配。要防止全局网站代码在有用户查看网页时自动向您的 AdWords 帐号发送再营销匹配,请按如下代码更新相关的 config 命令:

gtag('config', 'AW-GOOGLE_CONVERSION_ID', {'send_page_view': false});

全局网站代码已足以为您的 AdWords 帐号实现标准的再营销功能。AdWords 会记录每一个安装了全局网站代码的网址,从而让您可以创建使用基于网址的规则定义的受众群体列表。

要收集网站上发生的其他用户互动(包括转化),您需要在这些特定操作发生时调用 event 命令。

转化链接器功能

为了确保 AdWords 在网站访问者使用任何浏览器的情况下都可以衡量所有转化,全局网站代码会创建一个第一方 Cookie,用以存储在您网站的着陆页上捕获的广告点击信息。因此,请务必在您网站的所有页面上都植入全局网站代码,并确保您的 AdWords 帐号启用了自动标记功能。

如果为您的 AdWords 帐号启用了自动标记,那么,在有用户点击您的某个广告时,AdWords 会自动生成一个点击 ID,并将其附加到着陆页网址上(例如,通过 gclid 查询字符串参数的方式)。在为 AdWords 配置了 gtag.js 的情况下,gtag.js 会从网址中提取广告点击信息(例如 gclid 参数的值),并将其存储在第一方 Cookie 中。这种 Cookie 名为 _gcl_aw,作用范围为您的网域,有效期为 90 天。

例如,如果您的着陆页是 www.example.com/my/landing/page.html,则 _gcl_aw 的作用范围为 .example.com。这意味着 example.com 的所有子网域都可以访问它。

当使用 gtag.js 跟踪转化时,它会检查转化页上是否提供了 _gcl_aw Cookie;如果发现有,则将最新的 gclid 值发送到 AdWords。

如果不希望全局网站代码在您网站的网域上设置第一方 Cookie,请按如下所示自定义 config 命令:

gtag('config', 'AW-123456789', {conversion_linker: false});

请注意,这将导致转化衡量结果不太准确。

事件代码段

安装全局网站代码后,您可以使用“event”命令向 AdWords 发送其他数据,以实现再营销和转化跟踪。

gtag(event, event_name, optional_event_data);

“event”命令有两个参数:

  • 事件名称,它是描述您希望捕获的事件的字符串。您可以根据需要使用任何名称,但我们建议使用一些标准事件名称
  • 事件数据,这是一个可选的 JavaScript 对象,其中包含提供事件相关数据(转化价值、商品 ID 等)的键/值对列表。

下例说明了如何使用事件代码段跟踪用户注册情况:

gtag('event', 'sign_up', {
  'account_type': 'basic' // Optional data describing the type of account created by the user.
});

上例会触发一次再营销匹配,并且会将匹配数据连同事件名称及其关联数据发送到在全局网站代码中配置的 AdWords 帐号。

如果您在全局网站代码中配置了多个 AdWords 帐号,但仅希望向其中一个帐号发送事件数据,则可以在事件数据对象中使用可选的 send_to 参数来指定应由哪些帐号接收数据。

gtag('event', 'sign_up', {
  // Only send this event to AW-GOOGLE_CONVERSION_ID2
  'send_to': 'AW-GOOGLE_CONVERSION_ID2',
  'account_type': 'basic',
});

要将数据发送到多个帐号,请使用数组表示法传递帐号 ID 列表:

gtag('event', 'sign_up', {
  // Send this event to AW-GOOGLE_CONVERSION_ID2 and AW-GOOGLE_CONVERSION_ID3
  'send_to': ['AW-GOOGLE_CONVERSION_ID2', 'AW-GOOGLE_CONVERSION_ID3'],
  'account_type': 'basic',
});

对于上面的示例事件代码,您可以使用事件名称创建受众群体列表,定位已在您的网站上注册的用户。

在事件数据对象中传递的每个键也可在 AdWords 中用于构建用户列表成员资格规则。例如,您可以使用以下规则定位已创建“基本”用户帐号的访问者:“account_type”等于“基本”。

您可以将任意键/值对列表作为事件数据进行传递,通过这种方式,您可以根据自己的跟踪需要自定义您为每个事件收集的数据。对于标准事件,我们建议您最好发送推荐的事件数据参数。此处列出了标准事件及其推荐的数据参数,欢迎查阅。

由于“event”命令是一个 JavaScript 函数调用,因此可在事件回调中轻松地通过实现此命令来向 AdWords 发送数据,以响应用户发起的事件(如点击按钮或填写表单)。

下例说明了如何在用户点击出站链接时触发事件代码段。

<script>
  function track_click_event(url) {
    var callback = function () {
      if (typeof(url) != 'undefined') {
        window.location = url;
      }
    };
    gtag('event', 'button_click', {
         'destination': url,
         'event_callback': callback
    });
    return false;
 }
</script>

<a onclick="return track_click_event('http://example.com/your-link');"
   href="http://example.com/your-link">Click here!</a>

请注意,在此示例中,事件数据对象有一个可选的 event_callback 字段,它采用的值是 gtag.js 成功向 AdWords 发送数据后所执行的回调函数。这对于触发其他页面行为(例如将用户重定向到目标网址)十分有用。

跟踪转化

概述

任何事件都可以与 AdWords 转化操作相关联。转化操作标识采用的是类似 AW-123456789/AbC-D_efG-h12_34-567 的唯一字符串。

在 AdWords 界面中定义转化后,AdWords 会生成具有唯一性的转化字符串,并将其放在预先生成的事件代码段中分发出去:

<!-- Event snippet for CONVERSION_NAME conversion page -->
<script>
  gtag('event', 'conversion', {'send_to': 'AW-123456789/AbC-D_efG-h12_34-567'});
</script>

您可以原封不动地植入此事件代码段,也可以对它做一些修改,使其更贴合需要。例如,如果您希望跟踪之前指定为转化的用户注册事件,只需在事件数据对象中添加一个“send_to”字段即可,如下所示:

gtag('event', 'sign_up', {
  'account_type': 'basic',
  'send_to': 'AW-123456789/AbC-D_efG-h12_34-567'
});

跟踪转化时,事件代码段将尝试读取当前用户的广告点击数据,这些数据由全局网站代码存储在您网域上的第一方 Cookie 中。如果找到这些数据,则会将其放在该代码的有效负载中传送给 AdWords。

将同一事件作为转化传送给多个 AdWords 帐号

如果您需要将同一事件统计为多个 AdWords 帐号的转化,使用转化事件代码段的 send_to 参数传送多个转化 ID 字符串就可以做到。

gtag('event', 'sign_up', {
  'account_type': 'basic',
  'send_to': [
    'AW-123456789/AbC-D_efG-h12_34-567',
    'AW-987654321/Ijk-L_mnO-p98_76-543'
  ]
});

另一种可以采用的方案是使用跨帐号转化跟踪功能。使用该功能时,可以由一个经理帐号 (MCC) 拥有转化操作,经理帐号还可以与其一个或多个子帐号共享转化操作。这样,您只需在事件代码段中指定一个转化标识符即可。详细了解跨帐号转化跟踪

发送动态转化数据

在跟踪转化时,您可以选择动态指定转化价值、货币和交易 ID。要完成上述操作,可将其他参数作为转化事件数据对象的一部分进行传递,如下所示:

gtag('event', 'purchase', {
  'send_to': 'AW-123456789/AbC-D_efG-h12_34-567',
  'value': 345.89,
  'currency': 'USD',
  'transaction_id': '12345'
});
  • value 参数用于向 AdWords 报告每次转化的价值。如果该转化是电子商务购买行为,则应将其设置为交易总价值、毛利润率或任何其他契合您的跟踪目标的业务指标。
  • 在使用 ISO 4217 货币代码提供转化价值时,应设置 currency 参数。
  • transaction_id 字段用于为交易提供可选标识符。AdWords 使用此 ID 对同一个 transaction_id 可能触发的多个重复转化事件进行消重,避免多次统计同一转化。有时,用户可能会访问转化页的缓存版本,而其中可能嵌入了事件代码段,就会发生这种多次统计的情况。

为了达到最佳的转化跟踪准确性,我们建议您在网站的每个网页上都植入全局网站代码,并在转化页上使用事件代码段。这样,如果用户点击广告后登录您的网站,全局网站代码就可以捕获 gclid,然后事件代码段可以读取该 gclid 并将其发回 AdWords。

自定义转化跟踪方案

如果您需要自定义跟踪方案或受到特定的技术限制,可对 gtag.js 进行调整,使之以合乎您需求的方式跟踪转化情况,但这可能需要贵方有高级技术资源,才能正确地实现代码。

通过 Google 跟踪代码管理器实现转化跟踪

如果您使用 Google 跟踪代码管理器,那么除了现有的 Google 跟踪代码管理器容器代码之外,您不需要使用 gtag.js 在您的网站中再植入代码,也不应通过自定义的 HTML 代码模板部署 gtag.js。您只需确保在转化页上部署了内置的 AdWords 转化跟踪代码模板,并在网站的每个页面上都部署了转化链接器代码即可。gtag.js 全局网站代码的作用是捕获 gclid 并将其存储在第一方 Cookie 中,以用于转化跟踪目的。转化链接器的作用与此相同。

请注意,如果您还使用 Google 跟踪代码管理器部署 Google Analytics(分析)代码,则无需部署转化链接器代码。您可以将与您部署的代码相关的 Google Analytics(分析)媒体资源与要跟踪转化的 AdWords 帐号关联起来,这样即可使 Google Analytics(分析)代码能够创建第一方 Cookie 来存储 gclid。

通过代码管理系统实现转化跟踪

大多数代码管理系统都针对 AdWords 转化跟踪或再营销提供了内置的代码模板。您应该尽可能使用这些代码模板,而不是通过注入自定义 JavaScript 代码来部署 gtag.js,因为代码模板通常已经由您的代码管理系统提供商进行了测试,可确保功能正常运行。

请注意,某些代码管理系统针对 AdWords 转化跟踪和再营销提供了 JavaScript 代码模板或纯图片代码模板。如果是这种情况,则应使用 JavaScript 版本的 AdWords 代码模板。

如果您使用的是 Google 跟踪代码管理器以外的代码管理工具,我们建议您使用以下两种设置方案之一。

如果您通过代码管理工具部署了 Google Analytics(分析)代码,则可将 Google Analytics(分析)媒体资源与 AdWords 关联起来,以此方式启用 gclid 收集。在这种情况下,如果提供了内置的 AdWords 转化跟踪代码模板,则只应将其部署在转化页上。

如果您的代码管理工具没有用于 AdWords 转化跟踪的模板,那么您可以部署网页级 gtag.js 版本,但只能在转化页上部署,具体如下所示:

<script async src="https://www.googletagmanager.com/gtag/js?id=AW-1234567891072716560"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
</script>
<script>
  gtag('event', 'conversion', {
    'send_to': 'AW-123456789/AbC-D_efG-h12_34-567',
    'value': 345.89,
    'currency': 'USD',
    'transaction_id': '12345',
});
</script>

通过您的代码管理系统实现 gtag.js 全局网站代码

如果您尚未部署 Google Analytics(分析)代码,则应通过代码管理系统在网站的每个页面上部署 gtag.js 全局网站代码,并在转化页上部署事件代码段。

请注意,这可能需要进行复杂的技术工作,才能避免会导致代码故障的某些常见错误。尤其应注意的是,需确保代码管理工具在注入全局网站代码后再注入事件代码,因为只有在浏览器将 gtag.js 加载到内存中以后,事件代码才能正确执行。

还应该确保代码管理系统直接在页面的 DOM 而不是嵌入式 iframe 中注入代码。

为多个 AdWords 帐号衡量转化

请务必注意,对于启用了 ITP 的 Safari 11 的用户,即使用户点击了属于不同 AdWords 帐号的多个广告系列,gtag.js 也会将转化归因于转化前发生的最近一次点击。这是因为新的广告点击会覆盖此前可能已设置的任何 gclid Cookie。当用户完成转化时,gtag.js 会读取最近一次广告点击设置的 gclid 值,并且无法访问以前的 gclid 值。

如果您使用多个 AdWords 帐号将流量吸引到植入了 gtag.js 代码的网站,并且想要分别衡量每个帐号的转化情况,则需要自定义 gtag.js 以及您的广告目标网址,以便为每个 AdWords 帐号分别使用不同的 Cookie 来存储 gclid。

举个例子,假设您想要为三个 AdWords 帐号跟踪转化:

  • AdWords 帐号 A,转化 ID 为 GOOGLE_CONVERSION_ID_1
  • AdWords 帐号 B,转化 ID 为 GOOGLE_CONVERSION_ID_2
  • AdWords 帐号 C,转化 ID 为 GOOGLE_CONVERSION_ID_3

为此,您需要能够区分 A 的广告系列所吸引的用户与 B 的广告系列所吸引的用户。在广告的最终到达网址后面附加一个参数或哈希代码段,即可做到这一点。

  • 对于 A 的广告系列:www.mywebsite.com/my/landing/page.html#aw=A
  • 对于 B 的广告系列:www.mywebsite.com/my/landing/page.html#aw=B
  • 对于 C 的广告系列:www.mywebsite.com/my/landing/page.html#aw=C

接下来,对 gtag.js 全局网站代码进行配置,使其根据使用着陆页网址的条件逻辑来使用不同的 Cookie 名称。

<script>
   var aw_prefix = location.href.indexOf('aw=A') > -1 ? 'A' :
       'location.href.indexOf('aw=B') > -1 ? 'B' : 'C';
</script>
<!-- Global Site Tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-GOOGLE_CONVERSION_ID_1"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'AW-GOOGLE_CONVERSION_ID_1', {conversion_cookie_prefix: aw_prefix});
  gtag('config', 'AW-GOOGLE_CONVERSION_ID_2', {conversion_cookie_prefix: aw_prefix});
  gtag('config', 'AW-GOOGLE_CONVERSION_ID_3', {conversion_cookie_prefix: aw_prefix});
</script>

上述代码会将来自 A 的广告系列的 gclid 值存储在名为 A_aw 的 Cookie 中,将来自 B 的广告系列的值存储在 B_aw 中,将来自 C 的广告系列的值存储在 C_aw 中,gtag.js 会自动将 _aw 后缀添加到您提供的自定义 Cookie 名称中。请注意,我们可以在着陆页上的全局网站代码中为 ABC 的 config 命令使用相同的 Cookie 名称,因为在这些网页上,全局网站代码仅用于写入 gclid Cookie 值。

转化页是读取 gclid Cookie 的位置;仅对于这些页面来说,我们才需要让 gtag.js 在触发属于 ABC 的转化操作时,分别使用不同的 Cookie。为此,请按如下所示配置全局网站代码:

<!-- Global Site Tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-GOOGLE_CONVERSION_ID_1"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'AW-GOOGLE_CONVERSION_ID_1', {conversion_cookie_prefix: 'A'});
  gtag('config', 'AW-GOOGLE_CONVERSION_ID_2', {conversion_cookie_prefix: 'B'});
  gtag('config', 'AW-GOOGLE_CONVERSION_ID_3', {conversion_cookie_prefix: 'C'});
</script>

如果应将同一用户操作同时统计为 AB 的转化,请调用事件代码段,并将两个转化操作标识符都传递过去,如下所示:

gtag('event', 'conversion', {
  'send_to': [
    'AW-GOOGLE_CONVERSION_ID_1/CONVERSION_LABEL_1',
    'AW-GOOGLE_CONVERSION_ID_2/CONVERSION_LABEL_2',
    'AW-GOOGLE_CONVERSION_ID_3/CONVERSION_LABEL_3',
  ]
});

验证转化跟踪实现情况

首先,您应验证是否已正确设置全局网站代码,以便从网站的任何着陆页捕获 gclid 并将其存储在 Cookie 中。

为此,请提取您网站的任一网址,在其后面附加一个采用任意测试值的 gclid 参数。例如 www.mywebsite.com/home.HTML?gclid=12345

然后,打开 Chrome 开发者工具并点击“Application”标签,然后点击 Cookie,查找名为 _gcl_aw 的 Cookie。

如果可以找到 _gcl_aw cookie,则表示全局网站代码设置正确,可用于跟踪 AdWords 的转化情况。

接下来,您应手动完成一次测试转化,触发转化事件代码段。当您到达转化页时,可使用 Tag Assistant 验证是否正确触发转化事件。

在转化事件代码段执行时,您应该会看到浏览器触发的 3 个 http 请求,它们分别发往:

  • https://www.googleadservices.com/pagead/conversion
  • https://googleads.g.doubleclick.net/pagead/viewthroughconversion
  • https://www.google.com/ads/conversion

要验证转化事件代码段是否能够读取包含 gclid 的第一方 Cookie,请检查向 googleadservices.com 发出的请求的网址。假设您已经确认存在上述 _gcl_aw Cookie,那么向 googleadservices.com 发出的请求中应包含一个名为 gclaw 的查询字符串参数,其值应与 _gcl_aw Cookie 中存储的 gclid 值一致。

有关问题排查方面的其他提示,请查阅这篇文章

动态再营销

动态再营销可以通过 gtag.js 实现。全局网站代码会收集触发该代码的每一个网址,供您创建基于网址的受众群体列表,从这个意义上讲,它提供了标准的再营销跟踪功能。

此外,事件代码段还可帮助您捕获您网站上发生的有价值事件以及相关数据。

通过使用动态再营销,您可以根据用户以前访问期间互动过的产品或服务,自动定制向他们展示的广告。

要实现动态再营销,您必须先访问 AdWords 的“受众群体管理器”部分,然后配置您的 AdWords 数据源,并指明适用于您网站的相关业务类型。

根据您选择的业务类型,您需要通过事件代码段将特定数据传递给 gtag.js 代码。

有关每种业务类型应使用的事件数据参数的详细列表,请参阅参数参考部分

例如,假设您要为零售业务类型设置动态再营销。在针对零售行业进行设置时,应该实现如下 3 个事件数据参数:ecomm_prodid(必需参数)、ecomm_pagetype(可选参数)、ecomm_totalvalue(可选参数)。

当您的网站上发生有价值的互动时,您应该调用 event 命令发送关联的零售事件数据,如下例所示。

<script>
  gtag('event', 'add_to_cart', {
    'ecomm_prodid': ['12345', '45678'],
    'ecomm_totalvalue': 345.89,
    'ecomm_pagetype': 'cart'
});
</script>

此处显示的所有值仅作说明之用,它们应该是在运行时动态传递给事件代码段的,具体传递的是用户购物车中实际商品所对应的值。

事件的名称(如上例中的“add_to_cart”)既可以使用您选择的自定义事件名称,也可以使用我们推荐的任一标准事件

事件名称不需要单纯为了实现动态再营销而与任何特定值一致,只要事件的数据参数(在本例中是 ecomm_pagetypeecomm_prodidecomm_totalvalue)设置正确就行。