我制作了一个网址为http://www.example.com/module/content的网页 这是一个非常动态的网页,实际上它是一个网络应用程序。
为了使其尽可能响应,我想使用AJAX而不是普通的页面请求。这也使我能够使用JavaScript添加图层来提供离线功能。
我的问题是:我应该如何制作网址?它们应该是http://www.example.com/module/content还是http://www.example.com/#!/module/content?
以下是我在两个方向的想法。如果您已经清楚地考虑过这个问题,则无需阅读。
我想使用第一个版本,因为我想支持新的HTML5标准。它易于使用,URL看起来很漂亮。但更重要的是它允许我这样做:
如果用户请求页面,则会返回完整的HTML页面。
如果用户然后单击链接,它将仅通过AJAX将内容插入到容器div中。
这将使没有JavaScript的用户能够使用我的网站,因为它不需要使用JavaScript,它只需使用普通的“点击链接请求 - 获取完整的html页面”-approach。
虽然这很好,但问题当然是Internet Explorer。只有IE的最新版本支持History API,并且要在旧版本中使用它,需要使用#标签。 (我的用户中有50%将使用IE,所以我需要支持它...)所以我必须使用/#!/来使其正常工作。
如果使用这两个URL版本,则会出现问题,如果IE用户将此链接发布到网站,Google将向服务器发送_unescaped_string(或类似的..)并且它将使用IE-索引页面带有#标签的版本。有些页面没有标签。
正如我们记得的那样,非标签符号在许多不同的东西上都更好。那么,这个搜索引擎问题可以被规避吗?是否有可能告诉GoogleBot,如果它到达网站的主题标签版本,它应该被重定向到网页的非主题标签版本?通过这种方式,可以获得非主题标签URL的所有好处,并且仍然支持IE6-IE9。
您认为最好的方法是什么?也许你自己在实践中尝试过它? 谢谢你的回答!
答案 0 :(得分:9)
如果您希望Google为您的Ajax内容编制索引,那么您应该像这样使用#!key = value。这就是Ajax导航的Google prefers。
如果您真的更喜欢没有#的漂亮的HTML5网址!那么,是的,你可以支持两者而无需索引问题!只需添加:
<link rel="canonical" href="preferredurl" />
到每个页面的<head>
部分(初始加载),以帮助Google了解您希望他们索引哪个版本的网址。详细了解canonical urls here。
答案 1 :(得分:2)
在这种情况下,解决方案非常简单。您使用第一个URL方案,并且不对旧版IE浏览器使用AJAX增强功能。
如果您的宝贵用户不想升级,那就是他们的问题,但他们不能抱怨没有这些密码效果和动态。
您可以抛出“您的浏览器严重过时!”旧版浏览器的注意事项。
答案 2 :(得分:1)
我不会在网址中使用/#!/
。首先确保页面正常工作,满页请求(应该很容易)。一旦有效,您可以检查window.history
对象,如果存在则添加AJAX。 AJAX调用可以转到相同的URL,主要区别在于服务器端处理。检查很简单,如果设置了HTTP_X_REQUESTED_WITH
,那么请求是一个AJAX请求,如果没有设置,那么你正在处理标准请求。
您无需担心重复内容,因为GoogleBot未设置HTTP_X_REQUESTED_WITH
请求标头。