WordPress → Добавляем description, keywords без плагина

Задача: добавить мета теги description и keywords в заголовок поста на WordPress, без плагинов. В description поместить краткое описание статьи, а в keywords метки (теги) если они имеются у поста.

Не буду банально останавливаться на том зачем эти теги нужны. Отмечу лишь, что по умолчанию WordPress не добавляет эти мета-теги к записи. И при редактировании записи их задать нельзя. Авторы документации ссылаются на то что теги устарели, их использование сомнительно и вообще WordPress «can’t read your mind».

Существует множество SEO плагинов для WordPress которые исправляют ситуацию и добавляют возможность задавать вручную description и keywords для каждой записи, но:

  • во-первых, нужно стремиться минимизировать количество используемых плагинов с точки зрения «зависимости» и производительности;
  • во-вторых, большинство плагинов добавляют лишь дополнительные поля в редактор. А сами значения description и keywords приходится вводить вручную.

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

Решение:

Добавьте в header.php перед вызовом wp_head() код:

<?php if (is_single() || is_page() ) : if (have_posts() ) : while (have_posts() ) : the_post(); ?>
<meta name="description" content="<?php echo cutString(get_the_excerpt(), 140); ?>" />
<meta name="keywords" content="<?php
  global $post;
  $tags = wp_get_post_tags($post->ID);
  foreach ($tags as $tag) { echo $tag->name.", "; }
?>" />
<?php endwhile; endif; elseif (is_home() ): ?>
<meta name="description" content="<?php bloginfo('description'); ?>" />
<?php endif; ?>

Алгоритм работы прост: если это запись или страницы добавляем в description краткий анонс статьи, а в keywords теги. Функция get_the_excerpt() — получает анонс поста и обрезает лишние html теги и изображения. wp_get_post_tags() — возвращает массив тегов (меток) текущего поста.

cutString() — простенькая самописная функция которая обрезает строку по словам в пределах заданного количества символов и добавляет ‘…’ в конце. Ее необходимо поместить в funtions.php. Напоминаю, оптимальная длина title до 70 символов, а Description — до 150 символов. По некоторым данным допускается длина 60-90 символов для title, и 140-190 для description.

Реализация cutString:

function cutString($string, $maxlen) {
    $len = (mb_strlen($string) > $maxlen)? mb_strripos(mb_substr($string, 0, $maxlen), ' ') : $maxlen;
    $cutStr = mb_substr($string, 0, $len);
    return (mb_strlen($string) > $maxlen)? $cutStr.' ...' : $cutStr;
}
  • Lion

    Искреннее спасибо! Отличный метод, лучшего и не придумать. Настоящий профи!

  • Евгений

    А как реализовать вывод description, keywords для архива/рубрик без плагина?nn1

  • Супер! Как раз то, что нужно, все заработало, спасибочки!!!

  • AlexMurr

    Доброго времени суток, а если нет меток то что он возвращать будет ? можно в таком случае пользоваться этим?

  • Шикарно! спасибо!