这是一种将站点用户和搜索引擎重定向到不同于其最初请求的URL的方法。以下是一些最常用的重定向类型的说明。另外,您可以在我们的博客中找到HTTP状态代码的完整 列表,它们的含义和更多信息。
301重定向是永久重定向,可转移大约90-99%的链接汁。此重定向指示页面已被移至新地址,并且旧的URL应该被视为过时的。
302 redirect –临时重定向。此重定向传输0%的链接汁,在大多数情况下,不应使用。目前,Internet在HTTP协议下工作,该协议确定如何管理URL。在此协议的两个版本中,此服务器答复具有不同的响应状态:
HTTP 1.1协议中的307重定向成为302重定向的接收者。尽管主要搜索引擎会将其视为模拟信号302,但在几乎所有情况下,最好都使用301。此规则的例外情况是,内容仅是临时移动(例如,在技术维护期间)并且搜索引擎已经了解,您的服务器与HTTP 1.1兼容。但是,由于很难确定搜索引擎是否真正了解您的服务器与该新协议兼容,因此最好对临时移动的内容使用302重定向。
还有其他类型的重定向:使用Meta Refresh或JavaScript –在页面级别而不是在服务器级别执行。这是典型的Meta Refresh重定向的样子:
但是,希望使用这些重定向非常罕见,因为垃圾邮件发送者和门口都可以使用它们。同样,使用这些重定向时,链接汁几乎不会传输。
使用示例如下。
要将域名从www粘贴到没有www的情况:
RewriteCond %{HTTP_HOST} ^www.site\.com$ [NC]
RewriteRule ^(.*)$ Http://site.com/$1 [R=301,L]
用于在www上不带www的情况下进行粘合:
RewriteCond %{HTTP_HOST} ^site\.com$ [NC]
RewriteRule ^(.*)$ Http://www.site.com/$1 [R=301,L]
为了正确选择要粘贴的选项,建议考虑以下因素:
设计网站时,重要的是使用URL末尾的斜杠来确定格式,因为对于搜索引擎,URL示例有2种变体:
是不同的。因此,在您决定要访问该网站之后,您需要规定以下重定向
要在末尾删除斜杠:
RewriteCond %{HTTP_HOST} (.*)
RewriteCond %{REQUEST_URI} /$ [NC]
RewriteRule ^(.*)(/)$ $ 1 [L,R =301]
要将斜杠添加到地址栏的末尾:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
将一页重定向到另一页:
Redirect 301 /oldpage.html http://www.site.com/newpage.html
重定向主页的重复项
此代码确保任何包含指向页面名称的多个直接链接版本的主页地址(例如,default.htm或index.html)将被重定向到规范主页http://www.site.com:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*(default|index|main)\.(html|php|htm)\ HTTP/ [NC]
RewriteRule ^(([^/]+/)*)(default|main|index)\.(html|php|htm)$ http://www.site.com/$1 [L,R=301]
如果目录显示在URL结构中,那么如果您进行重定向,则还必须相应地更改URL。在这种情况下,您需要编写以下重定向:
RewriteRule ^(.*)/old-catalog/(.*)$ $1/new-catalog/$2 [R=301,L]
但是,如果旧目录的URL在以下域之后立即开始:www.site.com/old-catalog/,则您需要使用以下代码
RewriteRule old-catalog /(.*) / old-catalog /$1 [R=301,L]
如果您突然移至另一个平台或CMS,并且同时URL扩展名仅发生更改,则在这种情况下,您需要使用这种重定向。
RedirectMatch 301 (.*)\.php$ http://www.site.com$1.html
保护站点免受多个页面重复的使用示例
如果您在不同的域区域中购买了多个域,或者开发了一个新站点并将其附加到子域上,但是忘记了关闭该子域的索引编制,则必须重定向到主域:
RewriteCond %{HTTP_HOST} !^www\.site\.com
RewriteRule ^(.*)$ http://www.site.com/$1 [R=301,L]
因此,所有域名(例如www.site.ru,www.site.net,test.site.com)都将重定向到www.site.com。
有时,URL可能会“偶然”包含多个斜线,例如,www.site.com / catalog //// page-1.html。在这里,有必要使用一个斜杠www.site.com/catalog/page-1.html每页进行301重定向:
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]
同样,您可以将URL中的多个破折号放在一起:www.site.com/catalog/page-1.html,网址为www.site.com/catalog/page-1.html:
RewriteCond %{REQUEST_URI} ^(.*)--(.*)$
RewriteRule . %1-%2 [R=301,L]
由于搜索引擎会将小写字母考虑在内,因此在设计网站时,最好将所有URL都以小写字母添加。但是,如果您最初错过了这一点,那么最好在php脚本级别使用以下重定向代码:
$lowerURI=strtolower($_SERVER['REQUEST_URI']);
if($_SERVER['REQUEST_URI']!=$lowerURI)
{
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://" . $_SERVER['HTTP_HOST'] . $lowerURI);
exit();
}
考虑到两个主要搜索引擎Runet Yandex和Google的条件,这是迁移到新域的最有利策略:
然后,在旧站点上设置重定向的代码如下所示:
RewriteCond %{REQUEST_FILENAME} robots.txt$ [NC]
RewriteRule ^([^/]+) $1 [L]
RewriteCond %{HTTP_HOST} !^www\.site\.com
RewriteRule ^(.*)$ http://www.site.com/$1 [R=301,L]
检查robots.txt文件中的旧网站:
User-agent: Google
Disallow:
Host: newsite.com
如果您不精通技术,则可以使用生成基本重定向的服务:
在此类服务上,您只能替换自己的数据,并立即获得准备好的代码,用于域,目录或URL之间的重定向。
在重定向301进行每次逻辑更改后,有必要检查站点的可操作性:
您可以使用Sitechecker.pro中的重定向检查器工具。您可以浏览重定向链,301与302重定向以及网页的状态代码。
此外,为了更彻底地测试重定向,可以使用以下服务:
尽管有些细微差别,但Google提供了一些明确的规则,以便他确切地理解我们要说的话。简而言之,以下是搜索引擎如何理解这些说明的方法:
301 –嘿,搜索引擎:我的页面不再在这里,它已移至新页面。请从索引中删除旧页面,并将其链接源转移到新页面。
规范 –嘿,搜索引擎(适用于大多数搜索引擎):我有该页面的多个版本(或内容),请仅索引该页面的规范版本。我将让其他人可以访问其他页面,以便他们可以看到它们,但是,搜索引擎,请勿将它们包含在您的索引中,请将链接源转移到我的首选页面上。
总
通常,这两个选项都可以保留链接的内容,Google会对它们进行类似的解释。但是,通常,首选301重定向。
任何多步骤重定向。如果可能的话,建议不要进行多步重定向,这样它可以更快地工作,并且可以传输最大数量的链接。
使用错误的重定向类型。选择重定向的类型时,有必要考虑每个重定向的细微差别。
内部重定向的实现,而无需更改到新地址的链接。在站点上执行所有重定向之后,您需要检查站点的每个页面是否已经引用了一个新页面,并且不要在站点上进行重定向的页面上添加链接。这是每个人都会犯的典型错误。因此,要知道任何状态都已更改,请使用 网站监视工具。它允许您跟踪所有网站更改并进行正确的更正。
重定向到不相关的页面/内容。重定向应始终指向最相关的页面:在相似页面上或该页面所属目录/部分的分支上。
错误选择使用rel = canonical与301重定向。往上看。
重定向,其终点不是第200页。重定向应导致具有200个服务器响应的页面正常运行。否则,建议不要混淆Google机器人,并给出404答案。
重定向漫游器txt。因为,例如,当域粘附时,您需要为Yandex注册Host指令。
我们希望本指南将成为备忘单,并为您在您的网站上使用301重定向提供帮助。