我想了很长时间甚至问这个问题。如果标题不够明确,请原谅我。
所以我有单页面应用程序,其中所有路由都在JavaScript(AngularJS)中完成。从服务器我只返回部分HTML。现在,我想确保Google可以使用_escaped_fragment_索引我的应用程序。例如,在我的应用程序中,我有一个URL:
http://example.com/user/profile/a
这将成为:
http://example.com/?_escaped_fragment_=user/profile/a
Google正在为我编制索引。这意味着所有请求都将通过我的IndexHandler来决定如何处理它。
在IndexHandler里面我想以某种方式得到没有'/ user / profile / a'的类,所以我可以在它上面调用特殊的方法来返回页面的完整HTML(非部分)。
伪代码看起来像是谎言:
class IndexHandler(webapp2.RequestHandler):
def get(self):
# In my example this would return 'user/profile/a'
fragment = self.request.GET.get('_escaped_fragment_', '')
if fragment:
fragment = '/' + fragment
# This is something I have no idea how to do
clas_Im_looking_for = XXXX(fragment).get_handler()
response = webapp2.Response()
handler = clas_Im_looking_for(request, response)
# Fragment get is my method
response = handler.fragment_get()
谢谢!
答案 0 :(得分:0)
我不是SEO专家,但我建议使用301重定向将接收请求重定向到“友好URL”。通过这种方式,您可以确保将好的网址编入索引,因此任何找到您网站的人都会使用网址来点击您的应用。
您应该确保这些网址对用户有意义回应......
这也解决了分配正确的处理程序来处理URL的问题。 Yous应用程序知道如何做到这一点。由于您现在处于应用程序的特定处理程序中,因此您实际上可以深入了解路由。
可能有一种方法可以在处理程序代码中使用self.app
来引用顶级应用程序对象,或者使用类似webapp2.get_app()
的内容来获取应用程序对象,然后使用路由器来获取匹配项正确的处理程序(记录为here)
然而,重定向解决方案更优雅:
class IndexHandler(webapp2.RequestHandler):
def get(self):
# In my example this would return 'user/profile/a'
fragment = self.request.GET.get('_escaped_fragment_', '')
if fragment:
fragment = '/' + fragment
self.redirect(fragment, permanent=True)