分析下百度是如何實現(xiàn)取消referer關(guān)鍵詞顯示的
還是在今年6月底,百度就放出全面取消referer關(guān)鍵詞顯示的通知,聽說目的是為了保護用戶隱私和站點流量關(guān)鍵詞數(shù)據(jù)。然而并沒有什么L用,本來就不知道誰在百度搜索了什么見...
還是在今年6月底,百度就放出全面取消referer關(guān)鍵詞顯示的通知,聽說目的是為了保護用戶隱私和站點流量關(guān)鍵詞數(shù)據(jù)。(詳情可查看站長之家前文百度站長平臺:將逐步取消referer關(guān)鍵詞顯示)
然而并沒有什么L用,本來就不知道誰在百度搜索了什么見不得人的事情,隱藏關(guān)鍵詞那不是脫了褲子放屁么?
另外,保護站點流量關(guān)鍵詞數(shù)據(jù),這一點我倒是覺得很有用,省的某些人總是去瞄瞄誰誰誰的站點的哪篇文章有個很牛逼的關(guān)鍵詞,然后吧唧就復(fù)制粘貼了。不過,這個做法還是無法完全杜絕,為啥?因為你百度還有一個百度指數(shù)的功能!別人拿到高指數(shù)的詞一搜就知道那個誰誰誰的文章排第一了?不過只是增加了麻煩的程度而已!
說個不好意思的事情,這公告剛出來的時候,我其實是沒看懂是什么意思的。。。去認(rèn)為從一個頁面的鏈接點擊后跳到另一個頁面難道不會產(chǎn)生referer?這不科學(xué)??!然后我就沒在意了。。。
直到前不久,偶然發(fā)現(xiàn)張戈博客原創(chuàng)作品【搜索來路歡迎框】不提示關(guān)鍵詞了:
本以為是我代碼BUG了,于是親自輸出了一下referer看了下,發(fā)現(xiàn)我寫的代碼還是可以拿到referer,可惜referer里面的關(guān)鍵詞wd的值是空的,比如:
https://www.baidu.com/link?url=dEvj7DE-rHNYgoNrzCSrgBLAVrWns06Ub1h8DjGa5mv-gSonnZp9VCYaDBKRmvDV&wd=&eqid=c1a3fa880009ab000000000555fce97f
這時候又勾起了我的興趣,了解referer 的朋友都知道,當(dāng)我們點擊A頁面中的鏈接跳轉(zhuǎn)到B頁面時,B頁面里面referer 值就是A頁面地址。
也就是說,我在百度搜索張戈博客,那么頁面地址應(yīng)該是:
https://www.baidu.com/s?wd=張戈博客
即A頁面地址,如果我們從這個搜索結(jié)果中點開第一個鏈接來到張戈博客,那么產(chǎn)生的referer 應(yīng)該就是上面這個搜索地址才對!百度是如何做到隱藏這個關(guān)鍵詞的呢??
前幾天,在寫一個爬蟲腳本的時候,破天荒的試了下百度搜索結(jié)果中的鏈接,終于搞懂了這其中的奧妙之處,感覺挺有意思,所以就把其他原創(chuàng)干貨繼續(xù)壓在草稿箱等發(fā)霉,先把這個發(fā)現(xiàn)分享下。
就以張戈博客這個關(guān)鍵詞搜索出來的地址為例吧!百度搜索張戈博客后的結(jié)果如下圖所示:
接著,我試著在Linux下使用curl請求,發(fā)現(xiàn)如下圖所示:
把結(jié)果格式化了下:
然后我就明白了百度是如何做到隱藏關(guān)鍵詞的了。
比較簡單,但很巧妙的做法:百度現(xiàn)在的搜索結(jié)果鏈接不再直接跳轉(zhuǎn)到目標(biāo)頁面,而是通過了一個隱藏的中轉(zhuǎn)頁面。以上代碼的大概功能就是,如果瀏覽器支持Javascript,那么將通過其中的js函數(shù)跳轉(zhuǎn)到目標(biāo)頁面,如果瀏覽器不支持Javascript,那么也能通過最后的META標(biāo)簽讓瀏覽器實現(xiàn)跳轉(zhuǎn)。
由于有了這個中間頁面,那么關(guān)鍵詞也就斷章了,因為真正有關(guān)鍵詞的referer 只能在中間頁面這取得,目標(biāo)頁面取得的referer 則是中間頁面的地址,是沒有關(guān)鍵詞的!
百度還真是用心良苦?。?..
還好我寫的【搜索來路歡迎框】是兼容空關(guān)鍵詞的,否則顯示的就是 null 了。
既然知道有這么個巧妙的做法,那我們在某些場景是否可以借鑒一下呢?我想肯定是用得到的,只是你沒遇到而已。。。比如,你的某頁面偷偷鏈接了某站的地址,又不想讓站長知道?不過這也是夠無聊的了,哈哈哈!