WordPressでパラメータ付きのURLがインデックスされないときの対処法

ワードプレスを運用している際に、URLにパラメータを渡すことでページを出し分けすることがあります。

例えば、カテゴリーのアーカイブページとは別に、カテゴリー毎に人気の10件を表示するページを作るときに「rank」という固定ページを作って「https://hogehoge.com/rank?cat=123」こんなURLを用意したり。


?cat=123の部分がパラメーターです。


ページを作ったはいいけど、このページだけGoogleの検索結果に出ない。インデックスされない。
なぜ?


そんな時に確認してほしいのが、canonicalタグ。

なぜWordPressでパラメータ付きのURLだとインデックスされないのか

ページのソースを見たときに、<link rel="canonical" href="https://hogehoge.com/rank">こんなタグが入っていませんか?

canonicalタグの詳細はここでは割愛します。下記ページ等をご覧ください。



簡単に言うと、検索エンジンにこのページのURLを伝えるためのタグです。
canonicalタグで設定したURLがGoogleなどの検索エンジンに登録されるURLになります。

<link rel="canonical" href="https://hogehoge.com/rank?cat=123">
つまり、こうなってないとダメだよ、ということです。

WordPressでは自動でcanonicalタグを挿入してくれるのですが、これの対象となるのが記事ページや固定ページなど、ワードプレスで作成したページのみになります。


この場合、?cat=123のパラメータは独自で勝手につけているだけなので、「rank」という固定ページしか認識されず、
「https://hogehoge.com/rank?cat=123」でも「https://hogehoge.com/rank?cat=456」でも<link rel="canonical" href="https://hogehoge.com/rank">のコードが挿入されます。

パラメータ付きのURLでもインデックスさせる方法

まずはWordPressが自動で挿入してくれてるcanonicalタグを削除しましょう。
テーマ内のfunction.phpに下記の1行を追加してください。

remove_action('wp_head', 'rel_canonical');

次に、header.phpの<head>~</head>内に新しく独自のcanonicalタグを追加。

<link rel="canonical" href="<?php echo 'https://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; ?>">

サイトのSSLが非対応でしたら、'https://'の部分は'http://'に変更してください。

これで<link rel="canonical" href="https://hogehoge.com/rank?cat=123">になってるはずなので、ページのソースを確認してみてください。




あとは、重複ページ等があれば、is_page()などで分岐しながら調整してみてください。