SEO в WebSphere Portal (название страницы)

Название страницы

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

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

Для того, что я видел, способ изменения заголовков портала очень статичен (это глобальные настройки):

  • Изменение баннераTitleText в политике темы
  • Если это не так, настройте 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.


person sonar    schedule 02.05.2011    source источник
comment
Пожалуйста, отредактируйте свой вопрос, если у вас есть что добавить к нему. Это сайт вопросов и ответов, а не форум.   -  person dandan78    schedule 04.05.2011


Ответы (2)


Я расскажу об отсутствующей части 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.

person user918176    schedule 29.08.2011
comment
Спасибо, все это звучит очень многообещающе. Я попытаюсь. - person sonar; 31.08.2011

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

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

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

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

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

person sonar    schedule 02.12.2011