翻自Simo 大神的 100+ Google Tag Manager Learnings

GTM’s data model

22. Data Model 调用数据方式

在使用 DataLayer 变量时,Data model 不会直接从 Datalayer 队列中读取对应的值,而是查询 GTM 中有没有已知调用过的变量,如果找到了,GTM 返回对应的变量值。所以说,GTM data model 有权限访问所有最近被调用过的变量。

23.当触发器出发之后,GTM 变量冻结

当对应的触发条件生效,GTM 冻结当前 container 的状态,所有被触发的代码只能调用当前被状态下的变量值。所以,如果你想让 push 进来的变量可以被当前的代码使用,变量 push 操作必须在触发器触发之前。

24. 对象的合并方法是 recursively merge

对于单个变量的传递,新的变量值会覆盖原始的值,针对结构化对象和数组而言,采用 recursively merged 方法,原始存在的键会被覆写,新的键值对会直接加入数组或者对象中。例子:

对象

25. 数组的合并方法是 recursively merge

数组在 DataLayer 的更新方式跟对象一样,数组从 0 开始,更新对应的位置,其他保持不变。示例:

数组

26. 将已有的 DataLayer 的值用到 js 方法中

如图:

队列

当需要被 push 的内容包含已经的值时,直接调用已有的值加上新增加的数据即可。

27. DataLayer Version 1 和 2 的区别

Version 2 支持带点符号的深层结构,如果你想访问数组或者对象中的某一个值,可以使用 Version 2,例如:products.0.name。只有 Version 2 支持 recursive merge。

Version 2 不知道点符号,只支持最近 push 的数值。

28. google_tag_manager[‘GTM-XXXX’].dataLayer 方法

1
google_tag_manager['GTM-XXXX'].dataLayer.get('keyName')

通过 keyname 来访问 DataLayer 的值;

1
google_tag_manager['GTM-XXXX'].dataLayer.set('keyName', 'someValue')

这个跟

1
dataLayer.push({keyName: 'someValue'});

这个方法的作用一样。

1
google_tag_manager['GTM-XXXX'].dataLayer.reset()

清除 GTM 找那个所有存储的内容。

Preview mode

29. 预览模式是通过 Cookie 作用的

在 GTM 中开启预览模式,就可以做 publish 前的调试了。GTM 会设置一个 cookie,当浏览器识别到对应的网站的 GTM 开启预览模式之后,就会打开 Debug 窗口。

预览模式

30. 预览模式的功能

开启预览模式之后,可以查看 tags, variables 和 triggers 的状态。遵从所见即所得的原理。

预览模式2

31. Summary 展示最新状态

Summary 展示当前状态的情况,所以你在不同时刻,不同页面选择同一个 tag 去看 summary 信息时会不一样。

32. Variable 会被解析多次

当你使用未定义过得 Variable 时会报错,因为没给 Tag 中包含未定义变量的话,在打开预览模式的时候会有警告。Variable 无法被解析。

33. 预览模式可以最小化

如题,预览模式可以最小化,点击右上角的下三角就好。

34. 退出预览模式

  • GTM UI 中直接点击退出,就可以退出预览模式
  • 在 Browser 中删除所有的 Cookie

预览模式3

35. 退出共享的预览模式

退出共享模式的预览模式需要通过共享链接点进去再退出。

36. 预览模式打不开

一般点击 “Preview” 之后,访问对应的网站就可以打开预览模式了,如果预览模式没打开,可是是以下原因:

  • CSS Conflict(命名冲突)
  • Debug 窗口透明

如果遇到这样的问题,点击右上角的 “Send feedback” 报告问题。

37. 不打开 debug 窗口的情况下进入预览模式

在 GTM UI 中点击 “Share Preview link”,然后不要勾选 “Turn on debuging when previewing”,然后通过链接进入预览模式。

38. 每次修改都需要刷新预览模式

在你在预览模式下做调试时,会做一些修改,修改之后的结果需要刷新才会生效。

Universal Analytics

39. GTM 为每个 tag 都创建 tracker

跟 analytics.js 不同,只要有新代码触发,GTM 就会为他创建一个新的唯一的 Tracker, 即使他们使用同样的模板。

“Basically each tag is its own sandbox, and settings are not shared from tag to tag.”

40. 设置不在 tag 之间分享

因为每条代码都是使用 unique tracker,所以设置不分享。

41. 设置 tracker name

Tracker name 可以绑定两个代码,实现设置分享的功能,但是不建议使用。还是乖乖点开每条代码单独做设置比较好,不容易出问题。

42. Use Fields to Set for setting any analytics.js fields

使用 Field 来设置 GA 变量。

43. 加号表示可以添加变量

如图:

variable-icon