プロキシを設定するときの最初の直感は、自分に一番近いロケーションを選ぶことです。それが最も速いはずだと感じられますが、多くの場合それは間違ったデータを返します。ウェブサイトはあなたがどこに座っているかを知りません。見えるのは出口であり、レジデンシャルプロキシでは出口の国がどのバージョンのサイトを受け取るかを決めます。
このガイドでは、知りたい内容に応じて出口国をどう選ぶか、サイトがそもそも反応するかどうかをどう確認するか、そして最も近い出口が実際に正しい選択になるのはどんなときかを示します。
最初に問うべき質問
自分がどこにいるかを問うのではありません。どの視点が必要かを問うのです。
| やろうとしていること | 出口を選ぶべき場所 |
|---|---|
| 競合の価格を監視する | 顧客が購入する市場 |
| 検索順位を確認する | 検索者がいる場所(必要なら都市単位まで) |
| 広告を検証する | キャンペーンが対象とする国 |
| ローカライズされたサイトをテストする | 販売している各市場、一度に1つずつ |
| 自社のジオリダイレクトを確認する | ルールが対象とする各国、それに加えて対象外の1国 |
| 変化しないコンテンツを収集する | 対象の近く、潤沢なIPプールのある場所 |
ドイツにいるチームが米国の価格を追跡する場合、ドイツの出口からは有用な情報は何も得られません。ユーロ建ての価格、場合によっては異なるカタログが表示され、しかもそのデータは一見まったく問題ないように見えてしまいます。
サイトが反応するかどうかをテストする
すべてのサイトがIPによって変化するわけではありません。出口国を前提に計画を立てる前に、まずそれを測定してください。以下のスクリプトは複数の国からページをリクエストし、各リクエストが実際にどこから出たかを確認し、ページに表示された内容を記録します。Python 3.9以降とrequestsで動作します。認証情報は環境変数から取得するため、コードには含めないでください。
from __future__ import annotations
import os
import re
import requests
GATEWAY = "p.shifter.io:443"
USER, PASSWORD = os.environ["PROXY_USER"], os.environ["PROXY_PASS"]
def session_for(country):
proxy = f"http://{USER}-country-{country}:{PASSWORD}@{GATEWAY}"
s = requests.Session()
s.proxies = {"http": proxy, "https": proxy}
s.headers["User-Agent"] = ("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/130.0 Safari/537.36")
return s
def signals(url, country):
"""What this page shows a visitor from one country, and where they really exited."""
s = session_for(country)
try:
exit_country = s.get("https://ip-info.com/json", timeout=30).json().get("country")
r = s.get(url, timeout=30)
except (requests.RequestException, ValueError) as exc:
return {"exit": country.upper(), "error": type(exc).__name__}
lang = re.search(r'<html[^>]*\blang=["\']?([\w-]+)', r.text, re.I)
currency = re.search(r'priceCurrency["\']?\s*(?:content=|:)\s*["\']([A-Z]{3})', r.text)
price = re.search(r'itemprop=["\']price["\']\s+content=["\']([\d.,]+)', r.text)
return {"exit": exit_country, "status": r.status_code, "final_url": r.url,
"lang": lang.group(1) if lang else None,
"currency": currency.group(1) if currency else None,
"price": price.group(1) if price else None}
if __name__ == "__main__":
for url in ("https://www.apple.com/shop/buy-iphone",
"https://store.steampowered.com/app/620/Portal_2/"):
print(url)
for country in ("us", "de", "gb", "br"):
s = signals(url, country)
print(f" exit {s['exit']} {s.get('status')} lang={s.get('lang')} "
f"{s.get('currency')} {s.get('price') or ''}".rstrip())
このスクリプトを2026年11月4日にShifterのテストアカウントで実行しました。結果は以下の通りで、価格は時間とともに変化します。
https://www.apple.com/shop/buy-iphone
exit US 200 lang=en-US USD
exit DE 200 lang=en-US USD
exit GB 200 lang=en-US USD
exit BR 200 lang=en-US USD
https://store.steampowered.com/app/620/Portal_2/
exit US 200 lang=en USD 9.99
exit DE 200 lang=en EUR 9,69
exit GB 200 lang=en GBP 8.19
exit BR 200 lang=en BRL 33,99
この2つのサイトは、知っておくべき2つのケースを示しています。
AppleはIPに反応しません。 どの出口でも同じ米国版のページがUSDで返されました。AppleはローカライズをURLで管理しており、/de/shop/buy-iphoneはドイツのストアを表示します。このページでは出口国がどこであっても結果は変わらないため、地理的条件で出口を選んでも何の意味もありません。
Steamは反応します。 URLと言語は変わりませんでしたが、通貨と価格は出口によって変化しました。USD 9.99、EUR 9,69、GBP 8.19、BRL 33,99です。間違った国からの価格確認は、クリーンで、もっともらしく見える、間違った数字を返しますが、それを警告するエラーは何もありません。
スクリプトがそうしているように、ページだけでなく出口も確認してください。間違ったロケーションは、後でデータの中に紛れ込んでから気づくよりも、この段階で見つける方がはるかに簡単です。
最も近い出口が間違っている場合
- 対象のオーディエンスが別の場所にいる。 これが最もよくあるケースであり、上記の例がその理由を示しています。
- 隣国が別の市場である。 ドイツとオーストリアは言語を共有していても、価格は必ずしも共有していません。通貨が同じだからといって、カタログが同じとは限りません。これらは別々に扱ってください。
- 市場が地域ごとに異なる。 結果によっては、国単位と同じくらい都市や州単位でも変化します。都市レベルのターゲティングが重要になる場合についてのガイドで、その見分け方を解説しています。
- リクエストの他の部分が一致していない。 米国の出口にドイツ語のブラウザ言語という組み合わせでは、両者が奇妙に混ざった結果になりかねません。ジオ、タイムゾーン、ロケールは一致させるべきであり、これらは揃えて設定してください。
最も近い出口が正しい場合、そして「近い」とは何に対してか
Appleのurlのように、サイトがどこでも同じコンテンツを返す場合、地理的条件は正確性の問題ではなくなり、パフォーマンスの問題になります。それでも、重要になる距離は自分のデスクからの距離であることはほとんどありません。プロキシ経由のリクエストはクライアントからゲートウェイへ、そして出口へ、そして対象先へと進みます。対象に近い出口は、あなた自身がどれだけ離れていても、最後の区間を短縮します。
したがって、コンテンツが変化しない場合は、利用可能なIPが豊富な、対象に近い出口を選び、それを測定してください。小さな国はプールが薄いため、ロケーションが本当に重要でない場合は、人気のある近隣市場の方が頼りになることがあります。
よくある間違い
- 1つの国だけテストして、他も同じだと決めつける。 あるページではIPを無視するサイトでも、チェックアウトや検索など別のページでは反応することがあります。気にかけているページをテストしてください。
- クリーンなレスポンスを信用する。 間違った通貨で表示されたページでも200が返ってきます。期待する通貨や言語のチェックを追加してください。
- すべてのステップが出口に従うと仮定する。 サイトによってはIPだけでなく、DNSやアカウント設定によっても誘導を変えることがあり、DNSが出口国で解決しない場合もあります。重要な場合は、実際に取得したページを検証してください。
- 出口とレジデンシー(居住地)を混同する。 出口はリクエストがネットワークから出る場所です。データがどこに保存されているかについては何も示しません。
- 出口を許可だと捉える。 テストや調査のためにサイトに別の国の視点を見せることと、ライセンスや制裁、サイトの利用規約を回避するために使うことは別物です。まず法務チームに確認してください。
結論
どこにいるかではなく、どの視点が必要かで出口を選んでください。サイトがそもそもIPに反応するかどうかをテストし、各リクエストが実際にどこから出たかを確認し、期待する通貨や言語のチェックを追加してください。コンテンツがどこでも同じである場合に限って距離が問題になり、その場合に重要なのは対象までの距離です。