В современных проектах на WordPress часто возникает задача настроить уникальные мета-данные (title, description, keywords) для разных типов записей. Это важно для SEO, чтобы поисковые системы лучше индексировали контент и повышали релевантность сайта. В этой статье мы рассмотрим, как реализовать гибкую систему мета-данных для любых типов записей, включая кастомные, с помощью кода и популярных плагинов.
Почему важно использовать уникальные мета-данные для каждого типа записи
По умолчанию WordPress использует единый шаблон мета-тегов для всех страниц, что часто приводит к дублированию и низкой уникальности контента в глазах поисковиков. Особенно это заметно при использовании кастомных типов записей (Custom Post Types), которые могут иметь уникальную структуру и назначение.
Уникальные мета-данные позволяют:
- Улучшить видимость сайта в поисковых системах;
- Повысить CTR за счет более информативных сниппетов;
- Улучшить релевантность страниц по ключевым запросам;
- Избежать проблем с дублированием контента.
Кроме того, правильная настройка мета-тегов помогает социальным сетям корректно отображать превью страниц при расшаривании.
Использование плагина Clearfy Pro для управления мета-данными
Плагин Clearfy Pro предлагает удобный и мощный инструмент для управления SEO-настройками без необходимости писать код.
Основные возможности плагина для решения задачи:
- Настройка уникальных шаблонов мета-тегов для каждого типа записи;
- Поддержка переменных для динамического формирования title и description;
- Инструменты для очистки и оптимизации мета-данных;
- Интеграция с Open Graph и Twitter Cards для соцсетей.
Чтобы настроить уникальные мета-данные для кастомных типов записей, достаточно в разделе SEO Clearfy Pro указать шаблоны, например:
%post_title% — %post_type% | %sitename%
Такая формула автоматически подставит заголовок записи, тип записи и название сайта.
Реализация уникальных мета-данных через код для разработчиков
Если вы хотите гибко настраивать мета-теги без плагинов, можно использовать хуки WordPress и фильтры. Ниже пример функции, которая выводит уникальные title и description в зависимости от типа записи.
Пример функции wp_puzzle_customize_meta
function wp_puzzle_customize_meta() {
if (is_singular()) {
global $post;
$post_type = get_post_type($post);
// Базовые данные
$title = get_the_title($post);
$description = get_post_meta($post->ID, '_wp_puzzle_meta_description', true);
// Если описание не задано, формируем дефолт
if (empty($description)) {
$description = 'Уникальное описание для типа записи ' . $post_type . '. Подробности на сайте ' . get_bloginfo('name');
}
// Вывод мета-тегов
echo '<title>' . esc_html($title) . ' | ' . esc_html(get_bloginfo('name')) . '</title>\n';
echo '<meta name="description" content="' . esc_attr($description) . '" />\n';
}
}
add_action('wp_head', 'wp_puzzle_customize_meta');
Эта функция проверяет, что мы на странице записи, получает тип записи и выводит title и description. Для хранения описания используется мета-поле _wp_puzzle_meta_description, которое можно добавить при создании или редактировании записи.
Добавление мета-полей для описания в админке
Чтобы удобно задавать описание в админке, добавим мета-бокс:
function wp_puzzle_add_meta_boxes() {
add_meta_box(
'wp_puzzle_meta_description',
'Описание для SEO',
'wp_puzzle_meta_description_callback',
null,
'normal',
'high'
);
}
add_action('add_meta_boxes', 'wp_puzzle_add_meta_boxes');
function wp_puzzle_meta_description_callback($post) {
$value = get_post_meta($post->ID, '_wp_puzzle_meta_description', true);
echo '<textarea style="width:100%;" rows="3" name="wp_puzzle_meta_description">' . esc_textarea($value) . '</textarea>';
}
function wp_puzzle_save_meta_description($post_id) {
if (array_key_exists('wp_puzzle_meta_description', $_POST)) {
update_post_meta(
$post_id,
'_wp_puzzle_meta_description',
sanitize_text_field($_POST['wp_puzzle_meta_description'])
);
}
}
add_action('save_post', 'wp_puzzle_save_meta_description');
Теперь при редактировании записи появится поле для описания, которое будет использоваться в мета-теге description.
Настройка шаблонов мета-данных для кастомных типов записей
Если у вас много кастомных типов записей (например, 'product', 'event', 'portfolio'), вы можете задать шаблоны мета-данных программно в зависимости от типа.
Пример:
function wp_puzzle_dynamic_meta_templates() {
if (is_singular()) {
global $post;
$post_type = get_post_type($post);
switch ($post_type) {
case 'product':
$title = get_the_title() . ' - Купить по выгодной цене';
$description = 'Подробная информация о товаре ' . get_the_title() . '. Закажите прямо сейчас!';
break;
case 'event':
$title = get_the_title() . ' | Афиша и расписание';
$description = 'Узнайте все о событии ' . get_the_title() . '. Даты, место и подробности.';
break;
default:
$title = get_the_title() . ' | ' . get_bloginfo('name');
$description = get_bloginfo('description');
}
echo '<title>' . esc_html($title) . '</title>\n';
echo '<meta name="description" content="' . esc_attr($description) . '" />\n';
}
}
add_action('wp_head', 'wp_puzzle_dynamic_meta_templates');
Такой подход позволяет создавать уникальные мета-теги, релевантные содержимому каждого типа записи.
Дополнительные советы по SEO-оптимизации мета-данных
Использование Open Graph и Twitter Cards
Для улучшения отображения страниц в соцсетях добавьте мета-теги Open Graph и Twitter Cards. Их можно настроить вручную или с помощью плагина Clearfy Pro.
Пример вывода в коде:
function wp_puzzle_add_social_meta() {
if (is_singular()) {
global $post;
$title = get_the_title();
$description = get_post_meta($post->ID, '_wp_puzzle_meta_description', true) ?: get_bloginfo('description');
$url = get_permalink($post);
$image = get_the_post_thumbnail_url($post, 'full') ?: 'https://example.com/default-image.jpg';
echo '<meta property="og:title" content="' . esc_attr($title) . '" />\n';
echo '<meta property="og:description" content="' . esc_attr($description) . '" />\n';
echo '<meta property="og:url" content="' . esc_url($url) . '" />\n';
echo '<meta property="og:image" content="' . esc_url($image) . '" />\n';
echo '<meta name="twitter:card" content="summary_large_image" />\n';
echo '<meta name="twitter:title" content="' . esc_attr($title) . '" />\n';
echo '<meta name="twitter:description" content="' . esc_attr($description) . '" />\n';
echo '<meta name="twitter:image" content="' . esc_url($image) . '" />\n';
}
}
add_action('wp_head', 'wp_puzzle_add_social_meta');
Проверка и тестирование мета-тегов
После настройки обязательно проверьте корректность мета-тегов с помощью инструментов:
Это поможет убедиться, что мета-данные отображаются правильно и способствуют SEO.