Comment construire un site bilingue

Un site bilingue peut s'afficher dans une langue au choix ou automatiquement dans la langue du navigateur. Le second choix permet un accès facilité au visiteur mais la page d'accueil aura un PageRank moindre.

Il faut cependant savoir que du point de vue du référencement il est préférable d'avoir des points d'entrées différents pour chaque langue.

Afficher le site dans la langue du navigateur avec PHP

Ce code a été testé avec les principaux navigateurs: Crome, Firefox, Opéra, Safari.
Le fichier est sauvé sous le nom de index.php
Dans l'exemple, la page en français a le nom de fichier index-fr.php et la page en anglais index-en.php
On peut ajouter autant de langues que l'on veut en suivant le même principe...

<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"</head>
<?php
                 
$lang = "en";
$serv = $_SERVER[HTTP_ACCEPT_LANGUAGE];
if($serv != false)
{                  
    $temp = explode(",",$serv);            
    $temp = strtolower(substr($temp[0]),0,2);            
    if($temp == "fr") $lang="fr";
}                  
?>

<iframe                  
<?php
    echo "src=\"index-$lang.php\"";
?>
 border=0 frameborder="no" RESIZE scrolling="YES" noresize >
</iframe>
<noframes>
<body>
    Frames requises.
</body>
</noframes>
</html>

Si l'on installe les langues dans des sous-répertoires, par exemple fr, en, etc. on écrira, en se passant des frames:

<?php
$lang="en";
$serv = $_SERVER[HTTP_ACCEPT_LANGUAGE];
if($serv != false)
{
$temp = explode(",",$serv);
$temp = strtolower(substr($temp[0],0,2));
if($temp == "fr") $lang="fr";
}
header("HTTP/1.1 302 Redirect");
header("location:https://www.scriptol.fr/$lang/");
?>

Les noms des pages

La page d'accueil dans une langue donnée ne porte pas nécessairement le nom index, on peut lui donner un nom significatif comme conception.php pour la page française et design.php pour la page anglaise, et c'est une bonne chose pour le référencement.
Dans ce cas on modifiera les lignes suivantes dans le code, en remplaçant les mots de l'exemple par les mots-clés choisis selon le thème de votre site:

$lang = "design";
if($temp == "fr") $lang="conception";
echo "src=\"$lang.php\""; 

Lorsque vous référencez le site, vous donnerez pour adresses: https://www.scriptol.fr/conception.php ou https://www.scriptol.fr/design.php (remplacez scriptol.fr par le nom de domaine de votre site et remplacez les noms des pages).

Redirection d'accueil conditionnelle

Pour éviter la perte de PR, une solution consiste à mettre la page d'une langue donnée comme page d'accueil du site, par exemple la page d'accueil en français se nommerait index.php, et elle contiendrait le code PHP qui redirige les visiteurs des autres langues.
L'inconvénient, si cette page est importante, ce qui est souvent le cas d'une page d'accueil, est le chargement de deux pages quand on entre sur le site, pour les visiteurs des autres langues.

Le code de redirection selon la langue du navigateur est disponible dans un fichier zip.

La redirection selon l'IP

Certains services, dont ceux de Google lui-même, identifient l'origine de l'internaute à partir de son adresse IP, et le redirigent automatiquement (et sans lui laisser le choix) sur le site correspondant à sa langue. Si l'on veut installer un tel système, il faudra évidemment pouvoir identifier l'origine d'un utilisateur, et pour ce faire, on trouvera des réponses dans l'article Comment connaître le pays d'une adresse IP.

Site bilingue et moteurs de recherche

Pour choisir parmi un des procédés précédent, il critère est déterminant: comme le site sera vu par les algorithmes des moteurs de recherche.

Le code de redirection automatique selon le navigateur n'a pas d'incidence négative sur le PageRank des pages autres que la page d'accueil, contrairement aux solutions utilisant la fonction PHP "header" sur laquelle s'arrêtent les robots des moteurs de recherche.
Ce n'est pas une solution parfaite, on perd un point de PR sur la page d'accueil, le problème semble inhérent au site bilingue, toutes les solutions ont des inconvénients.

Ce que recommande Google : Le staff en charge de l'algorithme et des questions de l'optimisation des sites s'est exprimé dans une table ronde avec les webmasters en octobre 2008, dont l'essentiel des questions est repris dans l'article Réponses de Google aux webmasters.

Il est préférable pour un site anglais et français par exemple, du point de vue des moteurs de recherche:

En fait ces trois solutions conviennent chacunes pour des cas de figure différents.

Les sous-domaines

Dans le cas présent, la moins pertinente serait l'utilisation de sous-domaines. En effet, ils sont vus par les moteurs de recherche comme des sites différents, d'où division du PageRank. Mieux vaut un site plus gros que deux petit sites.
En fait on ne devrait utiliser les sous-domaines que pour des utilisateurs multiples ayant chacun accès à un espace web propre.

Les domaines de pays

Utiliser des domaines différents à le même inconvénient mais avec l'avantage de l'extension en relation avec la langue et une URL plus claire pour le public.
L'extension relative à une langue, comme .fr par exemple, donne un avantage pour le positionnement, sur la recherche locale.

Les sous-répertoires

Cependant, le fait d'avoir un site plus important peut l'emporter sur les avantages de la géolocalisation.
Si le trafic sur le site n'est pas suffisamment important pour justifier plusieurs noms de domaines, les sous-répertoires sont préférables. L'utilisation d'un script pour adapter la langue à l'utilisateur est selon mon expérience, efficace avec les précautions indiquées dans l'article.