Если в индексе появляются одинаковые страницы, а в Search Console растут предупреждения про дублированные страницы, проблема часто не в robots.txt и не в «плохом SEO-плагине», а в разметке шаблона. На практике чаще всего ломаются две вещи: на странице выводится несколько H1, а canonical указывает не туда или вообще дублируется разными плагинами и темой одновременно.
Эта статья про узкий сценарий: как быстро найти источник дублей H1 и canonical в WordPress, исправить его без лишних правок и проверить, что поисковик видит ровно одну основную версию страницы.
Как понять, что проблема именно в H1 и canonical
Сначала стоит отделить визуальную проблему от технической. Один и тот же URL может нормально открываться в браузере, но в HTML у него будет два H1: один в шапке шаблона, второй в контенте записи. Canonical тоже может конфликтовать: тема выводит свой тег, SEO-плагин — свой, а на архиве или странице пагинации получается несколько вариантов основного адреса.
Что проверить вручную
- Откройте страницу и посмотрите исходный код: в документе должен быть один тег
<h1>. - Найдите
<link rel="canonical": он должен встречаться один раз. - Сравните canonical с фактическим URL страницы, включая слэш в конце, если он используется на сайте.
- Проверьте, не отличается ли canonical на страницах пагинации, архивов и записей с параметрами фильтрации.
Типичные признаки в Search Console
Если у страницы есть альтернативные версии, в отчётах обычно всплывают дублированные страницы, выбранный пользователем canonical отличается от Google canonical или страницы исключаются как «дубликат, Google выбрал другой canonical». Это не всегда означает ошибку в коде, но повод проверить шаблон — почти всегда.
Где обычно рождаются дубли
В WordPress источник проблемы часто лежит в одном из трёх мест: тема, SEO-плагин или контент редактора. Например, разработчик добавил H1 в шаблон страницы архива, а редактор потом вставил ещё один заголовок первого уровня в блоки. Или SEO-плагин уже выводит canonical, а в header.php остался старый ручной тег.
| Источник | Что ломает | Как исправлять |
|---|---|---|
| Тема | Два H1 в шаблоне, ручной canonical | Править шаблон или отключать вывод в дочерней теме |
| SEO-плагин | Дубли canonical, неверный canonical на архивах | Оставить один источник canonical, проверить настройки |
| Контент | H1 внутри блока/паттерна | Заменить на H2/H3, если H1 уже есть в шаблоне |
Пошаговое решение: как убрать дубли H1
Если проблема в шаблоне, сначала найдите, где именно выводится заголовок. В классических темах это обычно single.php, page.php, archive.php или подключаемые части через get_template_part(). В блочных темах заголовок может быть в шаблоне сайта или шаблоне записи.
Шаг 1. Найдите все H1 в шаблоне
<?php
// Пример: проверка, не выводится ли H1 в шаблоне дважды.
// Ищите в теме вызовы the_title() внутри <h1> и отдельные блоки с заголовком.
?>
<header class="entry-header">
<h1 class="entry-title"><?php the_title(); ?></h1>
</header>
<div class="content">
<?php the_content(); ?>
</div>Если в контенте уже есть H1, его нужно заменить на H2 или убрать. Для редактора Gutenberg это проще всего сделать вручную в блоке заголовка. Для шаблонов — правкой разметки.
Шаг 2. Уберите H1 из контентных блоков, если заголовок уже есть в шаблоне
В большинстве тем на одиночной записи H1 должен быть только в шаблоне, а внутри статьи — H2 и ниже. Это особенно важно для страниц, где редактор вставляет «герой-блок» с крупным заголовком. Визуально он может быть похож на H1, но в HTML должен быть обычным h2 или div с классом.
Шаг 3. Если H1 нужен только на главной части страницы, ограничьте его вывод условием
<?php
if ( is_singular() ) :
?>
<h1 class="entry-title"><?php the_title(); ?></h1>
<?php
else :
?>
<p class="entry-title"><?php the_title(); ?></p>
<?php
endif;
?>Такой подход полезен для списков записей, архивов и страниц каталога, где заголовок нужен визуально, но не должен дублировать семантику H1 на каждой карточке.
Как исправить конфликт canonical
Canonical должен быть один. Если его выводят и тема, и SEO-плагин, поисковик получает две версии одной и той же страницы. В лучшем случае он проигнорирует лишний тег. В худшем — выберет не тот URL, который вы ожидали.
Проверьте, кто выводит canonical
Откройте исходный код страницы и найдите все вхождения rel="canonical". Если их больше одного, дальше нужно определить источник. В теме это часто ручной код в header.php. В плагинах — стандартный вывод через wp_head.
Если вы используете SEO-плагин, обычно лучше оставить canonical на его стороне и убрать ручной тег из темы. Это безопаснее, чем пытаться дублировать логику в шаблоне.
Пример: убрать ручной canonical из темы
<?php
// Найдите в header.php или подключаемом шаблоне такой код и удалите его:
// <link rel="canonical" href="<?php echo esc_url( get_permalink() ); ?>" />
// Если canonical нужен только для особого шаблона,
// выводите его через wp_head с условием и без дублирования.
add_action( 'wp_head', function () {
if ( is_singular() ) {
echo '<link rel="canonical" href="' . esc_url( get_permalink() ) . '" />' . "\n";
}
}, 1 );Важно: этот пример нужен только если у вас нет SEO-плагина, который уже выводит canonical. Если плагин активен, не добавляйте второй источник.
Диагностика через код: быстрый поиск дублей в шаблоне
Когда сайт большой, вручную искать H1 и canonical по файлам неудобно. Проще временно добавить диагностический сниппет в дочернюю тему или в mu-plugin и посмотреть, что реально попадает в HTML.
<?php
add_action( 'wp_footer', function () {
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
global $wp_query;
if ( is_singular() ) {
echo '<!-- DEBUG: singular page loaded: ' . esc_html( get_the_ID() ) . ' -->' . "\n";
}
} );Это не ищет H1 автоматически, но помогает убедиться, что вы тестируете нужный шаблон. Для реальной проверки дублей удобнее смотреть исходный HTML в браузере или через curl.
Как проверить результат после правок
После исправления не ограничивайтесь визуальной проверкой в админке. Нужно проверить именно HTML-вывод.
- Откройте страницу в режиме просмотра исходника и убедитесь, что H1 один.
- Проверьте, что canonical один и ведёт на правильный URL.
- Посмотрите страницу в браузере с отключённым кэшем или в инкогнито, чтобы не увидеть старую версию.
- Если используется кэш-плагин или серверный кэш, очистите его перед проверкой.
- В Search Console отправьте URL на повторную проверку после переобхода.
Если сайт большой, полезно проверить не одну страницу, а несколько типов: запись, страницу, архив рубрики, пагинацию и страницу с параметрами, если они индексируются.
Частые ошибки и как их исправить
Оставили H1 в шаблоне и в контенте
Это самая частая причина. Визуально всё выглядит нормально, но семантически заголовок дублируется. Решение простое: один H1 на страницу, остальные заголовки ниже уровнем.
Подключили SEO-плагин и не убрали ручной canonical
После установки плагина ручной тег в теме часто забывают удалить. В результате на странице два canonical. Оставьте один источник.
Проверяли не ту версию URL
Иногда дубли появляются из-за www/non-www, слэша в конце, http/https или параметров ?amp, ?replytocom, ?utm_. Сначала убедитесь, что canonical указывает на ту каноническую версию, которую вы реально хотите индексировать.
Смотрели только в редакторе, а не в исходном коде
Редактор и фронтенд могут показывать разную структуру. Визуально заголовок один, а в HTML есть ещё один скрытый H1 в шаблоне или паттерне.
Когда лучше править кодом, а когда настройками
Если дубли идут из шаблона темы, правка кода обычно надёжнее. Если проблема в настройках SEO-плагина, сначала проверьте его опции: иногда canonical для архивов, пагинации или вложений можно отключить без редактирования файлов. Но если источник конфликта неочевиден, не стоит маскировать проблему настройками — лучше убрать лишний вывод в коде.
Для сайтов, где важна чистота разметки и скорость поддержки, имеет смысл держать такие правки в дочерней теме или отдельном mu-plugin. Тогда обновление основной темы не вернёт старый дубль обратно.
Практические советы по безопасности и производительности
Не редактируйте файлы темы напрямую на рабочем сайте. Для таких правок безопаснее использовать дочернюю тему или staging-копию. Если что-то пойдёт не так, вы не сломаете фронтенд на боевом домене.
Перед изменениями сделайте резервную копию хотя бы файлов шаблона и базы. Если canonical или H1 генерируются плагином, сначала отключайте только один источник и сразу проверяйте страницу. Это быстрее, чем искать проблему после серии несвязанных правок.
Если нужен более широкий аудит дублей и технической чистки, в экосистеме WPShop есть Clearfy Pro, но использовать его стоит как инструмент для конкретной задачи, а не как замену пониманию того, что именно выводит тема.
Короткий чек-лист перед публикацией
- На странице один H1.
- Canonical выводится один раз.
- Canonical ведёт на правильный URL.
- Нет ручного canonical в теме и автоматического canonical от плагина одновременно.
- После очистки кэша новая версия HTML реально отдается в браузере.
- Проверены не только записи, но и архивы, пагинация и служебные страницы.
Если после правок дубли остаются, проблема почти всегда в другом шаблоне или в плагине, который подключает свой вывод через wp_head. Тогда проще идти от исходного HTML к конкретному файлу, чем гадать по внешнему виду страницы.