分析下百度是如何实现取消referer关键词显示的
还是在今年6月底,百度就放出全面取消referer关键词显示的通知,听说目的是为了保护用户隐私和站点流量关键词数据。(详情可查看站长之家前文百度站长平台:将逐步取消referer关键词显示)
然而并没有什么L用,本来就不知道谁在百度搜索了什么见不得人的事情,隐藏关键词那不是脱了裤子放屁么?
另外,保护站点流量关键词数据,这一点我倒是觉得很有用,省的某些人总是去瞄瞄谁谁谁的站点的哪篇文章有个很牛逼的关键词,然后吧唧就复制粘贴了。不过,这个做法还是无法完全杜绝,为啥?因为你百度还有一个百度指数的功能!别人拿到高指数的词一搜就知道那个谁谁谁的文章排第一了?不过只是增加了麻烦的程度而已!
说个不好意思的事情,这公告刚出来的时候,我其实是没看懂是什么意思的。。。去认为从一个页面的链接点击后跳到另一个页面难道不会产生referer?这不科学啊!然后我就没在意了。。。
直到前不久,偶然发现张戈博客原创作品【搜索来路欢迎框】不提示关键词了:
本以为是我代码BUG了,于是亲自输出了一下referer看了下,发现我写的代码还是可以拿到referer,可惜referer里面的关键词wd的值是空的,比如:
https://www.baidu.com/link?url=dEvj7DE-rHNYgoNrzCSrgBLAVrWns06Ub1h8DjGa5mv-gSonnZp9VCYaDBKRmvDV&wd=&eqid=c1a3fa880009ab000000000555fce97f
这时候又勾起了我的兴趣,了解referer 的朋友都知道,当我们点击A页面中的链接跳转到B页面时,B页面里面referer 值就是A页面地址。
也就是说,我在百度搜索张戈博客,那么页面地址应该是:
https://www.baidu.com/s?wd=张戈博客
即A页面地址,如果我们从这个搜索结果中点开第一个链接来到张戈博客,那么产生的referer 应该就是上面这个搜索地址才对!百度是如何做到隐藏这个关键词的呢??
前几天,在写一个爬虫脚本的时候,破天荒的试了下百度搜索结果中的链接,终于搞懂了这其中的奥妙之处,感觉挺有意思,所以就把其他原创干货继续压在草稿箱等发霉,先把这个发现分享下。
就以张戈博客这个关键词搜索出来的地址为例吧!百度搜索张戈博客后的结果如下图所示:
接着,我试着在Linux下使用curl请求,发现如下图所示:
把结果格式化了下:
然后我就明白了百度是如何做到隐藏关键词的了。
比较简单,但很巧妙的做法:百度现在的搜索结果链接不再直接跳转到目标页面,而是通过了一个隐藏的中转页面。以上代码的大概功能就是,如果浏览器支持Javascript,那么将通过其中的js函数跳转到目标页面,如果浏览器不支持Javascript,那么也能通过最后的META标签让浏览器实现跳转。
由于有了这个中间页面,那么关键词也就断章了,因为真正有关键词的referer 只能在中间页面这取得,目标页面取得的referer 则是中间页面的地址,是没有关键词的!
百度还真是用心良苦啊!...
还好我写的【搜索来路欢迎框】是兼容空关键词的,否则显示的就是 null 了。
既然知道有这么个巧妙的做法,那我们在某些场景是否可以借鉴一下呢?我想肯定是用得到的,只是你没遇到而已。。。比如,你的某页面偷偷链接了某站的地址,又不想让站长知道?不过这也是够无聊的了,哈哈哈!