在不读链接文字的前提下统计点击
计数器回答的是「来了多少人」。更有用的问题通常是「有多少人做了什么」——点了联系方式、打开了下载、去了社交主页。本服务从事件功能上线那天起就能做这件事:给元素加上 data-s4u-event="kontakt",落在它上面的点击就会以这个名字被计入。
几乎没人用,因为几乎没人知道。所以现在有了一个复选框:自动统计链接点击,不需要任何属性。有意思的不是这个开关,有意思的是被计下来的东西叫什么名字。
不是链接文字
给一次点击命名,最自然的选择是访客点下去的那几个字。它也正是错的那个选择。
链接文字是自由内容。链接可以写着「订单 4711」或者「来自安娜的消息」,可以带着门牌号、预订号、邮箱地址。这些东西会一路写进一个叫 name 的数据库字段里,然后就留在那儿了。本服务的隐私政策说统计数据不含个人信息,而这句话必须保持为真,不能取决于站长在某个链接标签里随手写了什么。
还有第二个问题,小一些但真实存在:同一个页面上二十个写着「这里」的链接,会合成一个什么也没说的名字;而同一个链接在十一种译文里,会占掉分给计数器的五十个名额里的十一个。
所以名字取自目标路径。它是站长自己定的,是稳定的,而且它已经是分页统计在用的那个键。
三处归一化,各有各的理由
- 去掉语言前缀。
/de/blog和/pl/blog是同一个页面。不去掉的话,光是一个多语言站点的语言切换器,就会吃掉五十个名额里的十一个。 - 五位以上的连续数字变成
n。两个计数器编号不同的统计页不是两个页面,而是同一个页面被看了两次。 - 站外链接变成
ex-加主机名。别人页面的路径对站长毫无意义,但点击去了哪里是有意义的。
锚点、mailto:、tel: 和 javascript: 一律跳过——没人需要给这些目标一个数字。已经带了自定义事件名的元素也跳过,否则同一次点击会被数两遍。
代价是多少
浏览器脚本压缩后增加了 1022 字节,只在首次访问时付一次。除此之外没有别的开销:这个标志搭在脚本每次页面加载本来就会发的那个请求上——那个请求此前一直只回一个固定常量——所以没有第二次往返。服务器这边,开启了这个开关的计数器清单存在一个小文件里,而不是查表得来,因为那次查询要扫完 166 433 行,实测 143,9 毫秒。
默认关闭,而且会一直是关闭的。以本站的量级,全站打开会给这里写入最频繁的那张表每天多加大约九千条记录。这是你主动打开的东西,不是自动落到你头上的东西。