Le problème que je suis face est que les robots Web ne peuvent pas indexer la page racine
Je n'ai pas vu ce problème avant. Webcrawlers suit certainement 302 redirections. Y a-t-il une chance que vous bloquez (sans le savoir) les visiteurs sans en-tête Accept-Language
comme webcrawlers?
Donc, ma question est: Sera-t-il préférable de faire fonctionner le site dans une langue par défaut? Pour avoir le site Web dans votre propre langue, vous devez sélectionner la langue lorsque vous êtes sur le site Web racine lui-même.
Je préfère préfère l'en-tête Accept-Language
et afficher la langue qui a le match le plus proche avec le dans la langue spécifiée en-tête (s) selon la HTTP 1.1 Specification. Si aucune n'est spécifiée, j'afficherais l'anglais comme langue par défaut ou au moins la langue qui a la plus grande couverture parmi l'audience du site (prévu).
que je vois dans l'histoire de votre question que vous êtes un développeur PHP, donc voici un extrait utile pour déterminer la correspondance la plus proche en fonction de l'en-tête Accept-Language
selon la spécification HTTP 1.1:
function get_language($available_languages, $preferred_language = 'auto') {
preg_match_all('/([[:alpha:]]{1,8})(-([[:alpha:]|-]{1,8}))?(\s*;\s*q\s*=\s*(1\.0{0,3}|0\.\d{0,3}))?\s*(,|$)/i',
$preferred_language == 'auto' ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : $preferred_language, $languages, PREG_SET_ORDER);
$preferred_language = $available_languages[0]; // Set default for the case no match is found.
$best_qvalue = 0;
foreach ($languages as $language_items) {
$language_prefix = strtolower($language_items[1]);
$language = $language_prefix . (!empty($language_items[3]) ? '-' . strtolower($language_items[3]) : '');
$qvalue = !empty($language_items[5]) ? floatval($language_items[5]) : 1.0;
if (in_array($language, $available_languages) && ($qvalue > $best_qvalue)) {
$preferred_language = $language;
$best_qvalue = $qvalue;
} else if (in_array($language_prefix, $available_languages) && (($qvalue*0.9) > $best_qvalue)) {
$preferred_language = $language_prefix;
$best_qvalue = $qvalue * 0.9;
}
}
return $preferred_language;
}
(ci-dessus est en fait une ré-écriture/finetune d'un exemple trouvé quelque part à php.net)
Il peut être utilisé comme suit:
$available_languages = array(
'en' => 'English',
'de' => 'Deutsch',
'nl' => 'Nederlands'
);
$requested_language = get_it_somehow_from_URL() ?: 'auto';
$current_language = get_language(array_keys($languages), $requested_language);
if ($requested_language != $current_language) {
// Unknown language.
header('Location: /' . $current_language . '/' . $requested_page);
exit;
}
Bonjour, vous avez raison, je suis un développeur PHP. J'ai aussi un système de construction dans le site Web qui détermine la langue basée sur la langue d'acceptation, quand il n'y a pas de langue acceptée, l'anglais est choisi. Ce système fonctionne bien. Seulement dans votre exemple ci-dessus, vous ne redirigez pas. Votre URL reste http://url.com même si la langue change. Je redirige depuis http://url.com vers http://url.com/nl. Je pense que le problème est là. http://bit.ly/hDWWQ, il s'agit d'un test de robot, il renvoie le code 302, mais il ne le suit pas. Ou est-ce que je me trompe? –
Ce code était juste un exemple de coup d'envoi. Je l'ai élargi quand même. Ce code est utilisé sous chaque [ce site] (http://www.google.com/?q=site%3Aofficeparkscharloo.com). – BalusC
Ah oui je vois qu'il est indexé, et il donne la même erreur de redirection 302 sur le test du robot. J'ai une autre question, utilisez-vous les outils google webmasters?Je veux savoir ce que vous obtenez lorsque vous faites un test 'voir en tant que googlebot'. Obtenez-vous le contenu du site Web est-il vide. –