昨天写的流量分析(一),请戳:使用wireshark进行数据链接层的抓包分析——流量分析(一)
先看一张博客的百度统计流量来源网站截图,可见来自wumii
的流量相对较高,但是实际并没有把文章发布到wumii
,那它是哪来的呢?原来是用了wp
的相关文章插件。下面一张对比图表示了wumii
插件加载的js
对相关文章链接的更改:鼠标未点击时链接为本站的url
,鼠标点着不放的时候它会把链接变为wumii
的redirect
并加上要跳转地址的参数,鼠标松开的时候执行链接跳转事件——经过它的一次跳转就把用户流量导向了wumii
,来源网站就变成了wumii
——有兴趣的童鞋可以在大超超在思考博客文章下方相关文章区试试看。
我们来看一下它这个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
方式跳转文章。
无觅为什么要绕这个圈子呢?要么直接给用户展示相关文章链接,并且不要在点击的时候做小动作,要么就直白点,把链接弄成wumii
的,不要做一个点击时才变换链接地址。
相信无觅应该是为了他们网站更好的阅读体验和更佳、更精准的相关文章推荐,将用户此次点击在redirect
的处理程序里作下记录存入数据库。
如果是这样,对比百度分享提供的关联文章功能,百度就没有把链接转回他们那边,但是它同样可以统计到用户是点击了这个推荐里的链接(鼠标松开时会异步请求百度的一个统计链接)。
给一个解决思路:在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);
});
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。