Форум OlegON > Компьютеры и Программное обеспечение > Сеть > Создание сайтов и поисковая оптимизация (SEO)

Как добавить атрибут canonical для всех страниц Wordpress : Создание сайтов и поисковая оптимизация (SEO)

26.04.2024 11:00


18.05.2015 22:41
OlegON
 
По умолчанию Wordpress не добавляет этот атрибут, что в свете любви этого движка к восприятию многих несуществующих URLов достаточно вредно. Вот, какую функцию надо воткнуть в самое начало functions.php, чтобы это исправить.

Код:
/*** Функция вывода rel="canonical" ***/

function olegon_canonical(){

        if (is_home() ) {
            $olegon_chief_link = get_option('home');
            $olegon_home_link = olegon_link_paged($olegon_chief_link);
            $olegon_home_link = trailingslashit($olegon_home_link);
            {
        echo "".'<link rel="canonical" href="'.$olegon_home_link.'" />'."\n";
    }
} else if (is_category()) {
            $olegon_cat_link = get_category_link(get_query_var('cat'));
            $olegon_category_link = olegon_link_paged($olegon_cat_link);
            {
        echo "".'<link rel="canonical" href="'.$olegon_category_link.'" />'."\n";
    }
} else if (function_exists('is_tag') && is_tag()){
            $tag = get_term_by('slug',get_query_var('tag'),'post_tag');
        if (!empty($tag->term_id)) {
            $tag_link = get_tag_link($tag->term_id);
            }
            $olegon_tag_link = olegon_link_paged($tag_link);
            $olegon_tag_link = trailingslashit($olegon_tag_link);
           {
        echo "".'<link rel="canonical" href="'.$olegon_tag_link.'" />'."\n";
    }
} else if (is_author()){
            global $cache_userdata;
            $userid = get_query_var('author');
            $olegon_auth_link = get_author_link(false, $userid, $cache_userdata[$userid]->user_nicename);
            $olegon_author_link = $this->olegon_link_paged($olegon_auth_link);
        {
        echo "".'<link rel="canonical" href="'.$olegon_author_link.'" />'."\n";
    }
}
else if (is_date()){
if (get_query_var('m')) {
                $m = preg_replace('/[^0-9]/', '', get_query_var('m'));
                switch (strlen($m)) {
                    case 0:
                        $olegon_date_link = get_year_link($m);
                        $olegon_date_link = olegon_link_paged($olegon_date_link);
                        break;
                    case 1:
                        $olegon_date_link = get_month_link(substr($m, 0, 4), substr($m, 4, 2));
                        $olegon_date_link = olegon_link_paged($olegon_date_link);
                        break;
                    case 2:
                        $olegon_date_link = get_day_link(substr($m, 0, 4), substr($m, 4, 2),
                                             substr($m, 6, 2));
                        $olegon_date_link = olegon_link_paged($olegon_date_link);
                        break;
                    default:
                        $olegon_date_link = '';
                }
                }
                if (is_day()) {
                $olegon_date_link = get_day_link(get_query_var('year'),  get_query_var('monthnum'), get_query_var('day'));
                $olegon_date_link = olegon_link_paged($olegon_date_link);
            } else if (is_month()) {
                $olegon_date_link = get_month_link(get_query_var('year'), get_query_var('monthnum'));
                $olegon_date_link = olegon_link_paged($olegon_date_link);
            } else if (is_year()) {
                $olegon_date_link = get_year_link(get_query_var('year'));
                $olegon_date_link = olegon_link_paged($olegon_date_link);
            }
        {
        echo "".'<link rel="canonical" href="'.$olegon_date_link.'" />'."\n";
        }
    }
}
function olegon_link_paged($link) {
            $olegon_page = get_query_var('paged');
            $olegon_check = function_exists('user_trailingslashit');
        if ($olegon_page && $olegon_page > 1) {
            $link = trailingslashit($link) ."page/". "$olegon_page";
            if ($olegon_check) {
                $link = user_trailingslashit($link, 'paged');
            } else {
                $link .= '/';
            }
        }
            return $link;
    }
add_action('wp_head', 'olegon_canonical');

/*** Конец функции вывода rel="canonical" ***/
Чтобы не думали, что я слишком умный, код был давно в загашниках, не мой.
Часовой пояс GMT +3, время: 11:00.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.