個人的なメモです。
WordPressでContact Form 7を使用し、入力フォーム送信後にサンクスページを表示させる設定を行いました。
しかし、そのままだとサンクスページが検索エンジンにクロールされ、検索結果に表示されてしまいます。
そこで、サンクスページのみ検索エンジンにインデックスさせないように、noindex を追加する方法をメモしておきます。
WordPressの初期設定
WordPressは初期設定で、HTMLに次のようなタグが自動的に追加されます。
<meta name='robots' content='max-image-preview:large' />
このメタタグは、Google検索結果のスニペットに表示される画像のサムネイルサイズを指定するために使用されます。
WordPress 5.5以降、画像プレビューの設定を制御するために自動的に追加されるものです。
サンクスページにnoindexを追加する方法
サンクスページにnoindexを追加するためには、テーマのfunctions.phpファイルに次のコードを追加します。
// 特定のページにnoindexを追加し、max-image-preview:largeを削除 function custom_set_noindex_and_remove_image_preview( $robots ) { if ( is_page( 37 ) ) { // 例:ページIDが37のページ $robots['noindex'] = true; // noindex を追加 $robots['max-image-preview'] = false; } return $robots; } add_filter( 'wp_robots', 'custom_set_noindex_and_remove_image_preview' );
上記の例では、ページID*が37のサンクスページに対してnoindexを追加し、max-image-preview:largeを削除します。
※ ページIDは固定ページ一覧で、目的の記事タイトルにマウスカーソルを合わせるとブラウザの下にurlが表示されます。その中で「post=」に続く数字です。
インデックスしないで欲しい(noindex)と指定しているのに、max-image-preview:largeがあるのは矛盾しているため削除します(noindexが最後にあるなら削除しなくても問題ない?が気持ち的にね)。
投稿ページの場合は、is_pageをis_singleに変更し、次のように書きます。
if ( is_single( 37 ) ) { // 投稿IDを指定
また、IDではなくスラッグで指定したい場合は、スラッグを文字列で指定します。
if ( is_single( 'thank-you' ) ) { // スラッグを指定
※ 文字列はシングルコーテーション(‘)で囲む。
簡単に追加する方法
もし、上記のコードを使うのが少し面倒であれば、次のようにシンプルにwp_headアクションを使ってnoindexを追加する方法もあります。
function set_noindex() { if ( is_single( 316 ) ) { // 投稿IDを指定 echo '<meta name="robots" content="noindex" />'; } } add_action('wp_head', 'set_noindex');
この方法でも問題ないですが、前述のようにWordPressには最初からmeta name=’robots’が存在しているため、2つの<meta>タグが出力されてしまいます。
タグが重複しても機能的には問題ないはずですが、スッキリさせたい場合は、最初に紹介した方法(wp_robotsフィルターを使って既存のcontentに追加する方法)を選んだ方が無難です。
最後に
noindexを追加することで、サンクスページが検索エンジンにインデックスされなくなります。これにより、無駄に検索結果に表示されることを防ぎます。
ただし、サンクスページのURLを知っている人は直接アクセスできるため、アクセス解析でのサンクスページの訪問数が正確でない場合がある点に注意が必要です。
コメントをどうぞ