我最近为旧的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已被排除在索引之外。
然后如何添加正确的重定向代码,以免丢失索引?
答案 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对于将网站移至开始使用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
因此,在您的情况下,您要确保使用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_sslconfig.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?
两个代码段都做同样的事情