Оптимизация автоматической генерации мета тега keywords плагином "SEO"

Плагин «SEO» прекрасен в своей простоте, но результат выдаёт несколько прямолинейный. Этот вопрос уже как-то поднимал господин ETNO , но действительно интересного решения не предложил. К счастью, нет никакой магии в том, чтобы подправить нужные tpl-и и получить более интересный результат.

Чего хотелось?
  1. Всегда и везде исключить дублирование ключевых фраз.
  2. Добавить название блога в список ключевых фраз страницы топика и, собственно, самой страницы блога.
  3. Убрать запихивание стандартных ключевых фраз из конфигурации livestreet для страниц блога и топика, но всё же, кроме всего прочего, добавлять туда название сайта.
  4. Сформировать список ключевых слов для страниц «Блоги» из их названий.
  5. Ключевые фразы для списков топиков сформировать как стандартный список из конфигурации livestreet, расширенный названиями блогов, к которым относятся топики из списка.
  6. Ключевые фразы для страницы поиска по тегу сформировать как стандартный список из конфигурации livestreet, расширенный названием тега по которому искали и названиями блогов, к которым относятся найденные топики.
  7. Ключевые фразы для страницы поиска — стандартный список из конфигурации livestreet, расширенный фразой которую искали и названиями блогов, к которым относятся найденные топики или комментарии.

Что получилось:

Блог и топик blog.tpl:
{strip}
{* KEYWORDS *}
  {if $oBlog}
    {* Если очень хочется иметь стандартные фразы везде, то раcкомментируй следующую строку *}
    {* $keywords[]=$sHtmlKeywords *}
    {* Если не нужны какие-то особые "константные фразы", то закомментируй следующую строку *}
    {$keywords[]='Крутой сайт'}
    {$keywords[]=$oBlog->getTitle()|strip_tags|escape:'html'}
    {if count($aTopics)>0}
      {foreach from=$aTopics item=oTopic}
        {$aTopicTags=','|explode:($oTopic->getTags()|strip_tags|escape:'html')}
        {foreach from=$aTopicTags item=tag}
          {if !in_array($tag,$keywords)}
            {$keywords[]=$tag}
          {/if}
        {/foreach}
      {/foreach}
    {/if}
    {foreach from=$keywords item=keyword}
      {if !$keyword@first},{/if}{$keyword}
    {/foreach}
  {elseif $oTopic}
    {* Если очень хочется иметь стандартные фразы везде, то раcкомментируй следующую строку *}
    {* $keywords[]=$sHtmlKeywords *}
    {* Если не нужны какие-то особые "константные фразы", то закомментируй следующую строку *}
    {$keywords[]='Крутой сайт'}
    {$keywords[]=$oTopic->getBlog()->getTitle()|strip_tags|escape:'html'}	
    {$aTopicTags=','|explode:($oTopic->getTags()|strip_tags|escape:'html')}
    {foreach from=$aTopicTags item=tag}
      {if !in_array($tag,$keywords)}
        {$keywords[]=$tag}
      {/if}
    {/foreach}
    {foreach from=$keywords item=keyword}
      {if !$keyword@first},{/if}{$keyword}
    {/foreach}
  {else}
    {$sHtmlKeywords}
  {/if}
{/strip}

Списки топиков index.tpl:
{strip}
{* KEYWORDS *}
  {if count($aTopics)>0}
    {$keywords[]=$sHtmlKeywords}
    {foreach from=$aTopics item=oTopic}
      {$blogTitle=$oTopic->getBlog()->getTitle()|strip_tags|escape:'html'}
      {if !in_array($blogTitle,$keywords)}
        {$keywords[]=$blogTitle}
      {/if}
    {/foreach}
    {foreach from=$keywords item=keyword}
      {if !$keyword@first},{/if}{$keyword}
    {/foreach}
  {else}
    {$sHtmlKeywords}
  {/if}
{/strip}

Страницы «Блоги» blogs.tpl:
{strip}
{* KEYWORDS *}
  {* Если очень хочется иметь стандартные фразы везде, то раcкомментируй следующую строку *}
  {* $keywords[]=$sHtmlKeywords *}
  {* Если не нужны какие-то особые "константные фразы", то закомментируй следующую строку *}
  {$keywords[]='Крутой сайт'}
  {foreach from=$aBlogs item=oBlog}
    {$blogTitle=$oBlog->getTitle()|strip_tags|escape:'html'}
    {if !in_array($blogTitle,$keywords)}
      {$keywords[]=$blogTitle}
    {/if}
  {/foreach}
  {foreach from=$keywords item=keyword}
    {if !$keyword@first},{/if}{$keyword}
  {/foreach}
{/strip}

Поиск по тегу tag.tpl:
{strip}
{* KEYWORDS *}
  {$keywords[]=$sHtmlKeywords}
  {$keywords[]=$sTag}
  {if count($aTopics)>0}
    {foreach from=$aTopics item=oTopic}
      {$blogTitle=$oTopic->getBlog()->getTitle()|strip_tags|escape:'html'}
      {if !in_array($blogTitle,$keywords)}
        {$keywords[]=$blogTitle}
      {/if}
    {/foreach}
  {/if}
  {foreach from=$keywords item=keyword}
    {if !$keyword@first},{/if}{$keyword}
  {/foreach}
{/strip}

Поиск search.tpl:
{strip}
{* KEYWORDS *}
  {if isset($aReq) && isset($aReq.q) }
    {$keywords[]=$sHtmlKeywords}
    {$keywords[]=$aReq.q}
    {if $aReq.sType == 'topics' }
      {if count($aTopics)>0}
        {foreach from=$aTopics item=oTopic}
          {$blogTitle=$oTopic->getBlog()->getTitle()|strip_tags|escape:'html'}
          {if !in_array($blogTitle,$keywords)}
            {$keywords[]=$blogTitle}
          {/if}
        {/foreach}
      {/if}
    {else}
      {if count($aComments)>0}
        {foreach from=$aComments item=oComment}
          {$blogTitle=$oComment->getTarget()->getBlog()->getTitle()|strip_tags|escape:'html'}
          {if !in_array($blogTitle,$keywords)}
            {$keywords[]=$blogTitle}
          {/if}
        {/foreach}
      {/if}
    {/if}
    {foreach from=$keywords item=keyword}
      {if !$keyword@first},{/if}{$keyword}
    {/foreach}
  {else}
    {$sHtmlKeywords}
  {/if}
{/strip}

Заменяем файлы в /plugins/seo/templates/skin/default/meta/keywords/ и… всё.

Warning: тестировалось с LiveStreet CMS 1.0.1. Про более старые версии, знать не знаю, сработает или нет.

P.S. Посмотреть как работает «в живую» можно на сайте ММОзговед.

13 комментариев

avatar
Отличное решение!!!
avatar
Интересный подход. Но и странный. Может, я даже запутался. Я вообще за то, чтобы руками для каждой страницы ключи пописывать (сайт (ключ1, ключ2, ключ3), блог1 (ключ1), блог2 (ключ2), топик1(ключ1, нч, нч), топик2 (ключ2, нч, нч) — везде свои ключи).
Вы его уже опробовали, он дает положительный эффект в приросте посещаемости?
avatar
Я не очень представляю как руками прописывать keywords для страниц тегов. Да и со страницами не персональных блогов тоже все не просто если их много, а у нас их сейчас около 80, а в перспективе будут сотни. Специфика сайта такая.
avatar
Да опробовали (на что указывает P.S. в заметке ;) ). Наблюдаем взрывной рост индексирования в поисковиках, особенно в Яндекс, как раз с момента запуска. На совпадение не похоже, хотя, конечно, на 100% уверенности нет что причина именно в этих изменениях.
avatar
Спасибо! Будем пробовать
avatar
blogs.tpl отсутствует в указанной директории, подскажите чего делать?
avatar
Да, его нет в «оригинальной поставке» плагина «SEO». Но плагин сделан так, что tpl-ку можно подсовывать на любую акцию, чем я и воспользовался. Просто создайте этот файл и положите туда — и всё :).

P.S. только аккуратно с кодировкой файла, она должна совпадать с кодировкой OS, на которой крутиться LS. Обычно это UTF-8, в случае Linux. Лучше файл прямо на месте vim-ом создавать — не ошибётесь.
avatar
Так и сделал, благодарю
комментарий был удален
avatar
Добавил search.tpl.
avatar
C момента написания этого поста прошло огромное количество времени, но так никто и не отписался об эффективности решения.
Кто применял данную модификацию плагина, отпишитесь пожалуйста. Хуже не стало хоть?
avatar
Сам же автор и пишет про «взрывной рост»… Я попробую, если будет результат (через месяц или позже), то опишусь если напомните. ))
avatar
А как избавится от проблемы дубля главной страницы и /blog/ где тоже отображаются все новости, так как наглавной у меня все новости.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.