一到假期,购买欲就成倍加强,劳动节也不例外,昨天在网上买洗车器,不小心进入一个叫三雪的网站,发现尽管在搜索结果中显示的是它的主域名,但点击却直接进了网站的一个内页(/xicheqi),反复几次,依然如此,从这页面的设计看,也算上得有几分姿色,可是好好的主域名不用,直接跳到内页干什么?于是我在地址栏修改地址,改成主域名后,再访问,发现网站是有主页的,但,比起刚刚看到的内页,主页设计反而显得简陋至极,my god,why。
几经寻觅,终于得到了答案:这是一个推广洗车器的网站,主页和内页分工不同,内页负责展示商品和引导购买,主页负责SEO。这种形式在推广网站中屡见不鲜,而我感兴趣的是:为什么在搜索结果中打开的主页转到了内页,而在浏览器中打开的主页却没有跳转?
审查元素,发现这样一段代码:
1 var regexp=/\.(sogou|soso|baidu|google|youdao|yahoo|bing|118114|biso|gougou|ifeng|ivc|sooule|niuhu|biso)(\.[a-z0-9\-]+){1,2}\//ig; 2 var where = document.referrer; 3 if(regexp.test(where)) 4 { 5 window.location.href='http://www.threesnow.com/xicheqi/' 6 }
真相大白,这是一段只针对来源于搜索结果的链接进行页面跳转的JS代码,代码的内容也很容易理解,相似的代码也不难写出。但上面的代码与各种直接跳转的代码不同在于需求解决的层面。一般来说,一个网站的访问来源不外乎三种:直接访问、通过搜索引擎、通过外链访问。当一个网站需要将这三种访问来源进行区分引导时,直接跳转显然不能解决问题,并且从站外到站内的访问也没有参数可以传递,所以,这种源自于推广网站的来源分类不失为一个好的方法。
从三雪网上拷下来的代码只是实现了直接访问和通过搜索引擎访问的分类,我根据直接访问时 document.referrer 值为空的特性,又重写一个将三种访问来源进行分类的JS代码段备用。
1 var regexp=/\.(sogou|soso|baidu|google|youdao|yahoo|bing|118114|biso|gougou|ifeng|ivc|sooule|niuhu|biso|threesnow)(\.[a-z0-9\-]+){1,2}\//ig; 2 var where = document.referrer; 3 4 if(where == null) 5 { 6 //直接访问 7 window.location.href='http://www.cnblogs.com/' 8 } 9 else if(regexp.test(where)) 10 { 11 //通过搜索引擎访问 12 window.location.href='http://www.cnblogs.com/cnliu/' 13 } 14 else 15 { 16 //通过外链访问 17 window.location.href='http://www.cnblogs.com/cnliu/archive/2011/07/25/evaluate-15-pages-of-university.html' 18 }