Canonicalのカスタマイズ
- PHP
- WEBSITE制作
- WEB関連
- Wordpress
運用しているサイトで、
日本語/英語表示をパラメータで切り替えているものがある。
https:// ———-.com/?la=en
みたいな感じで英語表示をしているのですが、
まあ、最初は英語でも表示したいなぁ。みたいなのに対応したので、こういったパラメータによる日本語/英語の切り替えだったんですが、日は流れ、担当者が変わり、、、
気がつけば、英語サイトなのにcanonialが日本語と一緒なんだけど?なんで?
みたいなツッコミが入った。いや、前提が。。。
まあ、仕方が無いので対応。
まず、デフォルトのcanonicalタグを消さないといけない。
消し方は以下をfunctions.phpに記載
remove_action('wp_head', 'rel_canonical');
もし、Yoast SEO を入れている場合は、そちらを無効化する必要があり、
add_filter( 'wpseo_canonical', '__return_false' );
これを同じくfunctions.phpに記載。
そして、どう追加するか?ですが、
重要なのは、ページ種類によってURLの書き方が異なる事でしょうか。
切り分け例
if(is_404()){
return;
}
//フロントページ
if (is_front_page() || is_home() ) {//--------o
$canonical_url = home_url('/');
}
//カテゴリーページ
else if (is_category()){
$cate = get_query_var('cat');
$canonical_url = get_category_link($cate);
}
//タグページ
elseif (is_tag()) {
$tag_id = get_query_var('tag_id');
$canonical_url = get_tag_link($tag_id);
}
//タクソノミーページ
elseif (is_tax()) {
$term = get_queried_object();
$canonical_url = get_term_link($term);
}
//固定・投稿ページ
elseif (is_page() || is_single()) {//--------o
$canonical_url = get_permalink();
}
//その他
else {
$canonical_url = null;
}
echo '<link rel="canonical" href="'.$canonical_url.'">';
まず、header.phpに書くかfunctions.phpに書くか?
それはお好みですが、header.phpの場合は<head>内のお好きなところに。
functions.php の場合は、
function rel_canonical_add() {
//ここに上記ソース
}
add_action( 'wp_head', 'rel_canonical_add', 99);
と言う感じですかね。
「切り分け例」の詳しい解説は割愛しますが、
例えば、カテゴリページの場合、その他のタクソノミーページの場合、「get_permalink()」だと、先頭の投稿のURLが返ってきちゃう。(でしたっけ?間違ってたらすみません。)
なので、それぞれのリストページのURLを書き出す方法も変わってきちゃいます。固定ページや詳細ページなどの場合はシンプルに「get_permalink()」で書けたりしますね。
この辺りが肝で、ここさえわかれば、あとは自分の思うままに。
今回の当方の場合はURLにパラメータの「?la=en」が付いている場合はCanonial URLにも「?la=en」を付けたいので、
$_GETで「en」を受け取っていたら、それぞれのURLに「?la=en」を追加する処理をすれば良い。
「echo」の前に
$lang = get_query_var('la');
if ( $canonical_url && $lang == 'en' ) $canonical_url.'?la=en';
と書いておけばOKかな。
ちなみにWPで get_query_var(); で独自のパラメータを取得する場合、ちゃんと定期しておかないと取得できなかったりします。それに関して詳しくは以下を参照してください。
以上。
もし将来同じことで悩んだ自分。。または、どこかの誰かのヒントに。
その他参考サイト
・WordPressでCanonical URLを設定する方法
・【WordPress】canonicalタグを出力する関数を作る