FunnelFlux有三个主要的导航相关操作:
- 入口链接加载:
/fts/
- 动作链接加载:
/action/x
- JavaScript页面浏览跟踪:POST到
/js/funnel
入口链接非常严格,包含所有必要的数据以路由到目的地(因为您会在我们的UI中生成它们),如果它们有效,它们将精确地去到指定位置,忽略任何其他上下文历史,因为入口链接是独立的、新的漏斗入口。
在后两种情况下,FunnelFlux Pro边缘使用可用信息来确定用户所在的节点/页面,在动作的情况下,确定要沿哪个连接前进。
如果配置不正确,这些可能容易出现问题,因此本节将总结JavaScript和动作链接如何确定当前页面,以及相应的起始页面/节点。
动作链接逻辑
动作链接将始终执行它们认为访客所在节点延伸出的编号动作。
在测试漏斗并导航时,考虑漏斗图表以及每个动作如何使您从一个节点移动到下一个节点是很有用的,要记住您所在的节点(即跟踪器知道您所在的位置)。
考虑这样一种情况:您转到一个页面 > 点击一个动作链接 > 它在新标签页中打开。您返回到原始标签页并再次点击链接。您现在正在从当前已知节点位置之前的上一个节点发起动作。
考虑第二种情况,但动作链接不在新标签页中打开。然后您点击浏览器的后退按钮,加载上一个页面。如果此页面上没有视图跟踪JS,跟踪器不知道您已返回到该页面。如果您现在点击动作链接,您再次从上一个节点发起动作。
在这两种情况下,跟踪器需要某种机制来确定这些重复点击,通过确定点击的源节点。
处理引荐来源
在加载动作链接时,我们的边缘将检查引荐来源。
如果此引荐来源包含VID,边缘现在知道访客会话(无需cookies)。
如果此引荐来源包含完整的页面URL,跟踪器现在可以将该URL与漏斗中已知的节点/页面以及先前访问的页面进行匹配,以确定点击来自已访问过的页面(点击必须发生的必要事件)。
如果引荐来源在URL中包含n=NODE_ID
参数,跟踪器现在可以准确确定源节点,而无需依赖页面URL匹配。这更具体,因为同一页面可能在同一漏斗中多次使用(具有不同的节点ID),或者页面可能嵌入在iFrame中,其中父URL和因此引荐来源不代表加载的页面。
这就是为什么我们的JavaScript有两个辅助函数:
一个检查页面上的<meta name="referrer">
标签,如果存在,将其值更新为no-referrer-when-downgrade,如果不存在,则创建它。
第二个函数重写当前页面位置,在URL中包含访客ID和当前节点ID,使完整的引荐来源值对动作链接处理程序非常有信息。
鉴于此,应避免在链接上添加rel="noreferrer"属性。这是一件毫无意义的事情——向自己的跟踪系统隐藏信息!
托管在根域名上的页面的细微差别
当不传递完整引荐来源时,可能会出现一个有趣的细微差别。
考虑一个漏斗,其初始登陆页面A位于https://domain.com
(即根域名/主页),连接到URL为https://domain.com/some-page/
的第二个页面B
在浏览器中,用户将加载页面A并成功导航到页面B。
然而,在页面B上,如果不传递完整引荐来源,下一个动作点击可能会传递截断的引荐来源(仅主机名)。我们的边缘然后看到一个看似来自"domain.com"的点击。
独特的是,由于用户使用了他们的根域名作为页面,这个引荐来源是前一个登陆页面的已知URL/路径,因此跟踪器会根据给定的信息正确确定这实际上是来自页面A的重复点击。
这导致了一个重定向循环:页面A > 点击 > 页面B > 点击 > 页面B > 点击页面B
直接URL参数注入
我们的另一个JS辅助函数将检测页面上href包含/action
的<a>元素,然后注入:
...&vid=VISITOR_ID&rn=CURRENT_NODE_ID
如果发生这种情况,不会使用引荐来源信息,因为直接指定的URL参数优先。
有人可能会认为引荐来源和URL重写函数可能有用 - 但事实并非如此。
有许多情况下,用户可以向页面添加JS代码,但不使用简单的<a>元素重定向到下一页。他们可能有<a>元素,但直接链接到其他页面,他们无法在这些URL中注入参数。重定向到动作URL也可能由JavaScript管理,用户几乎没有输入或动态控制。
无论如何,"rn"参数明确指定给我们的边缘,点击来自相应访客的特定节点。这是保证可靠跟踪的最健壮方式。
在高级情况下,重定向到动作链接不涉及简单的<a>元素,而是JavaScript操作,我们建议在我们的视图跟踪JS中使用onDone()
函数。
您可以使用它获取当前节点ID和访客ID,然后将这些注入到控制重定向的任何函数中 > 手动将前面的URL参数附加到动作URL,提供相同的好处。
默认动作参数
这些可以在漏斗构建器中使用"获取动作链接"上下文菜单项时切换开启。
它们只在这里可用,因为它们必须特定于漏斗和节点。
这个切换只用于生成,它不会对漏斗/节点本身产生任何具体影响。
这些URL声明了默认的漏斗和节点ID,如下所示:
https://USER_DOMAIN/FUNNEL_ID/ORIGINATING_NODE_ID/action/number
重要的是要注意,这些值不是覆盖,它们只会用于未知VID值的动作链接请求,即新的或未知的访客。
因此,它们将在隐私窗口中工作,而没有上下文的通用/普遍动作链接则不会。
在99%的情况下,这些回退参数不会被使用 - 但有一些情况下它们是有用的,甚至是至关重要的:
- 当进行表单提交,在返回到在该第三方设置的重定向URL之前通过某个第三方重定向时。在这里,由于您无法控制的随机跳转,如果您使用通用动作链接,它可能会加载并且没有有用的引荐来源信息(只有来自随机第三方系统的信息)。边缘只能使用cookies来确定VID(不可靠!),因此默认参数对于至少让用户到达预期目的地很重要,即使他们的会话丢失并与原始漏斗入口断开连接。如果第三方可以接收并传递URL参数,那太好了!但在许多情况下,这是不可用的...
- 当将用户发送到某个页面,他们需要点击动作链接,但由于某种原因,无法控制页面代码来注入我们的JS,这将有助于引荐来源/数据传递
- 当用户可能从已知的、被跟踪的页面跳转到其他一些页面,然后返回到已知页面时 - 例如,通过某个网络研讨会流程,您可能会失去会话跟踪,但仍想跟踪一些最终动作/点击,并确保访客仍然重定向到预期目的地
换句话说,这些动作链接在所有那些令人恼火的情况下都很有帮助,在这些情况下,您无法控制使跟踪变得健壮,并且可以预期零可靠性的引荐来源/cookies/数据传递,但仍然希望人们在某个后期加载您控制的链接。
JavaScript页面浏览跟踪逻辑
通过我们的JS进行的页面浏览跟踪事件只有两个数据来源 - 当前URL(及其查询字符串)和嵌入的属性。
URL参数始终具有优先级。这样,页面可以嵌入带有选定默认ID的JS,但在我们的UI中生成的入口链接将始终按预期跟踪,通过覆盖这些值。
在直接链接的情况下,查询字符串URL参数覆盖JS默认值。
在重定向链接的情况下,结果页面加载时没有这些参数,但注入了vid=VISITOR_ID
值。
这个VID在JS POST请求中传递,因此返回用户正在导航到的已知节点ID,然后覆盖JS默认值。
以下是一些其他情况及其结果行为:
- 重定向链接加载页面,该页面有JS但没有嵌入默认值。这里URL中会存在VID并被使用,页面的URL将用于确定当前页面。这可能会匹配重定向去往的目的地,导致不生成额外的页面浏览(去重)
- 页面加载时没有URL参数,JS也没有设置嵌入参数。视图跟踪将失败,因为必须始终传递漏斗ID - 只有在存在VID以确定会话(其中包含当前漏斗ID)的情况下才能工作。
- 重定向链接加载一个包含JS的页面,其中嵌入的参数与当前会话/漏斗不匹配。在这种情况下,VID将是已知的并具有优先权,因此漏斗不会改变。重定向已经生成了预期页面的视图,JS视图事件将自动通过URL匹配进行跟踪。如果JS指定的页面ID与重定向提供的页面不匹配,如果声明的页面ID存在于当前漏斗中,它可能会导致单独的异常视图(否则会出错)
- 没有URL参数存在。使用嵌入参数,但指定的页面ID在当前漏斗中不存在。视图将无法跟踪。
- 没有URL参数存在。嵌入参数使用在声明的漏斗ID中不存在的节点ID。视图将无法跟踪。
- 没有URL参数存在。存在页面ID,但当前URL与该页面ID不匹配。边缘将尊重页面ID,忽略URL匹配。这允许iframe/嵌入按预期运行。