Durandal 2.0路由器可以用#代替#吗!用于ajax web爬网目的
Durandal 2.0 router can you replace # for #! for ajax web crawling purposes?
是否可以在Durandal 2.0中替换默认路由器行为来替换默认路由,例如:用'mysite.com/#/myroute'替换mysite.com/#/myroute的原因是,为了让谷歌蜘蛛检测到页面是ajax可抓取的,我需要在url中插入一个hashbang,而不仅仅是一个hashtag。如有任何帮助,我们将不胜感激。
谢谢!
据我所知,在Durandal 2.0中,您无法做到这一点。router
和history
插件不支持这一点,而且这不是一个容易的修复方法,因为代码中有一些地方依赖于#
。
然而,我认为这在你的场景中不是问题。也许您需要更改方式来处理使应用程序可爬网的要求。
通过在应用程序的主HTML中指定元片段类型,您仍然可以使用#
使应用程序SEO兼容:
<meta name="fragment" content="!">
所以你告诉谷歌你的链接没有#!
,但应用程序正在使用JavaScript渲染。然后来自爬网程序的请求将包括?_escaped_fragment_
。
因此,在您的应用程序中,您将使用:
mysite.com/#myroute
爬网程序将请求:
mysite.com?_escaped_fragment_=myroute
查看谷歌文档中关于爬行的第3节,了解更多关于元片段标记的信息。
建议
如果你想充分利用这个功能,我建议在Durandal 2.0中使用pushState,激活路由器如下:
router.activate({ pushState: true } );
还包括元片段标签。
<meta name="fragment" content="!">
如果使用pushState,您应该考虑的事项:
只有当您不打算支持旧浏览器时,才使用pushState。
您需要准备好服务器端的pushState,这意味着当使用
mysite.com/myroute
请求服务器时,应该能够返回相同的JS应用程序,并让客户端处理查询字符串参数。例如,如果您使用ASP.NET,可以使用IIS URL重写来实现这一点。有一篇关于此主题的好博客文章。
- 在ajax成功后,cluetip不适用于首次点击活动元素
- AJAX,用于显示数据库数据
- 用于各个元素的Ajax加载程序
- 需要一个用于AJAX的Javascript库,其中包含多部分/表单数据
- Jquery Ajax POST不工作.适用于GET
- 用于PHP查询的Ajax菜单
- 接收406(不可接受)用于AJAX动作Rails4
- 事件不适用于通过Ajax推杆的元素
- Zendesk app.js示例用于发送外部电子邮件通知或AJAX请求
- 通过 AJAX 发送表单,HTML 节点选择用于数据发送
- jQuery SelectMenu不适用于来自AJAX调用的KNOCKOUT DATA-BINDING
- 用于确定 AJAX 调用的引导选项卡选择
- 这个关键字位于$.ajax()中,用于调用其他函数来设置url
- Ajax成功回调仅适用于Chrome
- 将对象用于ajax和php
- Ajax-用于在发送请求之前检查url是否存在的函数
- 无法将jquery AJAX用于工作节点js express
- Ajax用于将XML条目添加到XML文件中
- Ajax用于通知服务器上的变量更改
- 为什么可以直接访问服务器上的映像,但需要将 AJAX 用于其他文件类型