了解如何正确处理重定向以避免失去排名,并帮助搜索引擎了解你在网站上所做的更改。
网站改变结构、删除页面并且经常从一个域移动到另一个域。正确处理重定向对于避免失去排名并帮助搜索引擎了解你所做的更改至关重要
重定向有一个以数字 3 开头的状态码(即 3XX)。有100 种不同的可能状态码,但只有。少数用于携带某些信息
在本指南中,我们将介绍与 SEO 相关的 3XX 重定向
一:重定向状态码类型
1. 301:永久重定向
这个众所周知的重定向向客户端*表明资源已更改到另一个位置,并且它应该使用新的 URL 来处理未来的请求。当搜索引擎看到 301 重定向时,它们会将旧页面的排名传递给新页面。
在进行更改之前,你在决定使用 301 重定向时需要小心。这是因为如果你稍后改变主意并决定删除 301 重定向,你的旧 URL 可能不再排名
即使你交换重定向,它也不会帮助你将旧页面恢复到之前的排名位置。所以要记住的主要事情是没有办法撤消 301 重定向
(*对于可能对通用名称感到困惑的初学者,使用客户端而不是浏览器,因为不仅浏览器能够浏览 URL,而且不是浏览器的搜索引擎机器人也能够浏览。)
2. 307:临时重定向
在 HTTP 1.1 中,301 重定向意味着资源被临时移动,客户端应该使用原始资源的URL 来处理未来的请求。
对于 SEO,这意味着客户应遵循重定向,但搜索引擎不应将其在 SERP 中的链接更新到新的临时页面。
在 307 重定向中,PageRank不会从原始资源传递到新资源 - 与 301 重定向相反
3. 302:Found
这意味着客户端正在寻找的资源在 HTTP 1.1 版本中的另一个 URL 上找到,但在 HTTP 1.0 中暂时移动了
4. 302 VS. 307
在几乎所有情况下,302 和 307 重定向将被 视为相同。但是 302 状态代码并不一定意味着客户端必须遵循重定向,如果它决定留在那里,则不会被视为错误
现代客户很可能会跟随新目的地,但一些旧客户可能会错误地停留在同一个 URL 上
与 302 状态码相反,307 状态码保证请求方法不会改变。例如,GET 请求必须继续 GET 和 POST 到 POST
使用 302 状态代码,一些旧的或有问题的客户端可能会更改可能导致意外行为的方法
对于临时重定向,你可以使用 302 或 307——但我更喜欢 307
对于常规重定向任务,应使用 301(永久重定向)和 307(临时重定向)状态代码,具体取决于你在网站上实施的更改类型。在这两种情况下,重定向的语法都不会改变
你可以通过 Apache 上的服务器配置文件 .htaccess、Nginx 上的 example.conf 文件或使用 WordPress 的插件来处理重定向
在所有情况下,它们具有相同的语法来编写重定向规则。它们仅与配置文件中使用的命令不同。例如,Apache 上的重定向将如下所示:
Options +FollowSymlinks RewriteEngine on RedirectMatch 301 ^/oldfolder/ /newfolder/
在 Nginx 服务器上,它看起来像:
rewrite ^/oldfolder/ /newfolder/ permanent;
用于告诉服务器重定向状态代码的命令和操作命令不同。例如:
-
服务器重定向状态码:“ 301” vs. “permanent”
-
动作命令:“RedirectMatch”与“rewrite”
但是重定向( ^/oldfolder/ /newfolder/ )的语法对于两者都是相同的。
在 Apache 上,确保在你的服务器上启用 mod_rewrite 和 mod_alias 模块(负责处理重定向)。
由于使用最广泛的服务器类型是 Apache,这里是 .htaccess apache 文件的示例。确保 .htaccess 文件有这两行:
Options +FollowSymlinks RewriteEngine on
在重定向规则之上并将规则放在它们之下。
要了解下面的示例,你可以参考下表中的RegExp基础知识。
* | 零次或多次 |
+ | 一次或多次 |
. | 任何单个字符 |
? | 零次或一次 |
^ | 字符串的开始 |
$ | 字符串的结尾 |
a|b | 或操作“|” a或b |
(z) | 记住调用 $1 时要使用的匹配项 |
二:重定向使用场景
1. 重定向单个 URL
删除页面或更改页面 URL 时使用的最常见和广泛使用的重定向类型。例如,假设你将 URL 从 /old-page/ 更改为 /new-page/。重定向规则将是:
RewriteRule ^old-page(/?|/.*)$ /new-page/ [R=301,L]
或者
RedirectMatch 301 ^/old-page(/?|/.*)$ /new-page/
这两种方法的唯一区别是第一种使用 Apache mod_rewrite 模块,第二种使用 mod_alias。可以使用这两种方法来完成
正则表达式“^”表示 URL 必须以“/old-page”开头,而 (/?|/.*)$ 表示“/old-page/”后面带有斜杠“/”或没有完全匹配的任何内容都必须重定向到/新页面/
我们也可以使用 (.*) 即 ^/old-page(.*),但问题是,如果你有另一个具有类似 URL 的页面,例如 /old-page-other/,当我们只想重定向/old-page/
以下 URL 将匹配并定向到新页面:
/old-page/ | /new-page/ |
/old-page | /new-page/ |
/old-page/?utm_source=facebook.com | /new-page/?utm_source=facebook.com |
/old-page/child-page/ | /new-page/ |
它将页面 URL 的任何变体重定向到新的变体。如果我们以如下形式使用重定向:
Redirect 301 /old-page/ /new-page/
…如果没有正则表达式,那么所有具有 UTM 查询字符串的 URL,例如 /old-page?utm_source=facebook.com(这很常见,因为 URL 用于在社交网络上共享),最终会变成 404。
即使 /old-page 没有尾随斜杠“/”也会以 404 结尾
2. 重定向所有URL但忽略文件
假设我们有一堆 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/). /category/final-subcategory/ [R=301,L]
在这里,我们要重定向第三行的 /category/ 下的所有内容,除非它是第四行的 /category/final-subcategory/。我们在第二行还有“!-f”规则,这意味着忽略任何文件,如图像、CSS 或 javascript 文件
否则,如果我们有一些像“/category/image.jpg”这样的资产,它也会被重定向到“/final-subcategory/”并导致图像中断
3. 目录更改
RewriteRule ^old-directory$ /new-directory/ [R=301,NC,L] RewriteRule ^old-directory/(.*)$ /new-directory/$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”)
4. 从 URL 中删除单词
假设你的网站上有 100 个产品名称为“chains”的 URL,并且想要删除它
例如,对于 URL http://yourwebiste.com/example-chains-product/,重定向规则为:
RewriteRule ^(.*)-chains-(.*) http://%{SERVER_NAME}/$1-$2 [NC,R=301,L]
如果示例 URL 的格式为 http://yourwebiste.com/example/chains/product/,则重定向将为:
RewriteRule ^(.*)/chains/(.*) http://%{SERVER_NAME}/$1/$2 [NC,R=301,L]
5. 规范化
拥有规范的 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]
6. 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 重定向规则
7. 从旧域名重定向到新域名
当你决定进行品牌重塑并且需要更改域时,这也是最常用的重定向之一。下面的规则将 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]
它使用两种情况:一种是“www”版本的 URL,另一种是“非 www”,因为出于历史原因,任何页面都可能包含两个版本的传入链接
大多数网站所有者使用 WordPress,可能不需要使用 .htaccess 文件进行重定向,而是使用插件
使用插件处理重定向可能与我们上面讨论的有点不同,你可能需要阅读他们的文档才能正确处理特定插件的 RegExp
从现有的插件中,我会推荐一个名为Redirection的免费插件,它有许多参数来控制重定向规则和许多有用的文档
三:重定向不良做法
1.将所有404损坏的URL重定向到主页
当你懒得调查所有 404 URL 并将它们映射到适当的登录页面时,通常会发生这种情况
根据谷歌的说法,它们仍然被视为 404
如果你有太多这样的页面,你应该考虑创建更好看的 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"
可以使用元刷新标签进行重定向,如下例所示:
<meta http-equiv=”refresh” content=”0;url=http://yoursite.com/new-page/” />
如果你在 /old-page/ 中插入此标签,它将立即将用户重定向到 /new-page/。谷歌不禁止这种重定向,但也不建议使用它,因为搜索引擎可能无法正确识别这种类型的重定向,JavaScript 重定向也是。
4. 重定向过多
当你有错误的正则表达式设置并最终进入无限循环时,会显示此消息
通常,当你有重定向的闭环时会发生这种情况
假设你很久以前将 page1 重定向到 page2。现在你可能忘记了 page1 已重定向,并决定再次将 page2 重定向到 page1
结果,你最终会得到这样的规则:
RewriteRule ^page1 /page2 [R=301,NC,L] RewriteRule ^page2 /page1 [R=301,NC,L]
四:结论
当你启动永久重定向时,无法通过删除重定向轻松将其改回(permanent 一词表示永久)
这是因为一旦 Google 检测到这种重定向,它会将 PageRank 传递到新页面并更改 SERP 中的 URL 以使用新页面
如果你正在将拥有数万页的大型网站从旧域迁移到新域,甚至从 HTTP 迁移到 HTTPS,建议先进行 302 临时重定向,并确保所有重定向规则正常工作并查看 Google分析数据以确保没有意外结果(即导致大量 404 页面的某些语法错误),然后将 302 重定向切换到 301 永久
如果你在 301 永久重定向的目标上出错并想切换到另一个 URL,建议避免链接式重定向并将所有链接更改为新 URL
相关文章
我的微信
微信扫一扫
评论