» » » Функция wp_title() — заголовки в поисковой выдаче
logotip

Функция wp_title() — заголовки в поисковой выдаче

Всем привет! Сегодня на seo-mayak.com я познакомлю Вас с функцией wp_title(), которая выводит заголовки WordPress, предназначенные для отображения в поисковой выдаче. Также поговорим о теге шаблона <?php wp_title();?> и о всем, что с ним связанно.

Прошу не путать с функцией the_title(), которая работает только внутри цикла WotdPress и к поисковой выдаче не имеет никакого отношения.

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

Конечно, чтобы создать сайт не обязательно знать, как он работает, но тогда не стоит удивляться, что Ваш горячо любимый проект будет периодически преподносить Вам самые неожиданные «сюрпризы».

Поэтому я не перестану повторять. Если Вы решили стать веб-мастером, то рано или поздно, а лучше рано, Вам все равно придется знакомится с языками программирования, так как без базовых знаний функционала WordPress или другой CMS, Вы не сможете самостоятельно вести свой проект.

Так вот, на написание данного поста, меня сподвигло большое количество вопросов от моих читателей, касательно заголовков title, поэтому считаю, что данный пост будет полезен многим начинающим веб-мастерам.

Меня часто спрашивают, почему заголовок той или иной записи в поисковике отображается не так, как надо, вернее не так, как ожидалось. Например:

Заголовок статьи | Название сайтаНазвание сайта

Или так:

Название сайтаЗаголовок статьи | Название сайта

Могут быть и другие варианты. Почему так происходит?

wp_title

На самом деле проблема не существенная, в плане ее решения, и исправляется несколькими движениями. Но прежде, чем я расскажу, что делать в такой ситуации, давайте поближе познакомимся с функцией wp_title(). Поехали!

Функция wp_title()

Функция wp_title() выводит в поисковую выдачу заголовок страницы или возвращает его в переменную (внедрена разработчиками WordPress с версии 1.5).

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

Пример №1. Изначально в шаблоне моего кулинарного бога содержимое тегов <title></title> было таким:

<title><?php wp_title('&laquo;', true, 'right');?>Dommenu.ru</title>

Пример №2. У кого-то могут быть и другие варианты, например:

<title><?php bloginfo('name'); ?><?php wp_title('&raquo;', true, 'right'); ?></title>

О функции bloginfo() подробней читайте здесь.

Пример №3. Встречаются еще более сложные разновидности:

<title><?php wp_title(''); ?><?php if(wp_title('', false)) { echo ' |'; } ?> <?php bloginfo('name'); ?></title>

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

Единственное, от чего бы я хотел предостеречь начинающих веб-мастеров — это от вывода слишком длинных заголовков в сниппет, так как количество символов в заголовке, пропорционально уменьшает вместимость остального полезного пространства в title.

Итак, вернемся к основной теме. Функция wp_title() находится по адресу wp-includes/general-template.php и вызывается в нужном месте (а это в основном область между тегами <head></head>, в файле header.php) с помощью, так называемого, тега шаблона:

<?php wp_title(); ?>

Если тег wp_title() не передает никаких параметров в функцию, то содержимое тегов title; будет выглядеть следующим образом:

<title><?php wp_title();?></title>

Т.е. не будет выводится названия сайта. Смотрим исходный код и видим такую картину:

<title>» Название статьи</title>

Согласитесь, не впечатляет! И что это за кавычки? Теперь давайте добавим название сайта:

<title><?php wp_title(); ?><?php bloginfo('name'); ?></title>

Получится вот такое безобразие:

<title>» Название статьиНазвание сайта</title>

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

Параметры функции wp_title()

Напомню как выглядело содержимое тегов title на моем кулинарном блоге:

<title><?php wp_title('&laquo;', true, 'right');?> Dommenu.ru</title>

Надеюсь понятно, что название Dommenu.ru я прописал вручную, вместо функции bloginfo(‘name’).

Итак, тег шаблона wp_title() может передавать три параметра:

Параметр №1. Первым параметром тег передает «маме» вид разделителя между заголовком записи и названием сайта.

В моем случаи, в качестве разделителя был указан html-код правых французских кавычек &laquo;. Почему это было сделано, мне до сих пор не понятно, Ну да ладно. Конечно можно задать любой разделитель.

Параметр №2. Вторым параметром функция принимает только два аргумента: true или false.

true — дает команду выводить заголовок записи на экран;
false — говорит функции, что надо возвращать заголовок в переменную (По умолчанию true).

Параметр №3. В качестве третьего параметра можно указать только одно выражение right, которое укажет функции, что разделитель надо отображать справа от заголовка записи.

Если вообще не задавать третий параметр, то разделитель будет выведен слева от заголовка.

В общем, по всей логике, заголовок записи моего кулинарного блога в поисковой выдаче должен был иметь следующую структуру:

Заголовок записи « Название сайта

Полное убожество! На самом же деле заголовок в сниппете выглядел так:

Заголовок записи | Название сайта

Как так произошло? Почему один разделитель заменился на другой? Что за аномалия? Примерно такие вопросы пришли мне в голову.

Оказалось, что аномалии никакой нет, просто в работу функции wp_title() вмешался плагин All in One SEO Pack.

Но как он это сделал? Не так давно я опубликовал статью, посвященную функции wp_head, где попытался подробно объяснить, что такое хук и какие они бывают.

Так вот, у функции wp_title() тоже есть свой хук, с помощью которого сторонний алгоритм может вмешиваться на работу функции и влиять на результат конечного действа.

Хук wp_title

Понятно, что плагин All in One SEO Pack для изменения стандартной функции wp_title() использует хук-фильтр и я покажу его простейшее применение на наглядном примере. Для демонстрации хука я временно деактивирую плагин All in One SEO Pack.

Допустим в моем шаблоне содержимое тегов title выглядит так:

<title><?php wp_title();?></title>

Т.е. в функцию не передается никаких параметров. Теперь давайте воспользуемся вышеупомянутым хуком и повлияем на работу функции.

Для этого в файле functions.php, что находится в корне темы, прописываем такой фильтр:

function mayak_wp_title($title){
$title = trim(preg_replace('/&(.+?);/','',$title));
return $title.' | '.esc_attr(get_bloginfo('name'));
}
add_filter('wp_title', 'mayak_wp_title');

Смотрим результат в исходном коде:

<title>Заголовок страницы | Название сайта</title>

Отлично! Этого мы и добивались! Мы, с помощью хука wp_title, полностью изменили структуру заголовка в сниппете.

А теперь давайте добавим параметры в тег шаблона, а также выведем название сайта с помощью функции bloginfo():

<title><?php wp_title('&laquo;', true, 'right');?><?php bloginfo('name'); ?></title>

Интересно, что получим. Смотрим исходный код:

<title>Заголовок страницы | Название сайтаНазвание сайта</title>

В самом начале статьи я уже приводил такой пример заголовка. Теперь надеюсь понятно, из-за чего происходит такое безобразие.

Но наш эксперимент еще не закончен. Самое время активировать плагин All in One SEO Pack и посмотреть, что получится в итоге. Результат немного неожиданный:

<title>Заголовок страницы | Название сайта</title>

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

Вывод: Правильно настроенный плагин All in One SEO Pack не может стать причиной некорректных заголовков в сниппете!

Итак, что делать, если в поисковой выдаче заголовок выводится в неподобающем виде?

1. Проверить настойки плагина All in One SEO Pack.
2. Если Вы пользуетесь другим SEO плагином, попробуйте его отключить и посмотреть результат в исходном коде.
3. Если Вы вообще не пользуетесь SEO плагинами, тогда проверьте файл functions.php на наличие функции, которая использует хук-фильтр wp_title и если токовая существует, то просто удалите ее и настройте вывод заголовка в теге шаблона.
4. Проверьте тег шаблона на корректность вывода всех параметров, а также названия сайта, если таковое выводиться.

До встречи!

С уважением, Виталий Кириллов

Комментарии: 43

  1. Галина Нагорная:

    Посмотрела, как сайт отображается в выдаче и поняла, что надо что-то менять…
    Кодов боюсь и впадаю в ступор.
    Спасибо! За пост. Может когда-то и решусь.

    Ответить
    • Юлия:

      Галина, в крайнем случае, можно верстальщику поручить поправить код. Возьмет недорого, а у Вас не будет головной боли.

      Ответить
  2. Мария:

    Ваша статья как раз вовремя. На днях пришлось отказаться от красивого буржуйского шаблона из за того, что в выдаче я видела: Заголовок статьиЗаголовок статьи. Сниппет вообще представлял собой тоже название статьи пару раз. Плагин Йоаст знаете же такой. Как справиться я не знала. Пришлось менять. Направьте меня немного почему двойной заголовок.

    Ответить
    • Виталий Кириллов:

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

      Ответить
  3. Екатерина:

    Здравствуйте, Виталий. Спасибо за статью. Я в шаблон не вмешивалась, а убрала в настройках All in One SEO Pack убрала | %blog_title%. Таким образом можно исправить? В выдаче Яндекса пока отображается по-старому, жду индексации.

    Ответить
    • Виталий Кириллов:

      Екатерина, а У вас проблема повторяющихся заголовков в выдаче?

      Ответить
  4. Natalya:

    Спасибо огромное за код, я всегда мучаюсь с со слитными тайтлами на вордпресс.

    Ответить
  5. Алексей:

    Есть ли способы задать тайтл для статей отличный от названия статьи и все это сделать без плагина?

    Ответить
    • Виталий Кириллов:

      Можно для этих целей использовать произвольные поля.

      Ответить
  6. Леруся:

    Спасибо за код. Теперь осталось применить. После установки кода, отпишусь.

    Ответить
  7. Саня:

    Здравствуйте Виталий,
    У меня почти на всех сайтах есть проблемы с тайтлом 🙁
    На одном используется такая конструкция:

    В выдаче Яндекса отображаются только «названия статей», а в Гугле «Названия статей»-Женский журнал «Название (причем последняя кавычка не отображается) ..и боюсь что-то менять, так как есть неплохой трафик.
    Как поступить? Спасибо

    Ответить
    • Виталий Кириллов:

      Даже не знаю, если Вас устраивает трафик, то зачем менять. Я бы для своего проекта обязательно добился корректного отображения title.

      Ответить
  8. Сергей:

    Здравствуйте. В Яндексе в вэбмастере в пункте «Яндекс.Вэбмастер\Индексирование сайта\Страницы в поиске» практически в названиях всех моих страниц присутствует «Архив сайта». Например: «Сайт радиолюбителя » Архив сайта » Симисторные регуляторы». Почему? Благодаря Вашей статье я вроде нашел где это прописано (header.php). Но я сомневаюсь корректно ли будет просто это потереть? И вообще: откуда это вылезло (я ничего такого при оформлении страниц не прописывал), как это влияет для поисковика, как с этим бороться? Спасибо.

    Ответить
    • Виталий Кириллов:

      Сергей здравствуйте! Мне довольно сложно ставить диагноз не видя больного. Приведите код, который Вы нашли в header.php.

      Ответить
      • Сергей:

        Вот код (после преобразования в полях выше, правда не понял зачем это): <title><?php bloginfo('name'); ?> <?php if ( is_single() ) { ?> &raquo; Архив сайта <?php } ?> <?php wp_title(); ?></title> Насколько я понимаю, «Архив сайта» там лишнее. Спасибо.

        Ответить
        • Виталий Кириллов:

          Сергей, если вставлять php код без преобразования в HTML сущности, он будет исполнятся, а не отображаться. Никак руки не дойдут сделать удобный интерфейс и внедрить преобразователь в поле для комментирования.
          Что касается кода, то конечно «Архив сайта» лишнее. Вообще странный код, я бы его переделал.

          Ответить
          • Сергей:

            А как переделать? Что д.б. написано?

            Ответить
            • Виталий Кириллов:

              Я бы сделал так:

              <title><?php wp_title('&laquo;', true, 'right'); ?> <?php bloginfo('name'); ?></title>
              
              Ответить
              • Сергей:

                А как сделать так, чтобы вначале было написано какое-либо слово, например, «Стихотворение» (без кавычек). И как на это дело влияют настройки ЧПУ в админпанели, и настройки в All in One Seo Pack в пункте «Настройки заголовков»? Спасибо.

                Ответить
                • Виталий Кириллов:

                  Сергей, Вы хотите, чтобы слово «Стихотворение» у Вас ко всем записям отображалось?
                  ЧПУ здесь не причем!
                  По настройкам плагина, читайте мою статью.

                  Ответить
                  • Сергей:

                    Я уже много чего здесь прочитал, но мало что понял. Мне интересно кто, куда, что прописывает (из моего предидущего вопроса). А конкретно по поводу «стихотворения»… Вот есть сайт со стихами. Насколько я понимаю, не обязательно, чтобы в выдаче присутствовало именно это слово. Но я хочу, чтобы поисковик знал, что это именно стихотворение. Спасибо.

                    Ответить
                    • Виталий Кириллов:

                      Хорошо постараюсь объяснить (из предыдущего вопроса) Если Вы имеете в виду заголовки страниц, то под каждой записью есть настройки плагина. Там, в поле title вы можете написать любой заголовок, который будет отображаться в поисковой выдаче. Если вы будите там каждый раз писать «Стихотворение такое-то, такое-то», то это будет вполне разумно. В общих настройках плагина в разделе «Настройки заголовков» для записей (формат заголовков записей) можно задать разделитель и вывести в title записи еще и название сайта.

  9. Сергей:

    Большое спасибо за ответ, но можно уточнить?
    1. В Вашей статье «Настройка плагина All-In-Seo-Pack» в пункте «Перезаписывать заголовки» приводится скриншот поисковой выдачи Вашего сайта. Откуда берется то, что нарисовано фиолетовым цветом? зеленым цветом? серым цветом (это снипет?)?
    2. В последнем ответе Вы написали: «В общих настройках плагина в разделе «Настройки заголовков» для записей (формат заголовков записей) можно задать разделитель и вывести в title записи еще и название сайта.» Можно задать разделитель это который в виде вертикальной черточки? можно нарисовать любой разделитель? как он будет отображаться?
    3. Как сделать так, чтобы поисковик первым делом натыкался на слово «стихотворение»? Можно ли тупо написать так» Стихотворение ?
    Спасибо.

    Ответить
    • Виталий Кириллов:

      1. То, что выделено жирным, соответствует запросу и это не я выделил а сам поисковик.
      2. Да, вертикальная черточка! Какой разделитель поставите, такой и будет отображаться.
      3. В настройках плагина, под каждой статьей, в поле «Заголовок записи» пишется title для каждой записи, вот туда и пишите «Стихотворение такое-то такое-то». Под другой записью — «Стихотворение тра-ля-ля-ля», что -тут непонятного.

      Ответить
  10. Сергей:

    Последнюю запись через преобразователь:
    <title>Стихотворение<?php wp_title('&laquo;', true, 'right'); ?> <?php bloginfo('name'); ?></title>

    Ответить
    • Виталий Кириллов:

      Вы хотите чтобы Ваш сайт назывался Стихотворение? 🙂 Ведь в этом случаи данное слово будет в title всех страниц, в том числе и главной!

      Ответить
  11. Андрей:

    Здравствуйте, Виталий! У меня проблема как раз по теме вашей статьи.

    На днях сменил тему ВП и обнаружил, что сайт не выдается в гугле по поисковым запросам. Страницы индексируются, но в выдаче их не найти. Что-то в новой теме не так с прописью мета-тегов. Если на время подключить старую тему и опубликовать с ней новую запись, то страница попадает в индекс и в выдачу на первую страницу. Используется плагин All-In-Seo-Pack — настройки при смене тем не меняю. Это что-то с файлом темы header.php не так?

    Ответить
    • Виталий Кириллов:

      Действительно, в исходном коде на страницах с записями не выводится description, а при этом генерируется 2 заголовка title. Непорядок! Трудно сказать header.php виноват в этом или функции шаблона, надо разбираться.

      Ответить
      • Андрей:

        Виталий, а вы сможете помочь? Вы занимаетесь подобным на платной основе? Менять тему не хотелось бы, а у меня руки не из того места в этом вопросе)

        Ответить
        • Виталий Кириллов:

          Андрей, напишите мне через форму обратной связи, пообщаемся.

          Ответить
  12. Руслан:

    Здравствуйте. Очень интересная статья, но вот я нигде не могу найти решение для своей проблемы…
    У меня стоит вот такая тема — dessign.net/problogg и она «клепает» два тайтла:
    Night with Red Unbrella |
    Night with Red Unbrella – Pro Blogg Responsive WordPress Theme
    Вот как в «голове»:

    Не пойму, что не так, где оно берется, не подскажите?
    Спасибо.

    Ответить
    • Виталий Кириллов:

      Здравствуйте! Надо файлы смотреть, так не скажу.

      Ответить
  13. Павел Дарвай:

    Виталий, огромное спасибо. Помогли прояснить ситуацию….

    Ответить
  14. Алексей:

    А если никак не получается сделать вывод тайтла, куда еще смотреть ?
    Видимо что-то в теме разработчиками навыдумано и что-то блокирует его подмену=(
    Может знаете как можно проще найти, что и где заменить ?
    Тема используется вот эта themeforest.net/item/structure-construction-wordpress-theme/10798442?s_rank=3

    Ответить
  15. Алексей:

    нашел вот такое в файле general-template /**
    * Display title tag with contents.
    *
    * @ignore
    * @since 4.1.0
    * @access private
    *
    * @see wp_title()
    */
    function _wp_render_title_tag() {
    if ( ! current_theme_supports( ‘title-tag’ ) ) {
    return;
    }

    // This can only work internally on wp_head.
    if ( ! did_action( ‘wp_head’ ) && ! doing_action( ‘wp_head’ ) ) {
    return;
    }

    echo » . wp_title( ‘|’, false, ‘right’ ) . «\n»;
    }

    Ответить
  16. Иван:

    Здравствуйте! Виталий подскажите, чтобы увидеть изменения надо ждать апдейта?

    Ответить
    • Виталий Кириллов:

      Здравствуйте Иван! Изменения можно посмотреть сразу в исходном коде CTRL+U

      Ответить
      • Иван:

        Я про изменения в титле поисковой выдачи.

        Ответить
        • Виталий Кириллов:

          Иван, в последнее время, особенно Яндекс, да и Гугл тоже, в title могут вывести даже содержание внутреннего заголовка, или еще хлеще, отрывок текста. Все зависит от запроса. В двух словах трудно объяснить. Реальное отображение title вы можете посмотреть в вебмастере «Страницы в поиске».

          Ответить
  17. Тамара:

    Добрый день! Помогите мне. При поиске статьи, в поисковике получаю название сайта, а не статьи. И попадаю не в статью, а просто на сайт, то есть искать статью нужно потом на сайте. Что делаю не так?
    Мой сайт stamitravel.ru Подскажите пожалуйста

    Ответить
    • Виталий Кириллов:

      Здравствуйте Тамара!
      У вас все статьи закрыты для индексации мета-тегом robots с параметрами «noindex,follow,noodp».
      Возможно у Вас стоит галочка в пункте «Попросить поисковые системы не индексировать сайт» в разделе Настройки > Чтение.

      Ответить
  18. Татьяна:

    Виталий, здравствуйте. Спасибо за статью, как всегда, по сути. У меня такая проблема. Тайтл в сниппете отображается с названием сайта (через вертикальную линию). Как можно от этого избавиться, не могу найти информацию(((
    И еще такой вопрос. Заполняю описание по всем правилам, но в сниппете и коде страниц всегда выходит часть контента(( Почему так происходит?
    Заранее спасибо.

    Ответить
    • Виталий Кириллов:

      Здравствуйте Татьяна!
      Каким seo плагином пользуетесь?
      Текст для сниппета ПС в 80% случаев берут из содержания страницы.

      Ответить

Оставить комментарий

Внимание комментатор! Прежде чем вставить: HTML, JavaScript или PHP код в свой комментарий, преобразуй его в html сущность!

Subscribe without commenting

» Подписаться на комментарии по RSS