當點擊Google搜索結果🔍的鏈接🔗後,你將會被帶去一個第三方網頁📄。這一簡單的過程其實相當複雜,那麼你是否了解在這幾百毫秒⏱之中發生了些什麼呢?本篇HubSpot One將帶你探秘。
記錄點擊行為
這一過程通過調用一個w.gif的像素圖片完成。這個圖片會傳遞一些參數,詳見下圖。
此處筆者的檢索詞是“關鍵字”,點擊的結果是“Google指數”這條結果。 url裡就是中間頁的鏈接,這個鏈接裡?url=後面的值之後還會被用到。 path裡是Google當前結果頁的地址。另外resource id為1599,說明是個自然搜索結果。
至此, Google已獲取該點擊訊息。
從referer剝離參數wd
接下來Google會進行一步操作,這步操作將會隱去用戶具體檢索的關鍵字。舉個例子,我在Google搜google😂,那麼URL將是https://www.baidu.com/s?wd=google
當我點擊第一個谷歌香港的結果後會跳去一個Google的中間頁面,這個中間頁面的URL是: https://www.baidu.com/link?url=_qzTpXb2Yx6i8OvjybEol7DExwdmEjiEGCwsqKZ-38gGFi93MVamdx5ncxor-ayz& wd= &eqid=9fd2c68f0006060f000000045adc8632
Google請求這個中間頁時,會用該中間頁的URL作為referer的URL。這個URL並不是點擊時產生的,但是referer的URL卻是點擊時賦予的。你會發現wd=後的值為空,而wd後放置的是檢索詞訊息,這就是為什麼你在Google Analytics中看不到用戶檢索詞的原因。
至此, Google很好地“保護了用戶的隱私” 。
新窗口打開中間頁面
第三步是在新窗口中打開這個中間頁面,至於為什麼不是像谷歌或者必應那樣在原窗口打開,這關係到台灣網民的習慣問題。至少自從有target=”_blank”那年起,國內的搜索引擎就是這麼玩的。或許檢索效率不高還需回頭點別的結果或者使用其他搜索詞吧。但是由於新打開窗口,出現了一些安全隱患,我們在後面詳述。這個中間頁基本上就是一個腳本。整理格式後,請見下圖:
我們看到,這個腳本用了window.location.replace來進行跳轉到目的地網址。這是一個常見的JS跳轉。
至此, Google新開了一個窗口並將要帶你去目的地網頁。
驗證點擊真實性
我們注意到,Google在這個中間頁調用了window.opener.bds.pdc.sendLinkLog(); 回到搜索結果頁,我們會發現這個頁面調用了一個JS。詳見下圖:
我們看到這個請求發送了中間頁的字符串參數作為url的值,如果沒有這個請求以及沒有之前w.gif的請求,那麼這個點擊很有可能是假的。雖然不能杜絕虛假模擬點擊,這很大程度上過濾掉了許多爬蟲和低級的虛假點擊。
至此, Google為點擊數據真實性加了“雙保險” 。
剝離Opener,保障安全
在中間頁代碼的最後我們看到了window.opener=null; 這行代碼如果不加,那麼跳轉到目標頁後目標頁就可以憑著window.opener對Google搜索結果頁面進行各種操作。新規範HTML中雖然已經增加了rel=noopener這樣的屬性來避免對opener賦值,但是舊版的瀏覽器並不支持。舊版瀏覽器只支持noreferrer,但是Google還是很自豪地想告訴目標頁“這是我度娘給您送的免費流量”的。總之,這就造成了安全隱患。在腳本的最後將opener賦為空值就是出於安全的考慮,同時保留了referrer。
至此, Google已經準備好帶你去目標頁面了。
跳轉到目標頁面
經過了上述五步的鋪墊,Google終於可以帶你去目標頁面了。這個頁面在新窗口中,它無法獲取訪客所檢索的檢索詞,它無法對打開它的Google搜索結果頁窗口進行操作。
至此,我們已經介紹完了。我們介紹Google點擊的目的只是想說明Google在數據和安全上確有周全的考慮,作為SEO,我們還是盡量從根本著手,避免做一些為了欺騙引擎吃力不討好的事情。
對於本文提到的rel=noopener,您可以查看這篇文章詳細了解。
另外referrer丟失的原因有很多,建議看W3的官方文檔。