WebSpherePortal中的SEO(页面标题)

WebSpherePortal中的SEO(页面标题),seo,websphere-6.1,websphere-portal,Seo,Websphere 6.1,Websphere Portal,页面标题 有没有一种方法可以在运行时动态更改页面标题 我知道您可以在门户级别更改页面标题,但这种解决方案 不提供任何SEO价值,因为它不会更改页面中的标题标签 就我所见,更改门户标题的方法是非常静态的(这些是全局设置): 更改主题策略中的横幅文字 如果不存在,请将bannerTitleTextResourceBundle和bannerTitleTextResourceKey调整为所需的值 否则,在主题配置中全局设置标题 我们的目标是能够在页面级别设置标题,以便它可以在页面之间更改,并包含相关

页面标题

有没有一种方法可以在运行时动态更改页面标题

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

就我所见,更改门户标题的方法是非常静态的(这些是全局设置):

  • 更改主题策略中的横幅文字
  • 如果不存在,请将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获取此信息的方法。

我将介绍缺少的WCM部分,因为我已经实现了它。我将能够给你所需的信息,但不是现成的代码。它只是从一条溪流中阅读,然后写进另一条溪流中,这样你就应该能够理解这个想法。使用Portal6.1最合理的方法是为该需求开发一个应用程序。您要做的是:

  • 使WCM组件打印出要注入到html头中的正确信息。这通常意味着实例导航器组件打印当前路径/标题
  • 将这些组件添加到演示文稿模板中。您希望它使用的可能是html注释标记
    ,以及一些稍后可以从生成的html解析的方案
  • 构建一个servlet过滤器,从ServletResponse(如果是html/xhtml)读取整个页面(使用mime类型)。在进行此操作时,将注释解析掉。现在,在html标题部分用正确的标记重写一个新页面
  • 重新注入新的响应页面,这一次有正确的搜索引擎优化html标题
  • 不幸的是,这是你必须采取的方式。甚至没有隐藏/私有API允许您从WCM呈现portlet的应用程序上下文中获取所需内容并将其放入html头中。此外,还必须将servlet过滤器添加到wps应用程序中。这里的一个常见问题是,在编辑web.xml之后必须重新部署它


    servlet过滤器对性能的影响可以忽略不计(总共只有两个百分比),并且该方法简单有效。根据我的经验,它在搜索引擎优化方面非常有效,你可以通过这种方式从WCM获得几乎所有的信息。

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

    新的Web内容查看器(286)利用了JSR286中名为“两阶段渲染”的新功能,其中创建了名为DoHeader的新事件。在doHeaders事件下,可以修改响应,以便在head中添加元素,例如title

    现在,Web内容查看器提供了一个页面显示标题设置,允许您从内容中进行选择

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


    祝所有关注SEO的Lotus Web内容管理开发人员好运。

    如果您还有其他问题要补充,请编辑您的问题。这是一个问答网站,不是论坛。谢谢你。所有这些听起来都很有希望。我试试看。