如何在不丢失 Google 索引的情况下正确地将网站从 http 重定向到 https

Posted

技术标签:

【中文标题】如何在不丢失 Google 索引的情况下正确地将网站从 http 重定向到 https【英文标题】:How to correctly redirect website from http to https without losing Google Indexing 【发布时间】:2019-02-27 03:08:02 【问题描述】:

我最近为旧的 Rails 2.3.1 网站添加了 SSL 支持。我有以下代码可以从 http 重定向到 https:

应用控制器:

  before_filter :need_ssl

protected 


  def need_ssl
    if RAILS_ENV=="production"
      redirect_to "https://#request.host#request.request_uri" unless request.ssl? 
    end
  end

但是我收到了来自 Google 的消息:

Approximately 80% of your HTTP pages that were indexed before migration can no longer be found in either your HTTP or HTTPS site

我查看并发现 572 由于重定向已被排除在索引之外。

然后如何添加正确的重定向代码,以免丢失索引?

【问题讨论】:

【参考方案1】:

这是我通常将我的网站迁移到https 的操作。

在我的nginx 配置中使用301 redirect 将所有http 流量重定向到https

server 
    listen       80;
    server_name  myawesomewebsite.com;
    return 301   https://myawesomewebsite.com$request_uri;

config/application.rb 中启用force_ssl

config.force_ssl = true

编辑:感谢大家投票给我的答案。但也请查看@agilejoshua 的回答,因为他提供了很多有用的信息。

【讨论】:

感谢@HDox。我能问一下你把 serve... 代码放在哪里了吗? 这是我的网络服务器配置中的一个服务器块,它是 NGINX。 好的。我在 Heroku 上,所以不确定我是否可以访问该文件。我得问问他们。 此解决方案仅在您使用 nginx 和 Rails 3.1+ 时有效。 我刚刚阅读了@agilehoshua 的回答,我会说所有细节似乎都非常值得。感谢您的帮助,它让我走上了解决我的问题的正确道路,并结合了他的【参考方案2】:

谷歌指南

Google 有关于移动网站以开始使用 SSL 的具体指南

使用服务器端 301 重定向

使用服务器端 301 HTTP 重定向将您的用户和搜索引擎重定向到 HTTPS 页面或资源。

...

从 HTTP 迁移到 HTTPS

如果您将网站从 HTTP 迁移到 HTTPS,Google 会将其简单地视为伴随网址更改的网站迁移。这可能会暂时影响您的部分流量。

https://support.google.com/webmasters/answer/6073543

这算作一次网站移动网址更改

网址更改后的网站移动

页面 URL 发生变化。

例如:协议更改 - http://www.example.com 到 https://www.example.com

...

预计迁移期间网站排名会出现暂时波动。

如果网站发生任何重大变化,您可能会在 Google 重新抓取和重新索引您的网站时遇到排名波动。作为一般规则,一个中型网站可能需要几周时间才能让大多数页面进入我们的索引;较大的网站可能需要更长的时间。 Googlebot 和我们的系统发现和处理移动网址的速度在很大程度上取决于网址的数量和您的服务器速度。提交站点地图有助于加快发现过程,并且可以分段移动您的站点。

https://support.google.com/webmasters/answer/34437

Ruby 中的重定向

因此,在您的情况下,您要确保使用 301 重定向。默认情况下 redirect_to 在 Ruby 中使用 302。

v2.3:https://api.rubyonrails.org/v2.3/classes/ActionController/Base.html#M001811

v5.2.1:https://api.rubyonrails.org/v5.2.1/classes/ActionController/Redirecting.html#method-i-redirect_to

除非使用 :status 选项另外指定,否则重定向会作为 302 Found 标头发生:

Rails 2.3 的更新代码

redirect_to("https://#request.host#request.request_uri", :status => 301) unless request.ssl? 

Rails 3.1+ 的替代代码

使用https://edgeguides.rubyonrails.org/configuring.html中指定的force_ssl

config.force_ssl 强制使用 ActionDispatch::SSL 中间件通过 HTTPS 提供所有请求,并将 config.action_mailer.default_url_options 设置为 protocol: 'https' 。

config.force_ssl = true

索引问题

但您可能仍会遇到索引编制方面的临时问题。为了帮助 google 更快地找到新的 HTTPS 页面,您应该使用新的 HTTPS 页面创建站点地图并将其添加到 Google Search Console https://search.google.com/search-console/about。

有关 Google 接受的站点地图格式的详细信息,请参阅 https://support.google.com/webmasters/answer/183668。

【讨论】:

很详细的回答!谢谢@agilejoshua。我已经编辑了我的答案,以确保读者不会跳过你的答案。对了,可以加config.force_ssl的部分吗? 非常感谢@agilejoshua。我刚刚看到您的答案,我决定更改已接受的答案,因为您付出了如此多的努力和有用的信息。我按照 H Dox 的建议使用了 config.force_ssl,并将使用新的 https 站点将 xml 站点地图提交给谷歌。 @chell 请注意,有时创建基于文本的站点地图(每行一个 url)更容易,这使您对如何处理 url 的控制较少,但创建起来非常简单。而不是必须输出正确的xml。 Bing 还支持基于文本的站点地图。【参考方案3】:

Rails 3 默认为 302 重定向(临时)。您可以尝试将其更改为 301(永久)重定向,看看 Google 是否更喜欢这样:

redirect_to("https://#request.host#request.request_uri", :status => 301) unless request.ssl? 

或等效:

redirect_to("https://#request.host#request.request_uri", :status => :moved_permanently) unless request.ssl? 

两个代码片段做同样的事情

【讨论】:

以上是关于如何在不丢失 Google 索引的情况下正确地将网站从 http 重定向到 https的主要内容,如果未能解决你的问题,请参考以下文章

如何在不丢失原始参与者的情况下将现有呼叫升级到会议?

Mysql:如何在不丢失组内个人行的情况下对组进行排序[关闭]

在不丢失 .data 常量的情况下混合汇编和 C 的正确标志是啥

如何使用 Typescript 在不丢失任何道具的情况下键入样式组件?

如何使用 git reset 在不丢失本地更改的情况下重置未推送的提交

如何在不更改其他通道的情况下有效地将 cv::Mat 的给定通道设置为给定值?