This reminds me of AliExpress that constantly corrupt its language (but not country) preference by randomly serving me a foreign language not in my
Accept-Language list.
Language determination should be, by decreasing order of preference:
1. URL param (temporary override)
2. Cookie (optional, set by a flag image list drop-down conflating country with language)
3. Accept-Language (prefix) (optional)
4. GeoIP (guessing at conflating language with country by demographics as a starting point)
Country, by decreasing order of preference (for pricing, shipping, legal, regional content):
1. URL param (temporary override)
2. Cookie (optional, set by a shipping address or preferred region preference)
3. Location (optional)
4. Accept-Language (suffix) (optional)
5. GeoIP (guessing at current location as the desired country of interest)
Note: It's important to make a default guess at the statistically most likely possibility to reduce the burden on the most users, but not prevent users in the US from using the site's French i18n.