我正在尝试使angularjs网站可以抓取。为此我正在使用?_escaped_fragment =解决方案,正如Google建议的那样。
例如:
当google看到"http://xample.com/#!/Home"
等哈希片段的请求时,会将网址转换为"http://xample.com/?_escaped_fragement_=/Home"
。
我已在rails中实施Index controller
接受此类请求,并将该请求重定向到crawler controller
,后者又向Google提供动态生成的HTML快照。
但我的主页http://xample.com/
除外
没有其他页面被抓取。(也许是因为hashbang)
以下是即使按照谷歌的建议实施?_escaped_fragment_ =解决方案后仍未抓取的网址: -
http://xample.com/#!/Home
http://xample.com/#!/xyz
http://xample.com/#!/abc
http://xample.com/#!/def
我使用的控制器: -
Index controller
接受带有“?_escaped_fragment _ =”
class IndexController < ApplicationController
def index()
if params['_escaped_fragment_'] == '/Home'
redirect_to :controller=>'crawler', :action => 'crawlhome'
return
elsif params['_escaped_fragment_'] == '/Xyz'
redirect_to :controller=>'crawler', :action => 'crawlxyz'
return
end
elsif params['_escaped_fragment_'] == '/abc'
redirect_to :controller=>'crawler', :action => 'crawlabc'
return
end
end
elsif params['_escaped_fragment_'] == '/def'
redirect_to :controller=>'crawler', :action => 'crawldef'
return
end
end
爬虫控制器
class CrawlerController < ApplicationController
layout false
require 'net/http'
require 'uri'
def crawlhome
@data = "getting data from api and displaying same data in view"
end
def crawlXyz
@data = "getting data from api and displaying same data in view"
end
def crawlabc
@data = "getting data from api and displaying same data in view"
end
def crawldef
@data = "getting data from api and displaying same data in view"
end
end
在我公司工作的Seo有关人员建议我在网址中实施没有hashbang
(推送状态)的网站。这是解决问题的正确方法。
然而,这在非Html浏览器中不起作用。
实施http://xample.com/#!/Home
可能会出现什么问题。为什么在上述情况下不会抓取。
我在论坛上尝试了很多不同的解决方案,但仍然没有给我正确的结果。
答案 0 :(得分:1)
实际上面的代码正在运行.Google在4天(很长一段时间)后开始抓取..认为代码中有错误。
希望这对其他开发者有所帮助。