使用 JavaScript 或 jQuery 可以进行 301 重定向吗?

37

我正在运行Apache 2.0,我想知道是否可能使用JavaScript或jQuery进行301重定向。

我有一个带有href链接到指定位置的<a></a>标记,并被要求在单击该链接时进行301重定向。

这是为了SEO,我正在寻找一种方法将301重定向到链接中的同一页,而无需创建新页面或创建表单/提交。

5个回答

54

我知道这是一个旧问题,但答案并没有真正解决问题的主要问题,即为了SEO目的而进行的301重定向(当问题最初被提出和回答时,今天的答案可能已经不同了)。

可以说“不能从客户端进行301重定向”是技术上正确的,但更重要的是,你并不一定需要这样做。虽然真正的301是首选,但在像这样的情况下,如果不可能(或者从hashbang URL转换回传统URL等),那么问题实际上是是否有可行的替代方案来实现目标。

Search Engine Land 进行了详细测试 Google 的关于 JavaScript 的能力,以下是文章中相关的摘录:

  1. JavaScript 重定向

我们首先测试常见的 JavaScript 重定向,通过不同方式表示 URL。我们选择的方法是 window.location 函数。进行了两个测试:测试 A 包括 window.location 函数中指定的绝对 URL。测试 B 使用相对 URL。

结果:Google 很快就会遵循重定向。从索引的角度来看,它们被解释为 301 —— 最终状态的 URL 替换了 Google 索引中的重定向 URL。

在随后的测试中,我们利用了一张权威页面,并实现了一个 JavaScript 重定向到站点上的新页面,内容完全相同。原始 URL 在流行查询的第一页上排名。

结果:如预期那样,Google 跟随重定向,原始页面从索引中删除。新的 URL 被索引并立即以相同的查询位置排名。这让我们感到惊讶,并表明 JavaScript 重定向有时可以像永久的 301 重定向一样从排名角度行为良好。

下次你的客户想要为他们的站点实现 JavaScript 重定向时,你的答案可能不需要是“请不要这样做”。这似乎表明,在这种关系中存在一种排名信号的转移。

支持这一发现的是来自Google指南中的一句话:
“使用JavaScript重定向用户可能是一种合法的做法。例如,如果您在用户登录后将其重定向到内部页面,则可以使用JavaScript完成此操作。在检查JavaScript或其他重定向方法以确保您的站点遵循我们的指南时,请考虑意图。请记住,在移动您的站点时,301重定向是最好的选择,但是如果您无法访问网站服务器,则可以为此目的使用JavaScript重定向。”

9
谢谢您的回答,正是我在发现这个问题时想知道的。 - Greggory Wiley

35

简而言之,不可以

JavaScript完全在客户端运行。301重定向应该作为服务器响应出现。这意味着没有服务器支持,您无法进行此操作。


7

301是一种服务器响应代码。您无法从jQuery创建301重定向。

您需要从PHP执行301重定向。


6

如果这只是为了SEO目的,则此方法可行
<meta http-equiv="refresh" content="0;url=YOUR_URL">
虽然这不是301重定向,但Google会将其视为301重定向


2

301重定向是永久重定向,基本上是HTTP服务器响应。JavaScript / jQuery是在客户端执行的。两个不同的世界。

如果您无法在服务器上执行操作,则实际上可以将最终URL放入href中。

或者,如果您想知道是否可以重定向当前页面,则可以使用META重定向或更改window.location来实现。

如果您使用的是Apache,可以使用mod_rewrite进行301重定向。


@Queti:301重定向可以从任何服务器端框架中实现,不仅限于PHP。 - Adrian Ber
我认为你评论了错误的答案。无论如何,我认为 Queti 只是在提到 PHP,因为那是问题中标记的服务器。 - Ian
@AdrianBer 但是如果你注意到了,我在我的标签中加入了PHP,所以他把我引用到了我的情境中。 - Caleb Doucet
是的,我错过了 PHP 标签,我只看到你在使用 Apache,并且你可以使用 Apache 的 mod_rewrite 来做到这一点,不需要 PHP。 - Adrian Ber
@AdrianBer 好的,我想要重定向由用户控制,所以我不认为mod_rewrite是一个选项。 - Caleb Doucet
在这种情况下,确实不是。但请注意,浏览器会缓存301重定向。 - Adrian Ber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接