Оптимизация шаблонов

Пролог


Наброски по данной статье лежали ещё с конца зимы и все никак не было времени на её написание, поэтому решил опубликовать её почти «как есть» т.е. с сухими выжимками фактов, без расписанных деталей. Это поможет остальным членам сообщества совершенствовать свои шаблоны.

livestreet cms seo
Внимательное всестороннее изучение аналитики и инструментов для вебмастеров от гугла на новом сайте с чистым уникальным контентом заявило о некоторых слабых местах стандартного шаблона developer, на основе которого был создан свой (замечу, что шаблон synio имеет те же погрешности + свои особенности). Говоря в данном контексте «уникальный контент» имеется ввиду нормальные статьи для привлечения аудитории, которые пишутся людьми и для людей, а не под заказ т.е. никакой копипасты и рерайтинга. На наблюдаемом сайте весь контент писался с чистого листа.

Были наблюдения, анализы инструментов от гугла и удалось вывести список необходимых изменений, которые нужно внести в шаблон для улучшения индексированности сайта. Помимо прочего, нужно также сделать ещё и другие правки на сайте кроме шаблона. Давайте посмотрим на этот список.

Что нужно сделать для СЕО?


При просмотре аналитики можно заметить что некоторые ненужные словоформы сайта засоряют и занимают топовые позиции ключевых слов, например «0 комментариев», «читать далее». Нужно как можно скорее избавиться от них, ведь вряд ли можно ожидать большого наплыва посетителей по таким странным запросам.

  1. В шаблоне нужно убрать текст ссылки "читать далее" (только его т.к. если указан текст для тега cut, то пусть будет он) и заменить его на заголовок топика используя конструкцию
    {$oTopic->getTitle()|escape:'html'}
    

    в типах топика «фотосет» и обычном топике. Этот текст попадает в топ ключевиков по сайту.

    Примечание:

    Для топиков типа «опрос» и «ссылка» текст выводится полностью, без ссылки «читать далее», что связано с малым объемом разрешенного текста для таких топиков в 500 символов, поэтому в их шаблонах менять ничего не нужно.
    Найти этот текст в шаблоне обычного топика можно по ключевым словам текстовки:
    {$aLang.topic_read_more}
    

    в фотосете немного другой текст ссылки:
    {$aLang.topic_photoset_show_all|ls_lang:"COUNT%%`$iPhotosCount`"} →
    


  2. Убрать текст "комментарии" в нижней части топика и заменить его на иконку комментариев (этот ключевик попадает в ТОП4 сайта)

  3. Уменьшить размер шрифта заголовка "N комментариев" над комментариями топика до h6, т.к. h3 слишком много ему чести делает (попадает в ТОП4 сайта).

  4. Убрать надпись "Теги" топика и заменить его на иконку тегов

  5. Убрать значение «image» атрибута alt тега img в файле topic_photoset.tpl и заменить его более объективным
    {$oMainPhoto->getDescription()|escape:'html'}
    


  6. Убрать по всему шаблону значения атрибутов alt, которые не несут смысловой нагрузки. Таких файлов будет два десятка и заменить их нужно чем нибудь полезным, например, заголовком топика, логином пользователя или описанием, не забывая экранировать данные — в зависимости от значения слова этого атрибута оно занимает 5 позицию по ключевым словам. Например, можно встретить alt=«login» или alt=«profile» встречающиеся по сайту весьма часто. Стоит ли говорить что поисковики считают это важным?

  7. Заголовки. Одно из наиболее важных замечаний. На главной странице должен быть только один заголовок с тегом h1 — это название сайта, тег h2 — описание сайта и заголовки топиков. На страницах самих публикаций заголовок топиков должен меняться на h1 как наиболее важный, а в шапке сайта название должно уменьшаться до h2, описание — до h3. Таким образом ПС можно дать понять что же является самым важным на каждой странице. Текущее положение дел в стандартных шаблонах для ЛС может вывести ваш сайт в ТОП только по его названию, т.к. каждая страница вашего сайта только об названии и сообщает как наиболее важном.

  8. Как известно, можно не писать атрибут типа тега script — браузеры давно по-умолчанию подразумевают что это яваскрипт. Поэтому ни к чему каждый раз писать это. Можно почистить шаблоны от этой старой необходимости.

  9. Вы будете удивлены, но кнопки шаринга в социальных сетях, которые подключаются в топике, все имеют атрибут rel=«nofollow» кроме одной, хорошо скрытой и не видимой пользователю:
    <a class="b-share-popup__yandex" href="http://api.yandex.ru/share/">Яндекс</a>
    

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

    Отключается это просто комментированием строки вызова скрипта яндекс-шаринга в конфиге движка:
    "http://yandex.st/share/share.js" => array('merge'=>false),
    

    заменить на
    //"http://yandex.st/share/share.js" => array('merge'=>false),
    

    правда при этом кнопки публикации статьи в социальных сетях работать не будут. Но скриптов шаринга в инете полно.

  10. В сайдбаре все заголовки (например, "Прямой эфир") нужно уменьшить до тега h6 — они только забирают вес у важного контента

  11. Добавить плагин trickytitle, который дополняет заголовки страниц дополнительными данными и избавляет вас от леса ошибок в панели веб-мастера гугла, которые нервно сообщают о куче страниц с одинаковым тайтлом

  12. Добавить плагин sitemap, который составляет удобную карту вашего сайта для поисковых систем и улучшает индексирование вашего сайта (казалось бы что это уже и так само собой разумеется, но не все вспоминают об этом плагине)

  13. Добавить плагин seo, который значительно лучше формирует для поисковиков метатеги страниц в автоматическом режиме (ключевые слова и описание)

  14. Добавить плагин "Пингатор", который стучится в двери поисковиков при каждой новой публикации на сайте, сообщая тем самым, что надо бы и сайт проиндексировать. Снова.

  15. Добавить файл robots.txt в корень сайта, в котором запретить поисковикам ходить по урлам, где их ничего не ждет, а робота яндекса специально натравить на сайтмап, т.к. он иногда стесняется попробовать найти его самостоятельно


Приложение


  1. Плагины, о которых идет речь в тексте, можно найти в официальном каталоге движка. Все они бесплатные.

  2. Для п. 7 «Заголовки» код может быть использован примерно следующий (могут понадобится незначительные правки для конкретного шаблона):

    A. для шапки сайта в файле header_top.tpl для регулирования размеров названия и описания сайта:
    <header id="header" role="banner">
      {hook run='header_banner_begin'}
      <hgroup class="site-info">
      
        {if $sAction=='index'}
          {assign var="sSiteTitleTag" value="h1"}
          {assign var="sSiteDescriptionTag" value="h2"}
        {else}
          {assign var="sSiteTitleTag" value="h2"}
          {assign var="sSiteDescriptionTag" value="h3"}
        {/if}
      
        <{$sSiteTitleTag} class="site-name"><a href="{cfg name='path.root.web'}">{cfg name='view.name'}</a></{$sSiteTitleTag}>
        <{$sSiteDescriptionTag} class="site-description">{cfg name='view.description'}</{$sSiteDescriptionTag}>
      </hgroup>
      {hook run='header_banner_end'}
    </header>
    

    данный код для главной страницы сайта сделает наиболее важным название сайта и одинаковым по весу описание и заголовки топика.

    B. для списка топиков и страницы отдельного топика в topic_part_header.tpl для регулирования заголовка топика (показана часть стандартного кода чтобы было понятно куда вставлять код):
    <article class="topic topic-type-{$oTopic->getType()} js-topic">
      <header class="topic-header">
        
        {if $bTopicList}
          {assign var="sTopicTitleTag" value="h2"}
        {else}
          {assign var="sTopicTitleTag" value="h1"}
        {/if}
        
        <{$sTopicTitleTag} class="topic-title word-wrap">
          {if $oTopic->getPublish() == 0}   
            <i class="icon-tag" title="{$aLang.topic_unpublish}"></i>
          {/if}
          
          {if $oTopic->getType() == 'link'} 
            <i class="icon-share-alt" title="{$aLang.topic_link}"></i>
          {/if}
          
          {if $bTopicList}
            <a href="{$oTopic->getUrl()}" rel="topic publication">{$oTopic->getTitle()|escape:'html'}</a>
          {else}
            {$oTopic->getTitle()|escape:'html'}
          {/if}
        </{$sTopicTitleTag}>
    

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

  3. Пример файла robots.txt
    User-agent: *
    Disallow: /login/
    Disallow: /registration/
    Disallow: /rss
    Disallow: /search/
    Disallow: /blogs
    Disallow: /people
    Disallow: /profile/
    Disallow: /stream
    Disallow: /personal_blog
    Disallow: /feed
    Disallow: /ajax
    Disallow: /admin
    Disallow: /subscribe/
    Disallow: /engine/lib$
    Disallow: /tag/$
    Disallow: /topic/$
    Disallow: /my/
    Disallow: /templates/skin/__SKIN_NAME__/$
    Disallow: /page/$
    Disallow: /error/$
    Disallow: /settings/$
    Disallow: /photoset/$
    Disallow: /link/$
    Disallow: /question/$
    Disallow: /robotstxt/$
    Disallow: /message/$
    Sitemap: http://__SITE_DOMAIN__.com/sitemap.xml
    Host: __SITE_DOMAIN__.com
    

    где:
    __SKIN_NAME__ — имя используемого шаблона, что там ищет гугл — не понятно, но что-то ищет.
    __SITE_DOMAIN__ — имя вашего сайта

    Что можно прописывать в этом файле уже много раз обсуждалось и поэтому здесь не рассматривается детально.

Эпилог

Надеюсь, для кого-то данная статья окажется полезной. Ориентирована она, конечно, не на обычных пользователей, а больше на разработчиков, т.к. есть нюансы, которые расписывать очень долго. Несомненным бонусом будет для разработчиков шаблонов, т.к. последнее время начался бум отличных шаблонов для ливстрита, эта заметка (или уже статья?) может помочь сделать шаблоны не только красивыми, а и более понятными для поисковых систем.

кросспост из гида.
Предлагаем проектирование и реализацию проектов чистых помещений для различных производственных процессов.

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

avatar
Спасибо, очень информативно. Тема, давно ожидаемая в сообществе…
avatar
Плагин SEO IMHO лучше не ставить. Он довольно «грязно» и прямолинейно формирует содержимое мета-тегов. Не читабельно и избыточно. Когда-то это прокатывало, но сейчас, подозреваю, приносит скорее вред чем пользу. Плагин-то очень старый.

Ecли уж так хочется этот плагин, то по карйне мере сделайте так: livestreet.ru/blog/seo/13477.html

И кстати, meta keywords последняя версия TrickyTitle умеет формировать, и гораздо умнее, чем SEO.
avatar
И кстати, meta keywords последняя версия TrickyTitle умеет формировать, и гораздо умнее, чем SEO.
как ещё один вариант — хорошо, лучше больше вариантов чем ничего.
avatar
Добавить файл tobots.txt в корень сайта,
Может, robots.txt? Очепятка, исправьте и статья будет идеальна.
avatar
да, спасибо, исправил.
avatar
Черт, меня удивило: кто поставил минус? Комментарий является нейтральным и что тут минусовать…
avatar
Ыыы
avatar
Полезная статья, прошел почти такой же путь по изменению шаблона + добавил h1 и поменял тайтлы и дескрипшн для страниц профилей, в результате они стали возвращаться в поиск (вылетали почти все)
Добавить плагин seo, который значительно лучше формирует для поисковиков метатеги страниц в автоматическом режиме (ключевые слова и описание)
На мой взгляд — это лишний плагин, который создаёт только лишний мусор на главной странице сайта и скорее вредит… Ну, или я просто не умею его «готовить».
avatar
Исправил все что вы написали, очень хороший пост,
кнопка Яндекса вообще меня убила, я конечно выключать не стал, а просто исправил js скрипт
  • lol
  • +1
avatar
А я вообще не понял это пункт. Что убийственного то?

rel=«nofollow» не имеет никакого отношения к «индексируемости».
Страница отдает вес по линку всегда, независимо от того есть там rel=«nofollow» или нет. Просто если он есть — вес уходит в никуда, в пустоту. Если его нет — то вес уходит той странице на которую указывает линк. Но уходит всегда.

И так оно работает уже очень давно — с 2009 года.

Более того, поисковики трактуют отсутствие rel=«nofollow» как индикатор доверия. Так что если вы будете ссылаться без rel=«nofollow» на хорошие сайты это принесет пользу. Особенно если страница на которую вы ссылаетесь тематически бъет с вашим ресурсом и имеет сама по себе высокие показатели в поисковиках.

Мораль из этого всего такая — хотите не терять вес страницы — надо вообще убирать линки, rel=«nofollow» с этим никак не поможет. И rel=«nofollow» нужен только для того чтобы помечать линки которые не вызывают у вас никакого доверия. так стоит помечать лишь рекламу, спам и линки из комментариев (которые нет никакого шанса контролировать).
avatar
Я бы с вами согласился, если бы не знал что Яндекс это самый спамерский ресурс, он из покон веков находит как привлечь пользователей, начиная от левых незаконных установок плагинов, в браузер и заканчивая частичным доебом своими долба… не удаляемыми программами.
а еще меня маил ру бесит со своим новым браузером с названием мой интернет, это самая тупая хрень которое можно было придумать, тупо скопировать движок хрома и назвать своим именем, а еще испортить чужой браузер гугл хром. Так что вы должны меня понять как я ненавижу такие поступки от голимых классных поисковиков.
avatar
Gmugra
Страница отдает вес по линку всегда, независимо от того есть там rel=«nofollow» или нет. Просто если он есть — вес уходит в никуда, в пустоту.
А если переходы на внешние сайты осуществляются через страницу редиректа — вес уходит?

Более того, поисковики трактуют отсутствие rel=«nofollow» как индикатор доверия. Так что если вы будете ссылаться без rel=«nofollow» на хорошие сайты это принесет пользу.
Принесет пользу нашему сайту, я правильно понял?

Особенно если страница на которую вы ссылаетесь тематически бъет с вашим ресурсом и имеет сама по себе высокие показатели в поисковиках.
Т.е. открытые ссылки на сильные и тематические сайты будут полезны и нам самим?
avatar
А если переходы на внешние сайты осуществляются через страницу редиректа — вес уходит?
Линк есть — вес уходит. И безразлично, что там по этому линку происходит :) Не думайте что современный поисковик можно обмануть такой примитивной штукой как редирект :)
Принесет пользу нашему сайту, я правильно понял?
Т.е. открытые ссылки на сильные и тематические сайты будут полезны и нам самим?
Сейчас nofollow работает по принципу «не себе не людям». вы всё равно потеряли ранк, но никому его не отдали. Если уж вам так не хочется терять ранк — так уберите линк. А если уберать линк не хочется — то честно отдайте странице по линку заработанный ей вес. И если целевая страница это заслуживает, то это окупится. Потому, что поисковики принимают во внимание гораздо больше факторов чем просто линки.
avatar
Страница отдает вес по линку всегда, независимо от того есть там rel=«nofollow» или нет. Просто если он есть — вес уходит в никуда, в пустоту. Если его нет — то вес уходит той странице на которую указывает линк. Но уходит всегда.
можно подробней об этом?
avatar
Тема очень старая и в блогах SEO-шников мусируется годами. Вот например линк найденный за минуту в Яндексе: seo-in.ru/pr-nofollow-google.html

В дополнение можно ещё сказать что даже Яндексовский тег noindex не распространяет свое действие на линки. И тоже уже давно.
avatar
Очень интересный пост, но теперь у меня вопрос появился, как убрать nofollow при создании топика, например человек написал топик и добавил ссылку на свой сайт, но ссылка эта сразу помечается nofollow, как мне убрать это, но только для топика)
avatar
Кстати хочу сказать что в топике ссылка нету nofollow, я себе поставил, советую вам тоже поставить.
видно из за этого PSNet пришлось прописать
Disallow: /link/$
avatar
На самом деле я сильно удивлён что этого кто-то до сих пор не знает. Знаменитой картинке с ведром уже лет 5:
avatar
картинка известна, но ведь это только догадки как другое сео, верно?
avatar
За редкими исключениями, всё что относится к SEO — догадки. Потому что поисковики скрывают информацию о реальных алгоритмах, справедливо опасаясь, что такие данные будут активно использоваться для «чёрного» SEO.

И так оно и будет, исторических примеров масса.

Но нет никаких оснований сомневаться в случае, не новой темы которая многократно подтверждена из разных источников.
avatar
Интересно бы услышать мнения о топике от людей занимающийся СЕО, а именно Konstantine . Спасибо за статью.
avatar
Он занимается глобальным продвижением крупных проектов;) вы же читали его недавний топик:)
avatar
вы про кого и кому отвечаете?
avatar
:DDD
avatar
это сарказм
avatar
У меня в шаблоне вместо
{if $sAction=='index'}
      {assign var="sSiteTitleTag" value="h1"}
      {assign var="sSiteDescriptionTag" value="h2"}
    {else}
      {assign var="sSiteTitleTag" value="h2"}
      {assign var="sSiteDescriptionTag" value="h3"}
    {/if}
  
    <{$sSiteTitleTag} class="site-name"><a href="{cfg name='path.root.web'}">
{cfg name='view.name'}</a></{$sSiteTitleTag}>
    <{$sSiteDescriptionTag} class="site-description">
{cfg name='view.description'}</{$sSiteDescriptionTag}>
сделано так
<h1 class="site-name"><a href="{cfg name='path.root.web'}" 
title="{cfg name='view.description'}">{cfg name='view.name'}</a></h1>


Сейчас уже не помню, но тоже делал по какому то топику. Это вообще нормально?
avatar
У меня в шаблоне вместо
верно т.к. приведенный код показывает как можно сделать
avatar
я всегда свой сайт проверяю через Lynx Browser, таким образом убрал повторы, например в оригинальном шаблоне 2 раза повторяется название сайта, на мой взгляд это не правильно. Тем более как всегда я говорил даже поисковик гугл просит проверять сайт через Lynx Browser именно таким образом будет сканироваться ваш сайт роботом.
По поводу этого кода
{if $sAction=='index'}
      {assign var="sSiteTitleTag" value="h1"}
      {assign var="sSiteDescriptionTag" value="h2"}
    {else}
      {assign var="sSiteTitleTag" value="h2"}
      {assign var="sSiteDescriptionTag" value="h3"}
    {/if}
  
    <{$sSiteTitleTag} class="site-name"><a href="{cfg name='path.root.web'}">
{cfg name='view.name'}</a></{$sSiteTitleTag}>
    <{$sSiteDescriptionTag} class="site-description">
{cfg name='view.description'}</{$sSiteDescriptionTag}>

я думаю это не обязательно, ибо даже на habr все посты имеют h1, но используя такую технологию есть шанс что это к чему то приведет, поисковики любят когда все красиво оптимизировано.
А дальше думайте сами.
  • lol
  • +1
avatar
у хабра такой тиц и пр что даже если бы посты были с h6 он все равно бы «на коне».

у него только h1 есть на странице — для заголовков топиков, больше ни одного h2-h6 нету
avatar
Я думал я один в livestreet кто до позна сидит, на счет хабр я точно не знаю ибо я не писатель и ключик мне не дали, но иногда в постах присутствует h4-h6, а еще можно технологию добавление поста, посмотреть на сайте toster.ru Там можно зарегится без ключа.
PSNet Спокойной ночи
avatar
Делаю пункты 2 и 3 (текст «комментарии» и «N комментариев») в comment_tree.tpl. Обнуляю везде кэш, но изменений нет. Не пойму что не так. Разве ещё где-то надо внести изменение?
avatar
Для пункта 2 кэш сайта чистить не надо. Посмотрите конфиг, вдруг там включено кэшеирование и .tpl файлов + свой локальный кэш почистите.

Для пункта 3 надо очистить кэш в виде .css файлов.
avatar
Кэш весь чистил (и в браузере тоже). Даже через другие браузеры открывал смотрел (правда не знаю зачем))) ). Ничего не помогает…
avatar
Не помогает ничего… Может кто подскажет?
avatar
пункт 2 — в topic_part_footer.tpl
avatar
9. Вы будете удивлены, но кнопки шаринга в социальных сетях, которые подключаются в топике, все имеют атрибут rel=«nofollow» кроме одной, хорошо скрытой и не видимой пользователю...

Не надо ничео вырезать и добавлять другого, достаточно просто в файле topic_part_footer.tpl строчку

<div class="yashare-auto-init" data-yashareTitle="{$oTopic->getTitle()|escape:'html'}" data-yashareLink="{$oTopic->getUrl()}" data-yashareL10n="ru" data-yashareType="button" data-yashareQuickServices="yaru,vkontakte,facebook,twitter,odnoklassniki,moimir,lj,gplus"></div>


сделать такой:



т.е. поменять значение
data-yashareType="button"

на
data-yashareType="none"


а, впрочем, не только на это можно менять
avatar
где-то теги пропустил…

сделать такой:

<div class="yashare-auto-init" data-yashareTitle="{$oTopic->getTitle()|escape:'html'}" data-yashareLink="{$oTopic->getUrl()}" data-yashareL10n="ru" data-yashareType="none" data-yashareQuickServices="yaru,vkontakte,facebook,twitter,odnoklassniki,moimir,lj,gplus"></div>
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.