创造力是智力的乐趣。——<阿尔伯特·爱因斯坦>
介绍
通常,我们需要重定向用户到另一个网站或同一网站上的另一个网页。有几种重定向方法,包括 JavaScript
重定向、服务器端重定向和 HTML
元刷新重定向。重定向基本上是一种将用户发送到另一个 URL
地址的机制。
使用重定向的动机各不相同,在大多数情况下,这是因为:
- 由于任何原因,您转移到了另一个域,因此当用户访问旧域上的内容时,您可以将用户重定向到新域。
- 您有多个页面,它们的内容会根据位置、语言、浏览器或将用户重定向到最适合的页面的其他因素而变化。
- 您将未经身份验证或未经授权的用户对资源的请求重定向到登录页面。
- 您将用户发送到与当前站点内容相关的其他页面。
所有这些实际上都是通过包含 URL
信息的 Location
对象实现的。有几种方法可以做到这一点,通过操作 Location
对象的不同属性。
在本教程中,我们将看看如何用 JavaScript
将用户重定向到不同的网页,以及如何减少潜在的负面 SEO
影响:
- 使用
location.href
重定向用户 https://stackabuse.com/javascript-how-to-redirect-to-another-webpage#redirectuserswithlocationhref - 使用
location.assign()
重定向用户 https://stackabuse.com/javascript-how-to-redirect-to-another-webpage#redirectuserswithlocationassign - 使用
location.replace()
重定向用户 https://stackabuse.com/javascript-how-to-redirect-to-another-webpage#redirectuserswithlocationreplace - 安全影响和副作用 https://stackabuse.com/javascript-how-to-redirect-to-another-webpage#securityimplicationandsideeffects
- 对
SEO
的影响 https://stackabuse.com/javascript-how-to-redirect-to-another-webpage#influenceonseo
window.location 属性
window.location
对象表示window/user
的当前位置,或者更确切地说URL
。从技术上讲,它是一个只读属性,但是,我们可以通过给它的属性赋新值(DOMStrings
)来操作它。windows.location
对象的 windows
前缀可以省略,因为它按层次结构位于作用域的顶部。
使用 location.href 重定向用户
location.href
属性表示当前 URL
为字符串。改变 href
属性也会自动引导用户到新的 href
值。改变 href
属性就像给它赋一个新值一样简单:
1 | location.href = "https://cl9000.github.io/"; |
注意:功能等效的代码行是:
1 | windows.location = "https://cl9000.github.io"; |
值得一提的是,你可以将用户重定向到一个域其他比他们目前是在使用这种方法的领域,但是,安全问题可以从这个引起的,所以做法应该应尽量避免使用。
重定向通常与某种事件相关,例如按下将用户重定向到不同网页的按钮,或其他事件,例如用户在网站上执行某些操作(在社交媒体上上传图像,然后他们“例如,重新重定向到该帖子)。让我们编写一个简单的函数,通过单击按钮重定向用户:
1 | <!DOCTYPE html> |
使用 location.assign() 重定向用户
location.assign(url)
方法加载提供的资源 url
,并将其显示在 window
. 与设置 href
属性相比,这实际上是重定向用户的首选方法,因为它还会检查所提供的安全性,url
如果它不是安全目的地,则会抛出异常。
另一个好处是它在浏览器的历史记录中创建了一个新条目,允许用户根据需要优雅地“返回”。
还值得注意的是 location.assign()
不允许跨域重定向。您只能重定向到进行的同一个域,这对安全性有积极影响。
除此之外,它的使用方式与为 分配新值的方式大致相同 location.href
。让我们重写我们的页面以使用该 assign()
函数:
1 | <!DOCTYPE html> |
使用 location.replace() 重定向用户
replace(url)
方法可用于将 上的当前资源替换为 从window
加载的资源 url
。它不会真正重定向用户,也不会存储在浏览器的历史记录中。存在与 assign()
方法相同的安全约束,如果您想用另一个页面替换内容,这使其成为一种理想的方法:
1 | <!DOCTYPE html> |
还值得注意的是,assign()
方法有一个严重的潜在问题。如果用户要返回到自动运行 assign()
方法的页面,他们将被重定向回他们尝试从返回的页面。然后他们会通过 Back Button
进入一个“返回”循环,但由于 assign()
方法而被重定向到另一个页面。
如果您正在使用 assign()
,请确保它不会在页面上自动调用,并且它的调用需要用户的操作,例如在按下按钮时调用它。如果没有 - 使用 location.replace()
。
此外,location.replace()
最接近 HTTP
重定向,因为原始链接不会添加到浏览器的历史记录中。
安全影响和副作用
提到的安全性适用于上述所有方法,它指的是以下几个方面:
- 如果这是调用此方法的脚本的来源是不一样的当前页面的起源-这将被视为一个安全违规,抛出:
DOMException
的SECURITY_ERROR
类型将被抛出。也就是说,嵌入到您自己页面中的外部库和服务将无法重定向用户。 - 如果存储的
URL
无效,DOMException
则会抛出a
。 - 如果您将用户重定向到他们所在域以外的域,
CORS
可能会启动并阻止它。
由于人为设计问题而可能发生的一些可能的副作用是:
- 当重定向(除了
replace()
)发生得太快(即不到 3 秒)时,它可能会破坏浏览器上的后退按钮。这意味着每次您尝试返回上一页时,重定向几乎会立即再次发生,从而造成无限循环。 - 它可以被认为是不推荐的
Doorway Page
(即为SEO
索引操作创建的页面) - 计划和使用不当的重定向会导致链式重定向,即在两个或多个页面之间重定向。
对 SEO 的影响
对 SEO 的影响
有许多影响因素SEO,很多人实际上并没有公开的,以免他们滥用。不过,可以肯定的是,优化不当的代码会对 SEO 产生负面影响。它可能导致加载时间过长、重定向链甚至循环。许多网络爬虫不会执行会对页面排名产生负面影响的 JavaScript 代码。
克服这些问题的最佳方法可能是:
-
在服务器端使用任何重定向状态码(
301..308
)正确地发出一个HTTP
重定向,或者对你不再想托管或重定向到的页面发出404
。 -
通过在
<head></head>
部分添加<link rel="canonical" href="https://original_link"/>
来通知搜索引擎有重复的页面。这比在服务器端做任何额外的工作更容易实现,但请记住,不是所有的web
爬虫都会喜欢它。
参考
关注【公众号】,了解更多。
赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!