语言重定向与否

时间:2010-07-07 23:16:25

标签: redirect indexing multilingual

我的网站有多种语言。现在设置它的方式是它查看http接受语言并将用户重定向到特定语言,或者在找不到时使用默认语言。

我面临的问题是网页抓取工具无法索引根页面,因为它提供了302重定向。 http://www.mydomain.com被重定向到http://www.mydomain.com/nl/

网站可以编入索引的唯一方法是,我是否为整个网站提供站点地图,包括语言。我已经这样做了,但我几周没见过任何索引页面了。

所以我的问题是:让网站以默认语言运行会更好吗。

要使用您自己的语言建立网站,您必须在根网站本身时选择语言。

1 个答案:

答案 0 :(得分:3)

  

我遇到的问题是网页抓取工具无法索引根页

我以前没见过这个问题。 Webcrawlers肯定遵循302重定向。您是否(不知不觉)阻止访问者没有{webcaller}之类的Accept-Language标题?

  

所以我的问题是:让网站以默认语言运行会更好吗?要使用您自己的语言建立网站,您必须在根网站本身时选择语言。

我更喜欢Accept-Language标题,并根据HTTP 1.1 Specification显示与标题指定语言中最接近匹配的语言。如果没有指定,我会将英语显示为默认语言,或至少显示(预期)网站受众中覆盖率最高的语言。


我在您的问题历史记录中看到您是一名PHP开发人员,因此根据HTTP 1.1规范,这里有一个基于Accept-Language标头确定最接近匹配的有用代码:

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