我正在开发一个RAP网站,并希望让像谷歌这样的机器人可以访问它(我在这里只是指谷歌;但我认为其他搜索引擎的工作原理类似(。Web应用程序包含我从数据库加载的动态内容,具体取决于用户正在搜索的内容。如何使这些内容可用于谷歌?我读过谷歌的ajax爬行指南,但不知道如何将其应用于RAP:
- RAP使AJAX调用"内部"。我可以在谷歌上使用它们吗;如何
- RAP是一个单独的页面,我应该如何向谷歌提供Sitemap(XML(
提前感谢!
Ajax的理念是应用程序不会一直加载新页面,而是在后台使用Ajax请求加载新内容。无论如何,要为应用程序提供"深度链接",您需要包含片段部分的URL,例如example.com/myapp#mystate
。之所以使用此技巧,是因为当只有URL的片段部分发生更改时,浏览器不会重新加载页面。
这与RAP没有什么不同。为了处理这种URL,RWT提供了一个浏览器历史API。当您的应用程序状态发生变化时,例如,当用户选择某种选项卡或启动搜索时,您可以在浏览器历史记录中添加一个新条目,从而有效地更改浏览器中URL的片段:
RWT.getBrowserHistory().createEntry( "!mystate", "Example" );
这将把URL更改为example.com/app/entrypoint#!mystate
(该状态的"深度链接"(,并在浏览器历史记录中添加一个名为"Example"的条目,这样您以后就可以使用浏览器的后退按钮返回该状态。
为了能够对URL的更改做出反应,您必须在浏览器历史记录中添加一个侦听器。每当片段部分发生更改时,都会通知此侦听器。当应用程序是用一个片段启动的(有人关注一个深层链接(时也是如此。然后,您的应用程序负责重新安装由该片段表示的状态。
RWT.getBrowserHistory().addBrowserHistoryListener( new BrowserHistoryListener() {
public void navigated( BrowserHistoryEvent event ) {
// show state represented by event.entryId
}
} );
RAP应用程序将片段URL用于不同的"子页面"的示例是RAP示例演示。
故事的其余部分应该在谷歌的AJAX爬行指南中进行解释。您的id必须从!
开始,才能生成具有类似#!mystate
的片段的URL。这些URL是您应该添加到站点地图中的URL。为了给爬网程序提供信息,您可以实现一个servlet过滤器,该过滤器捕获对URL模式?_escaped_fragment_=mystate
的请求,并返回特定状态的HTML表示。