canonicalタグは重複するページや類似ページなどコピーコンテンツとしてgoogleからペナルティを受けないために記述するもの
<link rel="canonical" href="「正規のURL」">
サイトをSSL化(httpからhttps)した場合にも有効
header.phpのheadタグ内に入れる
※is_front_page=トップページ is_home=投稿ページ(投稿ページのスラッグ入れる)
<?php if ( is_front_page() ) {
$canonical_url=get_bloginfo('url');
}
elseif ( is_home() ) {
$canonical_url=get_bloginfo('url').'/{ページスラッグ}';
}
elseif (is_category()) {
$canonical_url=get_category_link(get_query_var('cat'));
}
elseif (is_page()||is_single()) {
$canonical_url=get_permalink();
}
$paged = get_query_var( 'paged', 1 );
$page = get_query_var( 'page', 1 );
if ( $paged >= 2 || $page >= 2) {
$canonical_url=$canonical_url.'/page/'.max( $paged, $page );
}
?>
<?php if(!(is_404())):?>
<link rel="canonical" href="<?php echo $canonical_url; ?>">
<?php endif;?>
※WordPressデバッグモードで
「Notice: Undefined variable」が出るため13、14行$paged =と$page =を追加
function.phpに記述する場合(未検証 2019.6.8)
※header.phpテンプレート内に「wp_head」が必要
remove_action('wp_head', 'rel_canonical');
add_action( 'wp_head', 'add_canonical' );
function add_canonical() {
$canonical = null;
if( is_home() || is_front_page() ) {
$canonical = home_url();
} elseif ( is_category() ) {
$canonical = get_category_link( get_query_var('cat') );
} else if(is_tag()){
$canonical = get_tag_link(get_queried_object()->term_id);
} elseif ( is_search() ) {
$canonical = get_search_link();
} elseif ( is_page() || is_single() ) {
$canonical = get_permalink();
} else{
$canonical = home_url();
}
echo '<link rel="canonical" href="'.$canonical.'">'."\n";
}
header内に出力される内容
<link rel="canonical" href="ページのURL">