I have basic SEO working on opencart 18.104.22.168 so that the default install (no theming) shows /iphone on the product page as expected.
When I change currency on that page the URL remains /iphone as expected.
But when I change language on that page the url gets a query string appended so it reads iphone?_route_=iphone
so SEO is broken by that language switch. It happens in either direction, changing back to English for example. Or just English to english.
So what next? I looked at the page source in the browser and the currencies and the languages are handled almost identically. There is a hidden INPUT field on each form that contains the redirect value, and it is wrong in the language form.
The forms are identified as id="form-language" and id="form-currency" respectively, so I guess I now have to work back to see where that redirection field is getting populated. Or not as the case may be. The SEO mapping would use a database query, my hunch is that the mapping is missing from an alias record. Or a rewrite method has got left out. Just a hunch. There must be a controller somewhere that is orchestrating the population of the view. Its nice that there is a good cop and bad cop to compare. I will dig some more, its a good way to see how they have used or abused MVC architecture here, I guess.
OK, update, I figured that catalog/common/language.php and catalog/common/currency.php might be a good jumping off point, so I did a winmerge compare and immediately found that this line unset($url_data['_route_']); was missing in the language.php, not sure why or how but I put in in and works for me.