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

时间:2018-09-23 10:26:48

标签: ruby-on-rails https http-redirect

我最近为旧的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

但是我收到谷歌的消息:

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

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

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

3 个答案:

答案 0 :(得分:6)

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

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

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

force_ssl中启用config/application.rb

config.force_ssl = true

编辑:谢谢大家对我的回答投了赞成票。但也请检查@agilejoshua的答案,因为他提供了许多有用的信息。

答案 1 :(得分:3)

Google指南

Google对于将网站移至开始使用SSL具有特定的指导原则

  

使用服务器端301重定向

     

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

     

...

     

从HTTP迁移到HTTPS

     

如果您将站点从HTTP迁移到HTTPS,则Google会将其视为随URL更改而移动的站点。这可能会暂时影响您的一些流量。

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

这被视为网站更改随URL更改

  

随URL更改的站点移动

     

页面URL更改。

     

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

     

...

     

预计迁移期间网站排名的暂时波动。

     

对网站进行任何重大更改后,您可能会在Google重新抓取您的网站并为其重新编制索引时遇到排名波动。一般而言,中型网站可能需要花费几周的时间才能使大多数页面进入我们的索引;较大的网站可能需要更长的时间。 Googlebot和我们的系统发现和处理移动URL的速度在很大程度上取决于URL的数量和您的服务器速度。提交站点地图可以帮助加快发现过程,可以按部分移动站点。

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设置为{协议:'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

答案 2 :(得分:0)

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? 

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