When you are successful with your web application, there will be the day when you decide to deploy the application in more than your native language. Before we decided to go online with a multilingual version of diginights.com, I thought about challenges and also stumbled over some other problems later.
When your user changes the language of the website, the url should also be changed. Especially search engines do not like different content due to user settings on the same url. You can change the domain or add another query parameter to the url. But do not change the url for the already existing language! Change the url only for languages you will add!
By query param:
In order to enable search engines to determine which page is connected to the same page in another language, you have to add a small snippet in your header. This will be used to show the correct url for the matching language in search results and also prevents search engines for marking these connected pages as duplicate content. You will also have to add the current page.
For the current url http://example.com/, the correct snippet for english and germand would be look like
<link rel="alternate" hreflang="de" href="http://example.com/de/" /> <link rel="alternate" hreflang="en" href="http://example.com/" />
More information can be found on the Google Blog
Do not redirect the user by IP or browser language. Think about where the search engine bots will be redirected to. Instead of, you can suggest the user to switch. More important is to provide the correct link for the user one step earlier (SEO, Facebook). Of course, you can redirect authenticated users to their language chosen in settings.
When User A executes an action which ends in an email delivery to User B, the email language should be in the language of User B of course.
Yes, I have seen websites taking you to the homepage instead of the current page in the chosen language. This is not very user friendly.
When you have already existing rules in your robots.txt and you have chosen to add a query parameter for additional languages, do not forget to watch for matching rules!
When you already have “Disallow: /profile”, you will also have to add “Disallow: /en/profile” for english and all other languages.