【问题标题】:Adobe Dynamic Tag Management (DTM) Page load rules not being captured未捕获 Adob​​e 动态标签管理 (DTM) 页面加载规则
【发布时间】:2015-05-06 21:41:03
【问题描述】:

当我在页面上存在 s_code(并且在 DTM 中选择了“s_code present”)时,我在尝试设置 DTM 时很快遇到了页面加载规则不起作用的问题。我已经与 Adob​​e 的支持人员联系了数周,但他们一直无法弄清楚(事件规则工作正常)。我设置了一个测试页面,基本上只有 s_code 和 DTM,没有其他内容

https://devpsstaging.phelpsagency.com/s_code_present-clean.html

如果您使用 Omnibug 和 DTM 调试器等工具进行检查,您会看到通过 DTM 触发了页面加载规则(“页面加载测试”),但它并未与实际图像请求一起发送。您还可以查看页面本身链接的调试信息:http://i.imgur.com/AlBvJK4.png

谁能帮忙弄清楚为什么会这样?页面加载规则当前设置为在页面顶部触发,但无论我将其设置为什么(顶部、底部、dom、onload - 页面加载规则触发但不包含在图像请求中),我都会得到相同的结果。

有人知道发生了什么吗?

【问题讨论】:

    标签: adobe-analytics


    【解决方案1】:

    页面代码已存在选项旁边是一个问号 (?) 图标。如果你点击它,你会得到一个弹出窗口,告诉你:

    阻止动态标签管理安装 Adob​​e Analytics 页面 如果代码已经存在于您的网站上,则代码。此功能允许 您可以使用动态标签管理添加到您现有的 实施而不是从头开始。一定要正确 选中此框时设置您的跟踪器变量名称。

    诚然,弹出式描述具有误导性。它给人的印象是它根本不构建一个新的s 对象,而是引用一个现有的对象。我发现事实并非如此。 Migrating to Dynamic Tag Management 文档条目对此更清楚一些,但我认为他们需要更明确地说明此选项的真正作用..

    基本上,该选项并不意味着允许代码与网站上的另一个现有实现并行运行 Adob​​e Analytics。它也不只是建立在已有的基础之上。

    它旨在让您开始迁移过程并保存您的工作,然后在您删除旧的页面实施后,取消选中该框以让 DTM 开始输出它。因此,在您取消选中它之前,它实际上不会构建任何东西等。 TBH,我真的不明白这个选项的意义,看看你如何在不批准或发布的情况下保存,但是.. ::shrug:: 不管。

    实际上,当您检查此内容时,我更担心您的 Adob​​e Analytics 代码是否适用于基于事件的规则。现在这是真正需要研究的错误。

    配置第二个实例

    如果您实际上是在尝试实现两个实例:

    您可能已经在上面的链接中注意到,Adobe 声称您仍然可以在您的页面上拥有第二个 Adob​​e Analytics(Omniture/SiteCatalyst)代码实例。它应该工作的方式是您指定不同的 对象名称(默认的 s 命名空间以外的名称。您也不会检查 Adobe Analytics 页面代码是否已存在 选项)。

    但是,我应该警告您这样做。基本上,这只会更改顶级对象命名空间。 Adobe Analytics 代码有很多位于全局命名空间中的底层函数和变量,它们没有任何公开的方式来更改它们。在我通过 DTM 测试实现时,它不会更改任何这些底层命名空间。

    问题是,我在野外观察到两个顶级命名空间之间的变量和值出现了一些“溢出”,并且我看到一个实例完全覆盖和/或破坏了另一个实例。这可能是由于多种因素造成的,例如库版本的差异或在适当的情况下拨打s.ts.tl;我真的不知道。但我已经看到了。反复地,跨越多个客户端的多个实现。因此,我根本不信任页面上的多个 Adob​​e Analytics 实例。

    【讨论】:

    • 感谢您的回答。我们发现,删除 s_code 并通过 DTM 提供服务会导致我们现在没有预算处理的无数错误。因此,我们正在考虑将 s_code 留在页面上并使用 DTM 添加规则的选项。但是您是说将 DTM 与页面上的 s_code 实现一起使用并不适用于生产环境吗?它只打算在过渡期间使用? “您仍然可以继续添加规则并扩展您的实现,而不必等待所有旧代码被删除” - 听起来事件应该可以工作吗?
    • @MaximusDecimusMeridius 是的,就像我说的那样,文档并不完全清楚。它真正的意思是你可以开始复制你当前的实现到你在 DTM 中的实现方式,甚至在此基础上构建,然后在你删除旧代码之后,你可以在 DTM 中翻转开关
    • 他们绝对让你听起来好像你可以在现有的基础上构建,但根本不是这样:(
    • 好的,刚刚与 Adob​​e 进行了交谈。他们基本上说 DTM 不打算与页面上的 s_code 实现一起使用。结果,页面加载事件将不起作用,但单击事件将起作用。因此,您可以使用 DTM 通过页面 s_code 设置事件规则,但如果您想使用页面加载规则,则必须先进行完整的转换。
    • 好吧,要么它适用于现有的页面代码,要么不适用。工具提示说它应该。文件有点左右摆动。实际上,如果您检查它,它不会弹出初始加载(和页面加载规则),但它会弹出事件吗?那没有意义。我认为这是一个错误。该错误是否适用于基于事件的规则,或者该错误是否适用于初始化/页面加载规则,IDK。不过我倾向于前者,因为 UA 工具具有类似的复选框,并且它不会触发事件规则(或初始化/页面加载规则)。
    【解决方案2】:

    这个问题有点老了。但是我搜索了很长时间的答案,然后与 Jan Exner 交谈,他找到了。它有点像脏,但可以工作:) 你可以在 s.doPlugins 中使用脚本作为插件。代码如下:

    s.mergeDTMShadowData = function(toolID, overwrite) {
        // overwrite defaults to true
        if (typeof overwrite === 'undefined' || overwrite === null) {
            overwrite = true;
        }
        // check if DTM is present
        if (typeof _satellite !== 'undefined') {
            var analyticsTool = _satellite.tool[toolID];
            // is the analytics tool enabled?
            var enabled = true;
            if (analyticsTool.settings.initTool !== undefined && analyticsTool.settings.initTool === false) {
                enabled = false;
            }
            if (enabled === false) {
                // copy events
                var eventArray = analyticsTool.events;
                if (eventArray && eventArray.length > 0) {
                    for (ev in eventArray) {
                        s.events = s.apl(s.events, eventArray[ev], ',', 1);
                    }
                }
                // copy props & eVars
                var varArray = analyticsTool.varBindings;
                if (varArray) {
                    for (variable in varArray) {
                        if (overwrite || typeof s[variable] === 'undefined' || s[variable] === null) {
                            s[variable] = varArray[variable];
                        }
                    }
                }
            }
        } else {
            console.log('DTM not found, bailing out...');
        }
    }
    

    转成插件直接在DTM中使用,完整的解决方案如下:

    s.mergeDTMShadowData=new Function("t","o",""
    +"if(typeof o==='undefined'||o===null){o=true;}if(typeof _satellite!="
    +"='undefined'){var a=_satellite.tool[t];var e=true;if(a.settings.ini"
    +"tTool!==undefined&&a.settings.initTool===false){e=false;}if(e===fal"
    +"se){var b=a.events;if(b&&b.length>0){for(c in b){s.events=s.apl(s.e"
    +"vents,b[c],',',1);}}var d=a.varBindings;if(d){for(f in d){if(o||typ"
    +"eof s[f]==='undefined'||s[f]===null){s[f]=d[f];}}}}}else{console.lo"
    +"g('DTM not found, bailing out...');}");
    
    s.doPlugins = (function() {
      return function() {
          s.mergeDTMShadowData("c7b417741f9f0d2435c6dd064ad9fc12",true);
    
          // now call the orignal
        var result = s_doPlugins.apply(this,arguments);
        return result;
      };
    }());
    

    将其放入页面加载规则的第三方/Javascript 部分,您就完成了。无需更改现有的遗留代码!没有任何!

    需要更多关于它是如何工作的信息,在博文中获取战利品: http://webanalyticsfordevelopers.com/2015/11/17/dtm-how-to-amend-an-existing-analytics-setup/

    我只是想把它写在这里,以便以后来这里的人找到它。

    【讨论】:

      【解决方案3】:

      补充一下 Crayon 所说的,如果您选择“页面代码存在”选项,Adobe Analytics 工具将不会运行。但是,此选项允许您通过 JS/第三方标签编辑器添加到现有页面代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-03
        相关资源
        最近更新 更多