SEO

使用 Proxy 輪換進行地理目標 SEO 監控

3 min read Published Updated 591 words

Google 會根據請求的地理來源,對相同查詢提供不同的自然搜尋結果 — 即使關閉個人化功能也是如此。從紐約資料中心 IP 查詢「best coffee beans」所得到的搜尋結果頁面 (SERP),與從柏林住宅 IP 查詢同一關鍵詞的結果截然不同。這種差異並非表面上的裝飾,而是由 Google 的地區排名演算法、內容本地化,以及 gl (國家)、hl (語言) 和 cr (國家限制) 參數的交互作用所強制執行的。若在不了解這些機制的情況下進行地理目標 SEO 監控,勢必會得到誤導性的資料。本文將說明 SERP 為何因地區而異、代理輪換如何降低偵測風險,以及跨 30 多個市場追蹤排名的實際操作流程。

SERP 為何因地區而異 — ccTLD、gl、hl 與個人化

Google 透過多種訊號來決定「本地」SERP。最簡單的是搜尋網域的 TLD — google.degoogle.co.jp 的差異。但僅使用 ccTLD 是不夠的。Google 還會讀取 gl 參數來覆蓋預設的國家。例如,google.com?gl=DE 即使在全球網域上也會強制顯示德國結果。hl 參數則設定介面語言,會影響結果的語言,但不會影響地理權重。使用 hl=en&gl=JP 的請求會以英文顯示日本結果 — 這是常見的混淆來源。

除了參數之外,Google 還會根據 IP 進行地理定位。如果您從美國 IP 向 google.de 發送請求,Google 仍可能因為偵測到 IP 來源而提供英文與德文混合的結果。這是 SEO 監控的核心問題:IP 位址洩露了使用者的位置。透過 pws=0 關閉個人化功能可以移除使用者歷史記錄,但無法停用位置推斷。唯一可靠的方法是透過屬於目標市場的 IP(最好是住宅 IP)來路由流量,以模擬當地使用者。

住宅 IP 與資料中心 IP — 偵測與驗證碼迴避

Google 會主動對 IP 範圍進行分類。資料中心 IP(AWS、GCP、DigitalOcean)會在幾秒內被標記為非人類流量。我們內部的測試顯示,在使用 gl 參數查詢 Google 時,資料中心 IP 的失敗率高達 60–80%;許多請求會回傳驗證碼或精簡版的 SERP。相比之下,住宅 IP 則能融入正常流量。但住宅代理池也有其自身的問題:高延遲、頻寬有限,以及地理定位準確度不一。來自代理供應商的「住宅」IP 實際上可能是行動電信商的 NAT,Google 會將其對應到不同的地區。

驗證碼迴避的重點不在於「隱藏」,而是在於模仿真實瀏覽器。請發送正確的 User-Agent、與 hl 相符的 Accept-Language,以及每個工作階段使用全新的 Cookie 儲存空間。Google 的機器人偵測也會檢查請求的時間間隔。從同一個 IP 在 2 秒內發出 100 次查詢會觸發驗證碼。請將每個 IP 的請求速率限制在每分鐘 1–2 次。每個市場至少使用 50 個 IP 的池來維持吞吐量。取捨在於:較高的延遲與成本 vs. 較低的驗證碼率。我們接受 5–10% 的驗證碼率為正常,並在遇到驗證碼時更換 IP 重試。

跨 30 多個國家的排名追蹤工作流程

操作模式很直接:每個市場一個 IP,每個查詢一個全新工作階段。不要跨市場重複使用 Cookie。以下 Shell 片段展示了一個使用住宅代理查詢德國 SERP 的最小 curl 探測範例:

#!/bin/bash
# Query Google for "SEO tools" with German gl and English hl, via a residential proxy
PROXY="http://user:pass@residential-proxy-pool:8080"
curl -s --proxy "$PROXY" \
  -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \
  -H "Accept-Language: en-US,en;q=0.9,de;q=0.8" \
  -H "Cookie: NID=...; CONSENT=..." \
  "https://www.google.com/search?q=SEO+tools&gl=DE&hl=en&pws=0&num=10" \
  | grep -oP '(?<=&url=)[^&]+' | head -10

這會擷取前 10 個自然結果的 URL。在正式系統中,請將靜態代理替換為每次請求回傳新 IP 的輪換端點。使用 proxy-chain 這類工具,或使用 requests 搭配每個 IP 一個工作階段的客製 Python 腳本,效果都不錯。將每個市場的代理清單儲存在個別檔案中,並循環輪換。

對於 30 多個國家,您需要 30 多個代理池 — 每個池至少包含 20–50 個 IP 以避免速率限制。單一全球 IP 池是不夠的,因為 Google 的地理定位會導致路由錯誤。我們使用一個將國家代碼對應到代理端點的設定檔:

{
  "DE": "http://user:pass@de-residential.zone:8080",
  "JP": "http://user:pass@jp-residential.zone:8080",
  "BR": "http://user:pass@br-residential.zone:8080"
}

每個市場的查詢會在獨立的執行緒或非同步任務中執行,每個 IP 在每 10 次請求後有 60 秒的冷卻時間。這樣的節奏能將大多數市場的驗證碼率維持在 3% 以下。困難的部分不在於程式碼,而是在於取得可靠且地理定位經過驗證的住宅代理。許多供應商聲稱提供「DE」IP,但實際上是透過法蘭克福的資料中心路由。請透過檢查 IP 的 ASN,並與 Google 的位置推斷(例如使用 X-Robots-Tag 標頭或已知的本地結果)進行比對來驗證。

取捨:新鮮度 vs. 成本

每小時使用住宅代理執行 30 個市場的查詢,僅代理費用每月就需要約 $200–$500 美元,視供應商和資料量而定。您可以針對 Google 較不嚴格(通常是較小國家)的市場使用資料中心 IP 來降低成本,但資料會較為雜亂。另一種選擇是接受 24 小時的更新週期,並在驗證碼率較低的夜間批次執行查詢。天下沒有白吃的午餐。如果您需要每天追蹤 30 個國家的排名,請為住宅代理和穩健的重試機制編列預算。任何妥協都會產出看似精確但實質錯誤的結果 — 這比完全沒有資料更糟。