wplab.ru wordpress WPLab

Как добавить noindex и canonical в WordPress без плагинов

Если нужно закрыть от индексации отдельную страницу или убрать дубли, это можно сделать без SEO-плагинов: через <meta name="robots" content="noindex"> и тег <link rel="canonical">. Для WordPress это нормальный сценарий, если вы не хотите ставить тяжёлый комбайн ради пары меток и готовы добавить небольшой код в тему или мини-плагин.

Сразу оговорюсь: noindex и canonical решают разные задачи. noindex говорит поисковику не показывать страницу в выдаче, а canonical указывает основную версию, если у вас есть похожие или дублирующиеся URL. Часто их используют вместе, но не всегда на одной и той же странице.

Что именно нужно добавить в WordPress

В HTML-голове страницы обычно размещают две метки:

  • <meta name="robots" content="noindex,follow"> — страница не должна попадать в индекс, но ссылки на ней можно обходить;
  • <link rel="canonical" href="https://example.com/preferred-url/"> — указывает предпочтительный адрес страницы.

В WordPress эти теги удобнее выводить через хук wp_head. Так вы не правите шаблоны вручную в нескольких местах и не ломаете обновления темы.

Если задача касается только одной страницы, лучше делать условную проверку: для конкретного ID, шаблона, типа записи или архива. Если поставить noindex глобально, можно случайно закрыть весь сайт от поиска.

Как добавить noindex и canonical через functions.php

Самый простой вариант — добавить код в functions.php дочерней темы. Если у вас нет дочерней темы, безопаснее создать мини-плагин, чтобы не потерять изменения при обновлении темы. Ниже покажу оба подхода, но код одинаковый.

Пример для отдельной страницы: она получит noindex, а canonical будет указывать на саму себя. Это полезно для служебных страниц, страниц благодарности, результатов внутреннего поиска и похожих URL, которые не должны ранжироваться.

add_action('wp_head', function () {
    if (is_page(123)) {
        echo '<meta name="robots" content="noindex,follow">' . "\n";
        echo '<link rel="canonical" href="' . esc_url(get_permalink(123)) . '">' . "\n";
    }
});

Здесь 123 — ID страницы. Его можно посмотреть в админке WordPress в списке страниц или в адресной строке при редактировании записи. Функция get_permalink(123) возвращает постоянную ссылку на эту страницу, а esc_url() защищает вывод URL.

Если нужно закрыть от индексации не одну страницу, а, например, все страницы определённого шаблона, условие можно заменить. Но не усложняйте код без необходимости: чем точнее условие, тем меньше риск задеть лишние URL.

Когда лучше использовать мини-плагин вместо functions.php

functions.php подходит, если вы уверенно работаете с темой и понимаете, что при смене темы код нужно переносить. Мини-плагин удобнее, если вы хотите отделить SEO-логику от оформления. Это особенно полезно на проектах, где тема часто обновляется или меняется.

Мини-плагин можно сделать в отдельной папке в wp-content/plugins/, создав один PHP-файл с заголовком плагина. Для такой задачи это несложно, но если вам нужен только один-два правила, functions.php обычно быстрее.

Как поставить canonical на основную версию страницы

canonical нужен, когда один и тот же контент доступен по нескольким адресам. Типичные случаи: страницы с параметрами в URL, пагинация, UTM-метки, сортировка, фильтры, дубли архивов. В таких ситуациях canonical должен указывать на чистый основной URL без лишних параметров.

Пример для страницы товара, статьи или любой записи, где canonical должен совпадать с постоянной ссылкой:

add_action('wp_head', function () {
    if (is_singular()) {
        echo '<link rel="canonical" href="' . esc_url(get_permalink()) . '">' . "\n";
    }
});

На большинстве сайтов WordPress уже выводит canonical автоматически, если тема использует стандартные функции ядра. Поэтому этот код нужен не всегда. Его имеет смысл добавлять только если тема не выводит canonical вообще, выводит его неправильно или вы хотите вручную контролировать конкретные типы страниц.

Если canonical уже есть в исходном коде страницы, второй такой же тег добавлять не нужно. Два canonical на одной странице — частая ошибка, из-за которой поисковик может проигнорировать оба варианта.

Как закрыть от индексации архивы, поиск и служебные страницы

Чаще всего вручную закрывают не отдельные записи, а системные страницы WordPress. Это разумно, если они не несут самостоятельной ценности для поиска.

Ниже пример, который ставит noindex,follow на страницу поиска, архивы автора и страницы с пагинацией архивов. Перед использованием проверьте, что именно вы хотите закрыть: на контентных проектах архивы иногда полезны для индексации.

add_action('wp_head', function () {
    if (is_search() || is_author() || is_paged()) {
        echo '<meta name="robots" content="noindex,follow">' . "\n";
    }
});

Этот пример намеренно простой. В реальном проекте лучше уточнить условия, чтобы не закрыть лишнее. Например, is_paged() сработает на любой пагинированной странице, а это не всегда нужно. Если у вас есть важные страницы с пагинацией, настройку стоит сделать точнее.

Как проверить, что метки действительно появились

После добавления кода откройте нужную страницу в браузере и посмотрите исходный код. Проще всего нажать Ctrl+U или открыть инструменты разработчика и найти в HTML строку с robots или canonical.

Проверьте три вещи:

  • метка noindex выводится только там, где вы её задали;
  • canonical ведёт на правильный основной URL;
  • в исходном коде нет дублей этих тегов.

Если вы используете кэширование на сайте или на сервере, после правки очистите кэш. Иначе в браузере может отображаться старая версия страницы, и вы решите, что код не сработал.

Для быстрой технической проверки можно также посмотреть ответ страницы через curl:

curl -I https://example.com/your-page/

Но заголовки ответа не покажут HTML-метки canonical и noindex, потому что они находятся в теле страницы. Для них нужен именно просмотр исходного HTML.

Типичные ошибки, из-за которых настройка не работает

Самая частая проблема — код добавили не туда. Если вставить его в файл темы, который не подключается на нужной странице, метка не появится. Для таких задач безопаснее использовать wp_head, а не править шаблон вручную в нескольких местах.

Ещё одна ошибка — ставить noindex и забывать про canonical. Это не всегда критично, но если страница имеет дубли, поисковику полезно сразу показать предпочтительный адрес. И наоборот: canonical без noindex не запрещает индексацию, он только подсказывает основную версию.

Третья проблема — конфликт с темой или другим кодом. Если тема уже выводит canonical, а вы добавили свой, в HTML будет два одинаковых тега. В таком случае нужно убрать лишний вывод в теме или не дублировать его в своём коде.

Когда ручной способ лучше плагина, а когда нет

Ручная настройка удобна, если вам нужно несколько точечных правил и вы не хотите ставить SEO-плагин ради одной функции. Это хороший вариант для небольших сайтов, лендингов и проектов, где SEO-логика должна быть минимальной и прозрачной.

Но если у вас много типов страниц, сложные шаблоны, фильтры, пагинация и десятки исключений, ручной код быстро становится неудобным. В таком случае проще использовать специализированный SEO-инструмент или хотя бы вынести правила в отдельный мини-плагин, чтобы не держать их внутри темы.

Если вам нужен именно набор для чистки дублей и базовых SEO-настроек без тяжёлого комбайна, можно посмотреть Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но для задачи из этой статьи он не обязателен: всё, что описано выше, можно сделать и вручную.

Если коротко, рабочая схема такая: для точечных страниц добавляете noindex через wp_head, для дублей задаёте правильный canonical, после этого проверяете исходный код и очищаете кэш. Этого достаточно, чтобы управлять индексацией в WordPress без установки SEO-плагина.

×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее