虽然您可以动态处理请求,但您需要提供另一种方法,这就是原因。根据谷歌的说法,如果你关心SEO,你会想要确保页面语言是显而易见的。您可以即时执行帽子戏法并通过语言偏好切换语言,但如果您希望从搜索引擎获得该语言的任何流量,您还需要提供指向始终使用另一种语言的页面的链接。
如果此页面动态检测到语言,那么 Google 在抓取时看到的任何语言都是它将使页面成为的语言。
http://www.example.com/
如果该站点包含另一种语言的查询字符串标志,则该站点可能会以两种语言进行爬网,如果在您的站点某处存在指向第二种语言的链接。这些是很好的例子(单独的域是最好的选择),用于向 Google 展示西班牙语页面的位置。
http://es.example.com - best for SEO
http://www.example.com/?lang=es
http://www.example.com/es/
在您的 PHP 代码中,您只能捕获浏览器首选语言的初始 2 位代码。有些人实际上用一种以上的语言阅读(基本上任何不是美国人的人)。他们可能在他们的首选语言中使用其他语言,因此虽然来自法国的人可能使用fr
他们的首选语言,但他们也可能理解英语 ( en
),因此他们的浏览器接受的字符串在 Chrome 中可能看起来像这样:
fr,en-US;q=0.8,en;q=0.6
或者在 IE 中:
fr-FR,en-US;q=0.5
此代码将检查他们是否设置$_GET
了语言的标志并覆盖自动翻译。我找到了这段代码,然后对其进行了修改以用于我的目的,因为使用它的站点是欧洲的,大多数人会说多种语言。对于此代码,我已在此处对其进行了修改,因此如果他们的首选语言不是西班牙语,它将默认为英语。这将进入一个文件,该文件lang.php
将包含在每个页面上。
<?php
$langs = array();
if (!empty($_GET['lang'])){
$tempLang = $_GET['lang'];
//Setup the switch for all of the possible languages.
switch($tempLang){
case 'es':
$pref='es';
break;
default:
//english
$pref='en';
}
} elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
// break up string into pieces (languages and q factors)
preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse);
if (count($lang_parse[1])) {
// create a list like "en" => 0.8
$langs = array_combine($lang_parse[1], $lang_parse[4]);
// set default to 1 for any without q factor
foreach ($langs as $lang => $val) {
if ($val === '') $val = 1;
$lParse = strtolower(preg_replace('!\-.*$!','',$lang));
if(!isset($newLangs[$lParse])){
$newLangs[$lParse] = $val;
}
}
// sort list based on value
arsort($newLangs, SORT_NUMERIC);
}
//Set the preferred languages for the website (available translations)
$preferred = array('en','es');
//Check for overlap keeping the preference order
$intersect = array_values(array_intersect(array_keys($newLangs), $preferred));
//print_r($newLangs);
if(isset($intersect[0])){
//Set the first preference
$pref = $intersect[0];
if(preg_match('!^es!',$pref)){
$pref='es';
}
} else {
//default to english
$pref = 'en';
}
} else {
//default to english
$pref = 'en';
}
?>
在包括您在内的页面上,lang.php
您需要检查$pref
变量以显示该语言的正确翻译。
Javascript
您可以使用 Javascript 进行重定向,以使用相同的代码使页面加载其他语言,但是搜索引擎通常只查看 Javascript 的漏洞利用,并且不会跟踪 Javascript 中的链接。根据谷歌网站管理员指南:
使用文本浏览器(例如Lynx)来检查您的网站,因为大多数搜索引擎蜘蛛看到您的网站的方式与 Lynx 一样。如果 JavaScript、cookie、会话 ID、框架、DHTML 或 Flash 等花哨的功能使您无法在文本浏览器中看到您的所有网站,那么搜索引擎蜘蛛可能无法抓取您的网站。
您可以使用 AJAX 通过单击进行更改,但是需要将 AJAX 侦听的 URL 传递给参数,并且这些参数通常通过$_GET
变量传递。
IP查询
有些人尝试过的另一种方法是检查IP地址并反向查找位置以查看原产国的位置,然后他们会选择国家语言。这样做的问题是:
- 人们旅行
- 一些 IP 地址注册给其他国家的所有者(想想公司块),而不是用户浏览器所在的国家。
- 某些 IP 地址列表非常不准确。
饼干
并非所有用户都接受 cookie,某些公司防火墙甚至可能会剥离 cookie。