WordPressをhttps化(SSL接続)をしたときに、ページのcanonicalもhttps化しておく必要があります。通常は、サイトの一般設定を変更すれば修正されるはずですが、なぜか修正されない・・・そんな時には無理やりcanonicalをhttps化するしかありません。

そもそも canonicalとは?

和訳すると、「正典の、教会法に基づく、規準的な、標準的な」(形容詞)です(笑)

例えば、当ページで
【All in One SEO】の設定はこれで決定!検索上位サイトの設定内容を比較した このURLは

となっています。
ところが、何の設定もしないと

または

とかなども表示されてしまう場合があります。

あるいは、同一サイト上でも
◎ 新着情報にも本文の一部が表示される。(が本文ではない)
◎ 検索結果にも本文の一部が表示される。(上記と同一だが、本文ではない)

また、他サイトでも
◎ facebookにも本文の一部が表示される。
◎ Google+にも本文の一部が表示される。
◎ twitterにも本文の一部が表示される。
◎ RSSでパクられたサイトにも本文の一部(または全部)が表示される。

などの状況が発生することが考えられます。

こういった時に、「大元の文章はココであり、検索結果に本来表示するURLはこうだ」としておく必要があります。
この「正当性を保つ」のがcanonicalタグということになります。

つまり、類似するページや動的に生成されたページがある場合に「唯一絶対の存在」であり、検索結果に表示するURLを指し示すために使われます。

canonicalの設置方法

All in One SEOで設置する。

【All in One SEO】の設定はこれで決定!検索上位サイトの設定内容を比較したもご参照ください。

All in One SEOでcanonicalをチェックすると、内の上部にきちんと設置をしてくれます。

テーマが勝手に設置する

テーマによっては、勝手にcanonicalを設置します。
「賢威」などは、さすがです。下記のように、ほぼ先頭に配置してくれます。

ですのでテーマでcanonicalを設置している場合は、重複しないようにします。

header.phpに自分で設置する

もともとテーマで設置されているcanonicalを削除してから・・・という場合は、

これをfunctions.phpに記載しておきます。

その上で、下記のコードをheader.phpのなるべく上部に記載します。

強制的に・・無理やりhttps化する

サイト全体をhttps化させて、一般設定も下記のようにhttpsにして保存しておくと、それまでのcanonicalも基本的にはhttps化されます。

テスト的にcanonicalだけhttpにしておきたいとか、なぜかわからないがhttpのままなので、httpsにしたいという場合は、functions.phpに下記のように記載します。

最後のstr_replace で文字の入れ替えをしていますので、httpに統合したい時は逆になります。