ローカルSERPが異なる理由
Googleは検索者がどこにいるかに基づいて別の検索結果を提供します。 「ベストコーヒーショップ」の問い合わせは、ニューヨーク、ロンドン、東京で完全に異なる結果を返します。 このローカリゼーションは、ローカルビジネスの問い合わせだけでなく、多くのコマーシャルや情報キーワードにも適用されます。
特定の地理的市場に対応する企業にとって、全国レベルのランキングを追跡することは誤解を招きます。 ウェブサイトは、シカゴで1位、ヒューストンで15位、同じキーワードでランクされている可能性があります。 位置固有のSERPトラッキングがなければ、不完全なデータに基づいてSEOの決定を下しています。
この記事では、ジオターゲティング住宅のプロキシを使用して、正確なローカルSERP追跡を実施する方法について説明します。 SERP監視の広範な概要については、当社のを参照してください。 プロキシガイドによる完全なSERPスクレイピング. .
Googleが検索結果をローカライズする方法
Google は複数の信号を使用して、どのローカル結果が表示されるかを判断します。
| シグナル | 仕組み | 結果への影響 |
|---|---|---|
| IPの配置 | Googleは、検索者のIPを地理的な位置にマップします | ローカルパックおよび有機物の結果のための第一次要因 |
| GPS /デバイスの場所 | モバイルデバイスは、正確な座標を共有 | モバイルで非常に正確なローカル結果 |
| Googleアカウントの場所 | 署名されたユーザーからのロケーション履歴 | 過去の場所に基づく結果のパーソナライズ |
| 検索パラメータ | gl (国)と uule (正確な位置) URL パラメータ | オーバーライドIPベースの検出 |
| 言語設定 | hl 変数および受け入れ言語ヘッダー | 言語バージョンが表示される影響 |
ローカルパック
ローカルインテントで問い合わせるには、Googleは「ローカルパック」を表示し、3つのビジネスリストの地図をオーガニック結果の上に表示します。 このパックは、クリックの重要な共有をキャプチャし、完全に位置に依存します。 20マイル離れたところは、検索者から2マイルがパックに入れられます。
オーガニック 結果品種
標準的な有機物でも、場所によって変化します。 Googleは、ローカル関連コンテンツを推進し、地域の検索行動に基づいてランキングを調整し、検索者の都市に応じて異なる特色のスニペットを表示することができます。
ジオプロキシが不可欠である理由
特定の都市でユーザーに表示されるように検索結果を表示するには、その都市からIPアドレスが必要です。 ジオターゲティング 住宅のプロキシ 必須になる。
- 本物の位置信号: デンバーの住宅IPは、Googleに検索者が実際にデンバーにあると伝えます
- ローカル パックの正確さ: 適切な場所からクエリするだけで、正しいローカルパックを見ることができます
- 地域コンテンツの違い: 1つの地域にランクされているコンテンツは、別の地域でランクされていない可能性があります
- 競争分析: 現地の競合他社が自分の市場で見ているものを見る
ProxyHat住宅プロキシ 都市レベルのジオターゲティングをサポート 190+店舗 世界中で、ローカルSERPモニタリングに最適。
ローカルSERPトラッキングの実装
複数の都市でキーワードのランキングを追跡する完全なPython実装は次のとおりです。
import requests
from bs4 import BeautifulSoup
import json
import time
import random
from datetime import date
# ProxyHat proxy with geo-targeting
# Append city/country to your session for geo-targeted requests
# See docs.proxyhat.com for geo-targeting syntax
PROXY_BASE = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
LOCATIONS = [
{"city": "New York", "gl": "us", "hl": "en", "uule": "w+CAIQICIITmV3IFlvcms"},
{"city": "Los Angeles", "gl": "us", "hl": "en", "uule": "w+CAIQICILTG9zIEFuZ2VsZXM"},
{"city": "Chicago", "gl": "us", "hl": "en", "uule": "w+CAIQICIHQ2hpY2Fnbw"},
{"city": "London", "gl": "uk", "hl": "en", "uule": "w+CAIQICIGTG9uZG9u"},
{"city": "Berlin", "gl": "de", "hl": "de", "uule": "w+CAIQICIGQmVybGlu"},
]
def track_local_ranking(keyword, domain, location):
"""Track keyword ranking from a specific location."""
proxies = {"http": PROXY_BASE, "https": PROXY_BASE}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
"Accept-Language": f"{location['hl']};q=0.9,en;q=0.8",
}
params = {
"q": keyword,
"num": 20,
"hl": location["hl"],
"gl": location["gl"],
"pws": 0,
}
# Add UULE parameter for precise city targeting
if "uule" in location:
params["uule"] = location["uule"]
response = requests.get(
"https://www.google.com/search",
params=params,
headers=headers,
proxies=proxies,
timeout=15,
)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
# Find organic position
position = None
for i, g in enumerate(soup.select("div#search .g"), 1):
link = g.select_one("a")
if link and domain in link.get("href", ""):
position = i
break
# Check local pack presence
in_local_pack = False
local_pack = soup.select("div.VkpGBb")
for item in local_pack:
if domain in item.get_text().lower():
in_local_pack = True
break
return {
"keyword": keyword,
"city": location["city"],
"position": position,
"in_local_pack": in_local_pack,
"date": str(date.today()),
}
# Track across all locations
keywords = ["best proxy service", "web scraping tools", "seo software"]
all_results = []
for kw in keywords:
for loc in LOCATIONS:
result = track_local_ranking(kw, "proxyhat.com", loc)
all_results.append(result)
city = result["city"]
pos = result["position"] or "Not ranked"
local = " (in local pack)" if result["in_local_pack"] else ""
print(f" {city}: #{pos}{local}")
time.sleep(random.uniform(3, 6))
# Save results
with open(f"local_rankings_{date.today()}.json", "w") as f:
json.dump(all_results, f, indent=2)UULEパラメーターの理解
ザ・オブ・ザ・ uule パラメータは、Googleの検索URLに位置を指定する最も正確な方法です。 IP ベースのジオロケーションではなく Google が使用する地理的な位置をエンコードします。
UULE値の生成方法
UULE の値は、Base64 でエンコードされた文字列で特定の形式です。 生成するユーティリティ関数は次のとおりです。
import base64
def generate_uule(location_name):
"""Generate a UULE parameter for Google geo-targeting."""
# UULE format: w+CAIQICI{length_char}{base64_location}
encoded = base64.b64encode(location_name.encode()).decode()
# Length character mapping (A=1, B=2, ... Z=26, a=27, etc.)
length = len(location_name)
if length <= 26:
length_char = chr(64 + length) # A=1, B=2, ...
else:
length_char = chr(70 + length) # Adjusted for longer names
return f"w+CAIQICI{length_char}{encoded}"
# Examples
print(generate_uule("New York")) # For New York City
print(generate_uule("Los Angeles")) # For Los Angeles
print(generate_uule("London")) # For LondonジオプロキシとUULEを組み合わせる
最大限の精度のために、UULEパラメータとジオターゲティングプロキシを同じ場所から使用してください。 UULEは、プロキシIPが地理信号を確認しながら、結果をローカライズするためにGoogleを指示します。 このダブルアプローチにより、最も信頼性の高いローカルSERPデータが生成されます。
ローカルSERPトラッキングのユースケース
多拠点事業
フランチャイズ、小売チェーン、およびサービスエリアの企業は、各都市のランキングを追跡する必要があります。 50拠点のピザチェーンは、国内だけでなく各市場でのランキングを知る必要があります。 ローカルSERPトラッキングは、どの場所が強力なSEOを持っているかを明らかにし、注意が必要です。
ローカルSEOの代理店
異なる都市でクライアントを管理するSEO代理店は、現地のランキングを正確に報告する必要があります。 ローカル マーケットの erodes の信頼に応えるとき、クライアントの全国ランキングを表示します。 Geo-proxy ベースの追跡は精密なデータ クライアントの必要性を提供します。
競合者の監視
ローカルの競合他社は異なる地域でランクすることができます。 メトロエリア内の複数の場所で競合他社を追跡することで、その範囲内の地理的ギャップを特定し、最適化されたコンテンツをターゲットにすることができます。
国際SEO
複数の国をターゲットとするウェブサイトは、各市場でのランキングを確認する必要があります。 言語、通貨、文化の違いはすべて、Googleが各ロケールで宣伝するコンテンツに影響を及ぼします。 各ターゲット国からジオターゲティングプロキシを使用して、正確な国際SERPデータを取得します。
Node.js 実装
const axios = require('axios');
const cheerio = require('cheerio');
const { HttpsProxyAgent } = require('https-proxy-agent');
const agent = new HttpsProxyAgent('http://USERNAME:PASSWORD@gate.proxyhat.com:8080');
const LOCATIONS = [
{ city: 'New York', gl: 'us', hl: 'en', uule: 'w+CAIQICIITmV3IFlvcms' },
{ city: 'London', gl: 'uk', hl: 'en', uule: 'w+CAIQICIGTG9uZG9u' },
{ city: 'Berlin', gl: 'de', hl: 'de', uule: 'w+CAIQICIGQmVybGlu' },
];
async function trackLocal(keyword, domain, location) {
const params = {
q: keyword,
num: 20,
hl: location.hl,
gl: location.gl,
pws: 0,
};
if (location.uule) params.uule = location.uule;
const { data } = await axios.get('https://www.google.com/search', {
params,
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept-Language': `${location.hl};q=0.9,en;q=0.8`,
},
httpsAgent: agent,
timeout: 15000,
});
const $ = cheerio.load(data);
let position = null;
$('div#search .g').each((i, el) => {
const href = $(el).find('a').attr('href') || '';
if (href.includes(domain) && !position) {
position = i + 1;
}
});
return { keyword, city: location.city, position };
}
// Track keyword across all locations
async function trackAcrossLocations(keyword, domain) {
const results = [];
for (const loc of LOCATIONS) {
const result = await trackLocal(keyword, domain, loc);
results.push(result);
console.log(`${loc.city}: #${result.position || 'not found'}`);
await new Promise(r => setTimeout(r, 3000 + Math.random() * 3000));
}
return results;
}
trackAcrossLocations('best residential proxies', 'proxyhat.com');ローカルSERP追跡のためのベストプラクティス
適切な場所の粒度を選択してください
- 国レベル: 幅広い国際キャンペーンにご利用いただけます。 セット
glパラメータのみ - 都市レベル: 現地法人のお客様 両方を使う
glそして、uule都市レベルのプロキシ - 近隣レベル: ハイパーローカル事業(レストラン、店舗) 非常に精密なUULEの座標を使用して下さい
モバイルとデスクトップを別々に追跡
ローカル結果は、モバイルとデスクトップ間で大きく異なります。 モバイルSERPは、より著名なローカルパックと異なる有機ランキングを示しています。 モバイルとデスクトップのコンフィギュレーション間でUser-Agentの文字列を切り替えて、両方を追跡します。
ローカルパックを別々に監視して下さい
ローカルパックは、オーガニックな結果から異なるランキングです。 オーガニックポジションを独立して各場所のローカル3パックに表示されているかどうかを追跡します。 多くの企業は、有機的にランクされていますが、ローカルパック、またはその逆から不在です。
スケジュール 一貫して
ローカル追跡を毎日同時に実行します。 一日中検索結果が変動し、矛盾するスケジューリングは、データにノイズをもたらします。 モーニングトラッキング(各ターゲットタイムゾーンの6-8 AM)は、最も安定したベースラインを生成する傾向があります。
地質標的プロキシなしで追跡するローカルSERPは、本質的に不正確です。 あなたの実際の顧客がどのように見えるかを反映するデータを得るために都市レベルのターゲティングで住宅のプロキシに投資します。
プロキシベースのSERPモニタリングの詳細については、記事をお読みください。 ウェブスクレイピングに最適なプロキシ そして、 ブロックせずにスクレイピングする方法. 訪問 ProxyHat ドキュメント ジオターゲティングの設定のため。






