Le nec plus ultra pour faire du e-commerce à l’international est d’avoir des urls étrangères pour chaque langue étrangère. Mais ce n’est pas suffisant. Il faut aussi associer une ip étrangère à chaque domaine (par exemple, une ip anglaise pour le domaine anglais dans le cas de la langue anglaise). Dans Prestashop, le recours au multi-boutique est LA solution.
Mais là apparait un soucis de taille : toutes les langues sont disponibles dans toutes les boutiques, et en plus elles sont toutes indépendantes (comprenez : si vous modifiez le français de la boutique anglaise, cela n’affectera pas le français de la boutique française). Voyons comment parvenir à ne garder qu’une langue par boutique.

Installation

La première étape est simple :

  • activer le multi-boutique dans Configurer > Paramètres de la boutique > Paramètres Généraux
  • ensuite on crée au moins une boutique supplémentaire avec une url complètement différente

Et voilà le multi-boutique est actif.

Une langue par boutique

Supposons que nous ayons deux langues installées (anglais et français) et deux boutique, A étant la boutique française (url: http://www.boutiqueA.fr) et B la boutique anglaise (url: http://www.boutiqueB.en).  Comme je le disais plus haut, les deux langues sont disponibles dans les deux boutiques, à savoir qu’un produit peut s’afficher :

  • en français dans la boutique française (http://www.boutiqueA.fr/fr/produit)
  • en anglais dans la boutique française (http://www.boutiqueA.fr/en/product)
  • en français dans la boutique anglaise (http://www.boutiqueB.en/fr/product)
  • en anglais dans la boutique anglaise (http://www.boutiqueB.en/en/product)

Ce qui va donner 4 urls différentes là où on en veut que 2. Pas idéal pour le référencement ! La solution est simple, il suffit de rediriger les pages (dans un .htaccess) anglaises de  la boutique française vers la boutique anglaise (autrement dit, les pages anglaises de la boutique A vers la boutique B) :

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www.(boutiqueA.fr)$
    RewriteRule ^en/(.*)$ http://www.boutiqueB.en/en/$1 [L,R=301]
</IfModule>

Et on fait le même travail avec les pages françaises : on rediriger les pages françaises de  la boutique anglaise vers la boutique françaises (autrement dit, les pages françaises de la boutique B vers la boutique A) :

<IfModule mod_rewrite.c>
    RewriteEngine on
    # Redirect english pages
    RewriteCond %{HTTP_HOST} ^www.(boutiqueA.fr)$
    RewriteRule ^en/(.*)$ http://www.boutiqueB.en/en/$1 [L,R=301]
    # Redirect french pages
    RewriteCond %{HTTP_HOST} ^www.(boutiqueB.en)$
    RewriteRule ^fr/(.*)$ http://www.boutiqueA.fr/fr/$1 [L,R=301]
</IfModule>

Une 3ème boutique

Quid d’une troisième boutique ? Ajoutons la boutique C, en italien. On comprend mieux le rôle des parenthèses :

<IfModule mod_rewrite.c>
    RewriteEngine on
    # Redirect english pages
    RewriteCond %{HTTP_HOST} ^www.(boutiqueA.fr|boutiqueC.it)$
    RewriteRule ^en/(.*)$ http://www.boutiqueB.en/en/$1 [L,R=301]
    # Redirect french pages
    RewriteCond %{HTTP_HOST} ^www.(boutiqueB.en|boutiqueC.it)$
    RewriteRule ^fr/(.*)$ http://www.boutiqueA.fr/fr/$1 [L,R=301]
    # Redirect italian pages
    RewriteCond %{HTTP_HOST} ^www.(boutiqueB.en|boutiqueA.fr)$
    RewriteRule ^it/(.*)$ http://www.boutiqueC.it/it/$1 [L,R=301]
</IfModule>

Langue par défaut

Il nous reste un dernier réglage : nous voulons que chaque boutique  affiche sa langue par défaut :

  • le français pour la boutique française
  • l’anglais pour la boutique anglaise
  • l’italien pour la boutique italienne

Prestashop a la mauvaise manie de détecter la langue du navigateur et de servir cette langue. Un petit tour dans International > Localisation section paramètres