SEO в WebSphere Portal (заголовок страницы) - PullRequest
1 голос
/ 02 мая 2011

Заголовок страницы

Есть ли способ динамически изменять заголовок страницы во время выполнения?

Я знаю, что вы можете изменить заголовок страницы на уровне портала,но это решение не предлагает никакого значения 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;
}

После добавления я смог скопировать head_title.jspf из темы 6.1.5;которая включает в себя следующие новые строки:


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

Теперь все, что осталось, - это выяснить способ получения этого из WCM.

Ответы [ 2 ]

2 голосов
/ 30 августа 2011

Я расскажу о недостающей части WCM, так как я это реализовал. Я смогу дать вам необходимую информацию, но не готовый код. Это просто чтение из потока и запись в другой в любом случае, так что вы должны быть в состоянии понять идею. Наиболее разумным способом использования Portal 6.1 является разработка Servlet Filter для этого требования. Что вы хотите сделать, это:

  1. Создание компонентов WCM, которые выводят правильную информацию, которую вы хотите внедрить в заголовки html. Это, как правило, означает, например, компонент навигатора для печати текущего пути / заголовка.
  2. Добавьте эти компоненты в шаблоны презентаций. Что вы хотите, вероятно, использовать HTML-теги комментариев <!-- --> и некоторые схемы, которые вы можете позже проанализировать из сгенерированного HTML.
  3. Создайте фильтр сервлета, который читает всю страницу из ServletResponse, если это html / xhtml (используйте тип mime). Разберите комментарии, пока вы делаете это. Теперь перепишите новую страницу с правильными тегами в разделе заголовка html.
  4. Повторно добавьте новую страницу ответа, которая на этот раз имеет правильные заголовки HTML для SEO.

К сожалению, именно так вы и должны поступить. Нет даже скрытых / частных API, которые позволили бы вам взять то, что вы хотите, из контекста приложения портлетов рендеринга WCM и поместить его в заголовки html. Также необходимо добавить фильтр сервлетов в приложение wps. Обычная ошибка здесь заключается в том, что вам необходимо повторно развернуть его после редактирования файла web.xml.

Влияние на производительность фильтра сервлетов незначительно (всего пара процентов), и этот подход просто работает. По моему опыту, это очень хорошо работает для целей SEO, и вы можете получить практически любую информацию из WCM таким образом.

0 голосов
/ 03 декабря 2011

Я просто хотел обновить этот вопрос, чтобы упомянуть, что есть новая функция, которая позволяет улучшить способ достижения этой же цели.

В новой программе просмотра веб-материалов (286) используется новая функция вJSR 286 вызывает двухфазный рендеринг, в котором создается новое событие, называемое doHeaders.Под событием doHeaders ответ может быть изменен, чтобы добавить элементы в заголовок, такие как заголовок.

Теперь средство просмотра веб-материалов предоставляет параметр Заголовок отображения страницы , который позволяет выполнить Выбор из контента .

Теперь все, что осталось на самом деле, - это позволить нам разработчикам устанавливать другие элементы из веб-контента, такие как: канонические элементы / ссылки, мета-теги и т. Д. Но я думаю, чтоНовая функция «Папки веб-материалов» позволяет нам создавать что-то на уровне тем.

Удачи всем разработчикам Lotus Web Content Management, которые заботятся о SEO.

...