发布时间:2023-03-30
应该正确使用 SEO 的重定向,因为它们会影响网站被 Google 抓取和索引的方式。
虽然大多数人认为重定向是 Internet 绕行标志,但实际上发生了更多事情,而且发现它令人惊喜。
继续阅读以全面了解重定向和技术 SEO的正确应用。
什么是重定向?
网站重定向告诉浏览器和搜索引擎有关 URL 的信息以及在哪里可以找到该网页。
URL 重定向涉及对特定 URL 或一组 URL 实施的代码,以便将用户(或搜索引擎)发送到与输入或单击的实际 URL 不同的页面。
重定向可以设置为:
临时重定向:302、303、307、308。
永久重定向:301。
何时使用重定向
使用重定向的主要原因是:
· 单个页面或整个域已被移动(URL 已更改)。
· 允许使用 URL 缩短器或“漂亮的 URL”。
· 站点迁移(例如,从 HTTP 到 HTTPS)。
对于 SEO 目的,URL 重定向很重要,因为它们:
· 指向已移动或删除的页面的任何链接的转发权限。
· 避免 404 页面未找到错误(尽管有时最好留下 404)。
· 重定向可以在组或域范围内实施,但通常需要在个人基础上设置以避免出现问题。
使用 RegEX 进行群组重定向时,如果您的逻辑不完美,可能会产生意想不到的结果!
重定向类型
重定向主要分为三种类型:
·Meta Refresh 重定向在页面级别设置,但通常不建议用于 SEO 目的。元重定向有两种类型:被视为临时重定向的延迟和被视为永久重定向的即时。
·Javascript 重定向也在客户端页面上设置,可能会导致 SEO 问题。谷歌声明了对 HTTP 服务器端重定向的偏好。
·HTTP 重定向设置在服务器端,是 SEO 目的的最佳方法——我们在[敏感词]进行了深入介绍。
什么是 HTTP 响应状态代码?
浏览器和搜索引擎爬虫(如 GoogleBot)称为用户代理。
当用户代理试图访问网页时,发生的事情是用户代理发出请求,网站服务器发出响应。
该响应称为HTTP 响应状态代码。它提供 URL 请求的状态。
在像 GoogleBot 这样的用户代理请求 URL 的情况下,服务器会给出响应。
例如,如果请求 URL 成功,服务器将提供 200 的响应代码,这意味着请求 URL 成功。
因此,当您想到 GoogleBot 访问网站并尝试对其进行抓取时,发生的是一系列请求和响应。
HTTP 重定向
HTTP 重定向是请求 URL 的服务器响应。
如果 URL 存在于不同的 URL(因为它被移动了),服务器会告诉用户代理 URL 请求被重定向到不同的 URL。
已更改 URL 的响应代码通常采用 301 或 302 响应状态代码的形式。
整个 3xx 系列的响应代码传达了很多信息,用户代理可以选择根据这些信息采取行动。
用户代理可以采取的操作示例是保存新 URL 的缓存,以便下次请求旧 URL 时,它将请求新 URL。
因此,301 和 302 重定向不仅仅是一个互联网路标,上面写着“去这里,不要去那里”。
3XX系列状态码
重定向不仅仅是大家熟悉的两个状态码,301和302响应码。
官方的 3xx 响应状态码一共有七个。
这些是可供使用的不同类型的重定向:
· 300多项选择。
· 301 永久移动。
· 302 找到。
· 303 见其他。
· 304 未修改。
· 305 使用代理。
· 306(未使用)。
· 307 临时重定向。
· 308 永久重定向。
上面的一些状态代码还没有出现那么久,可能不会被使用。因此,在使用 301 或 302 以外的任何重定向代码之前,请确保预期的用户代理可以解释它。
由于 GoogleBot 使用最新版本的 Chrome(称为无头浏览器),因此可以通过检查 Chrome 是否使用浏览器兼容性列表识别状态代码来轻松检查状态代码是否兼容。
对于 SEO,应该坚持使用 301 和 302 响应代码,除非有特定原因需要使用其他代码之一。
301:永久移动
301 状态代码通常被称为 301 重定向。但正式名称是301 Moved Permanently。
301 重定向向用户代理指示 URL(有时称为目标资源或简称为资源)已更改为另一个位置,它应该为未来的请求使用新的 URL。
如前所述,还有更多信息。
301 状态代码还向用户代理建议:
· 以后对该 URL 的请求应使用新 URL 进行。
· 提出请求的任何人都应将其链接更新为新的 URL。
· 后续请求可以从 GET 更改为 POST。
最后一点是一个技术问题。根据301 状态码的官方标准:
“注意:由于历史原因,用户代理可以将后续请求的请求方法从 POST 更改为 GET。如果不希望出现这种行为,则可以使用 308(永久重定向)状态代码。”
对于 SEO,当搜索引擎看到 301 重定向时,它们会将旧页面的排名传递给新页面。
在进行更改之前,使用 301 重定向时必须小心。只有当对新 URL 的更改是永久性的时,才必须使用 301 重定向。
临时更改时不得使用 301 状态代码。
此外,如果您稍后改变主意并返回旧 URL,则旧 URL 可能不再排名,并且可能需要一些时间才能重新获得排名。
因此,要记住的主要事情是,当更改是永久性的时,将使用 301 状态代码。
302:找到
了解 302 状态代码的主要一点是它在 URL 临时更改的情况下很有用。
这个响应码的意思是URL暂时在不同的URL,建议以后的请求使用旧的URL。
302 重定向状态代码还带有与 GET 和 Post 相关的技术警告:
“注意:由于历史原因,用户代理可以将后续请求的请求方法从 POST 更改为 GET。如果不希望出现这种行为,则可以使用 307(临时重定向)状态代码。”
对“历史原因”的引用可能指的是可能会更改请求方法的旧的或错误的用户代理。
307:临时重定向
307 重定向意味着请求的 URL 被临时移动,用户代理应该使用原来的 URL 来进行未来的请求。
302 和 307 状态代码之间的唯一区别是用户代理必须使用用于请求原始 URL 的相同 HTTP 请求来请求新 URL。
这意味着如果用户代理使用 GET 请求请求页面,则用户代理必须对新的临时 URL 使用 GET 请求并且不能使用 POST 请求。
307状态码的Mozilla文档比官方文档解释的更清楚。
“服务器发送此响应以指示客户端使用先前请求中使用的相同方法在另一个 URI 获取请求的资源。
这与 302 Found HTTP 响应代码具有相同的语义,除了用户代理不得更改所使用的 HTTP 方法:如果在第一个请求中使用了 POST,则必须在第二个请求中使用 POST。”
除了 307 状态代码要求后续请求属于同一类型(POST 或 GET)并且 302 可以采用任何一种方式之外,302 和 307 状态代码之间的其他所有内容都是相同的。
302比307
您可以通过服务器配置文件 .htaccess 在 Apache 上处理重定向,在 Nginx 上通过 example.conf 文件处理重定向,如果您使用的是 WordPress,则可以通过插件处理。
在所有情况下,它们都使用相同的语法来编写重定向规则。它们仅与配置文件中使用的命令不同。例如,Apache 上的重定向将如下所示:
选项 +FollowSymlinks
重写引擎开启
RedirectMatch 301 ^/旧文件夹/ /新文件夹/
在 Nginx 服务器上,它看起来像这样:
重写 ^/oldfolder/ /newfolder/ 永久;
用于告知服务器重定向状态码的命令与动作命令不同。
例如:
重定向的服务器状态代码:“ 301”与“永久”。
操作命令:“RedirectMatch”与“rewrite”。
但是两者的重定向语法 ( ^/oldfolder/ /newfolder/ ) 是相同的。
在 Apache 上,确保在您的服务器上启用了 mod_rewrite 和 mod_alias 模块(负责处理重定向)。
由于最广泛传播的服务器类型是 Apache,[敏感词]是 .htaccess apache 文件的示例。
确保 .htaccess 文件在重定向规则之上有这两行,并将规则放在它们之下:
选项 +FollowSymlinks
重写引擎开启
如何创建重定向
· 单个 URL 重定向
· 重定向所有除外
· 目录更改
· 从 URL 中删除一个词
· 设置规范 URL
· HTTP 到 HTTPS 重定向
· 从旧域重定向到新域
如何为单个 URL 创建重定向
最常见和广泛使用的重定向类型是在删除页面或更改 URL 时。
例如,假设您将 URL 从 /old-page/ 更改为 /new-page/。重定向规则是:
RewriteRule ^旧页(/?|/.*)$ /新页/ [R=301,L]
或者
RedirectMatch 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 |
/旧页/ | /新一页/ |
它会将页面 URL 的任何变体重定向到新的。如果我们使用以下形式的重定向:
重定向 301 /old-page/ /new-page/
如果没有正则表达式,所有带有 UTM 查询字符串的 URL,例如 /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} !/类别/最终子类别/
RewriteCond %{REQUEST_FILENAME} !-f
重写规则 ^(类别/)。/类别/最终子类别/ [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 有一个查询字符串(即“/old-directory?utm_source=facebook”将被重定向到“/new-directory//?utm_source=facebook”)。
从 URL 中删除一个词
假设您的网站上有 100 个城市名称为“芝加哥”的 URL,您想要删除它们。
对于 URL http://yourwebiste.com/example-chicago-event/,重定向规则为:
RewriteRule ^(.*)-芝加哥-(.*) http://%{SERVER_NAME}/$1-$2 [NC,R=301,L]
如果示例 URL 的格式为 http://yourwebiste.com/example/chicago/event/,则重定向为:
重写规则 ^(.*)/chicago/(.*) http://%{SERVER_NAME}/$1/$2 [NC,R=301,L]
设置规范 URL
拥有规范的 URL 是 SEO 最重要的部分。
如果丢失,您可能会因重复内容问题而危及您的网站,因为搜索引擎将具有“www”和“非 www”版本的 URL 视为具有相同内容的不同页面。
因此,您必须确保只使用您选择的一个版本运行网站。
如果您想使用“www”版本运行您的网站,请使用此规则:
RewriteCond %{HTTP_HOST} ^yourwebsite.com [NC]
重写规则 ^(.*)$ http://www.yourwebsite.com/$1 [L,R=301]
对于“非 www”版本:
RewriteCond %{HTTP_HOST} ^www.yourwebsite.com [NC]
重写规则 ^(.*)$ http://yourwebsite.com/$1 [L,R=301]
尾部斜杠也是规范化的一部分,因为末尾有斜杠或没有斜杠的 URL 也会受到不同的处理。
RewriteCond %{REQUEST_FILENAME} !-f
重写规则 ^(.*[^/])$ /$1/ [L,R=301]
这将确保 /example-page 被重定向到 /example-page/。您可以选择删除斜杠而不是添加斜杠,然后您将需要[敏感词]的其他规则:
RewriteCond %{REQUEST_FILENAME} !-d
重写规则 ^(.*)/$ /$1 [L,R=301]
HTTP 到 HTTPS 重定向
在 Google 主动鼓励网站所有者使用 SSL 后,迁移到 HTTPS是几乎每个网站都有的常用重定向之一。
[敏感词]的重写规则可用于在每个网站上强制使用 HTTPS。
RewriteCond %{HTTP_HOST} ^yourwebsite.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.yourwebsite.com [NC]
重写规则 ^(.*)$ https://www.yourwebsite.com/$1 [L,R=301,NC]
使用它,您可以将 www 或非 www 版本的重定向合并到一个 HTTPS 重定向规则中。
从旧域重定向到新域
当您决定重塑品牌并需要更改域时,这也是最常用的重定向之一。[敏感词]的规则将 old-domain.com 重定向到 new-domain.com。
RewriteCond %{HTTP_HOST} ^old-domain.com$ [或]
RewriteCond %{HTTP_HOST} ^www.old-domain.com$
重写规则 (.*)$ http://www.new-domain.com/$1 [R=301,L]
它使用两种情况:一种是“www”版本的 URL,另一种是“非 www”,因为由于历史原因,任何页面都可能有指向这两个版本的传入链接。
大多数网站所有者使用 WordPress,可能不需要 .htaccess 文件进行重定向,而是使用插件。
使用插件处理重定向可能与我们上面讨论的略有不同。您可能需要阅读他们的文档才能正确处理特定插件的 RegExp。
从现有的插件中,我会推荐一个名为Redirection的免费插件,它有许多参数来控制重定向规则和许多有用的文档。
重定向最佳实践
1. 不要将所有 404 损坏的 URL 重定向到主页
当您懒得调查 404 URL 并将它们映射到适当的着陆页时,通常会发生这种情况。
根据 Google 的说法,它们仍然都被视为 404。
是的,这不是一个很好的做法(让用户感到困惑),而且我们大多将它们视为 404(它们是软 404),所以没有任何好处。它不是严重损坏/坏的,而是无缘无故地增加了复杂性——制作一个更好的 404 页面。
-🍌约翰🍌(@JohnMu) 2019 年 1 月 8 日
如果您有太多这样的页面,您应该考虑创建漂亮的 404 页面并吸引用户进一步浏览或通过显示搜索选项来查找他们正在寻找的内容以外的内容。
Google 强烈建议重定向页面内容应与旧页面相同。否则,此类重定向可能会被视为软 404,您将失去该页面的排名。
2. 获得正确的移动页面特定重定向
如果您的桌面版网站和移动版网站有不同的 URL(例如,桌面版为“example.com”,移动版为“m.example.com”),您应确保将用户重定向到移动版的相应页面。
正确:“example.com/sport/”到“m.example.com/sport/”
错误:“example.com/sport/”到“m.example.com”
此外,您必须确保如果一个页面在桌面上是 404,那么它在移动设备上也应该是 404。
如果您的页面没有移动版本,则可以避免重定向到移动版本并将它们保留在桌面页面上。
3.如何使用元刷新
可以使用元刷新标签进行重定向,如下例所示:
<meta http-equiv=”refresh” content=”0;url=http://example.com/new-page/” />
如果你在 /old-page/ 中[敏感词]这个标签,它会立即将用户重定向到 /new-page/。
Google 不禁止这种重定向,但不建议使用它。
元刷新类型重定向应该可以正常工作。我们不推荐它有两个原因:UX(它将页面保留在浏览器历史记录中,afaik)和处理时间(我们需要解析页面才能看到它)。处理后,就像重定向一样。
-🍌约翰🍌(@JohnMu) 2018 年 3 月 2 日
根据 John Mueller 的说法,搜索引擎可能无法正确识别这种类型的重定向。JavaScript 重定向也是如此。
4.避免重定向链
当您的正则表达式设置错误并以无限循环结束时,将显示此消息。
通常,当您有重定向链时会发生这种情况。
假设您很久以前将第 1 页重定向到第 2 页。您可能忘记了第 1 页已重定向,并决定再次将第 2 页重定向到第 1 页。
结果,您将得到如下规则:
RewriteRule ^page1 /page2 [R=301,NC,L]
RewriteRule ^page2 /page1 [R=301,NC,L]
这将创建一个无限循环并产生如上所示的错误。
结论
了解什么是重定向以及哪种情况需要特定的状态代码是正确优化网页的基础。这是理解 SEO 的核心部分。
许多情况需要准确了解重定向,例如将网站迁移到新域或为将在其正常 URL 下返回的网页创建临时保留页面 URL。
虽然插件有很多可能,但如果没有正确理解何时以及为何使用特定类型的重定向,插件可能会被滥用。