昨天寫的流量分析(一),請戳:使用wireshark進行數據連接層的抓包分析——流量分析(一)
先看一張博客的百度統計流量來源網站截圖,可見來自wumii
的流量相對較高,可是實際並無把文章發佈到wumii
,那它是哪來的呢?原來是用了wp
的相關文章插件。下面一張對比圖表示了wumii
插件加載的js
對相關文章連接的更改:鼠標未點擊時連接爲本站的url
,鼠標點着不放的時候它會把連接變爲wumii
的redirect
並加上要跳轉地址的參數,鼠標鬆開的時候執行連接跳轉事件——通過它的一次跳轉就把用戶流量導向了wumii
,來源網站就變成了wumii
——有興趣的童鞋能夠在大超超在思考博客文章下方相關文章區試試看。
html
咱們來看一下它這個redirect
生成的HTML
源代碼:數據庫
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <body> <script> var url = 'http:\/\/www.thinkful.cn\/archives\/395.html?d=plugin.wummi.arelated'; var ts = '1390652331339'; var userAgent = navigator.userAgent.toLowerCase(); var isMSIE = (/msie/.test(userAgent)) && (!/opera/.test(userAgent)); if (!isMSIE) { location.replace(url); } else { var currentTs = (new Date()).getTime(); if (!ts || currentTs - ts <= 4000) { var e = document.createElement('a'); e.href = url; document.body.appendChild(e); e.click(); } else { history.back(); } } </script> </body> </html>
可見用的是js
方式跳轉文章。segmentfault
無覓爲何要繞這個圈子呢?要麼直接給用戶展現相關文章連接,而且不要在點擊的時候作小動做,要麼就直白點,把連接弄成wumii
的,不要作一個點擊時才變換連接地址。app
相信無覓應該是爲了他們網站更好的閱讀體驗和更佳、更精準的相關文章推薦,將用戶這次點擊在redirect
的處理程序裏做下記錄存入數據庫。dom
若是是這樣,對比百度分享提供的關聯文章功能,百度就沒有把連接轉回他們那邊,可是它一樣能夠統計到用戶是點擊了這個推薦裏的連接(鼠標鬆開時會異步請求百度的一個統計連接)。異步
給一個解決思路:在wumii
異步加載好相關文章時,能夠改變它加載完成的內容,或者用js
從新渲染一下dom
元素使綁定改變連接的事件失效等。使用setInterval
來作是個思路,見如下代碼(我作的是把連接後加上來自wumii
的標籤便於統計):網站
// wumii關聯文章插件修改 @ 2014-01-24 15:19:34 $(function(){ var wumiiSitePrefix = "http://www.thinkful.cn"; var wumiiEnableCustomPos = false; var wumiiParams = "&num=6&mode=3&displayInFeed=1&version=1.0.5.5&pf=WordPress3.5"; // 避開加載高峯異步加載wumii setTimeout(function(){ // 獲取主插件js $.getScript("http://widget.wumii.com/ext/relatedItemsWidget.htm"); // 修改連接原跳轉方式 var wumiiLinkReplace = setInterval(function(){ // 判斷是否完成dom加載 if( $("a.wumii-image-block").length ){ // 添加來自wumii的標籤(seo不推薦) var $wumiiBlocks = $("a.wumii-image-block"); $.each($wumiiBlocks, function(k, v){ var url = $(this).attr("href"); $(this).attr("href", url+"?d=plugin.wummi.arelated"); }); // 完成後清除這個定時器 clearInterval(wumiiLinkReplace); } }, 300); }, 1000); });