Steamer Lane Studio技術備忘録ワードプレス

WP パラメータ付の固定ページのcanonicalを正確に表示させてGoogleからのエラー通知を無くす

wordpress WP パラメータ付の固定ページのcanonicalを正確に表示させてGoogleからのエラー通知を無くす
最終更新日: 2023年4月15日

実質たいしたことではない、ページネーションありのカテゴリとかけっこうGoogle側でうまくやってくれる場合があるから。
ここではプラグインで生成されるページ、パスは一緒でパラメーターでページ分けされる場合のcanonicalはそのままだとパスまでしか出ないのでcanonical上同ページが複数存在となりGoogleからエラー通知が来る。
ページネーションの場合はGoogle側でうまくやってくれるが、その他の場合はどうかわからない。エラーは無いに越したことはないからコードを弄ってみた。

<?php if ( is_home() ) {
$canonical_url=get_bloginfo('url')."/";
}else if (is_archive()){
$canonical_url=get_post_type_archive_link( get_post_type() );
}else if (is_category()){
$canonical_url=get_category_link(get_query_var('cat'));
}else if (is_page(array('hoge','fuga','moga'))){
$canonical_url=(empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
}else if (is_page()||is_single()){
$canonical_url=get_permalink();
}else if ( $paged >= 2 || $page >= 2){
$canonical_url=$canonical_url.'page/'.max( $paged, $page ).'/';
}?>
<?php if(is_404()):?>
<?php elseif(is_tag()):?>
<link rel="canonical" href="<?php echo$canonical_url=(empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];?>" />
<?php elseif(is_search()):?>
<link rel="canonical" href="<?php echo$canonical_url=(empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];?>" />
<?php else:?>
<link rel="canonical" href="<?php echo $canonical_url; ?>" />
<?php endif;?>

ベースのコードにプラスで404やtagの場合も付けてあるが、、、
ここでは固定ページでの分岐を示してるので、is_page(arrayで一つ固定ページのこのスラッグページの時はフルパスを表示するようにした。