По умолчанию 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" ***/
Чтобы не думали, что я слишком умный, код был давно в загашниках, не мой.