
從運營角度來看,用戶在網(wǎng)站停留時間,反映了網(wǎng)站黏性。一般情況下,用戶的需求與網(wǎng)站內(nèi)容匹配度越高,頁面瀏覽時間越容易聚攏在一個相對集中區(qū)間里,不會過短也不會過長。
在評估網(wǎng)站推廣效果時,若來自某推廣渠道的訪客頁面瀏覽時間集中在很短的區(qū)間內(nèi),則意味著該渠道的流量質(zhì)量過低。我們經(jīng)常會看到的轉化率就與頁面平均瀏覽時長密切相關,呈現(xiàn)一個正態(tài)分布的圖形。
示意圖
所以在數(shù)據(jù)獲取階段,如果不能準確的獲取到用戶在某個頁面的停留時長,那么對于后續(xù)結論也會產(chǎn)生一定的誤導。
▌目前三大主流計算方法
1.后一頁面打開時刻減去前一頁面打開時刻,得到前一頁面的停留時長。這個方法有兩個明顯的不足:
1) 最后一個頁面的停留時間是訪問不到的,如果一共只有一個頁面,那么這個頁面停留再久也不會進行統(tǒng)計;
2) 對于同時打開很多頁面的情況,則只有倒數(shù)第二個頁面會得到相對準備的停留時長,而其它所有中間被打開的頁面的停留時長都會被記錄為一瞬間,有可能就會被作為臟數(shù)據(jù)拋棄掉了。
2.通過心跳包定時向發(fā)送數(shù)據(jù)包,為了不使客戶端或服務端的負載過重,數(shù)據(jù)包發(fā)送的間隔一般被控制在 15 至 30 秒之間。好處是結合頁面是否位于前臺,可以更精確地計算所有頁面的真實被瀏覽的時長。不足則數(shù)據(jù)包發(fā)送的時間間隔決定了統(tǒng)計的精度以及數(shù)據(jù)上報的負載,越大的精度意味著越高的負載。
3.主動在用戶主動關閉頁面時(onbeforeunload)發(fā)送數(shù)據(jù)包,通過關閉時間和打開時間之間的差值來獲取頁面停留時間。這樣做是為了解決第一點中只打開一頁時無法計算停留時長的問題,但這樣的風險是并不能確保數(shù)據(jù)包發(fā)送100%成功。對于同時打開多個頁面的情況,無法準確獲取用戶瀏覽時長的問題也依然沒有解決,用戶關閉某頁面的時間減去頁面被打開的時間,并不能真正體現(xiàn)用戶的瀏覽時間,只能體現(xiàn)頁面被打開的時間。另外,如果用戶長期不關閉頁面,頁面的停留時長就會長得夸張,為了規(guī)避這個問題,也需要引入 session 或者其它約束。
▌主流計算方法的缺陷
市面上幾乎所有的統(tǒng)計方法都是在不精確的用頁面打開時長來充當頁面瀏覽時長。提到準度和精度,又回到了數(shù)據(jù)分析中很經(jīng)典的討論,即:數(shù)據(jù)的質(zhì)量要與分析目標結合,否則我們就會在無休止地追求極致的道路上迷失,為了提升 1% 的精準度而投入不成比例的成本。
在進行下一步的討論之前我們先看看以上的幾種計算方法中明顯的缺陷:
1.只瀏覽單頁時時長無法計算;
2.精度和負載的平衡;
3.多頁面瀏覽時長無法精確統(tǒng)計;
4.頁面被最小化或者不位于當前Tab。
▌以心跳包為主線,對總時長校準
那是否有一個成本可控又能規(guī)避掉以上幾種計算方法中明顯的缺陷的辦法呢?我們的思考如下:
由于網(wǎng)頁端沒有穩(wěn)定的網(wǎng)頁關閉的事件可以捕獲,而且存在多個頁面并存的情況,想獲取足夠精確的瀏覽時長心跳包看似是最好的方案。通過心跳包統(tǒng)計位于最前臺的頁面的時長,結合后一頁進入時間及當前頁關閉時間來對總時長進行校準。為了得到更加精準早期瀏覽時長,在起始的30秒內(nèi)心跳包的發(fā)送頻率為5秒;30秒到90秒內(nèi),發(fā)送頻率為10秒;之后固定在15秒。心跳包對于長時間停留的,而沒有用戶交互的場景是非常好的解決方案,例如觀看視頻,但對于APP和網(wǎng)頁端來說,那些長時間沒有操作行為的場景并不多見,對于少數(shù)打開但沒有操作的頁面,我們就認為用戶沒有停留了,所以從實際場景出發(fā),雖然心跳包更精準,但卻不夠經(jīng)濟了。
所以,目前客戶端數(shù)據(jù)包上報成本依然還是一個影響體驗的因素的現(xiàn)狀下,我們沒有選擇將心跳包作為默認采集的功能,默認采集我們使用了打開及關閉時間做差的方案作為計算停留時長的默認方案。
最后,應用到實際的分析中,我們不能只看停留,還要看轉化。這并不是本文的重點,但也拋出一種常見的場景,作為本文的結束,以表達,數(shù)據(jù)脫離業(yè)務只是數(shù)字。
示意圖