Automatic language detection doesn't work well. It is usually based on either the geographic region associated with the IP address or based on the
- Geo IP databases are inaccurate for a small (but significant) percentage of users. Probably around 5-10%.
- Geo IP doesn't work for users that are travelling abroad in a country where they don't speak the language.
- Geo IP doesn't work for areas where multiple languages are spoken (like areas of Canada where they speak both English and French).
Accept-Language often defaults to English as that is the default language in which browsers can be downloaded. Users that speak other languages may not know how to change it, even if they know enough English to use the browser.
Accept-Language is often set incorrectly on borrowed devices and in Internet Cafes.
Even if you automatically detect the language, you need to give users a way to force it something else. Having separate URLs for different languages is a good way to do that.
I prefer to use language detection to tell users that another URL might be more appropriate for them. A prominent notification near the top of the page like:
You are currently on our French site, but your browser says you prefer English.
[ Switch to the English site ]
In addition, search engines don't support a single URL with multiple languages well. Search Engine crawlers typically don't send an
Accept-Language header and only see the default language.
Google announced that they are now trying to crawl sites with different languages on the same URL. However, I don't know of any large sites that get good SEO traffic from multiple languages without having a set of URLs for each language.
Even if you have language detection on the
.com, having multiple language URL choices is required to ranking in multiple languages on search engines.
For more information see How should I structure my URLs for both SEO and localization?