SEO过程中我们会遇到这样的问题:想同时将几个域名都绑定到服务器,但是又怕权重分散。网站做了一段时间后觉得域名不够理想,想更换域名,却又担心更换后权重消失。大家也一定了解到能通过301重定向解决这些问题,但是301重定向的操作方法却又重说纷纭,我们不知道到底使用怎么样的方法才能让权重集中或者在更换域名后让权重顺利的转移过来。下面CRAZYSEO工程师将常用的301重定向方法做了全面的总结,供大家参考。
首先我们需要了解什么是301重定向。301重定向(或叫301跳转、301转向)是用户或搜索引擎蜘蛛向网站服务器发出访问请求时,服务返回的HTTP数据流中头信息(header)部分状态码的一种,表示本网址永久性转移到另一个地址。其他常见的状态码还包括:200(表示一切正常);404(网页不存在);302(临时性转向);500 (内部程序错误)。除了301转向,网址转向还有其他方法,如302转向、JavaScript转向、PHP/ASP/CGI程序转向、Meta Refresh等。301重定向对搜索引擎优化具有不可替代的作用。用301重定向巩固规范版本的URL,重拾权重,防止搜索结果的重复内容。从搜索引擎优化角度出发,301重定向是网址重定向最为可行的一种办法。
其次我们需要知道什么情况下使用301重定向。网站改版经常需要用到301重定向:如网站更换域名,改变网页目录结构,网页被移到一个新地址,网页扩展名改变,如因需要把 .php 改成 .html。在这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户还会得到一个404页面错误信息,访问流量白白丧失。
使用301重定向不仅能使页面实现自动跳转,告诉用户你已经换了新的网址了。同时也告诉搜索引擎,这个才是真正的网址,搜索引擎只对重定向后的新网址进行索引,同时又会把旧地址权重如数转移到新地址下,从而不会让网站的排名因为网址变更而受到影响。一个网站注册了多个域名,需要通过301重定向让访问这些域名的用户自动跳转到其中一个主域名。这样做是为了避免造成大量复制内容,而遭到搜索引擎惩罚。因为在搜索引擎看来,每个域名都是一个独立的站,多个域名指向同一站,会被认定为站点雷同,内容复制,轻则不收录进入沙盒期,重则直接被搜索引擎屏蔽。
实现网址规范化也需要301重定向
假设有下面几个网址:
http://www.abc.com/index.html
http://abc.com
http://abc.com/index.html
都做301重定向到 http://www.abc.com(选定的规范化网址),搜索引擎就知http://www.abc.com 是规范化网址,而且会把上面列的网址权重传递集中到规范化网址。
目前Google会传递大部分权重,但不是百分之百权重。百度会传递所有权重。Google对301的识别、反应、完成权重传递,需要1~3个月时间。百度对301处理则比较保守,新旧URL会同时存在于数据库很长时间。
下来我们来看Apache服务器实现301重定向的方法
如果网站使用LAMP(Linux + Apache + MySQL + PHP)主机,可以利用Apache的mod_rewrite对URL进行重写或重定向。需要以下几步:
A.首先确保开启了mod_rewrite功能。用文本编辑器打开Apache安装目录\conf\httpd.conf,找到“#LoadModule rewrite_module modules/mod_rewrite.so”这行,去掉前面的“#”。继续查找“AllowOverride None”,修改为“AllowOverride All”。然后,重启Apache即可。
B.在你需要URL重定向的网站根目录下放一个.htaccess文件,文件名是.htaccess,Windows下不能直接建立,你可以用记事本另存为。
C.在.htaccess中通过正则表达式重定向到需要的页面。
将不带www的顶级域名301重定向到带www的域名
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^abc.com [NC]
RewriteRule ^(.*)$ http://www.abc.com/ [L,R=301]
将页面301重定向到另外一个页面
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^/oldpage.html$ /newpage.html[NC,L,R=301]
接着我们来看IIS服务器下做301重定向设置方法
示例:将abc.com 跳转到 www.abc.com
A.新建一个站点,对应目录如d:\site。该站点主要用于转向,目录可以是空的,不需要任何文件。然后为该站点绑定要跳转的域名abc.com,如图1。
图1 设置301转向
B.在IIS中选中刚才我们建立的站点,右键,属性,主目录,选择重定向到,输入另一个绑定好 www.abc.com 域名的网站地址(这个网站下存放有网站内容)。输入的地址是:
http://www.abc.com$S$Q,同时注意选中下面的"资源的永久重定向选项" 和 “上面输入的准确URL” 这2个选项。如图2。
图2 设置301转向
对于$S$Q字符,这里解释一下:$S 将请求的URL的后缀传递给新的URL。后缀是用重定向的URL 代替之后,初始URL 中所保留的部分。如果未选中 "上面输入的准确URL" 选项,则结果目标URL 的名称将具有所请求文件的名称(作为文件夹名称)以及文件名本身。
$Q 将初始URL中的参数(如 querystring 参数)传递至新的 URL,包括问号(?)。如果不加上 $S$Q 字符的话,内页的301都会跳转到首页,加上$S$Q字符的目的就是内页也能准确的跳转到新域名的对应内页。好了,这样就完成了301永久重定向的设置,设置好之后最好能测试一下301重定向是否成功。站长工具的HTTP状态工具(http://tool.chinaz.com/pagestatus/)即可查到,如果查到的返回状态是301就说明你已经成功了。
除了上面的方法我们还可以使用ISAPI_Rewrite实现IIS的301重定向。ISAPI_Rewrite是用于IIS的第三方URL重写组件。它是基于正则表达式的,类似Apache mod_rewrite功能,不仅可以实现URL重写,还可以实现301重定向。ISAPI_Rewrite组件有免费版(Lite)以及商业版(Full),免费版只支持全局httpd.conf 配置,不能对每个站点进行单独设置,而商业版可以让每个站点自定义URL重写规则,只要将httpd.ini 放在站点根目录下就能生效。请使用 ISAPI_Rewrite 2.x 或者 最新的3.0 版本(它兼容Apache的mod_rewrite的语法),而较早的1.x 版本不支持301重定向功能。
下面给出示例:
A. 将不带www的顶级域名301重定向到带www的域名
# ISAPI_Rewrite 2.x 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond Host: ^abc.com\.com$
RewriteRule (.*) http://www.abc.com [I,RP]
# ISAPI_Rewrite 3.0 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond %{HTTP:Host} ^abc.com\.com$
RewriteRule (.*) http://www.abc.com [NC,R=301]
B.不同域名之间的301转向
# ISAPI_Rewrite 2.x 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond Host ^www\.test10000\.com$
RewriteRule (.*) http://www.abc.com [I,RP]
# ISAPI_Rewrite 3.0 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond %{HTTP:Host} ^www\.test10000\.com$
RewriteRule (.*) http://www.abc.com [NC,R=301]
C. 将页面301重定向到另外一个页面
# ISAPI_Rewrite 2.x 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteRule ^/oldpage.html$ /newpage.html[I,O,RP,L]
# ISAPI_Rewrite 3.0 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteRule ^/oldpage.html$ /newpage.html[NC,L,R=301,O]
网页后台程序中也可以实现301重定向。如果页面是ASP/PHP/JSP/ASP.NET 可以再后台代码中做301重定向。但是CRAZYSEO工程师不推荐这样,因为在服务器上做301跳转是在你的页面执行之前就开始跳转,效率高。而程序代码中做301,要为每个页面头部加转向代码,比较麻烦。
示例如下
A.PHP下的301重定向
<?
Header("HTTP/1.1 301 Moved Permanently");
Header("Location: http://www.abc.com");
?>
B.ASP下的301重定向
<%@ Language=VBScript %>
<%
Response.Status = "301 Moved Permanently"
Response.AddHeader "Location", "http://www.abc.com"
%>
C.ASP .NET下的301重定向
<script runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = "301 Moved Permanently";
Response.AddHeader ("Location", "http://www.abc.com");
}
</script>
D.JSP下的301重定向
<%
response.setStatus(301);
response.setHeader("Location", "http://www.abc.com");
response.setHeader("Connection", "close");
%>
tips:如果返回报头中只有Location,但没有明确提到状态代码时,就意味着一个302临时重定向。请谨记于心。例如下面都是302重定向:
PHP 下的302重定向
<?
php header("Location: http://www.abc.com");
?>
Asp 下的302重定向
<%
Response.Redirect "http://www.abc.com/"
%>
ASP.NET 302重定向
<script runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
Response.Redirect("http://www.abc.com");
}
</script>
JSP 下的302重定向
<%
response.sendRedirect("http://www.abc.com");
%>
总结:301重定向是一种对搜索引擎最友好的网址转向方法。在众多重定向技术中,301永久性重定向是最为安全的一种途径,也是极为理想的一款解决方案。无论是URL永久性改变,还是多种格式URL规范化都离不开301重定向。
需要值得注意的是,301重定向一般需要3-6个月甚至更长的时间才能生效,这个主要根据网站的实际情况来决定,一般来说,内容越大的网站301重定向生效的周期越长。大家在这个过程中切记一旦执行了301重定向操作就不要往复不定。
近许多兄弟问我网站301有什么注意事项,应该怎样正确做301、本篇内容本着实战的原则、给大家讲解一下!
首先讲一下301应用在什么场景里、下面我们分为两种场景:
一、需要换域名时,比如最初用的域名A、后面由于各种原因感觉A不好,需要换成了B、那么这个时候又不想损失自己的流量、就需要用到301!
二、当你一个网站实在做不起来的时候、换个老米、把那个做不起来的网站直接301到老米上,也会有不错的效果!(本文案例)
案例说明 :
一直带兄弟们做权重站、虽然成功率比较高、但也不能保证100%成功!就以我5个算命站为例子、成功了4个、这个一直没上去、于是买了个好点的米、进行301、毕竟10000多的收录不能浪费!下面我们一步一步给大家演示301全过程!(本文301网址:www.hbatl.cn,被301的网址:www.pkrmxx.cn)
第一步:首先新建一个站点,把你需要做301跳转的站点的数据库以及源码上传上去,保证301跳转站点和这个新站点数据以及链接一一对应(新站点域名解析成、你最终要301去的网址)
第二步:打开宝塔找到要做301跳转站点网站 点击设置
第三步:301重定向有两个版本,此教程使用【重定向测试版】进行演示
第四步:新增重定向,保留URL参数可设置关闭或打开(301需要保留),两者区别如下:
1:如保留URL参数那么访问httpL//www.a.com/1.html 就会重定向到你 301网站的1.html httpL//www.b.com/1.html。
2:如不保留URL参数 那么访问httpL//www.a.com/1.html 就会重定向到你设置的主域名。
第五步:以上步骤完成了宝塔301设置,但是步骤还没完重点是站长资源平台(划重点):
1:需要在百度站长资源平台同一账号下认证你的 301站点以及新站点域名
2:选择你要做301的站点,选择网站改版。
3.添加站点改版(一般直接选择站点改版)然后静静等待百度校验完成,至此301全部完成!
这里说个小技巧、如上图才算真正完全了301、如果提示【部分改版】【验证失败】,则需要查找问题、或删除重新提交、直到显示【改版完成】,一些兄弟在操作的时候、连看都不看、后面没改版成功、权重也没转移,导致流量损失,这是一个非常重要的点!
近想把一个网站改造成https访问,但是一些都做好了,去百度站长平台认证https,结果怎么提交都是出现“请将您的http站点301重定向到https站点”,在百度站长社区提问也没有人回答,最后只能自己摸索。后面找到了原因:原来百度的https认证是严格遵守301重定向的,我用的是iis6,之前的代码为:
RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteRule (.*) https://%{SERVER_NAME}/$1 [R]
这种写法虽然能够实现将http全部跳转到https,但是在百度站长平台是通不过的。最后将代码修改为以下后便通过了
RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
下面我搜集整理了各种网站环境的部署https(ssl)后设置301跳转的代码,希望能够对大家有所帮助。
linuxt系统 apache环境
云服务器:在对应站点根目录下新建(通过ftp或登录wdcp管理面板中:站点列表-文管-进入public_html-创建文件)一个文件命名为.htaccess。
虚拟主机:可以通过ftp或登录后进入到主机管理面板-文件管理,进入wwwroot,新建一个文件命名为.htaccess文件,保存即可。
编辑.htaccess文件写入以下规则:
<IfModule mod_rewrite.c>RewriteEngine OnRewriteCond %{HTTP:From-Https} !^on$ [NC]RewriteRule ^(.*)$ https://www.abc.com/$1 [R=301,L] # www.abc.com对应修改为您自已的域名 RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ https://www.abc.com$1 [R=301,L] # www.abc.com对应修改为您自已的域名 </IfModule>
Nginx环境
编辑nginx站点配置文件(登录wdcp管理面板中:站点列表-文管-虚拟主机站点文件nginx-对应站点配置文件),添加以下规则
server{listen 80;server_name abc.com;rewrite ^(.*) https://www.abc.com$1 permanent; # wajsw.com对应修改为您自已的域名 }
Windows系统 II7环境
<?xml version="1.0" encoding="UTF-8"?><configuration> <system.webServer> <rewrite> <rules> <rule name="301" stopProcessing="true"> <match url="^(.*)$" ignoreCase="false" /> <conditions logicalGrouping="MatchAll"> <add input="{HTTPS}" pattern="^on$" negate="true" /> </conditions> <action type="Redirect" url="https://www.abc.com/{R:1}" redirectType="Permanent" /> # www.abc.com对应修改为您自已的域名 </rule> </rules> </rewrite> </system.webServer> </configuration>
Windows系统 II6环境
配置一个Rewrite,编辑该Rewrite的规则文件httpd.conf或者.htaccess 添加以下规则。
RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
tomcat环境
在web.xml最后一行</web-app>代码之前添加如下代码即可
<security-constraint> <!-- Authorization setting for SSL --> <web-resource-collection > <web-resource-name >SSL</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint>
注: 1、discuz使用301方式强制将http跳转到https后会导致后台uc通信失败。
2、通过该方式设置跳转后,如无法正常跳转访问,请单独建立站点绑定https域名,仍在原来站点设置跳转规则。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我爱技术网。
*请认真填写需求信息,我们会在24小时内与您取得联系。