🕌

【Wordperss】canonicalのタグを独自で設定する

2022/08/03に公開

概要

wordpressでサイトを制作する場合に、SEOプラグインとしてYoast SEOなどを利用するかと思う。
今回のリニューアルでWordpressの環境はAWS lightsailという環境でまずはIPアドレスでの環境を提供していただいた。
その後、ネームサーバーと紐づけた後にサイトでcanonicalを確認したのだが、これがなぜかIPアドレスのまま。

一応、YoastSEOで「SEOの構造に変化があったため・・・」といった項目が表示されたので更新をしたのだが、それでもなぜかIPアドレスのままなので独自でcanonicalを設定することにしました。

今回やりたい事

今回はcanonicalがIPアドレスで出力されたままなので、これをちゃんとしたドメインで表示させるようにします。

<!-- IPアドレスのままなのでダメ -->
 <link rel="canonical" href="https://179.34.32.34" />

<!-- URLにする(test.co.jpはダミー)-->
 <link rel="canonical" href="https://www.test.co.jp/" />

Yoast SEOで出力されるcanonicalを非表示

まずはYoast SEOで自動的に出力されるcanonicalのタグを非表示にする必要があります。
こちらはYoaset SEOのプラグインでいろいろなAPI Documentationがありカスタマイズができます。
https://developer.yoast.com/features/seo-tags/canonical-urls/api/

今回はwpseo_canonicalというAPIがあるのでこちらをadd_filterで処理します。

functions.php
add_filter('wpseo_canonical','__return_false');

__return_falseとしてあげることで、canonicalのタグが表示されなくなります。

こちらは下記のサイトが参考になりました。
https://nankuma.jp/contents/tech_info/381/

canonicalのタグを独自で設定する

現在のURLを取得する関数を作成

Yoast SEOで出力されるcanonicalを非表示にしたら、今度は独自でURLを取得する関数をfunctions.phpに書きます。

functions.php
/* 下記の関数で独自でcanonicalを設定(header.php)  */
function get_current_link() {
return (is_ssl() ? 'https' : 'http') . '://www.test.co.jp'. $_SERVER["REQUEST_URI"];
}

URLを取得してそれをreturnで返してあげる。

ヘッダー部分から関数を呼び出す

functions.phpでURLを取得する関数を書いたら、今度はheade.phpからこの関数を呼び出す。

header.php
<link rel="canonical" href="<?php echo get_current_link(); ?>" />

上記のようにget_current_link()でURLを取得したら、それをechoで出力してあげる。
これで問題なくcaconicalのURLが正常になりました。

番外編:og:urlの設定

canonical以外にもmetaタグの「og:url」もIPアドレスのままだったのだが、やり方は一緒です。

<meta property="og:url" content="https://179.34.32.34" />

上記のようにIPアドレスが出力されていたが、wpseo_opengraph_urlというAPIが用意されているのでこちらをadd_filterで同様に処理する。

functions.php
function my_ogp_url($url){
  
  $pattern = 'https://179.34.32.34';
 if(strstr($url, $pattern)){
    return (is_ssl() ? 'https' : 'http') . '://www.test.co.jp'. $_SERVER["REQUEST_URI"];
    }
   return $url;
}

add_filter('wpseo_opengraph_url','my_ogp_url');

wpseo_opengraph_urlは引数でURLを取得できる。
このURLとあらかじめ用意したIPアドレスのパターン($pattern)をstrstrを使って、含まれてるかチェックしてる。(ただstrstrでいいのかどうか。ちゃんと正規表現を使ったほうがいいのかも)

trueが成立した場合は書き換えたURLをreturnで返してあげて、falseの場合はそのままURLを返している。

まとめ

ほんとはYoast SEOで出力されるcanonicalのURLがIPアドレスでなければ、わざわざこんな処理する必要はないのだが、、、ただYoast SEOはいろいろカスタマイズができると知ったので良しとする。

Discussion