Durandal 2.0路由器可以用#代替#吗!用于ajax web爬网目的

Durandal 2.0 router can you replace # for #! for ajax web crawling purposes?

本文关键字:ajax 用于 web 代替 路由器 Durandal      更新时间:2023-09-26

是否可以在Durandal 2.0中替换默认路由器行为来替换默认路由,例如:用'mysite.com/#/myroute'替换mysite.com/#/myroute的原因是,为了让谷歌蜘蛛检测到页面是ajax可抓取的,我需要在url中插入一个hashbang,而不仅仅是一个hashtag。如有任何帮助,我们将不胜感激。

谢谢!

据我所知,在Durandal 2.0中,您无法做到这一点。routerhistory插件不支持这一点,而且这不是一个容易的修复方法,因为代码中有一些地方依赖于#

然而,我认为这在你的场景中不是问题。也许您需要更改方式来处理使应用程序可爬网的要求。

通过在应用程序的主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重写来实现这一点。有一篇关于此主题的好博客文章。