目前在神策的 JavaScript SDK 中使用了两种统计来源的方式。
1. 通过在 URL 中自定义参数,来标志这个页面的来源,在 JavaScript SDK 中叫做 广告系列来源
2. 通过取浏览器内置的 document.referrer 来取打开这个页面的上一个页面,在 JavaScript SDK 中叫做 前向地址

一 广告系列来源( $utm_source 等)

广告系列来源默认使用 utm 相关的几个参数( utm_source , utm_term 等)来标志,可以使用 神策的广告系列来源生成工具来生成链接
如果你想自定义参数,可以参考 JavaScript SDK 文档,使用 source_channel 来增加自定义的参数。

1. $utm_source (首次广告系列来源)

这是一个用户属性,仅在这个用户第一次访问这个网站时才会记录,这个属性可以在神策分析的用户属性中查看。
举例: 用户用浏览器,首次打开嵌入了 JavaScript SDK 的网站。这时候,这个用户的用户属性中就会有一个 $utm_source 的属性。且只有这第一次会发送,以后不会改变。

2. $utm_source (当前页面的广告系列来源)

这是一个事件属性,且仅在开启了 sa.quick('autoTrack') 后,才会在预置的 $pageview 事件中出现。 这个属性的含义,是指当前页面的 URL 中,是否有 utm_source 相关参数。只要有,就会保存。
举例: 用户打开 A 网址( URL 中 带有 utm_source 参数),则这个时候的 $pageview 属性中会有 utm_source 的属性。反之,如果 A 网址(URL中 不带有 utm_source 参数),则这个时候的 $pageview 属性中不会有 utm_source 的属性。

3. $latest_utm_source (最近一次广告系列来源)

这是一个事件属性,且不需要做任何配置,会在所有事件中都存在。这个属性会保存最近一次有效的 utm_source 。

举例:下面列举用户打开了某网站的几个页面的4种流程分析

3.1 A 页面( url 有 utm_source ) -> B 页面( url 有 utm_source )

A ( $latest_utm_source 值是 A 的 url 中的 utm_source)
B ( $latest_utm_source 值是 B 的 url 中的 utm_source)

3.2 A 页面( url 有 utm_source ) -> B页面( url 没有 utm_source )

A ( $latest_utm_source 值是 A 的 url 中的 utm_source )
B ( $latest_utm_source 值是 A 的 url 中的 utm_source )

3.3 A 页面( url 有 utm_source ) -> B 页面( url 没有 utm_source ) -> C 页面( url 有 utm_source ) -> D 页面( url 没有utm_source )

A ( $latest_utm_source 值是 A 的 url 中的 utm_source )
B ( $latest_utm_source 值是 A 的 url 中的 utm_source )
C ( $latest_utm_source 值是 C 的 url 中的 utm_source )
D ( $latest_utm_source 值是 C 的 url 中的 utm_source )

3.4 A 页面( url 没有 utm_source ) -> B 页面( url 没有utm_source ) -> C 页面( url 有 utm_source ) -> D 页面( url 有 utm_source )

A (没有 latest_utm_source )
B (没有 latest_utm_source)
C ( $latest_utm_source 值是 C 的 url 中的 utm_source )
D ( $latest_utm_source 值是 D 的 url 中的 utm_source )

以上这几个 latest_utm_source 的值是保存在 cookie 中的,关闭浏览器,再打开,还是会存在。

二 前向地址( $referrer )

1. $first_referrer (首次前向地址)

这是一个用户属性,仅在这个用户第一次访问这个网站时才会记录,这个属性可以在神策分析的用户属性中查看。 举例: 用户用浏览器,首次打开嵌入了 JS SDK 的网站。这时候,这个用户的用户属性中就会有一个 $first_referrer 的属性。且只有这第一次会发送,以后不会改变。

2. $referrer (当前页面的前向地址)

这是一个事件属性,且仅在开启了 sa.quick('autoTrack') 后,才会在预置的 $pageview 事件中出现。
如果是直接输入的网址,没有跳转,那这里 $referrer 的值是空。
举例:下面列举用户打开了某网站的几个页面的 4 种流程分析

2.1 A 页面(直接打开) -> B 页面(从 A 跳转过来)

A 页面的 $pageview 中 ( $referrer 值为空)
B 页面的 $pageview 中 ( $referrer 值是 A 页面的网址)

2.2 A 页面(直接打开) -> B 页面(直接打开)

A 页面的 $pageview 中 ( $referrer 值为空)
B 页面的 $pageview 中 ( $referrer 值为空)

3. $latest_referrer (最近一次站外前向地址)

这是一个事件属性,且不需要做任何配置,会在所有事件中都存在。这个属性会保存最近一次 非站内跳转 的 referrer 。
这个属性主要是为了解决站内之间互相跳转,取 referrer 并不能看出是从站外什么地方跳转过来而设置的。如果想看站内间的 referrer 可以使用上面第 2 种里的 $pageview 事件中 $referrer。
举例:下面列举用户打开了同一个网站的的 A , B , C , D 4 个页面的3种流程分析

3.1 A 页面(从百度跳转过来) -> B 页面(从 A 跳转)

A ( $latest_referrer 值是 百度)
B ( $latest_referrer 值是 百度)

3.2 A 页面(直接打开) -> B 页面(从 A 跳转) -> C 页面(从 B 跳转) -> D 页面(从 B 跳转)

A ( $latest_referrer 值是 空)
B ( $latest_referrer 值是 空)
C ( $latest_referrer 值是 空)
D ( $latest_referrer 值是 空)

3.3 A 页面(从百度跳转) -> B 页面(从 A 跳转) -> C 页面(直接打开) -> D 页面(从 C 跳转)

A ( $latest_referrer 值是 百度)
B ( $latest_referrer 值是 百度)
C ( $latest_referrer 值是 空)
D ( $latest_referrer 值是 空)

注意这里,直接打开页面,$referrer 值为空在这里也算是站外,也会保存。
因为有些 URL 会长而乱,不方便做分析。所以 JavaScript SDK 中以上3个属性,都会再各包含一个 前向域名 的属性。