還是在今年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 了。
既然知道有這麼個巧妙的做法,那我們在某些場景是否可以借鑑一下呢?我想肯定是用得到的,只是你沒遇到而已。。。比如,你的某頁面偷偷連結了某站的地址,又不想讓站長知道?不過這也是夠無聊的了,哈哈哈!