什么是埋点?
埋点就是定点,定时的数据采集,跟踪用户行为,给后续的产品优化和用户运营提供数据支持。
更通俗一点就是,你为采集数据所做的部署就是埋点,如用户的点击,屏幕的浏览,这些都需要预先做一些部署,这些部署通常是实现,什么时候触发,什么时候发送什么数据,这样才能采集到这些数据,这些部署工作就是埋点。
埋点就是采集用户的行为数据,国内喜欢称之为埋点,国外的叫事件跟踪,指的是同一个东西。
埋点的分类
根据部署的位置可以分为客户端(前端)埋点和服务端埋点,而客户端埋点又分为代码埋点,可视化/无码埋点,无/全/自动/无痕埋点,具体的结构如下图:
现在市面上的工具基本都提供以上四种埋点方式,同样是一种方法,有的名字有好多个,各家有各的叫法!!!!其实服务端埋点也是采用代码埋点的方式,所以也可以这样划分:
并这些埋点方式都各有利弊,具体的各种埋点方法的分类与优缺点如下图
现在国内的工具是提供所有埋点方式,也不管你需不需要,别人有的,自己也要有。
代码埋点
这是目前最为人所知的一种类型,也是使用最广泛的,最基础的一种方式,包括Google Analyitcs,友盟在内的一些第三方工具都是使用这个方案。运用这种方法可以采集到用户非常精准的行为数据。
客户端埋点
原理是:部署完基础的SDK/JS后,在需要采集数据地方添加跟踪代码,启动的时候会初始化SDK/JS,你点击或触发数据采集位置的时候就会调用SDK/JS对应的数据接口把数据发送出去,例如,我们要对某个位置的点击做埋点,也就是该按钮被点击的,这个按钮对应的OnClick就会调用SDK/JS提供的数据接口去发送数据。
通常来说,为了避免消耗用户的流量,一般是多条数据压缩后发送,而不是一条就发一次。
优点:
准确度高:可以精准控制触发条件,什么时候才触发,准确统计某一事件;
自定义强:可以自定义很多丰富的数据数据传递到;
缺点:
工作量大:需要跟踪的地方都添加对应的跟踪代码,需要埋点,因此工作量会比较大;
针对这个问题,国外工具普遍会提供TMS(Tag Manager System,代码管理工具),这个可以显著提升效率,国内的增长工具厂家就还没提供类似的产品,但有程序化厂家有提供TMS。
有人说,用这个方案,版本更新的代码大,容易造成混乱,是不存在这样的问题,版本更迭根本不用对旧版本的埋点做重新部署的,只有说,放弃旧版本框架,完全重写一个的时候需要重新部署,当然,新增页面或需求的时候,会需要添加新的埋点,这个的工作量并不算大的,如果你内部有一个比较好的反馈机制,这个很快的。
另有人说,这个有性能影响,使用第三方SDK/JS,肯定会消耗内存,带宽,这是避免不了的,至于说传递数据,现在大部分的第三方都不是实时发送的,都是累计压缩数据后,等网络比较好的时候才发送数据的;最后一个是,现在的手机,处理能力可能都不亚于一些旧的台式电脑的,如果说影响性能,那你的APP得有多大或你现有的架构有多复杂。
至于数据传输的不可靠,只要涉及到网络,都可能会有网络延迟或丢包出现的,是通病来的,也有很多解决方案,加锁,重发,回调。
关注准确度的话,Web能够达到99.9%,至于那1%是因为用户屏蔽了cookie导致的数据对不上,这个是有方法可以解决的,APP是100%。
服务端埋点
服务端的埋点也有多种方式:
一种是服务端将数据通过协议的形式直接发送给收集数据的服务区,如Google Analytics的MP协议、神策直接发送数据的 Consumer,这种方式如果将服务端看做是一个终端,就类似一个客户端触发的时候就向收集数据的服务器发送数据,如果客户端会丢数据,那么服务端埋点的也会丢,两者是一样的原理的。
另一种是最常用的日志,如日志做很多个性化的定制实现数据的采集,这个工作量就大了,代码复杂,对于一个用户量比较多的产品,而且做比较多配置,埋点跟踪的话,日志的增长速度是非常快,日志的存储和删除会是个很大的问题,而且通常自己的BI和各种系统都会将日志的相关数据入库,有点重叠的意思。
服务端埋点和客户端埋点相比有个差异,服务端埋点不会出现匹配不到的情况,个别需要服务端返回状态的,没有返回给客户端,那么客户端就跟踪不到,往往需要服务端才行,这类如成功提交表单,成功发表文章这些,但其实只要服务端返回状态,前端也是可以跟踪到的,如服务端用数据层或MP协议去跟踪,而且是一定准确的。
国内的工具很强调服务端的的方式采集数据,强调客户端会出现统计的不准,和自己的业务数据库数据对不上,出现丢数据的情况,这是前端数据采集的先天缺陷,因为网络异常,或者统计口径不一致,都会导致数据对不上。
而国外的工具倾向通过客户端埋点,因为国外的工具往往都会提供TMS(Tag Manager System,代码管理工具),自定义功能非常强,可以通过TMS控制条件触发与数据发送,可以很精准的实现数据采集,这样的管理其实很方便的,但国内虽然有厂家提供TMS,但还没有达到能够随意控制数据传输,所以代码埋点往往会变得很复杂,不能脱离开发直接实现跟踪,试想一下,如果是增加某个埋点,有TMS的,直接加完就发布出去,没有TMS,需要开发在页面或服务端加代码后,服务器去update才生效。
可视化/无码埋点:
就是开发者无需再对追踪点进行埋码,而是脱离代码,只需面对应用界面圈圈点点即可追加随时生效的事件数据点。将核心代码与资源配置分开,当APP启动的时候从服务端更新配置和资源,APP根据新的配置和资源上报数据,整个结构有点类似GTM的,配置都是在GTM,用户每次打开加载到的是最新的GTM配置,那么GTM上部署的触发条件有可能被触发,从而实现数据收集。
原理:web和APP的页面都有类似的结构,在部署完SDK后,SDK会自动获取页面各个层级的关系,在web是dom结构,在APP是UIVIEws,当你用可视化页面设置埋点的时候,服务器能够自动知道元素的位置,并且将这些配置保存到服务器,用户打开的时候,就会加载这些配置到客户端,当用户触发该元素的位置时候,就会将相关数据发送出去。
优点:
部署简单,能大大节省人力成本;
对于不同代码的产品和运营,可以通过可视化界面进行配置;
缺点:
不灵活,不能自定义获取数据属性,部分可视化的位置可能覆盖不全;
每次启动加载服务端最新的配置资源,浪费流量。
无/全埋/自动/无痕埋点:
名字太多,如无埋点,全埋点、自动埋点、无痕埋点,就像字面说说的,不需要埋点,已经尽可能的收集所有控件的数据,最早是在2013年,由Heap提出的。
原理:SDK利用CSS选择器技术和监听控件的事件触发技术,在APP中嵌入SDK,这个SDK就会将APP中尽可能多的操作都采集下来,可以通过可视化操作界面对采集的数据做分类,基本上是先收集,后筛选的节奏,可能会出现数据噪音的情况。
优点:
部署简单,只需部署SDK,初始化几行代码,就会自动收集数据;
自动收集很多数据,能够回溯;
缺点:
不灵活自定义数据属性;
收集的数据多,给网络传输带来压力,消耗用户的流量和电量,部分会涉及隐私问题,
可视化埋点和无埋点的是很类似的,只是它们对信息的采集和处理流程不一样而已,可视化埋点是,采集的才处理,而无埋点是先采集所有的,才选择性处理,无埋点采集的是尽可能多的数据,所以无埋点能够对数据做回溯,但是这也意味浪费流量,浪费电,坑用户,头部APP不会用这种方式。
可视化埋点和无埋点是噱头远大于实际,在国内众多的增长工具中,虽然都提供了所有的埋点方式,但是代码埋点才是最常用的一种方式,在实际的应用中长出现跟踪不到,跟踪不准确等问题,所以如果看到第三方工具想你推向推荐这两种方式,绝对是不靠谱的。
埋点的原则
- 简单:埋点的方法简单,能够快速上线的,如果一个工具埋点都折腾个几个月,这不坑爹的嘛。
- 准确:收集到的数据是准确的,才有参考价值,如果收集到的数据跟后其他其他数据有很大的误差,根本不可信的,再花哨的埋点功能也是没用的,目前准确度高的还是代码埋点的形式。
- 免费:大部分人在做工具选型的时候会着重考虑这个工具是否付费的,都想要免费的工具,国内的工具就没哟免费的,都是付费的付费的,请选择大型厂家的产品。
APP埋点跟web埋点的区别?
APP和WEb的埋点都是需要做部署,行为都是通过事件来跟踪,都有埋点跟踪和可视化跟踪。
不同点在于:
- web是部署的js跟踪代码,浏览是页面
- APP部署的SDK,浏览的是屏幕
什么是事件监测?
事件就是记录用户行为或过程,比如用户的点击,下拉,这些都是用户的行为,都可以通过事件去记录。大部分的埋点都会通过事件的形式去跟踪。
在GA中,事件有
事件类别:就是事件的名称,如视屏播放
事件行为:可以是用户的行为,如视屏播放可以是,开始播放,快进,暂停等行为
事件标签:可以在那个页面,对应理解就是播放那个视频
事件的值:可以是播放的时长
是否为交互类型:交互类型的事件会纳入跳出率的计算,一般将事件都设置为非交互的类型的。
APP如何应用事件监测
只要是行为的,都可以应用事件监测,如
- 注册表单:构建转化漏斗
- 按钮跟踪:定位僵尸按钮
- 全路径跟踪;路径转化
- 选择跟踪:用户偏好
……
还有很多可以通过事件去跟踪。