2011-05-02 100 views
1

页面标题SEO WebSphere Portal中(页标题)

有没有办法来dinamically更改页面标题在运行时?

我知道您可以在门户级别更改页面标题,但此解决方案 不提供任何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获取此的一种方式。

+1

如果你有更多东西要添加到它,请编辑你的问题。这是一个Q/A网站,而不是论坛。 – dandan78 2011-05-04 09:37:01

回答

0

我只是想更新这个问题,提到有一个新的功能,使更好的方式来实现这个相同的目标。

新的Web内容查看器(286)利用JSR 286中称为两阶段渲染的新功能,其中创建了一个名为doHeaders的新事件。在doHeaders事件下,可以修改响应以添加头部中的元素(如标题)。

现在的Web内容查看器提供了一个页面显示标题设置,使您能够从内容做选择。

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

祝你有好运的每一个有意识的Lotus Web Content Management开发人员。

2

我将介绍缺失的WCM部分,因为我已经实现了该部分。我将能够给你所需的信息,但没有准备好的代码。它只是从流中读取,然后写入其他文章,所以你应该能够理解这个想法。使用Portal 6.1最合理的方法是针对此要求开发Servlet Filter。你想要做的是:

  1. 使WCM组件打印出你想要注入到html标题的正确信息。这通常意味着例如导航器组件打印当前路径/标题。
  2. 将这些组件添加到演示文稿模板中。你想要什么它可能使用HTML评论标签<!---->和一些计划,你可以稍后从生成的HTML解析。
  3. 构建一个servlet过滤器,如果它是html/xhtml(使用MIME类型),则从ServletResponse读取整个页面。当你这样做的时候解析评论。现在,用html标题部分中的正确标记重新编写一个新页面。
  4. 重新注入新的响应页面,这个页面有正确的html页眉。

不幸的是,这是你必须采取的方式。甚至没有隐藏/私有的API可以让你从WCM渲染portlet的应用程序上下文中获取你想要的内容,并将其放入html头文件中。另外,您必须将servlet过滤器添加到wps应用程序。这里常见的问题是在编辑web.xml后必须重新部署它。

该servlet过滤器的性能影响可以忽略不计(仅占总数的百分比),并且该方法简单地起作用。根据我的经验,这对搜索引擎优化的目的非常有效,您可以通过这种方式从WCM获取几乎任何信息。

+1

谢谢大家,这听起来很有希望。我会试试看。 – sonar 2011-08-30 21:38:01