干货:如何在前端统计用户访问来源?
用户来源是网站数据分析中一个重要的指标,然而想要准确的统计来源却并没有唯一的方法。下面我们针对获取来源的方式、来源的定义做一些具体的阐述;并且以 sensorsdata.cn 这个网站为例来做具体的来源分析。
1.前端获取来源的两种方式
1.1 通过给页面加自定义参数来标志
第一种方案,是通过给页面加自定义参数来标注用户的来源,我们暂且把这个来源叫做from
。
例如,我们将这个地址www.sensorsdata.cn?from=weibo
通过营销人员在微博中转发,然后我们网站通过解析参数from
就能取到来源weibo
。
对于这里的 from 这个自定义的参数,谷歌有个标准。一般来说可以用utm_source=weibo
这样来标记来源。其他的还有utm_medium utm_campaign utm_content utm_term
等等,可以自行搜索下。
1.2 通过referrer实现
第二种方案,是通过用户访问的referer
来定义用户的来源,我们暂且把这个来源叫做referrer
。
比如用户在 baidu 中搜 'sensorsdata',然后跳转到了 'www.sensorsdata.cn'。那我们通过document.referrer
能取到来源是'http://www.baidu.com/link?url=2fhHMI-7QopsGnGaJppRU8suX290yzANr3PNY8fupUy&wd=&eqid=bbd4f5c00001ec4a0000000356a83851'。
由于referer
的 URL 可能取值太多,那么更进一步,可以专门取一下 referer 的 host,用这个来做来源的标志。
1.3 两种来源的综合
如上面所描述的那样,我们会有两种来源方式,一个是我们做标记的来源 from,一个是固有的 referrer。我们既可以把这两个来源都统计,也可以先取自定义标签 from 再取 referrer(示例如下)。
if(自定义from){ 来源 = 自定义from
}else{来源 = document.referrer
//因为referrer取的过长,可以只取host如`baidu.com`来源 = 只截取referrer的host
}sa.track('user_from',{from:来源,detail:document.referrer})
2. 来源的3种定义
2.1. 用户首次打开页面的时候的首次来源
在这里,我们把用户首次打开页面的时候的首次来源叫initial_referrer
。 这里的 referrer 可以作为用户的固有属性,类似于姓名,也即是 Sensors Analytics 中的 profile 属性。
在 JS-SDK 中可以这么实现:
//在引入js-sdk后加入以下代码
sa.setOnceProfile({initial_referrer:document.referrer})
这个来源只会 set 一次,也就是一个浏览器端,只会有一个来源。
2.2 一个访问周期内的访问来源
一个访问周期,也即用户打开浏览器到关闭浏览器这个周期内的第一次来源,我们把他叫做session_referrer
。
正常情况下,我们可以设置一个不加时间的 cookie 来标志这个网站的session周期。然而我在测试了一些浏览器后,发现并不理想。mac下safari和firefox,直接按关闭按钮关闭浏览器,cookie还是存在的,但是点浏览器退出后,cookie是会清除掉的。而在mac下的chrome浏览器,设置cookie后,关闭浏览器,重新打开还是会存在。所以通过这个方式并不靠谱。
不过我们可以通过设置一个限时的cookie来实现,比如60分钟的session周期。这样所有浏览器都能实现。也就是用户打开页面,然后60分钟内的操作,这里的来源都认为是一个来源。60分钟后再打开页面,就认为是新的来源。
//页面打开后
if(cookie中取到startFrom){ 来源 = cookie中的来源
}else{来源 = 当前来源setCookie('startFrom', 当前来源, 60分钟)
}
2.3 每个页面的访问来源
这个就是通常意义上的referrer
了,在每个页面访问时,都取referrer。
3. sensorsdata.cn的来源分析
sensorsdata会获取initial_referrer
和initial_from
sa.setProfileOnce({ initialReferrerUrl: document.referrer,initFromUrl: '根据url解析出来的来源'
})
sensorsdata会在每次页面打开的时候,取from和referrer
sa.track('page_open',{from:'解析url来源',referrer:document.referrer,referrerHost:''})
当然这里会有重复,如果是自己网站内的跳转,如果需要过滤的话,可以自行做判断过滤。
4. 其它
客户 A 只想取某个页面的自定义来源做为需求的来源
if(这个页面有自定义来源){ sa.setProfileOnce({fromUrl:自定义来源});
}
干货:如何在前端统计用户访问来源?相关推荐
- 分享三个网页访问(点击)统计脚本,展示访问来源地图分布
分享三个网页访问/点击统计脚本,展示访问来源地图分布 1. Flag Counter 2. Revolvermaps 3. 蝴蝶计数器 总结 首先简单展示一下三个脚本的效果; 左边的是FlagCoun ...
- kibana可视化统计_用户访问统计PV-IP-UV数据
kibana可视化统计_用户访问统计PV-IP-UV数据 准备 点击可视化->点击添加 新建一个可视化New Visualization->选择Data Table 选择索引如图: 默认有 ...
- \t\t最近两周访问来源统计
最近两周访问来源统计 数据来源 http://hi.baidu.com/lu_mh 166 http://www.baidu.com/s?wd=睡觉出汗&oq=睡觉&f=3&r ...
- 网站用户访问速度监测分析项目
刚来新公司不久做运维开发,本为以为要继续做我的开源软件开发,结果领导给分了个以前基本从来没考虑的任务,监测用户访问我们网站的速度,没错,是监测所有的用户访问我们网站的速度. 刚来新公司不久做运维 ...
- js记录用户访问页面和停留时间
1.setInterval setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式. setInterval(code,millisec[,"lang" ...
- vue和小程序哪个好学一点_litemall,Spring Boot后端,微信小程序用户前端 + Vue用户移动端...
litemall 又一个小商场系统. litemall = Spring Boot后端 + Vue管理员前端 + 微信小程序用户前端 + Vue用户移动端 注意: 由于第一次加载数据量较大,建议wif ...
- 好程序员web前端干货之web前端开发框架汇总
好程序员web前端干货之web前端开发框架汇总,其实一个前端开发框架其实就是一系列产品化的HTML/CSS/JavaScript组件的集合,我们可以在设计中使用它们.前端开发框架有很多,其中有一些写得 ...
- CDN加速下如何识别和限制访问来源
前言 大多数提供CDN服务的云厂商,基本上都为客户提供了黑白名单(限制单个ip或网段),地域限制(限制某些地区的访问),鉴权(使只有符合规则的用户才可访问)或异常流量的监控和限制等功能.实现了基本的加 ...
- 【面试题】当用户访问网站是很慢有哪些原因?
问题:当用户访问网站是很慢有哪些原因? 问题场景:某个用户向你反映说开发的网站访问速度很慢,但是该用户访问其他问题很正常,分析下,有哪些工具分析原因.怎么解决问题? 一.针对这个题目我们可以简单理解成 ...
最新文章
- 【python编程导论】我想和你探讨下如何去写好程序
- Windows下Node.js开发入门(1)
- 基于SpringJDBC 实现关键功能-ClassMappings
- elasticsearch索引结构和配置优化
- Java Servlet总结
- 如何使用links方式安装Eclipse插件
- 语音转文字的软件APP
- 金融科技的别样财报:趣店坎坷后回暖、品钛首盈利
- C#转换人民币大小金额
- 推荐一个Oracle数据库学习的网站
- UI自动化报错Can not connect to the Service解决方案
- golang:goredis库pipeline使用方式
- android banner停止轮播,android如何实现banner轮播图无限轮播效果
- 国际清算银行:多国央行进行CBDC研究 仅少数推出具体计划
- 医院信息管理系统源码 HIS系统源码
- 1001: 植树问题 ZZULIOJ
- toFixed() is not a function toFixed方法数字类型才能使用
- java商城系统和php商城系统哪种好些?
- 浪潮优派培训笔记:Tomcat服务器
- 深度学习图像视频压缩技术
热门文章
- mysql 5.7源码包安装教程_MYSQL5.7源码包编译安装
- linux系统怎么用vim,linux/unix
- linux kernel 进程管理,Linux内核 | 进程管理
- python中的and与or
- matlab命名文件保存在哪里,用Matlab给整个文件夹下的文件分别重命名
- python串口通信_python通信串口pyserial安装及常用语句
- mybatis插入mysql出现中文乱码
- vue学习:v-text,v-html, v-model, {{}}之间的异同
- 离散制造业的数据采集之路
- el-table中每列设置同样的宽度导致表格宽度没法实现100%布局