Дублирующиеся meta description в WordPress обычно появляются не из-за одной ошибки, а из-за наложения нескольких источников: SEO-плагин, тема, кастомный код и шаблоны архивов. В итоге поисковик видит одинаковые или почти одинаковые описания на разных страницах, а в коде страницы можно найти сразу два тега <meta name="description"> или один тег, который подставляется не там, где нужно.
Ниже разберём рабочий сценарий: как быстро понять, откуда берётся дубль, как убрать его без поломки шаблонов и как проверить, что исправление действительно сработало.
Когда проблема действительно в дубле meta description
Сначала стоит убедиться, что речь именно о дублировании, а не о том, что поисковик сам переписывает сниппет. В WordPress это разные ситуации. Если в исходном коде страницы есть два одинаковых или конфликтующих description, проблема на стороне сайта. Если в коде тег один, но в выдаче текст отличается, это уже нормальное поведение поисковой системы.
Как быстро проверить исходный код
Откройте страницу в браузере и посмотрите исходник через view-source: или инструменты разработчика. Ищите строку meta name="description". Если тег встречается дважды, проверьте, кто его выводит: SEO-плагин, тема или кастомный хук.
Полезно сравнить несколько типов страниц:
- главная;
- запись;
- страница рубрики;
- страница поиска;
- архив автора.
Если дубль есть только на одном типе шаблона, искать нужно в конкретном шаблоне или условии вывода, а не по всему сайту.
Диагностика: откуда WordPress берёт description
На практике источников обычно три. Первый — SEO-плагин, который выводит description автоматически. Второй — тема, где разработчик добавил свой <meta name="description"> в header.php или через wp_head. Третий — кастомный код в functions.php или плагине сайта.
Если у вас установлен SEO-плагин, сначала проверьте его настройки для конкретного типа контента. Частая ошибка — включён автогенератор description в плагине и одновременно вручную прописан тег в теме.
Поиск по теме и плагинам
Самый надёжный способ — поискать по проекту строку description рядом с meta. Если есть доступ к файлам, выполните поиск по теме и mu-plugins:
grep -Rni 'meta name="description"\|wp_head\|description' wp-content/themes/ wp-content/mu-plugins/Если доступа к консоли нет, используйте поиск по файлам в IDE или файловом менеджере хостинга. Ищите не только сам тег, но и функции вроде add_action('wp_head', ...).
Как убрать дублирование без лишних рисков
Сначала определите, какой источник должен остаться единственным. Обычно логика такая: SEO-плагин отвечает за meta description, тема не выводит этот тег вообще. Это проще поддерживать и легче проверять.
Вариант 1. Удалить description из темы
Если тег добавлен в header.php вручную, его лучше убрать оттуда. Это самый чистый вариант, потому что тема не должна дублировать SEO-логику, если её уже ведёт плагин.
<!-- было в header.php -->
<meta name="description" content="<?php echo esc_attr( get_bloginfo( 'description' ) ); ?>" />Если это ваш код, удалите его полностью. Если править родительскую тему нельзя, перенесите изменения в дочернюю тему и переопределите шаблон там.
Вариант 2. Отключить автогенерацию в SEO-плагине для нужных типов страниц
Иногда нужно оставить description только на части страниц. Например, для записей description задаёт редактор, а для архивов его формирует шаблон. В этом случае отключайте автогенерацию точечно в настройках SEO-плагина, а не глобально.
Точные названия пунктов зависят от плагина, поэтому ориентируйтесь на логику: для конкретного post type или taxonomy должен быть выбран один источник description, а не два.
Вариант 3. Убрать лишний вывод через хук
Если description выводится через кастомный хук темы, его можно снять, если вы знаете имя функции. Пример ниже показывает типовой подход: сначала функция подключается к wp_head, потом её можно удалить.
function mytheme_output_meta_description() {
if ( is_singular() ) {
$description = get_the_excerpt();
if ( $description ) {
echo '<meta name="description" content="' . esc_attr( wp_strip_all_tags( $description ) ) . '" />' . "\n";
}
}
}
add_action( 'wp_head', 'mytheme_output_meta_description', 5 );
// Если позже нужно отключить этот вывод:
remove_action( 'wp_head', 'mytheme_output_meta_description', 5 );Важно: remove_action() сработает только если имя функции и приоритет совпадают с тем, что было добавлено. Если приоритет другой, удаление не произойдёт.
Пошаговая схема исправления
- Откройте проблемную страницу и найдите все
meta name="description"в исходном коде. - Определите источник каждого тега: тема, SEO-плагин, кастомный код.
- Оставьте только один источник для каждого типа страниц.
- Удалите ручной вывод из
header.phpили отключите соответствующий хук. - Очистите кеш страницы, кеш объекта и CDN, если они используются.
- Проверьте исходный код повторно и сравните несколько шаблонов.
Как проверить результат после внедрения
Проверка должна быть не только визуальной. Откройте исходный код и убедитесь, что на странице остался ровно один тег description. Затем проверьте, что:
- на главной description соответствует ожидаемому тексту;
- на записи description не дублируется из excerpt и SEO-плагина одновременно;
- на архиве рубрики не выводится description, если он не нужен;
- в кеше и на мобильной версии нет старого варианта.
Дополнительно можно проверить заголовки и HTML через команду:
curl -s https://example.com/ | grep -i 'meta name="description"'Если страница отдаётся через кеш, сначала очистите его. Иначе вы можете увидеть старый HTML и решить, что исправление не сработало.
Сравнение подходов: плагин, код или правка шаблона
| Подход | Когда подходит | Минус |
|---|---|---|
| SEO-плагин | Если нужен единый источник description для сайта | Нужно следить за настройками типов записей и архивов |
| Правка шаблона | Если тег добавлен вручную в теме | Легко забыть при обновлении родительской темы |
| Код через хук | Если вывод зависит от условий и нужен контроль | Требует аккуратности с приоритетами и remove_action |
Частые ошибки и как их исправить
Оставили description и в теме, и в плагине
Это самая частая причина дубля. Исправление простое: выберите один источник и удалите второй. Если SEO-плагин уже умеет управлять description, ручной тег в теме обычно лишний.
Удалили не тот хук
Если remove_action() не сработал, проверьте имя функции и приоритет. В WordPress удаление должно совпадать с добавлением один в один.
Проверяли без очистки кеша
После правок HTML может оставаться старым из-за кеша страницы, сервера или CDN. Очистка кеша обязательна, иначе диагностика будет ложной.
Смешали description для записи и архивов
На записи description часто берут из excerpt, а на архиве — из шаблонного текста. Если один и тот же код отрабатывает везде, он может создавать одинаковые мета-теги на разных страницах. Разделяйте логику через is_singular(), is_archive() и is_home().
Что учесть для безопасности и производительности
Не храните SEO-логику в случайных правках шаблона, если сайт живёт на обновляемой теме. Лучше вынести кастомизацию в дочернюю тему или небольшой mu-plugin. Так проще контролировать изменения и не потерять их после обновления.
Если description формируется динамически, всегда очищайте текст через wp_strip_all_tags() и esc_attr(). Это снижает риск поломки HTML и случайной вставки лишних символов в атрибут.
И ещё один практический момент: не пытайтесь «улучшить SEO» массовой генерацией одинаковых description для всех страниц. Для технически чистого сайта важнее уникальность и предсказуемость вывода, чем формальная заполненность тега.
Если нужен более широкий аудит дублей и технических SEO-ошибок, удобно сочетать ручную проверку с инструментами очистки сайта и управления метаданными, например Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином сначала стоит понять, где именно рождается дубль, иначе можно отключить не тот источник.