You open a page through an exit in Germany and see English. A colleague opens the same address and gets the US store. Both of you used the right proxy, so what happened? Websites rarely decide your country from one signal. They combine several, and the order is different on every site. If you run localization QA or monitor local pages, knowing those signals saves a lot of confusion.
This guide covers the four signals sites use, a tested example of how real sites combine them, and how to check a site you care about.
The four signals
| Signal | What it usually decides | How you control it |
|---|---|---|
| IP address | The country, and sometimes the language | The exit country of your proxy |
| Accept-Language header | The language within a country | Your browser or client settings |
| The URL | Whatever it names, overriding the rest | The address you request |
| A cookie or saved choice | Whatever you picked last time | Clearing cookies, or a fresh session |
Some sites use none of these on the server, and show a page that lets you choose instead.
What real sites do
We loaded a few well-known pages through residential proxy exits in different countries, with different browser languages, on 6 November 2026, and confirmed each exit country separately. The script is short and needs only requests. Credentials come from environment variables.
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"]
BROWSER = ("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/130.0 Safari/537.36")
def visit(url, country, language):
"""Load a URL from an exit in one country with one browser language."""
proxy = f"http://{USER}-country-{country}:{PASSWORD}@{GATEWAY}"
s = requests.Session()
s.proxies = {"http": proxy, "https": proxy}
s.headers.update({"User-Agent": BROWSER, "Accept-Language": language})
r = s.get(url, timeout=40)
lang = re.search(r'<html[^>]*\blang=["\']?([\w-]+)', r.text, re.I)
return r.url, lang.group(1) if lang else None
CASES = [
# url, exit country, Accept-Language
("https://www.netflix.com/", "us", "en-US"),
("https://www.netflix.com/", "de", "en-US"),
("https://www.netflix.com/", "de", "de-DE"),
("https://www.netflix.com/", "br", "en-US"),
("https://www.google.com/", "us", "en-US"),
("https://www.google.com/", "de", "en-US"),
("https://www.google.com/?hl=en", "de", "en-US"),
("https://www.apple.com/de/", "us", "en-US"),
("https://www.ikea.com/", "de", "de-DE"),
]
if __name__ == "__main__":
for url, country, language in CASES:
for attempt in range(3):
try:
final, lang = visit(url, country, language)
break
except requests.RequestException:
final, lang = "error", None
asked = url.replace("https://www.", "")
got = final.replace("https://www.", "")
print(f"{asked:22} exit {country.upper()} {language:6} -> {got:22} lang={lang}")
Output, showing the address asked for, the exit and browser language, the page reached and the language of that page:
netflix.com/ exit US en-US -> netflix.com/ lang=en
netflix.com/ exit DE en-US -> netflix.com/de-en/ lang=en
netflix.com/ exit DE de-DE -> netflix.com/de/ lang=de
netflix.com/ exit BR en-US -> netflix.com/br-en/ lang=en
google.com/ exit US en-US -> google.com/ lang=en
google.com/ exit DE en-US -> google.com/ lang=de
google.com/?hl=en exit DE en-US -> google.com/?hl=en lang=en-DE
apple.com/de/ exit US en-US -> apple.com/de/ lang=de-DE
ikea.com/ exit DE de-DE -> ikea.com/ lang=en
Four sites, four behaviours.
Netflix uses both IP and language. The exit picked the country path and the browser language picked the variant: a German exit with an English browser got /de-en/, and with a German browser got /de/. A Brazilian exit with an English browser got /br-en/.
Google keeps one URL and follows the IP for language. A German exit got a German page even with an English browser. Adding ?hl=en to the URL switched it to English, so the URL overrode the IP.
Apple lets the URL decide. A US exit asking for /de/ got the German site. The IP did not redirect it anywhere.
IKEA did not redirect at all. A German exit with a German browser still got the international page in English, which leaves the choice to the visitor.
What this means for your checks
- Set the exit and the language together. Testing a German market with an English browser can give you a mix that no real visitor sees, as the Netflix row shows. Match the timezone too, since some sites check it.
- Record the final URL. The address you asked for and the page you reached are often different. Store both, so a redirect does not go unnoticed.
- Start each market fresh. A cookie from an earlier visit can override the IP. Use a new session for each country.
- Do not trust the URL alone. On sites like Google, the same URL serves different content by IP. On sites like Apple, the URL decides and the IP does not matter. Test which kind you have.
- Pick the exit by the visitor you want to be. Our piece on choosing an exit country covers when location matters and when it does not.
If you run the site
Geo-redirects can work against you. Google’s guidance is to avoid automatically redirecting users from one language version to another based on what you think their language is, because it can stop people and search engines from reaching every version. It also notes that Googlebot usually crawls from US IP addresses and sends no Accept-Language header, so a site that adapts content by location may not get every version indexed.
The safer pattern is what most of the sites above do in some form: separate URLs per country or language, a suggestion based on the visitor’s signals, and an easy way to switch.
The bottom line
A website’s idea of where you are is a mix of IP, browser language, URL and memory, combined differently on each site. When a page shows the wrong country, check all four before blaming the proxy, and when you test, change one signal at a time so you know which one the site follows.
Sources and references
- Google Search Central, Managing multi-regional and multilingual sites: developers.google.com
- Google Search Central, How Google crawls locale-adaptive pages: developers.google.com