Photo by Joan Gamell
meta-tag

Автоматическая замена мета-тегов title & description

25.03.24

Замена мета-тегов — title, meta description нужна для улучшения и сео-оптимизации сайта на CMS WordPress. Часто возникает необходимость массовой, автоматической замены или какой-либо манипуляции с ними. Использование плагинов, таких как «Yoast SEO» упрощает задачу, но не решает полностью.

Если используется плагин Yoast SEO, то у него есть хуки wpseo_title и wpseo_metadesc. На них можно подвесить функции редактирования:

// wpseo_title
add_filter('wpseo_title', function($title) {
	if (is_page([ 'parent-slug/page-name', '/parent-slug/page-name/' ])) {
		$title = 'Заголовок';
	}
	return $title;
}, 10, 1);

// wpseo_metadesc
add_filter('wpseo_metadesc', function($description) {
	if (is_singular([ 'newspaper', 'book' ])) {
		$description = 'Описание страницы';
	}
	return $description;
}, 10, 1);

Можно использовать и другие проверки (is_single, is_tag и т.д.) и вешать дополнительную логику для формирования мета-тегов.

Meta-tag title без плагина

Манипуляцию с title в случае если по каким-то причинам не используется плагин лучше проводить через хук pre_get_document_title

add_filter( 'pre_get_document_title', function ( $title ) {
return 'Here is the new title';
}, 10, 1 );

Есть еще пара хуков в этой связи:

  • document_title_parts
  • document_title_separator

Хук document_title_parts это передача и, соответственно возможность редактирования ассоциативного массива, так сказать, левой и правой части title:

array (
‘title’ => ‘Моя супер страница’,
’tagline’ => ‘Слоган моего сайта’
)

Хук document_title_separator, как вы уже догадались, это возможность повлиять на разделитель для этих двух частей.

Meta-tag description без плагинов

Тут ситуация обстоит несколько иначе. Сам WordPress не создает этот мета-тег. И, соответственно, не существует поля для ввода СЕО-описания в административной части. Его можно создать с помощью плагина ACF (или самостоятельно). Далее, через хук wp_head сделать добавление мета-дескрипшен. Что-то типа:

add_action(‘wp_head’, function() {
if ( get_field(‘description’) ) {
  echo "<meta name=\"description\" content=\"" . get_field(‘description’) . "\" />";
}
});

Можно еще добавить туда свой хук с помощью apply_filters( $tag, $value ) для облегчения жизни в будущем.