WebSphere Portal中的SEO(页面标题)

时间:2011-05-02 14:43:49

标签: seo websphere-6.1 websphere-portal

页面标题

有没有办法在运行时以动态方式更改页面标题?

我知道您可以在门户级别更改页面标题,但此解决方案 不提供任何SEO值,因为它不会更改页面中的TITLE标记。

对于我所看到的,更改门户网站标题的方式非常静态(这些是全局设置):

  • 更改主题政策中的bannerTitleText
  • 如果不存在,请将bannerTitleTextResourceBundle和bannerTitleTextResourceKey调整为所需的值。
  • 否则,请在主题配置
  • 中全局设置标题

我们的目标是能够在页面级别设置标题,以便它可以在页面之间进行更改并包含相关页面的关键字。

实际上,如果可以从WCM完成,那将是最理想的。

更新

我注意到WebSphere Portal 6.1.5中的默认主题是追加页面标题,因此检查了主题,并且jspInit.jspf确实有一些以下新方法:



private static com.ibm.portal.state.service.PortalStateManagerServiceHome portalStateManagerServiceHome;

// (This goes in the jspInit constructor)
portalStateManagerServiceHome = (com.ibm.portal.state.service.PortalStateManagerServiceHome) ctx.lookup("portal:service/state/PortalStateManager");

protected com.ibm.portal.state.service.PortalStateManagerService getStateManagerService( javax.servlet.ServletRequest request, javax.servlet.ServletResponse response ) throws Exception {
    final com.ibm.portal.state.service.PortalStateManagerService psms = portalStateManagerServiceHome.getPortalStateManagerService( (javax.servlet.http.HttpServletRequest) request, (javax.servlet.http.HttpServletResponse) response );
    return psms;
}
protected boolean isStaticPage( javax.servlet.ServletRequest request, javax.servlet.ServletResponse response ) throws com.ibm.portal.ModelException {
    final com.ibm.portal.model.NavigationSelectionModelProvider nsmProvider = navigationSelectionModelHome.getNavigationSelectionModelProvider();
    final com.ibm.portal.navigation.NavigationSelectionModel nsm = nsmProvider.getNavigationSelectionModel(request, response);
    final com.ibm.portal.navigation.NavigationNode currentNavNode = (com.ibm.portal.navigation.NavigationNode) nsm.getSelectedNode();
    final com.ibm.portal.content.ContentNode currentContentNode = currentNavNode.getContentNode();

    return currentContentNode.getContentNodeType().equals( com.ibm.portal.content.ContentNodeType.STATICPAGE );
}

protected com.ibm.portal.navigation.NavigationNode getSelectedNode( final javax.servlet.ServletRequest request, javax.servlet.ServletResponse response ) throws com.ibm.portal.ModelException {
    com.ibm.portal.model.NavigationSelectionModelProvider nsmProvider = navigationSelectionModelHome.getNavigationSelectionModelProvider();
    com.ibm.portal.navigation.NavigationSelectionModel nsm = nsmProvider.getNavigationSelectionModel(request, response);
    return (com.ibm.portal.navigation.NavigationNode) nsm.getSelectedNode();
}

protected String getSelectedNodeTitle( final javax.servlet.ServletRequest request, javax.servlet.ServletResponse response ) throws com.ibm.portal.ModelException {
    final String title;
    if ( localizedContextHome != null ) {
        com.ibm.portal.model.LocalizedContext context = localizedContextHome.getLocalizedContext( (javax.servlet.http.HttpServletRequest) request );
        title = context.getTitle( getSelectedNode( request, response ) );
    } else {
        title = "";
    }

    return title;
}

添加此内容后,我可以从6.1.5主题中复制head_title.jspf;其中包括以下新行:


<c:set var="selectedNodeTitle" value="<%=getSelectedNodeTitle(request, response)%>" />
<title><c:out value="${siteTitle} - ${selectedNodeTitle}"/></title>

现在剩下的就是找出一种从WCM中获取此信息的方法。

2 个答案:

答案 0 :(得分:2)

我将介绍缺少的WCM部分,因为我实现了它。我将能够为您提供所需的信息,但不是现成的代码。它只是从流中读取并反正写入其他内容,因此您应该能够掌握这个想法。使用Portal 6.1的最合理方法是为此要求开发Servlet Filter。你想要做的是:

  1. 使WCM组件打印出您要注入html标头的正确信息。这通常意味着例如导航器组件打印当前路径/标题。
  2. 将这些组件添加到演示模板中。您希望它可能使用html注释标记<!-- -->以及稍后可以从生成的html中解析的一些方案。
  3. 构建一个servlet过滤器,如果它是html / xhtml,则从ServletResponse读取整个页面(使用mime类型)。在你这样做时解析评论。现在,在html标题部分重写一个带有正确标签的新页面。
  4. 重新注入新的响应页面,这次有正确的SEO标题。
  5. 不幸的是,这是你必须采取的方式。甚至没有隐藏/私有API可以让您从WCM渲染portlet的应用程序上下文中获取所需内容并将其放入html标头中。此外,您必须将servlet过滤器添加到wps应用程序。这里常见的问题是,在编辑web.xml之后必须重新部署它。

    servlet过滤器的性能影响可以忽略不计(总共只有几个百分比),这种方法很简单。根据我的经验,它可以很好地用于搜索引擎优化目的,你几乎可以通过这种方式从WCM获得任何信息。

答案 1 :(得分:0)

我只是想更新这个问题,提到有一个新功能可以更好地实现同样的目标。

新的Web Content Viewer(286)利用了JSR 286中的一个新功能,称为两阶段渲染,其中创建了一个名为doHeaders的新事件。在doHeaders事件下,可以修改响应以便在头部添加元素,例如title。

现在,Web Content Viewer提供了页面显示标题设置,使您可以执行从内容中选择

现在剩下的就是让开发人员从Web内容中设置其他元素,例如:规范元素/链接,元标记等。但我认为新的Web内容文件夹功能可以让我们在主题级别。

祝所有具有SEO意识的Lotus Web Content Management开发人员好运。