Loading...
X

Мета-теги description и keywords для WordPress

Эта статья будет полезна тем, кто искал способы сделать уникальными мета-теги для отдельных страниц, записей и для главной страницы сайта на WordPress. Строго говоря, мета-тегов как таковых не существует. Существует тег meta, атрибут которого name, теоретически, может иметь любое значение, однако обычно используются общераспространённые и устоявшиеся значения, такие как description и keywords, о которых мы и поговорим и далее по традиции будем именовать мета-тегами.

По умолчанию в последних версиях CMS WordPress мета-теги "description" и "keywords" не используются в стандартных темах. Однако, несмотря на имеющееся мнение, что для релевантности и поисковой выдачи данные теги не важны, не стоит ими пренебрегать. Разработчики Google прямо утверждают, что ни keywords, ни description не используются при ранжировании результатов поиска. Однако разработчики Яндекса отмечают, что мета-тег keywords может учитываться при определении релевантности страницы, и, вероятно, влиять на её ранг. При этом и Google, и Яндекс используют description по его прямому назначению, т.е. для формирования краткого описания содержимого сайта или страницы. Так или иначе, основы SEO постулируют: если хотите улучшить позицию сайта, пишите правильные заголовки и описания в мета-теге description.

Если вы используете WordPress и хотите улучшить результаты отображения сайта в поисковых системах, то, наверное, когда-нибудь задавались вопросом, как сделать так, чтобы для отдельной страницы или записи можно было добавлять уникальные мета-теги description и keywords. Этим вопросом я задался недавно, однако очень не хотелось устанавливать плагины. Хотелось чего-то простого и понятного. Занявшись поиском решения, я встретил полезные советы и вариант, частично решавший задачу добавления уникальных мета-тегов. На одном сайте предлагалось использовать возможность добавления произвольных полей к записи или странице, а также следующий код,

<meta name="description" content="<?php echo get_post_meta($post->ID, 'description', true); ?>" />
<meta name="keywords" content="<?php echo get_post_meta($post->ID, 'keywords', true); ?>" />
который необходимо вставить в файл header.php вашей темы между тегами
<head>
</head>

Как видим, это обычные мета-теги, за исключением того, что атрибут content содержит код php, который выводит возвращаемое WordPress-функцией get_post_meta значение произвольного поля в соответствии со значением ID текущей записи, информацию о которой содержит переменная $post. В данном случае произвольные поля это description и keywords.

Далее необходимо в консоли WordPress открыть вкладку Записи или Страницы, добавить новую запись или страницу соответственно или перейти к редактированию уже имеющихся. В правом верхнем углу консоли рядом с вкладкой Помощь располагается вкладка Настройки экрана.

Открываем эту вкладку и ставим галочку напротив пункта Произвольные поля.

Произвольные поля

Теперь под областью редактирования записи у вас должен появиться раздел Произвольные поля.

В качестве имени поля введите description, а в качестве значения введите произвольный, необходимый вам текст. Обычно рекомендуемая длина текста для мета-тега description составляет 100-150 символов, но ничего страшного, если он не будет превышать 200 символов. Теперь добавьте второе поле keywords и в качестве значения перечислите через запятую ключевые слова. Их тоже не должно быть много, желательно в совокупности до 250 символов.

Таким образом у нас получились заполненные поля для конкретной записи или страницы, которые будут выводиться в качестве значения атрибута content для мета-тегов description и keywords каждый раз, когда будет открыта определённая запись или страница. Всё обстоит довольно просто, и кажется, что данный пример решает проблему добавления уникальных мета-тегов, однако возникает другая проблема: при переходе на главную страницу в качестве мета-тегов главной страницы будут отображаться мета-теги последней записи. Это мало кого устраивает, потому что предполагается, что мета-теги главной страницы должны быть статичны и описывать содержание сайта в целом, тогда как в этом случае они будут меняться в зависимости от последней добавленной записи.

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

Дополним конструкцию, которая выступает содержанием атрибута content

<?php echo get_post_meta($post->ID, 'description', true); ?>
и создадим условие с помощью условных операторов if и elsif и логического оператора or:
<?php 
      if ( is_front_page() or is_home() ) { 
    echo 'Мой сайт. Информация о сайте.';
} elseif ( is_single() or is_page() ) {
    echo get_post_meta($post->ID, "description", true);
} ?>

Эквивалентом записи оператора or могут выступать две вертикальные черты ||. Таким образом, мы обусловили вывод функции get_post_meta только в том случае, если текущая страница это отдельная запись или отдельная страница. При этом атрибут content будет принимать значение, которое вы укажете в качестве произвольных полей к отдельной записи или странице. Для мета-тега description на главной странице значение атрибута content будет неизменным, то есть тем, которое прописано в конструкции

if ( is_front_page() || is_home() ) { echo 'Мой сайт. Описание моего сайта.'; }

Мы рассмотрели пример для мета-тега description, однако для keywords сниппет остаётся точно таким же, за исключением того, что поле "description" необходимо заменить на "keywords". Код для обоих мета-тегов следующий:

<meta name="description" content="<?php 
      if ( is_front_page() || is_home() ) { 
    echo 'Мой сайт. Описание моего сайта.';
} elseif ( is_single() || is_page() ) {
    echo get_post_meta($post->ID, "description", true);
} ?>" />

<meta name="keywords" content="<?php 
      if ( is_front_page() || is_home() ) { 
    echo 'сайт, хороший сайт, мой сайт, наилучший сайт, интересный сайт, покер, куртизанки, бдсм';
} elseif ( is_single() || is_page() ) {
    echo get_post_meta($post->ID, "keywords", true);
} ?>" />

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

Мета-тег description для рубрик

Зачастую возникает необходимость использовать мета-тег description и для рубрик. Поскольку WordPress по умолчанию предусматривает описание рубрик, остаётся только вывести это описание в качестве значения атрибута content в текущей рубрике.

Рубрики
Для этого к конструкции

if ( is_front_page() || is_home() ) { echo 'Мой сайт. Описание моего сайта.'; } elseif ( is_single() || is_page() ) { echo get_post_meta($post->ID, "description", true); }

добавим ещё одно условие

if (is_category()) {echo category_description();}

Теперь при переходе на страницу рубрики, которая имеет описание, значение атрибута content мета-тега description будет соответствовать описанию. Однако WordPress-функция category_description по умолчанию в качестве значения атрибута content почему-то выводит описание вместе с тегами

<p></p>

Эта особенность исправляется добавлением функции remove_filter, которая применяется к специфическим функциям term_description и wpautop. Конечный вариант кода для формирования уникальных мета-тегов description и keywords для страниц и записей, а также уникального мета-тега description для рубрик, будет следующим:

<meta name="description" content="<?php 
      if ( is_front_page() || is_home() ) { 
    echo 'Мой сайт. Описание моего сайта.';
} elseif ( is_single() || is_page() ) {
    echo get_post_meta($post->ID, "description", true);
} 
    remove_filter('term_description','wpautop');
    if (is_category()) {echo category_description();
} ?>" />

<meta name="keywords" content="<?php 
      if ( is_front_page() || is_home() ) { 
    echo 'сайт, хороший сайт, мой сайт, наилучший сайт, интересный сайт, покер, куртизанки, бдсм';
} elseif ( is_single() || is_page() ) {
    echo get_post_meta($post->ID, "keywords", true);
} ?>" />

Если вдруг всю статью читать утомительно, то вот краткий алгоритм действий:

  • 1) Скопируйте вышеприведённый код
  • 2) Откройте с помощью текстового редактора (например, Notepad++) файл header.php, он расположен в корневом каталоге вашей темы
  • 3) Вставьте код между тегами, желательно ближе к открывающему тегу
     
    <head>
    
    </head>
    
  • 4) Всё. Теперь при редактировании новой страницы или записи не забывайте добавить два произвольных поля description и keywords с уникальными значениями, это и будут мета-теги "description" и "keywords".

Для отображения мета-тега "description" для рубрики достаточно задать её описание.

Код актуален для версии WordPress 4.5.2, тестировался на PHP 5.4.27

32 комментария к “Мета-теги description и keywords для WordPress
  1. Эдуард

    Добрый день. Добавил Мета-теги description и keywords на главную страницу сайта.
    Но браузер мне выдает вот такое:

    Что делать? подскажите новичку.
    Спасибо

     
    Ответить
  2. Alex

    Побольше бы таких людей, как Вы, в России. Спасибо за простое решение вопроса.

     
    Ответить
  3. Ирина

    Огромнейше благодарю! Ломала голову над тем, как описать отдельные страницы. У меня было одно описание и одни метки на весь сайт.
    Гляньте на мой сайт, пожалуйста! Теперь метки к каждой записи мне нет необходимости выводить так, как они у меня выведены?

     
    Ответить
    1. Romanzhivo

      Пожалуйста 🙂 Прошу прощения за долгий ответ, вроде, у Вас всё в порядке)

       
      Ответить
    1. Romanzhivo

      Да, возможно, просто в самом начале статьи отмечено, что планировалось решить задачу именно без применения плагинов.

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

    Здравствуйте! А не подскажите как с помощью произвольных полей подменять заголовок чтобы в тайтле он был один а в названии статьи другой?

     
    Ответить
    1. Romanzhivo

      Здравствуйте, полагаю, Вам надо смотреть в сторону функций get_the_title (на странице есть пример использования) или wp_title. Хотя, наверно, лучше так: использовать if ( условный_тег() ) {} elseif ( условный_тег() ) {} и вставить в файле header.php между тегами

      <title>
      
      </title>

      вместо

      <?php wp_title(); ?>

      следующий код

      <?php 
            if ( is_front_page() || is_home() || is_page() || is_category() ) { 
          echo wp_title();
      } elseif ( is_single() ) {
      	echo get_post_meta($post->ID, "title", true);
      } ?>

      Теперь на странице всех записей, на главной странице, на обычной странице и в категориях у вас будет отображаться стандартный title, а для отдельных записей в title будет выводиться содержание из произвольного поля. Соответственно, создаёте для записи новое произвольное поле title и должно работать 🙂

       
      Ответить
  5. art_gud

    Подскажи мил человек, как мне добавить ко всем записям (только записям) произвольный метатег, к примеру, вида ? Как я понимаю, нужно в header.php добавить функцию типа
    <?php
    if ( is_single() ) {
    echo '’;

    Как-то так или я ошибаюсь? Просто в php вообще полный 0.
    Спасибо,

     
    Ответить
    1. Romanzhivo

      Да, ход мыслей правильный 🙂 Чтобы вывести мета-теги (если вы хотите использовать именно произвольные поля для их формирования) только для записей, просто удалите из условия переменную is_page, код будет таким:

      <meta name="description" content="<?php 
            if ( is_front_page() || is_home() ) { 
          echo 'Мой сайт. Описание моего сайта.';
      } elseif ( is_single() ) {
          echo get_post_meta($post->ID, "description", true);
      } ?>" />
       
      <meta name="keywords" content="<?php 
            if ( is_front_page() || is_home() ) { 
          echo 'сайт, хороший сайт, мой сайт, наилучший сайт, интересный сайт';
      } elseif ( is_single() ) {
          echo get_post_meta($post->ID, "keywords", true);
      } ?>" />

      Его нужно вставить в файл header.php между тегами

      <head>
      
      </head>

      В этом случае сами теги будут выводиться на всех страницах, но содержание их будет представлено только на главной странице и на страницах записей. Если нужно, чтобы и на главной странице не отображалось содержание мета-тегов, то можно отказаться от условия ( is_front_page() || is_home() ), код будет таким:

      <meta name="description" content="<?php 
         if ( is_single() ) {
          echo get_post_meta($post->ID, "description", true);
      } ?>" />
       
      <meta name="keywords" content="<?php 
          if ( is_single() ) {
          echo get_post_meta($post->ID, "keywords", true);
      } ?>" />
       
      Ответить
  6. Максим

    Инфа на вес золота. Очень помогла. Огромное спасибо автору. Может подскажешь как еще и title выводить из записей?

     
    Ответить
    1. Romanzhivo

      Пожалуйста 🙂 Всё зависит от того, куда вы хотите вывести значение title? В коде страницы по умолчанию он и так присутствует. В WP есть функция wp_title, подробнее о ней можно почитать вот тут.

       
      Ответить
  7. Бесо

    Спс. братела, 🙂 Ты сам не понимаешь как ты помог мне одну нужную задачку решить…
    Пиши ещё, с удовольствием почитаю твои наработки и мысли.

     
    Ответить

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *