天天看點

Document.Referrer丢失的幾個原因

HTTP請求中有一個referer的封包頭,用來指明目前流量的來源參考頁。例如在www.sina.com.cn/sports/上點選一個連結到達cctv.com首頁,那麼就referrer就是www.sina.com.cn/sports/了。在Javascript中,我們可以通過document.referrer來擷取同樣的資訊。通過這個資訊,我們就可以知道訪客是從什麼管道來到目前頁面的。這對于Web Analytics來說,是非常重要的,這可以告訴我們不同管道帶來的流量的分布情況,還有使用者搜尋的關鍵詞等,都是通過分析這個referrer資訊來擷取的。

但是,出于各種各樣的原因,有時候Javascript中讀到的referrer卻是空字元串。下面總結一下哪些情況下會丢失referrer。

Location對象是一個用于頁面導航的非常實用的對象。因為他允許你隻變更Url的其中一部分。例如從cn域名切換到com域名,其他部分不變:

但是,通過修改Location進行頁面導航的方法,會導緻在IE下丢失Referrer。

IE5.5+ 下傳回空字元串 Chrome3.0+,Firefox3.5,Opera9.6,Safari3.2.2均正常傳回來源網頁

示例:

點選此連結會在新視窗打開Google網站,我們在位址欄中輸入以下js代碼就可以看到發送的referrer了。

測試結果:

如果是同個域名下通過此方式跳轉的,那麼我們可以通過通路windoww.opener對象去擷取丢失的referrer資訊。代碼如下:

跨域的話則沒轍了~

滑鼠拖拽是現在非常流行的使用者習慣,很多浏覽器都内置或者可以通過插件的方式來支援滑鼠拖拽式浏覽。但是通過這種方式打開的頁面,基本全都丢失referrer。并且,這種情況下,也無法使用window.opener的方式去擷取丢失的referrer了。

已測試:

Maxthon2.5.2,Firefox的FireGesture插件,Chrome3.0+,Opera9.6,Safari3.2。

點選Flash上到達另外一個網站的時候,Referrer的情況就比較雜亂了。

IE下,通過用戶端Javascript的document.referrer讀取到的值是空的,但是如果你使用流量監控軟體看一下的話,你會發現,實際上HTTP請求中的Referer封包頭卻是有值的,這可能是IE實作的Bug。同時,這個值指向的是Flash檔案的位址,而不是來源網頁的位址。

Chrome4.0下點選Flash到達新視窗之後,Referrer也是指向的Flash檔案的位址,而不是源網頁的位址。

Chrome3.0和Safari3.2是一樣的,都是會丢失Referrer資訊。

Opera則和Firefox一樣,Referrer的值都是來源網頁的位址。

從HTTPS的網站跳轉到HTTP的網站時,浏覽器是不會發送referrer的。這個各大浏覽器的行為是一樣的。

例如,我們在HTTPS下使用Google Reader或是Gmail的時候,點選某個連結去到另外一個網站,那麼從技術上來說,這樣的通路和使用者直接鍵入網址通路是沒有什麼分别的。

Referrer如果丢失,Web Analytics就會丢掉很重要的一部分資訊了,特别對于廣告流量來說,就無法知道實際來源了。目前國内好多用了Google Adsense廣告的網站,都使用了window.open的方式來打開廣告連結,是以IE下會丢失Referrer,而我們知道,IE是目前市場佔有率最大的浏覽器,是以其影響是很大的。很多流量統計工具會是以将這部分流量歸入“直接流量”,和使用者直接鍵入網址等價了。

對于這樣的情況,需要讓廣告投放者在投放廣告的時候,給着陸頁面的Url加上特定的跟蹤參數。

例如,某個Flash廣告,點選之後到達的網址是http://www.example.com/,為了監控此流量是從哪個管道過來的,我們可以修改此投放的着陸Url,改成http://www.example.com/?src=sina,類似這種方式,然後在着陸頁面中使用Javascript代碼提取此src參數,這樣就可以得到廣告來源資訊。

在投放Google Adwords的時候,背景系統有一個“自動标記”的選項,當啟用此選項的時候,Google在生成所有廣告的着陸頁面Url的時候,就會自動加上一個gclid的參數,這個參數能夠将Google Analytics背景和Adwords廣告背景的資料進行整合。這樣就可以知道廣告流量對應于哪個廣告系列,哪個廣告來源和廣告關鍵詞等資訊了。和上面提到的思路其實是類似的。隻不過Google自動幫你做了Url的修改了而已。

Document.Referrer丢失的幾個原因

如果你發現了其他丢失Referrer的情況,或是你有其他解決方案,歡迎和我交流~

繼續閱讀