Добавляем мета тег canonical к каждой странице сайта на WordPress без плагинов

Всем привет! Чтобы добавить запись типа meta rel="canonical" href="url" к каждой странице вашего сайта на WordPress, добавьте этот код в functions.php вашей темы:

function remove_args($url) {
  $parsed = parse_url($url);

  $fragment = '';

  if (array_key_exists('fragment', $parsed)) {
    $fragment = '#' . $parsed['fragment'];
  }

  return sprintf("%s://%s%s%s",
    $parsed['scheme'],
    $parsed['host'],
    $parsed['path'] ?? '',
    $fragment);
}


function print_canonical_link() {
  $url = "";

  // Одиночная страница
  if (is_single()) {
    global $page;
    // Пост из нескольких частей
    if ($page) {
      $url = get_pagenum_link($page);
    }
    else {
      $url = get_permalink();
    }
  }
  // Страница пагинации типа что-то-там/page/N
  else if (is_paged()) {
    $url = get_pagenum_link(get_query_var('paged'));
  }
  // Главная страница сайта
  else if(is_front_page()) {
    $url = get_home_url();
  }
  // Страницы категории или тега
  else if(is_category() || is_tag()) {
    $url = get_term_link(get_queried_object());
  }

  if ($url) {
    echo '<link rel="canonical" href="'.remove_args($url).'" />';
  }
}
add_action('wp_head', 'print_canonical_link');

Подробности для непосвящённых: функция print_canonical_link() выводит запись вида
<meta rel="canonical" href="url" /> во время вызова штатной функции wp_head(), что очень уважают поисковые системы, но это неточно. А функция remove_args() удаляет GET аргументы вида «?key=value» из URL. Критика, замечания, пожелания приветствуются.

2 комментария
  1. написал(а) Ильдар (21 августа 2025, 13:07)

    Отличная статья, спасибо за подробное объяснение! Да, добавление мета-тега canonical важно для предотвращения проблем с дублированным контентом. Ваш код работает корректно, но стоит помнить, что при использовании плагинов SEO, таких как Yoast SEO или All in One SEO, мета-тег canonical уже добавляется автоматически. Если вы предпочитаете не использовать дополнительные плагины, ваш способ через functions.php — отличный вариант. Также хочу отметить, что для комплексной оптимизации сайта на WordPress я использую плагин Clearfy Pro, он помогает управлять множеством настроек, включая SEO, без необходимости вмешательства в код. Рекомендую ознакомиться с его возможностями. Мне помогает)

    1. написал(а) eJ (22 августа 2025, 08:45)

      Спасибо за наводку. Теперь я могу сделать цикл статей по реализации функций вашего платного плагина шаг за шагом в functions.php или даже реализовать похожий, но бесплатный плагин.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Блог Евгения Жирнова