如何指定Google Optimize使用的数据层?安装问题求助
当然可以指定Google Optimize使用的数据层!你的问题根源在于Google Optimize对数据层的默认要求——它需要一个数组类型的数据层来正常工作,而你页面里第一个dataLayer是对象类型,导致Optimize无法初始化,所以Tag Assistant里看不到它的标签。
问题原因拆解
Google Optimize默认会查找全局范围内第一个名为dataLayer的变量,并且要求它是数组(因为Optimize依赖数据层的push方法来传递实验信息)。当它遇到非数组的dataLayer时,会初始化失败,进而无法加载Optimize标签。而当你把第一个dataLayer改成数组后,Optimize能正常识别并使用它,所以两个标签都能加载。
解决方案:手动指定数据层
你不需要修改现有数据层的结构,只需要在加载Google Optimize之前,通过全局变量google_optimize_data_layer明确指定要使用的数组型数据层即可。
修改你的代码如下:
<head> <script type="text/javascript"> var dataLayer = {} </script> <script type="text/javascript"> var googleAnalyticsDataLayer = [] </script> <!-- 新增:指定Google Optimize使用的数据层 --> <script type="text/javascript"> window.google_optimize_data_layer = googleAnalyticsDataLayer; </script> <script> (function (i, s, o, g, r, a, m) { i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () { (i[r].q = i[r].q || []).push(arguments) }, i[r].l = 1 * new Date(); a = s.createElement(o), m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m) })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga'); ga('create', 'UA-XXX', 'auto'); ga('require', 'GTM-XXX'); ga('send', 'pageview'); </script> </head>
原理说明
google_optimize_data_layer是Google Optimize提供的全局配置变量,当这个变量存在时,Optimize会优先使用它指向的数据层,而不是默认查找dataLayer。这样你的第一个对象型dataLayer可以保留,Optimize会使用你指定的googleAnalyticsDataLayer数组来完成初始化和数据传递。
修改后再用Tag Assistant检查,应该就能同时看到GA和Google Optimize标签正常加载了。
内容的提问来源于stack exchange,提问作者Predrag Pjanovic

