[ad_1]
网站会更改结构,删除页面,并且经常从一个域移动到另一个域。处理方式 重新导向 为了避免失去排名并帮助搜索引擎了解您所做的更改,正确正确至关重要。
重定向的状态码以数字3(即3XX)开头。有 100种不同 可能的状态码,但只有一个 很少实施 携带某些信息。
在本指南中,我们将介绍与SEO相关的3XX重定向。
301:永久移动
此众所周知的重定向向客户端*指示资源已更改到另一个位置,并且它应将新的URL用于以后的请求。当搜索引擎看到301重定向时,它们会将旧页面的排名传递给新页面。
进行更改之前,在决定使用301重定向时需要小心。这是因为如果您以后改变主意并决定删除301重定向,则旧的URL可能不再排名。
即使您交换了重定向,也无法帮助您将旧页面恢复到之前的排名位置。因此,主要要记住的是,无法撤消301重定向。
(*对于可能与通用名称混淆的初学者,将使用客户端而不是浏览器,因为不仅浏览器能够浏览URL,而且搜索引擎机器人不是浏览器。)
307:临时重定向
在HTTP 1.1中,301重定向表示资源已临时移动,客户端应将原始资源的URL用于以后的请求。
对于SEO,这意味着客户端应遵循重定向,但搜索引擎不应将其SERP中的链接更新到新的临时页面。
在307重定向中,PageRank不会从原始资源传递到新资源–与301重定向相反。
302:发现
这意味着客户端正在寻找的资源是在HTTP 1.1版本的另一个URL上找到的,但已在HTTP 1.0中临时移动了。
302和307
在几乎所有情况下,302和307重定向都将是 对待一样。但是302状态代码并不一定意味着客户端必须遵循重定向,并且如果它决定呆在那里,也不会被视为错误。
现代客户很可能会跟随新的目的地,但是一些老客户可能会错误地停留在相同的URL上。
与302状态代码相反,307状态代码保证不会更改请求方法。例如,GET请求必须继续进行GET和POST到POST。
使用302状态代码,一些旧的或有漏洞的客户端可能会更改方法,这可能会导致意外行为。
对于临时重定向,您可以使用302或307-但我更喜欢307。
对于例行重定向任务,应使用301(永久重定向)和307(临时重定向)状态码,具体取决于您在网站上实施的更改类型。在两种情况下,重定向的语法都不会改变。
您可以通过Apache上的服务器配置文件.htaccess,Nginx上的example.conf文件或通过插件(如果使用WordPress)来处理重定向。
在所有情况下,它们都具有用于编写重定向规则的相同语法。它们仅与配置文件中使用的命令不同。例如,在Apache上的重定向将如下所示:
选项+关注符号链接
在RewriteEngine上
重定向匹配301 ^ / oldfolder / / newfolder /
(您可以阅读有关符号链接的信息 这里 )。
在Nginx服务器上,它看起来像:
重写^ / oldfolder / / newfolder /永久;
用于告知服务器状态码重定向的命令和操作命令不同。例如:
- 重定向服务器的状态码:“ 301”与“永久”
- 动作命令:“ RedirectMatch”与“ rewrite”。
但是重定向的语法(^ / oldfolder / / newfolder /)都相同。
在Apache上,确保在服务器上启用了mod_rewrite和mod_alias模块(负责处理重定向)。
由于使用最广泛的服务器类型是Apache,因此以下是.htaccess apache文件的示例。确保.htaccess文件具有这两行:
选项+关注符号链接
在RewriteEngine上
置于重定向规则上方,并将规则置于其下方。
要了解以下示例,您可以参考以下表格: 正则表达式 基本。
* | 零次或多次 |
+ | 一次或多次 |
。 | 任何单个字符 |
? | 零次或一次 |
^ | 字符串的开始 |
$ | 字符串结尾 |
a | b | OR运算符“ |” a或b |
(z) | 记住调用$ 1时要使用的匹配项 |
重定向单个URL
删除页面或更改页面URL时使用的最常见且使用最广泛的重定向类型。例如,假设您将URL从/ old-page /更改为/ new-page /。重定向规则为:
RewriteRule ^ old-page(/?| /.*)$ / new-page / [R=301,L]
要么
重定向匹配301 ^ / old-page(/?| /.*)$ / new-page /
两种方法之间的唯一区别是,第一种使用Apache mod_rewrite模块,第二种使用mod_alias。可以使用两种方法来完成。
正则表达式“ ^”表示URL必须以“ / old-page”开头,而(/?|/.*)$表示必须重定向“ / old-page /”后跟斜杠“ /”或不完全匹配的任何内容。到/ new-page /。
我们也可以使用(。*),即^ / old-page(。*),但是问题是,如果您有另一个具有类似URL的页面,例如/ old-page-other /,则当我们只想重定向/ old-page /。
以下URL将匹配并定向到新页面:
/旧页/ | /新一页/ |
/旧页 | /新一页/ |
/old-page/?utm_source=facebook.com | /new-page/?utm_source=facebook.com |
/ old-page / child-page / | /新一页/ |
它将页面URL的任何变体重定向到一个新的页面。如果我们以以下形式使用重定向:
重定向301 /旧页面/ /新页面/
…如果没有正则表达式,则所有具有UTM查询字符串的网址,例如/old-page?utm_source=facebook.com(这是很常见的,因为URL通常用于在社交网络上共享),最终将以404开头。
甚至没有尾部斜杠“ /”的/ old-page也会以404结尾。
重定向所有除外
假设我们有很多URL,例如/ category / old-subcategory-1 /,/ category / old-subcategory-2 /,/ category / final-subcategory /,并且希望将所有子类别合并到/ category / final-subcategory /。我们在这里需要“所有除外”规则。
RewriteCond%{REQUEST_URI}!/ category / final-subcategory /
RewriteCond%{REQUEST_FILENAME}!-f
RewriteRule ^(类别/)。 / category / final-subcategory / [R=301,L]
在这里,我们要重定向第三行/ category /下的所有内容,除非第四行是/ category / final-subcategory /。第二行还有“!-f”规则,这意味着忽略任何文件,例如图像,CSS或javascript文件。
否则,如果我们拥有诸如“ /category/image.jpg”之类的资产,它也将被重定向到“ / final-subcategory /”并导致图像中断。
目录变更
如果您进行了类别重组,并且想要将旧目录下的所有内容都移动到新目录中,则可以使用以下规则。
RewriteRule ^旧目录$ /新目录/ [R=301,NC,L]
RewriteRule ^旧目录/(.*)$ /新目录/ $ 1 [R=301,NC,L]
我在目标服务器中使用$ 1告诉服务器,它应该记住/ old-directory /之后的URL中的所有内容(即/ old-directory / subdirectory /),并将其(即“ / subdirectory /”)传递到目的地。结果,它将被重定向到/ new-directory / subdirectory /。
我使用了两个规则:一种情况是末尾没有斜杠,另一种情况是有斜杠。
我可以在末尾使用(/?|.*)$ RegExp将它们组合为一条规则,但是当所请求的没有尾部斜杠的URL有查询字符串时,这会引起问题并在URL末尾添加“ //”斜杠(即,“ / old-directory?utm_source = facebook”将被重定向到“ / new-directory //?utm_source = facebook”)。
从网址中删除单词
假设您的网站上有100个网址,城市名称为“芝加哥”,并且想要将其删除。
例如,对于URL http://yourwebiste.com/example-chicago-event/,重定向规则为:
RewriteRule ^(。*)-芝加哥-(。*)http://%{SERVER_NAME} / $ 1- $ 2 [NC,R=301,L]
如果示例URL的格式为http:// yourwebiste.com/example/chicago/event/,则重定向将为:
RewriteRule ^(。*)/芝加哥/(.*)http://%{SERVER_NAME} / $ 1 / $ 2 [NC,R=301,L]
规范化
拥有规范的URL是SEO最重要的部分。
如果丢失,您可能会因为重复的内容问题而危及您的网站,因为搜索引擎会将具有“ www”和“非www”版本的URL视为具有相同内容的不同页面。
因此,必须确保仅使用所选的一个版本来运行网站。
如果要使用“ www”版本运行网站,请使用以下规则:
RewriteCond%{HTTP_HOST} ^ yourwebsite .com [NC]
RewriteRule ^(。*)$ http://www.yourwebsite.com/$1 [L,R=301]
对于“非www”版本:
RewriteCond%{HTTP_HOST} ^ www .yourwebsite .com [NC]
RewriteRule ^(。*)$ http://yourwebsite.com/$1 [L,R=301]
尾部斜杠也是规范化的一部分,因为末尾带有斜杠的URL也有不同的对待。
RewriteCond%{REQUEST_FILENAME}!-f
RewriteRule ^(。*[^/])$ / $ 1 / [L,R=301]
这将确保/ example-page重定向到/ example-page /。您可以选择删除斜杠而不是添加斜杠,然后您将需要以下另一条规则:
RewriteCond%{REQUEST_FILENAME}!-d
RewriteRule ^(。*)/ $ / $ 1 [L,R=301]
HTTP到HTTPS重定向
在Google鼓励网站所有者使用SSL的举措之后, 迁移到HTTPS 是几乎每个网站都有的常用重定向之一。
下面的重写规则可用于在每个网站上强制使用HTTPS。
RewriteCond%{HTTP_HOST} ^ yourwebsite .com [NC,OR]
RewriteCond%{HTTP_HOST} ^ www .yourwebsite .com [NC]
RewriteRule ^(。*)$ https://www.yourwebsite.com/$1 [L,R=301,NC]
基本上,您可以使用此方法将www或非www版本重定向合并到一个HTTPS重定向规则中。
从旧域重定向到新域
当您决定进行品牌重塑并且需要更改域时,这也是最常用的重定向之一。以下规则将old-domain.com重定向到new-domain.com。
RewriteCond%{HTTP_HOST} ^ old-domain.com $ [OR]
RewriteCond%{HTTP_HOST} ^ www.old-domain.com $
RewriteRule(。*)$ http://www.new-domain.com/$1 [R=301,L]
它使用两种情况:一种是URL的“ www”版本,另一种是“非www”,因为出于历史原因,任何页面都可能具有指向这两种版本的传入链接。
大多数网站所有者使用WordPress,并且可能无需使用.htaccess文件进行重定向,而可以使用插件。
使用插件处理重定向可能与我们上面讨论的稍有不同,并且您可能需要阅读其文档才能正确处理特定插件的RegExp。
从现有的插件中,我会推荐一个免费插件,名为 重新导向 其中有许多参数可以控制重定向规则, 有用的文档。
重定向不良做法
1.将所有404损坏的URL重定向到主页
当您懒于调查所有404 URL并将它们映射到适当的登录页面时,通常会发生这种情况。
根据Google的说法,它们仍然都被视为404。
是的,这不是一个好习惯(会使用户感到困惑),而且我们还是将它们视为404(它们是软404),因此没有太大的发展空间。它不是严重损坏/坏处,但是由于没有充分的理由而增加了复杂性,请改用更好的404页面。
-?约翰(@JohnMu) 一月8,2019
如果您有太多这样的页面,则应考虑创建 精美的404页 并通过显示搜索选项吸引用户进一步浏览或找到他们所寻找的内容以外的其他内容。
Google强烈建议重定向的页面内容应与旧页面相同。否则,这种重定向可能会被视为软404,您将失去该页面的排名。
2.错误的移动页面特定重定向
如果您为台式机和移动网站使用不同的URL(即台式机为“ yoursite.com”,移动电话为“ m.yoursite.com”),则应确保将用户重定向到移动版本的相应页面。
正确:将“ yoursite.com/sport/”更改为“ m.yoursite.com/sport/”
错误:“ yoursite.com/sport/”改为“ m.yoursite.com”
另外,您还必须确保,如果桌面上的一个页面是404,则移动设备上的页面也应该是404。
如果页面没有移动版本,则可以避免重定向到移动版本,并将其保留在桌面页面上。
3.使用元刷新
可以使用meta refresh标签进行重定向,如下例所示:
如果在/ old-page /中插入此标记,它将立即将用户重定向到/ new-page /。 Google并未禁止此重定向,但他们显然不建议使用它。
元刷新类型重定向应该可以正常工作。我们不推荐这样做的原因有两个:UX(使页面保持在浏览器历史记录中,即afaik)和处理时间(我们需要解析页面才能看到它)。处理后,就像重定向一样。
-?约翰(@JohnMu) 2018年3月2日
根据约翰·穆勒(John Mueller)的说法,搜索引擎可能无法正确识别这种重定向类型。 JavaScript重定向也是如此。
4.重定向过多
当您使用错误的正则表达式设置时,将显示此消息,并最终导致无限循环。
通常,当您具有重定向链时,会发生这种情况。
假设您很久以前已将page1重定向到page2。现在您可能已经忘记了将page1重定向,并决定再次将page2重定向到page1。
结果,您将得到如下规则:
RewriteRule ^ page1 / page2 [R=301,NC,L]
RewriteRule ^ page2 / page1 [R=301,NC,L]
这将创建一个无限循环并产生上面显示的错误。
结论
当您启动永久重定向时,通过删除重定向无法轻松地将其改回(“永久”一词表示“硬永久”)。
这是因为Google一旦检测到这样的重定向,就会将PageRank传递到新页面,并更改SERP中的URL以使用新页面。
如果您正在将一个具有数万个页面的大型网站从旧域迁移到新域甚至从HTTP迁移到HTTPS,建议您首先执行302临时重定向,并确保所有重定向规则均正常运行并查找Google分析数据以确保没有意外结果(即,导致大量404页的某些语法错误),然后将开关302重定向到301永久。
如果您对301永久重定向的目标输入有误,并且想要切换到另一个URL,建议您 避免链接重定向 并将所有链接更改为新URL。
图片积分
特色图片:Paulo Bobita
屏幕截图由作者拍摄