2010-07-07 3 views
2

У меня есть веб-сайт с несколькими языками. Теперь он настроен на то, что он смотрит на язык приема http и перенаправляет пользователя на конкретный язык или использует язык по умолчанию, когда ни один не найден.Язык перенаправлен или нет

Проблема, с которой я столкнулся, заключается в том, что веб-сканеры не могут индексировать корневую страницу, поскольку она дает перенаправление 302. http://www.mydomain.com перенаправляется на http://www.mydomain.com/nl/

Единственный способ проиндексировать сайт, если я поставлю карту сайта для всего веб-сайта, включая языки. Я сделал это, но я не видел никаких индексированных страниц уже несколько недель.

Итак, мой вопрос: будет ли лучше, чтобы сайт работал на языке по умолчанию.

Чтобы иметь сайт на своем родном языке, вы должны выбрать язык, когда находитесь на самом корневом сайте.

ответ

3

Проблема, с которой я столкнулся в том, что поисковые роботы не могут индексировать корневая страница

Я не видел эту проблему раньше. Веб-браузеры, безусловно, следуют за 302 переадресациями. Любой шанс, что вы (не подозревая) блокируете посетителей без заголовка Accept-Language, как веб-браузер?

Так что мой вопрос: будет ли лучше, чтобы сайт работал на языке по умолчанию. Чтобы сайт был на вашем собственном языке, вы должны выбрать язык, когда находитесь на самом корневом веб-сайте.

Я бы предпочел заголовок Accept-Language и отображения языка, который имеет самое близкое соответствие с в заголовке указанного языка (ов) в соответствии с HTTP 1.1 Specification. Если ни один не указан, я бы отображал английский как язык по умолчанию или, по крайней мере, язык, который имеет наибольший охват (ожидаемой) аудитории веб-сайта.


Я вижу в истории вопроса, что вы разработчик PHP, так вот полезный фрагмент кода, чтобы определить ближайший матч на основе Accept-Language заголовка согласно спецификации 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; 
} 

(выше на самом деле переписывание/точная настройка примера найденного где-то на php.net)

Он может быть использован следующим образом:

$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

Здравствуйте, вы правы. Я разработчик PHP. У меня также есть система, встроенная в веб-сайт, который определяет язык на основе языка принятия, когда нет признанного языка, выбранного, выбирается английский. Эта система работает нормально. Только в вашем примере здесь выше вы не перенаправляете. Ваш URL-адрес остается на http://url.com даже при изменении языка. Я перенаправляю с http://url.com на http://url.com/nl. Я думаю, что проблема сидит там. http://bit.ly/hDWWQ, это тест-сканер, он возвращает код 302, но он не следует за ним. Или я ошибаюсь? –

+0

Этот код был просто примером для запуска. Я все равно расширил. Этот код используется под каждым [этим сайтом] (http://www.google.com/?q=site%3Aofficeparkscharloo.com). – BalusC

+0

Ах да, я вижу, что он проиндексирован, и он дает ту же самую ошибку переадресации 302 в тесте обходчика. У меня есть другой вопрос: вы используете инструменты Google для веб-мастеров?Я хочу знать, что вы получаете, когда вы проводите тест «view as googlebot». Получаете ли вы содержимое веб-сайта, оно пустое. –

Смежные вопросы