我正在开发一个 RAP 网站,并希望像 Google 这样的机器人可以访问它(我在这里只指 Google;但我认为其他搜索引擎的工作方式类似)。Webapp 包含我从数据库加载的动态内容,具体取决于用户正在搜索的内容。如何使这些内容可供 Google 使用?我已阅读 Google 的 ajax 抓取指南,但不知道如何将其应用于 RAP:
- RAP 在“内部”进行 AJAX 调用。我可以将它们用于谷歌吗?如何?
- RAP 是单页,我应该如何向 Google 提供站点地图 (XML)?
提前致谢!
我正在开发一个 RAP 网站,并希望像 Google 这样的机器人可以访问它(我在这里只指 Google;但我认为其他搜索引擎的工作方式类似)。Webapp 包含我从数据库加载的动态内容,具体取决于用户正在搜索的内容。如何使这些内容可供 Google 使用?我已阅读 Google 的 ajax 抓取指南,但不知道如何将其应用于 RAP:
提前致谢!
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 示例演示。
其余的故事应该在Google 的 AJAX 抓取指南中解释。您的 id 必须以 a 开头,!
才能生成带有#!mystate
. 这些 URL 是您应该添加到站点地图中的 URL。为了给爬虫提供数据,您可以实现一个 servlet 过滤器,它捕获对 URL 模式的请求?_escaped_fragment_=mystate
并返回特定状态的 HTML 表示。