Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:规范的Url在多语言网站中还不是傻瓜式的。如何使其更加一致?_Php_Url_Seo_Search Engine_Canonical Link - Fatal编程技术网

PHP:规范的Url在多语言网站中还不是傻瓜式的。如何使其更加一致?

PHP:规范的Url在多语言网站中还不是傻瓜式的。如何使其更加一致?,php,url,seo,search-engine,canonical-link,Php,Url,Seo,Search Engine,Canonical Link,在设置规范标签时,我发现我并没有从规范目的中获得所有的能量 给定 目前,像website.org/juice?ln=de这样丑陋的URL是通过apache创建的,可以通过更友好的方式访问,比如website.org/de/juice。现在,在这个多语言网站中,我希望保持一致性,所有页面都将其语言作为一个文件夹。我希望搜索引擎记住并更喜欢那些/language/page,而不是那些丑陋的对手/page?ln=language 问题1:我想如何使用Canonical将此信息传达给搜索引擎,这是正确的

在设置规范标签时,我发现我并没有从规范目的中获得所有的能量

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

问题1:我想如何使用Canonical将此信息传达给搜索引擎,这是正确的吗

目前,代码删除了不必要的字符串,因此规范URL很短:
当URL=
canocal url=

如此之好,但它不会重写在网络上漫游的旧文件/旧搜索引擎缓存,因此出现以下情况:
当URL=(缺少语言文件夹)
然后canonical变为=(而它应该是

问题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>...

嗯,你的网页

不是URL,而是页面知道它是什么语言?如果是,只要在规范URL中添加语言信息,如果页面不知道它是什么语言(并且您无法找到)你只需要选择一个默认的语言参数。从搜索引擎优化的角度来看,这并不完美,但比让这些旧的URL停留/流浪要好得多

作为降落伞,你可以使用新的

标记以减弱这种效果。

在需要时将正确的子域放在规范上。类似于:

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


如果您将301从旧的url复制到新的url,那么更改最终应该会传播。感谢您>>已经尝试过了,但是apache规则出现了一个循环:漂亮的url获取了丑陋的(真实的)文件,您的建议将意味着重写丑陋的(真实的)文件对于优秀的用户…apache自身陷入了一场循环战!这就是我尝试规范方法的原因。感谢Franz,是的,页面知道该语言,并且该语言设置在页面中:
和规范:
这就够了吗?好吧,如果旧页面知道它的语言是“NL”,就留在示例中然后规范应该是。然后是你与谷歌沟通的URL,谷歌会将你的访问者发送到。