Мета-теги description и keywords для WordPress
Опубликовано Romanzhivo - 12 мая 2015, 01:15
Эта статья будет полезна тем, кто искал способы сделать уникальными мета-теги для отдельных страниц, записей и для главной страницы сайта на 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. Нам понадобятся так называемые условные теги, которые позволяют изменять контент определённой записи или страницы, а также способ отображения этого контента.
- is_front_page — проверяет, является ли главная страница страницей последних записей или статической страницей. В отличие от условного тега is_home, возвращает значение true вне зависимости от того, что установлено в настройках чтения в качестве главной страницы — статическая страница или страница последних записей.
- is_home — проверяет, отображается ли в качестве главной страница последних записей. Возвращает true только для страницы последних записей.
- is_single — проверяет, отображается ли в данный момент отдельная запись.
- is_page — проверяет, отображается ли в данный момент отдельная страница.
- is_category — проверяет, отображается ли в данный момент рубрика (категория).
Дополним конструкцию, которая выступает содержанием атрибута 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 и для рубрик. Поскольку WordPress по умолчанию предусматривает описание рубрик, остаётся только вывести это описание в качестве значения атрибута content в текущей рубрике.
Теперь при переходе на страницу рубрики, которая имеет описание, значение атрибута content мета-тега description будет соответствовать описанию. Однако WordPress-функция category_description по умолчанию в качестве значения атрибута content почему-то выводит описание вместе с тегами Эта особенность исправляется добавлением функции remove_filter, которая применяется к специфическим функциям term_description и wpautop. Конечный вариант кода для формирования уникальных мета-тегов description и keywords для страниц и записей, а также уникального мета-тега description для рубрик, будет следующим:
Если вдруг всю статью читать утомительно, то вот краткий алгоритм действий: Для отображения мета-тега Код актуален для версии WordPress 4.5.2, тестировался на PHP 5.4.27
Мета-тег description для рубрик
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();}
<p></p>
<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);
} ?>" />
<head>
</head>
"description" и "keywords"."description" для рубрики достаточно задать её описание.










Добрый день. Добавил Мета-теги description и keywords на главную страницу сайта.
Но браузер мне выдает вот такое:
Что делать? подскажите новичку.
Спасибо
Что именно браузер вам выдаёт?
Хорошее решение, спасибо 🙂
Пожалуйста 🙂
Побольше бы таких людей, как Вы, в России. Спасибо за простое решение вопроса.
Пожалуйста 🙂
Спасибо большое автор.
Пожалуйста 🙂
Огромнейше благодарю! Ломала голову над тем, как описать отдельные страницы. У меня было одно описание и одни метки на весь сайт.
Гляньте на мой сайт, пожалуйста! Теперь метки к каждой записи мне нет необходимости выводить так, как они у меня выведены?
Пожалуйста 🙂 Прошу прощения за долгий ответ, вроде, у Вас всё в порядке)
По мне, хорошим комплексным решением для этих целей будет wp-плагин Tidekey
Да, возможно, просто в самом начале статьи отмечено, что планировалось решить задачу именно без применения плагинов.
Здравствуйте! А не подскажите как с помощью произвольных полей подменять заголовок чтобы в тайтле он был один а в названии статьи другой?
Здравствуйте, полагаю, Вам надо смотреть в сторону функций get_the_title (на странице есть пример использования) или wp_title. Хотя, наверно, лучше так: использовать
if ( условный_тег() ) {} elseif ( условный_тег() ) {}и вставить в файле header.php между тегамивместо
следующий код
<?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 и должно работать 🙂
Подскажи мил человек, как мне добавить ко всем записям (только записям) произвольный метатег, к примеру, вида ? Как я понимаю, нужно в header.php добавить функцию типа
<?php
if ( is_single() ) {
echo '’;
Как-то так или я ошибаюсь? Просто в php вообще полный 0.
Спасибо,
Да, ход мыслей правильный 🙂 Чтобы вывести мета-теги (если вы хотите использовать именно произвольные поля для их формирования) только для записей, просто удалите из условия переменную 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 между тегами
В этом случае сами теги будут выводиться на всех страницах, но содержание их будет представлено только на главной странице и на страницах записей. Если нужно, чтобы и на главной странице не отображалось содержание мета-тегов, то можно отказаться от условия ( 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); } ?>" />Спасибо. Разобрался раньше, товарищ помог)
Инфа на вес золота. Очень помогла. Огромное спасибо автору. Может подскажешь как еще и title выводить из записей?
Пожалуйста 🙂 Всё зависит от того, куда вы хотите вывести значение title? В коде страницы по умолчанию он и так присутствует. В WP есть функция wp_title, подробнее о ней можно почитать вот тут.
Спс. братела, 🙂 Ты сам не понимаешь как ты помог мне одну нужную задачку решить…
Пиши ещё, с удовольствием почитаю твои наработки и мысли.
Спасибо за отзыв, рад, что статья оказалась полезной 🙂