2010-07-07 8 views
2

J'ai un site Web qui a plusieurs langues. La façon dont ceci est mis en place maintenant est qu'il regarde la langue d'acceptation http et redirige l'utilisateur vers la langue spécifique, ou utilise une langue par défaut quand aucun n'est trouvé.Redirection de langue ou non

Le problème que je suis confronté est que les robots d'indexation ne peuvent pas indexer la page racine, car il donne une redirection 302. http://www.mydomain.com est redirigé vers http://www.mydomain.com/nl/

La seule façon d'indexer le site Web est de fournir un sitemap pour l'ensemble du site Web, y compris les langues. Je l'ai fait mais je n'ai pas vu de pages indexées depuis des semaines maintenant.

Donc, ma question est la suivante: vaudra-t-il mieux que le site fonctionne dans une langue par défaut?

Pour avoir le site Web dans votre propre langue, vous devez sélectionner la langue lorsque vous vous trouvez sur le site Web racine.

Répondre

3

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; 
} 
+0

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? –

+0

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

+0

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. –