As of October 7, 2026, Shifter has the largest pool of live US IPs, more than Oxylabs and Bright Data, at a fraction of the cost.Shifter now has the largest pool of live US IPs

See benchmarks

Geo-Redirects: How Websites Decide Which Country You See

Sites pick your country from your IP, your browser language, the URL or a saved choice. A tested look at how real sites combine them, and how to check yours.

Customer Success · Updated November 6, 2026 · 5 min read
IP addressAccept-LanguageURL: /de/cookieapple.com/de/exit US
Four signals, one page. The amber one wins on Apple, whatever the IP says.
Knowledge
On this page
  1. The four signals
  2. What real sites do
  3. What this means for your checks
  4. If you run the site
  5. The bottom line
  6. Sources and references

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

SignalWhat it usually decidesHow you control it
IP addressThe country, and sometimes the languageThe exit country of your proxy
Accept-Language headerThe language within a countryYour browser or client settings
The URLWhatever it names, overriding the restThe address you request
A cookie or saved choiceWhatever you picked last timeClearing 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

  1. 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.
  2. 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.
  3. Start each market fresh. A cookie from an earlier visit can override the IP. Use a new session for each country.
  4. 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.
  5. 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

Frequently asked questions

How do websites know which country I am in?

Most use your IP address, looked up in a geolocation database. Many also read your browser language from the Accept-Language header, honour a country or language in the URL, and remember an earlier choice in a cookie. The order in which a site applies these signals varies from site to site.

Does changing my browser language change the country I see?

Usually not on its own. In our test, the browser language changed which language variant a site showed within a country, while the IP decided the country. A URL that names a country or language overrode both.

Why does a site show me the wrong country with a proxy?

Usually because another signal disagrees with the exit: a URL with a country path, a cookie from an earlier visit, or a browser language that the site treats as a preference. Clear cookies, check the URL and set a matching language.

Should my own site redirect visitors by location?

Google advises against automatically redirecting users to a different language version based on what you think their language is, because it can stop people and search engines from reaching every version. Suggest a version and let people switch instead.

Ready to get started?

Try Shifter's residential proxies, 205M+ IPs, 195+ countries, from $0.10/GB.

Get Started