多語網站的數據有時會出現一個很有趣的畫面。
「預設語言的流量是不是變少了?」 「英文、中文或其他語言反而變多?」 「等等……預設語言裡是不是混到我自己的瀏覽?」
三件事可以同時成立。
外語頁面的真實搜尋流量可能正在增加。 預設語言的外部流量可能稍微轉弱。 同時,站長每天開新文章、測連結、回首頁、修完再重新整理,因此預設語言裡多出一位超級忠誠的「讀者」。
通常就是站長自己。
本文整理如何排除自己的瀏覽器、localStorage與Cookie如何選、「開過頁面就算登記嗎?」這個誤會、歷史數據會怎樣,以及多語網站真正的成長該怎麼看。
1. 別只看總PV,先拆成外部進站與站內瀏覽
站長頻繁檢查預設語言頁面時,總PV很容易被自己放大。
常見行為包括:
- 直接開剛發布的文章
- 從首頁進文章
- 點相關文章
- 電腦與手機都測
- 上線後重複重新整理
- 過一段時間再回來確認正式環境
一般讀者可能看一次就離開。 站長卻同時兼任編輯、QA、讀者與監控系統。
因此多語網站至少要把「外部首次進站」和「站內導流」分開看。
如果外語頁面的外部進站正在增加,而預設語言有大量站內導流,那麼「預設語言壓倒性領先」的一部分,很可能只是「站長長期巡邏預設語言介面」。
2. 「我打開了,登記了嗎?」——沒有實際寫入,就沒有
假設你決定把這台瀏覽器標記成owner,然後打開網站一次。
這樣就自動登記了嗎?
不會。
瀏覽器不會自己推理:
「這個人看起來像站長,以後不要算PV。」
必須真的執行狀態寫入,例如:
- localStorage中的owner標記
- Cookie中的owner標記
- 已登入管理員設定
- 伺服器端內部流量標籤
打開頁面只是訪問。 登記owner是狀態變更。
沒有程式寫入,就沒有登記。
3. localStorage與Cookie該選哪一個?
瀏覽器層級最常見的是localStorage與Cookie。
localStorage
localStorage會依origin保存在瀏覽器中,正常瀏覽狀態下可跨工作階段保留。
例如:
localStorage.setItem("analytics_owner", "1");
前端分析程式可以在送事件前檢查:
if (localStorage.getItem("analytics_owner") === "1") {
return;
}
優點是簡單。
缺點是伺服器或Edge Worker收到最初HTTP請求時,看不到瀏覽器裡的localStorage。
Cookie
Cookie會隨符合條件的HTTP請求送到伺服器。
例如:
document.cookie =
"analytics_owner=1; Path=/; Max-Age=31536000; SameSite=Lax; Secure";
伺服器或Edge Worker可以在計數前先檢查Cookie。
更完整的做法是從已登入的管理頁面或私有設定入口回傳Set-Cookie。如果JavaScript不需要讀取,也可以評估HttpOnly。
但這個標記只能用於「分析排除」。
不要拿可自行寫入的Cookie或localStorage做身分驗證或權限控制。否則就變成只要把名牌寫成「老闆」,老闆辦公室就會自動開門。
4. 伺服器或Edge計數用Cookie;純前端事件可用localStorage
判斷標準是「在哪裡計數」。
前端JavaScript送分析事件
localStorage通常就夠。
頁面載入後,在事件送出前檢查owner即可。
CDN、Edge Worker、伺服器或存取日誌計數
Cookie比較適合。
伺服器會在前端JavaScript執行前就收到HTTP請求。
localStorage只存在瀏覽器裡。 Cookie會跟著請求送出去。
目的相同,但計數位置不同,工具就不同。
5. 個人網站用一次設定就夠了
大型企業可以靠公司IP、帳號或裝置管理判定內部流量。
個人網站可以簡單很多。
- 開一個只有自己知道的設定頁
- 設定有期限的owner Cookie
- 帶有該Cookie的請求不納入分析
- 提供解除owner的方式
但它是以瀏覽器為單位。
電腦、手機、其他瀏覽器、其他Profile、無痕模式都是不同環境。
設定一次不代表整個宇宙裡的自己都消失。
6. 歷史PV不會自動變少
今天加上owner排除,不會讓昨天以前的PV自動減少。
一般最實際的目標是:
「從現在開始不再混入。」
如果真的要修歷史數據,就要重新處理原始日誌或重建聚合。
對剛起步的小站來說,為了修正過去幾十次自己的點擊而花很多時間,通常不划算。
標記一個分界日期反而更實用。
7. GA4內部流量排除與自訂Cookie不是同一件事
Google Analytics 4提供正式的內部流量設定,可用IP地址定義內部流量,再透過資料篩選器排除。
固定辦公網路很好用。
但個人站長可能在家用Wi-Fi、行動網路、旅行地點、分享網路、VPN之間切換,IP判定會變得麻煩。
若是自建第一方分析,瀏覽器Cookie或登入狀態可能更方便。
不過兩者是不同機制。
使用GA4就照GA4流程設定並先測試。 使用自建分析,就在自己的收集點排除owner。
8. 多語成長要看「排除owner後的外部進站」
自己的瀏覽會扭曲語言比較。
假設總PV看起來是:
預設語言70
外語30
但預設語言70裡有:
- 20次站長檢查
- 20次站內瀏覽
- 30次外部進站
而外語30幾乎都是外部進站。
那麼實際的新需求根本不是單純的70比30。
判斷搜尋與發現成長時,更該比較:
預設語言外部進站
對
外語外部進站
同時也要區分日數據與7日滾動數據。
滾動總數下降,可能只是某個早期高峰日離開視窗,不一定是今天流量崩掉。
9. 最低限度測試流程
不要只說「應該有用了」。
至少測:
- owner標記是否真的存在瀏覽器
- 開一個一般頁面
- 確認分析事件沒有被記錄,或被標記owner後捨棄
- 另一個瀏覽器仍然能正常被計數
- 刪除owner標記後重新恢復計數
瀏覽器開發者工具可以看到localStorage與Cookie。
「我有打開設定頁」不是測試結果。
電腦很會照指令做事,但不會讀心。
10. 結論——先把自己從樣本中移出去,再慶祝國際化
外語頁面開始有讀者,當然值得高興。
但預設語言裡常住著一位最忠誠的訪客:站長本人。
所以:
- 分離外部進站與站內導流
- 明確標記owner瀏覽器
- 純前端事件用localStorage
- 伺服器或Edge計數用Cookie
- 只開頁面不等於已登記
- 歷史數據不必硬改
- 多語需求看排除owner後的外部進站
這樣數字才會開始有真正的意義。
如果海外讀者真的來了,那很好。
只是先確認一下,本地語言隊的得分不是自己一個人刷出來的。
參考資料(3筆)
- MDN: Window.localStorage
https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage - MDN: Set-Cookie header
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Set-Cookie - Google Analytics Help: Exclude internal traffic
https://support.google.com/analytics/answer/10104470
