什么是重定向?
URL 重定向,也称为 URL 转发,是一种当实际资源,如单个页面、表单或者整个 Web 应用被迁移到新的 URL 下的时候,保持(原有)链接可用的技术。-来自MDN
- http的重定向;
- HTML的重定向;
- JavaScript的重定向;
其中第一和第三种比较常见,大部分前端开发者应该写过第三种
window.location = 'https://xxx';
本文所介绍的301、302属于http的重定向。
http 协议提供了一种特殊形式的响应—— HTTP 重定向(HTTP redirects)来执行重定向操作(只是告知具体的状态码3xx,具体由浏览器执行)。
永久重定向
顾名思义,永久重定向说明当前的URL不再使用了,永远都重定向到新的URL,以状态码的形式告知浏览器。所以搜索引擎以及其他爬虫识别到该状态码时,会更新旧 URL 的资源。在http状态码中,以301代表永久重定向。
301转向(或叫301重定向,301跳转)是当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。
301转向表示被请求的资源已永久移动到新位置,后台会在响应头中返回 Location 字段,其中包含了需要重定向的新地址,浏览器接收响应之后会重定向到这个地址。如果没有额外指定,这个响应默认会被浏览器缓存。当下次再请求的时候,浏览器不会向服务器发送请求,而是直接从缓存中获取需要重定向的新地址。
应用场景包括:域名重定向,http到https等。
使用301跳转有啥好处呢?
SEO(搜索引擎优化)中提到一点:如果我们把一个地址采用301跳转方式跳转的话,搜索引擎会把老地址的PageRank等信息带到新地址,同时在搜索引擎索引库中彻底废弃掉原先的老地址。
301重定向是一种 HTTP 状态码,它告诉搜索引擎和浏览器某个页面已经永久性地转移到了另一个地址。当用户访问旧页面时,服务器会自动将其重定向到新页面,从而保持用户的流量和链接价值。与之相对的是302重定向,它告诉搜索引擎和浏览器某个页面是暂时性的转移,不会影响原始页面的权重。
网站301重定向是将一个域名永久性的转向另一个域名,例如有两个域名,那么301重定向就是将前者转向到后者,这里面的转向包括域名跳转以及权重转移。当你选择要去做301的时候,你首先要搞明白被动关系,哪个是定向的目标域名,哪个是被转向的域名,因为这里虽然对你的正常访问不会带来多大的影响,但是对你网站的SEO优化将会导致灭亡。
其实301重定向的目的,主要是为了降低因为网站改版、服务器错误等因素造成的网页地址更改对SEO造成的影响。
依据HTTP协议的301指令,能引导爬虫将权重和流量转移到新的网址,除了能提升用户体验度,还能在网站改版初期也能获得不错的权重和关键词排名。
举个例子:
搜索引擎会更新301的资源地址。如下,ahrefs博客旧地址是blog.ahrefs.com,搜索引擎抓取到301状态码后,会更新该资源地址为ahrefs.com/blog。搜索ahrefs博客可以看到用的是新的地址:
做301重定向的四种情况
- 带WWW的网址和不带WWW的网址
比如你的网站是ruangseo.com,如果域名www.ruangseo.com和ruangseo.com都指向了同一网站,那么搜索引擎就会认为这是两个网站,收录量和排名都不一样,由此会造成权重和流量分散,对网站SEO而言不是太友好。
- 网站改版造成的网址变化
改版以后的网站,网址URL链接可能会跟之前有所差别,如果你旧网站的文件已经被删除,搜索引擎仍然会循着之前的网址来访问这个文件。这样就会造成死链,不利于整站的SEO,为了减少这种情况的损失,可以手动添加301重定向将旧网址重定向到新的URL链接。
如果不进行重定向,这些页面的权重和流量将会丧失,对网站的SEO影响很大。而使用301重定向可以保持页面的权重和链接价值,从而提高网站的排名和流量。
- 程序错误
程序错误会造成一个内容对应多条链接的情况,为了集中权重,需要使用301重定向。
- 域名的迁移
域名迁移到新域名,能减少流量、权重和排名下降的损失。
临时重定向
302重定向又称之为302代表暂时性转移(Temporarily Moved ),英文名称:302 redirect。 也被认为是暂时重定向(temporary redirect),一条对网站浏览器的指令来显示浏览器被要求显示的不同的URL,当一个网页经历过短期的URL的变化时使用。
302要求客户端执行临时重定向。由于这样的重定向是临时的,客户端应该继续向原有地址发送请求。
这个响应默认不会被浏览器缓存,只有在 Cache-Control 或 Expires 中进行指定的情况下,这个响应才会缓存。新的临时性的 URI 应该在响应头的 Location 字段返回。没有指定缓存的情况下,当下次再请求的时候,浏览器会继续发送请求给服务器。
应用场景:http重定向到https、未登录的用户重定向到登录页、404后跳转首页等。
举例,用http://www.baidu.com访问百度。
301重定向与302重定向的区别
301重定向,也叫“永久性转移”,301会把原网页权重转移到重定向目标的网站上面。302跳转也称为,“临时跳属转”。
301重定向通常用于永久性的URL改变,例如网站迁移、改变域名等;302重定向通常用于临时性的内容改变和URL重定向,例如网站维护期间,原URL临时跳转到维护通知页面。
- 302重定向是暂时的重定向,搜索引擎会抓取新的内容而保留旧的网址。因为服务器返回302代码,搜索引擎认为新的网址只是暂时的。
- 301重定向是永久的重定向,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址。
- 对SEO的影响不同,对于搜索引擎而言,301意味着原网页已经不存在,需要更新索引;302表示原网页仍然存在,只是暂时修改了地址,因此搜索引擎会保留原网页的索引。
为什么302 重定向和网址劫持有关联?
从网址A 做一个302 重定向到网址B 时,主机服务器的隐含意思是网址A 随时有可能改主意,重新显示本身的内容或转向其他的地方。大部分的搜索引擎在大部分情况下,当收到302 重定向时,一般只要去抓取目标网址就可以了,也就是说网址B。如果搜索引擎在遇到302 转向时,百分之百的都抓取目标网址B 的话,就不用担心网址URL 劫持了。问题就在于,有的时候搜索引擎,尤其是Google,并不能总是抓取目标网址。
比如说,有的时候A 网址很短,但是它做了一个302 重定向到B 网址,而B 网址是一个很长的乱七八糟的URL 网址,甚至还有可能包含一些问号之类的参数。很自然的,A 网址更加用户友好,而B 网址既难看,又不用户友好。这时Google 很有可能会仍然显示网址A。由于搜索引擎排名算法只是程序而不是人,在遇到302 重定向的时候,并不能像人一样的去准确判定哪一个网址更适当,这就造成了网址URL 劫持的可能性。也就是说,一个不道德的人在他自己的网址A 做一个302 重定向到你的网址B,出于某种原因, Google 搜索结果所显示的仍然是网址A,但是所用的网页内容却是你的网址B 上的内容,这种情况就叫做网址URL 劫持。你辛辛苦苦所写的内容就这样被别人偷走了。
302 重定向所造成的网址URL 劫持现象,已经存在一段时间了。不过到目前为止,似乎也没有什么更好的解决方法。在正在进行的数据中心转换中,302 重定向问题也是要被解决的目标之一。从一些搜索结果来看,网址劫持现象有所改善,但是并没有完全解决。
302 短链接服务的例子
大家生活中想必都收到过广告短信,那些短信呢都带有链接让你去点,进而诱导你去参加它的活动。不知道大家有没有注意,以前很多链接都是很长一串,现在都变得非常短了,下面是我收到的短信:
我们可以看到,它的链接非常短,当你点击的时候就会进入它的活动页,在看看它的地址非常长,具体可以参考下图:
那么,和我们今天讲的有什么关系呢?
其实关系很大,具体我讲一下短链接服务的具体流程就清楚了。为了清晰明了,我们就以上面的京东的短链接来讲。
- 1.京东首先去短链接服务器申请一个指向实际活动页面的短链接,可以简单想象成一个map,key存的就是短链接,value存实际地址
- 2.将短链接以短信、微信消息、二维码等渠道发送给用户
- 3.用户点击短链接,访问短链接服务器,服务器返回状态302,在location带上真实的链接地址
- 4.浏览器接受到302会自动重定向到活动的实际页面。
短链接为什么使用302跳转?
301和302的跳转在短链接服务使用场景下的区别:用户第一次访问到某个短链接后,如果服务器返回301状态码,则这个用户在后续多次访问同一短链接,浏览器会直接请求跳转地址,而不是短链接地址,这样一来服务器端就无法收到用户的请求。如果服务器返回302状态码,且告知浏览器不缓存短链接请求,那么用户每次访问短链接,都会先去短链接服务端取回长链接地址,然后在跳转。从语义上来说,301跳转更为合适,因为是永久跳转,不会每次都访问服务端,还可以减小服务端压力。但如果使用301跳转,服务端就无法精确搜集用户的访问行为了。相反302跳转会导致服务端压力增大,但服务端此时就可精确搜集用户的访问行为。基于用户的访问行为,可以做一些分析,得出一些有意思的结论。比如可以根据用户IP地址得出用户区域分布情况,根据User-Agent消息头分析出用户使用不同的操作系统以及浏览器比例。
301重定向的几种方法
首先,你需要确定需要重定向的页面。这可能是一个已经删除的页面、一个更改了URL的页面或者一个移动到新位置的页面。
Apache服务器
在Apache服务器上设置301重定向,可以通过在.htaccess文件中添加代码来完成。以下是一个示例代码:
# Redirect old page to new page Redirect 301 /old-page.html https://www.guangweiblog.com/new-page.html
在这个示例中,我们将旧页面(/old-page.html)重定向到新页面(https://www.guangweiblog/new-page.html)。
Nginx服务器设置301
在Nginx服务器上设置301重定向,可以通过在配置文件中添加代码来完成。以下是一个示例代码:
# Redirect old page to new page location /old-page.html { return 301 https://www.guangweiblog.com/new-page.html; }
在这个示例中,我们将旧页面(/old-page.html)重定向到新页面(https://www.guangweiblog.com/new-page.html)。
阿里云通过显示URL配置
完成301重定向后,你需要测试它是否有效。你可以使用在线工具或者浏览器插件来测试301重定向。确保重定向后的页面与原始页面的内容相同。
总结
通过本文的介绍,我们了解了什么是 301 重定向,以及如何使用它来优化网站。在实际操作中,需要注意以下几点:
- 301重定向是一种永久性的转移,不要使用302重定向;
- 需要确定哪些页面需要进行重定向,避免重复或者不必要的重定向;
- 在服务器上配置重定向规则时,需要注意语法和格式;
- 在完成重定向后,需要测试和更新链接,确保重定向功能正常。