登录

我们的JavaScript可以用来引导入口和页面访客,无需使用重定向链接。然而,这两种方法可以而且应该结合使用。

换句话说,最好在所有页面上都使用我们的JS,无论是什么情况。

这是因为JS不仅跟踪页面访问,还有几个辅助函数可以提高跟踪的可靠性。

我们的JavaScript详情已经在这里有文档说明,解释了如何从JS获取数据以及辅助函数的使用。

不过,我会在下面给出一个技术总结。


JavaScript视图跟踪

我们的JS会处理嵌入的属性和URL参数(如果存在,则优先考虑),并将数据负载POST到我们的边缘(通过用户的自定义域名):

https://USER_DOMAIN/js/funnel

如果跟踪成功,我们的边缘将响应一个标准负载,包括访客ID(VID)、当前节点ID和点击ID,例如

{
    "error": "",
    "resolvedTokens": {
        "{hit}": "1wj7y5680dz26p1g9p0101",
        "{visitor}": "afdwb7QPV6Y59aTP3fQxZ3tX2ox",
        "{current-node-id}": "0XJbzUwQYEWa"
    },
    "skv": "vid"
}

访客ID是用户的会话级标识符。这些会话对象存储在与我们的边缘一起部署在多个数据中心的集中缓存中。

VID中编码了边缘位置,这样如果用户有VID值并改变位置(例如使用VPN),我们的边缘可以检查正确的缓存数据库以获取会话对象。

点击ID是当前页面视图的唯一ID。一个访客在接触的每个节点都会生成一个唯一的点击ID。

当前节点ID是不言而喻的。


嵌入属性和选项

要修改FunnelFlux JS的行为和返回的令牌,请参阅我们JS部分这里的相应文档。


辅助函数

这些在这里有详细说明。

这就是为什么在所有页面上都有我们的JS很重要。

首先,JS会自动在页面上添加一个meta referrer标签,这会覆盖浏览器的默认行为,并将完整的referrer传递给后续链接。

这使得之前的urlRewrite变得有用,否则默认传递的referrer(至少在Chrome中)只有主机名

其次,页面上的<a>元素会被扫描是否包含*action/*,如果找到,我们的JS会附加:

...vid=VISITOR_ID&rn=CURRENT_NODE_ID

这种在action链接中的明确声明消除了在后续点击中对referrer/cookies的依赖,因为用户的会话标识符和引用节点ID都被声明了。

注意这里urlRewrite函数向URL添加n=CURRENT_NODE_ID,而action链接则将当前节点ID作为"rn"或"referring node"参数添加。

这很重要,因为我们的其他功能:如果向任何<a>元素添加data-lum="action"属性,我们也会附加上述数据。

当在没有action(重定向)链接的页面之间直接链接,但用户仍想确保可靠跟踪时,这很有用。这种例子可以在funnelflux.com主页上看到。注意源代码以及指向云选项的链接如何更新以包含这些URL参数。

在这种情况下,传递n=CURRENT_NODE_ID会加载下一个页面,JS会加载,URL参数会尝试用前一个节点的ID覆盖当前页面的节点ID,造成问题。这就是为什么在action链接中总是使用"rn"来引用原始节点。