UV统计

众所周知,网站访问统计区分很多维度,包括:PV(Page Views)、UV(Unique Visitors)、IP、跳出率、转化率、访问时长、访问深度、访问来源、搜索词、访客属性(地域、年龄、性别等)、终端属性(浏览器、操作系统、分辨率等)、回头客占比等等。其中,有些统计维度直接根据日志便可实现,比如:PV、IP、访问来源等,有些统计维度是基于PV衍生而来,比如UV、跳出率、访问深度、访问来源等;还有一些统计维度需要调用第三方接口实现,比如搜索词、访客地域、网络类型等;而其他一些统计维度的数据来源于访客跟踪和大数据分析,比如回头客占比、访客属性、是否爬虫等。

本文来谈谈UV的统计实现,后续文章再分别讨论访问来源、终端属性等维度的统计实现。

什么是UV?

UV(Unique Visitors)是指访问某个网站或应用的独立访客数量。所谓“独立访客”,是指不随时间、访问频次、IP等变化而变化的对访客的一种标识,目前的通用实现上,其一般和终端关联。

什么意思?举个例子,某用户某天访问了网站2次,分别访问了2个、3个页面,第二天用同样的终端(浏览器)再次访问了该网站1次共4个页面,但此时该用户的IP发生了变化(家用宽带一般上都是动态IP,在租约到期后便可能会分配到新的不同的IP),那么这两天中,PV、IP、UV的累计值分别是9、2、1。

即,每访问一次页面,PV加1,IP随用户网络变化而变化,而UV,仅在有新用户来访时才加1。不过,有个细节,在使用不同终端(浏览器)访问时,UV同样会加1,也即将其作为新访客对待;且,既然是人为的一种跟踪标识,必然需要将其存储在用户终端中,一旦用户手动清除数据,或者数据到期,那么将以一个新的访客身份进行标识,即将其标识为新访客。

可以看到,无论是PV、IP,还是UV,都并不完美,都无法精确地描述访客的真实情况。实际上,对于某些系统(网站或应用),如果需要用户登录才能继续访问,那么还有一个维度可以更为准确地描述访客的信息,这个维度便是用户的注册信息(比如user ID),其不随时间、IP、终端等变化而变化。互联网领域所谓的日活、月活便可通过用户信息进行统计。

UV统计原理

有了以上定义,便不难分析出UV统计的原理和实现过程。

用户首次访问时,根据某种规则生成一个标识符,并将其存储在用户终端中(通常是cookie),后续访问时,在请求中携带该标识符,将其和日志一同持久化到数据库中。

UV统计实现

生成标识符

根据ChatGPT的回答,UV标识符一般应满足以下几个特点:

  1. 唯一性: 生成的标识符应该在整个系统中是唯一的,以确保每个用户都有一个独一无二的标识。
  2. 固定长度: 标识符的长度可以是固定的,这有助于简化处理逻辑和提高效率。
  3. 可读性: 在某些情况下,可读性可能是一个考虑因素,尽管可读性通常与唯一性和长度有一定的冲突。
  4. 安全性: 对于一些敏感信息,可能需要考虑安全性问题,例如使用加密算法或散列函数生成标识符。

考虑到Google Analytics的标识符特点,还应当具备可重现性。由此,可以确定一个通用的UV标识符生成算法: