使用事件跟踪链接 - 竞争条件

Track Links Using Events - Race Conditions

我正在构建 AngularJS 个应用程序,每个应用程序都具有 header 和 links:

<a href="https://app1.company.com">App1</a>
<a href="https://app2.company.com">App2</a>

每个应用程序 运行 在其自己的子域上,当用户单击 header 上的 link - 页面重定向到该应用程序。

我必须使用 link 来跟踪用户操作,例如onClick 个 Omniture 事件(但问题也适用于 Google Analytics)。当我添加一个 onClick 事件调用函数将事件发送到 Omniture 时,例如:

<a href="https://app1.company.com" ng-click="trackLink('header-app1')">App1</a>

trackLink()是AngularJS服务的一个函数,简单实现:

trackLink: function (eVar8Code) {

    s = this.getSVariable(s);

    s.eVar8 = eVar8Code;
    s.prop28 = s.eVar8;

    this.sendOmnitureMessage(s, send, false);

    return s;
  },

该函数异步执行,returns 立即执行。然后标准 link 的行为开始:页面被重定向到 "href" 属性中定义的 URL。新页面加载速度非常快(大约 70 毫秒),但 AJAX 对 Omniture 的请求尚未执行:全是异步的。

我认为对 link 使用事件是不正确的方法,应该使用查询参数,例如:

<a href="https://app1.company.com?iLink=header-app1">App1</a>

但很难说服一些人。

在 link 上跟踪事件的最佳做法是什么?

更改您的函数以包含一个短超时(可能您会让它 return false 以抑制默认 link 行为,并通过位置对象重定向)。

Google Analytics 具有在发送对 Google 的调用后执行的命中回调,您可能想查看 Adob​​e Analytics 是否有类似的东西(因为这可用于在已拨打跟踪电话)。

事件跟踪和查询参数是否可以互换取决于您的用例(它们当然测量不同的东西)。然而,事件跟踪是一种广为接受的 link 跟踪方式。

正如@Eike Pierstorff 所建议的那样 - 我使用 Adob​​e Analytics native library 的功能来设置延迟(200 毫秒),这使调用 Adob​​e Analytics 的成功机会大大增加:

在HTML中:

<a href="https://app1.company.com" data-omniture-link data-track-code="header-nav-deliveries-returns">App1</a>

在 AngularJS 服务中:

  sendOmnitureMessageWithDelay: function (s, element, eVar8Code) {
    var s = s_gi(s_account); // jshint ignore:line

    s.useForcedLinkTracking = true;
    s.forcedLinkTrackingTimeout = 200; // Max number of milliseconds to wait for tracking to finish
    s.linkTrackVars = 'eVar8,prop28';
    s.eVar8 = eVar8Code;
    s.prop28 = eVar8Code;

    var target = element;

    if (!target) {
      target = true;
    }

    s.tl(target, 'o', s.eVar8, null, 'navigate');

    this.cleanOmnitureVars();
  }

这里,元素 - 是 HTML 元素约。

它在 99% 的情况下运行良好,但在调用 Adob​​e 之前加载页面的缓慢和旧设备上存在问题。看来这个问题没有好的解决方案,也不能保证事件总是会记录在 Adob​​e Analytics(或 Google Analytics)中。