如何为Google Tag Manager代码正确配置IP匿名化?解决gtag调用报错
问题
在Google Tag Manager中获取到页面嵌入代码如下:
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-ADSAFASDF');</script>
我想添加IP匿名化的代码,参考到的代码是:
gtag('config', '<GA_TRACKING_ID>', { 'anonymize_ip': true });
尝试把这段代码放在GTM代码的</script>标签前,或者单独用<script>标签放在GTM代码之后,用Chrome的Tag Assistant检测时出现报错:
Invalid call to gtag(), the Global site snippet is not installed
请问该如何正确插入这段代码,应该放在哪里?
正确的实现方式
你遇到这个报错的核心原因是:GTM的嵌入代码和gtag.js是两种独立的Google Analytics部署方式,直接在GTM代码外调用gtag()函数,页面里并没有加载gtag.js的基础脚本,自然会报错。
下面给你两种可行的解决方案,优先推荐第一种(更符合GTM的使用逻辑):
方案1:在Google Tag Manager容器内配置IP匿名化
这是最规范的做法,完全不需要修改页面上的GTM嵌入代码:
- 登录你的GTM后台,找到对应的容器
- 找到你已经创建的Google Analytics(GA)标签(如果还没创建,先新建一个GA标签)
- 在标签的配置界面里,找到更多设置 -> 字段设置
- 添加一个新字段:
- 字段名称填:
anonymizeIp - 字段值填:
true
- 字段名称填:
- 保存标签并发布容器版本,这样所有通过GTM发送的GA请求都会自动带上IP匿名化的参数
方案2:同时加载gtag.js和GTM代码(不推荐)
如果你一定要用gtag()的方式实现,需要先加载gtag的基础脚本,再调用配置代码,最后加载GTM代码(注意顺序):
<!-- 先加载gtag基础脚本 --> <script async src="https://www.googletagmanager.com/gtag/js?id=<GA_TRACKING_ID>"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); <!-- 在这里添加IP匿名化配置 --> gtag('config', '<GA_TRACKING_ID>', { 'anonymize_ip': true }); </script> <!-- 再加载GTM的嵌入代码 --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-ADSAFASDF');</script>
但这种方式会同时加载gtag.js和GTM的脚本,可能造成冗余,而且不符合GTM集中管理所有标签的设计初衷,所以不建议这么做。
内容的提问来源于stack exchange,提问作者Ivan Topić
相关产品推荐
相关产品推荐

