大约一年前,我将三个网站(oldsite.com,oldsite.nu,newsite.se)合并为一个,我保留在其中一个域(newsite.se)上。我不确定这是否已经完成,因为即使在一年之后我仍然会看到来自谷歌的旧网址流量很多。
旧网站重定向代码
重要的编辑说明:我最近意识到名称服务器不再指向我的旧rails应用程序了,而是指向我的web主机上的php文件夹,其中我有一个带有以下内容的.htaccess代码:
RewriteEngine on
RewriteRule ^robots.txt - [L]
RewriteRule ^sitemap.xml - [L]
RewriteRule ^(.*)$ http://www.newsite.se/$1 [R=301,L]
这使得以下部分(关于oldsite.com/oldsite.nu)无效: .com和.nu是在Ruby on Rails中构建的,并在Heroku上托管。
从oldsite.com/oldsite.nu重定向路径的逻辑已经完成 完全在newsite.se网站上。重定向代码 oldsites是第一行的直接重定向 在oldsite.com上的routes.rb中:
match "/(*path)" => redirect {|params, req| "http://www.newsite.se/#{params[:path]}"}, via: [:get, :post]
我使用此(瑞典语)工具验证此重定向实际上是否进行了301重定向:http://301redirect.se。它确认重定向为301。
Newsite.se重定向处理程序
每个旧网站上的内容与新网站上的相同内容相匹配,很少在同一条路径上,例如。
oldsite.com/categories/vacation/item/1243
可能导致
newsite.se/product-items/1243
我主要在内部重定向控制器中处理这些类型的重定向,该控制器捕获并重定向newsite.se上的任何流量,如:
newsite.se/categories/vacation/item/1243 -> newsite.se/product-items/1243
在我的newsite.se routes.rb底部使用它:
match '*not_found_path', :to => 'redirections#not_found_catcher', via: :get, as: :redirect_catcher, :constraints => lambda{|req| req.path !~ /\.(png|gif|jpg|txt|js|css)$/ }
这很好用。
编辑20151223:我使用Newsite.se处理重定向的原因是因为它包含重定向路径的所有逻辑。 Oldsite.com/.nu几乎不可能知道。
采取的措施
在301之外重定向(据我所知,我这样做)。我还使用Google网站管理员工具制作了一个更改地址的请求#34;从我的旧两个网站到我的新网站。我无法再找到有关此信息的任何信息,但我确信我得到了WMT的积极回应,这项游戏已经完成(但我不是百分百肯定)。
问题指示
我不是百分之百确定有什么问题,但我看到有迹象表明我认为重定向不正确,以至于谷歌真的意识到网站没有被移动。
解决问题
答案 0 :(得分:3)
我必须为移动大型电子商务网站的客户做类似的举动,该网站要求将所有旧流量转换到新网站,并将相应的产品重定向到新的路径。
为了让所有内容都得到转换,我们不会失去谷歌排名,我们必须如上所述实施301重定向。在WMT中,他们似乎依靠你来处理它,而不是将它作为支持的功能。
<强>方法强>
您应该将旧域中的每个网址重定向到相应的网址 新网址。这是记录在案的&amp;推荐改变你的方式 根据谷歌的域名。
最好的方法是处理控制器中的重定向,并有逻辑将其发送到301的实际页面,一旦登陆新网站就不再重定向。
我建议如下:
routes.rb (oldsite.com/oldsite.nu)
匹配请求并将其发送到控制器以处理更精细的逻辑和301.
match "/(*path)", to: 'redirector#catch_all', via: [:get, :post]
RedirectorController (oldsite.com/oldsite.nu)
def catch_all
# Separate the rest of the link into its components
# I will use the example of the vacation -> product-items you have
options = params[:path].split('/')
options.reject! { |e| e.to_s.empty? } # Remove trailing junk if any
if options[0] == 'categories'
redirect_to "http://www.newsite.se/product-items/#{options.last}", notice: 'Product Updated! We Have A New Site.', status: 301
return # the return here is a MUST for more complex if-then and multiple redirect_to's
elsif options[0] == 'contact'
redirect_to "http://www.newsite.se/contact-us", notice: 'We moved, Contact us Here.', status: 301
return
elsif options.empty? || options.blank?
redirect_to "http://www.newsite.se/", notice: 'That page no longer exists, Please browse our new site', status: 301
return
else
more_sorting(options)
end
end
private
def more_sorting(options)
case options
when options[2].....
redirect_to ....., notice: '', status: 301
return
when options[3].....
redirect_to ....., notice: '', status: 301
return
when options[4].....
redirect_to ....., notice: '', status: 301
return
end
end
为什么这样做:
这将导致搜索引擎机器人和用户仍然能够抓取并访问每个页面和链接,并被重定向到与新网站相关联的特定页面。
此外,它处理此服务器上的301重定向,并且不会导致新服务器上的其他重定向。你可能会受到一些惩罚,用户体验和机器人解释你试图联合网站。 (这也很可能会删除链接301的解释)
如果您需要更复杂的路由,您可以在RedirectController中添加(我必须这样做)私有函数,以便更深入地分析我作为中最后一个else
的参数。
<强>澄清吗
如果您有任何其他问题,如果有帮助,请告诉我。