PHP:Canonical Url在多语言网站上还没有傻瓜证明。如何使其更加一致?

时间:2010-12-31 07:35:37

标签: php url seo search-engine canonical-link

在设置Canonical标签时,我发现我没有从规范目的中获得所有的汁液......

GIVEN 目前,像website.org/juice?ln=de这样丑陋的网址通过apache变得很好,可以用更友好的方式访问,比如website.org/de/juice。现在,在这个多语言网站中,我希望一致性和所有页面都将其语言作为文件夹。我希望搜索引擎能够记住并更喜欢那些/language/page而不是他们丑陋的对手/page?ln=language

问题1:我是否想要使用Canonical将其与搜索引擎进行通信,从而在正确的轨道上安抚?

CURRENTLY 代码删除了不必要的字符串,以便规范网址很短:
当网址= http://website.org/de/juice?ln=whatever时 canocal url = http://website.org/de/juice

Sofar这么好,但是,它不会重写在网络/旧搜索引擎缓存中漫游的旧文件,因此出现以下情况: 当URL = http://website.org/juice?ln=xyz(缺少语言文件夹)时 然后规范成为= http://website.org/juice(而它应该是http://website.org/xyz/juice

问题2:我应该在我的代码中添加什么,为了识别没有设置语言文件夹的情况,可以改进/简化我的规范?

<?php
$domain = $_SERVER['HTTP_HOST'];     #domain like  website.org
$qsIndex = strpos($extensions, '?'); # strip off of string/query part (?ln=xyz)
$pageclean = $qsIndex !== FALSE ? substr($extensions, 0, $qsIndex) : $extensions;

$canonical = "http://" . $domain . $pageclean; 
?>

<html><head><link rel="canonical" href="<?=$canonical?>"></head>...

注意:语言可以是{de,nl,es,it,en,la,....还有zh-CN,zh-TW},所以无论ln?=

2 个答案:

答案 0 :(得分:0)

好吧,你的网页

不是网址,但网页知道它是什么语言?如果是,只需在规范URL中添加语言信息,如果页面不知道它是什么语言(并且您无法找到),则只需选择默认语言参数即可。从搜索引擎优化的角度来看并不完美,但比让这些旧网址保持/流浪更好。

作为降落伞你可以使用新的 <link rel="alternate" ...> 标记以软化该效果。

答案 1 :(得分:0)

在需要时将正确的子域放在规范上。像这样:

<?php
$domain = $_SERVER['HTTP_HOST'];     #domain like  website.org
$qsIndex = strpos($extensions, '?'); # strip off of string/query part (?ln=xyz)
$pageclean = $qsIndex !== FALSE ? substr($extensions, 0, $qsIndex) : $extensions;
$canonicalDomain = $domain;
if ($canonicalDomain == 'website.org'){
    $canonicalDomain = $_GET["ln"].".".$canonicalDomain;
}
$canonical = "http://" . $canonicalDomain . $pageclean; 
?>

<html><head><link rel="canonical" href="<?=$canonical?>"></head>...