
WordPress5.5から標準機能でサイトマップが利用できるようになりました。
以下のURLにアクセスすれば標準でXMLサイトマップが出力されます。
https://ドメイン/wp-sitemap.xml
パーマリンクが「基本」の場合はこちら。
https://ドメイン/index.php?sitemap=index
コアファイルを見てみると、サイトマップ出力もフィルターフックである程度制御出来るようになっていました。
ですので「サイトマップにnoindexにしたい投稿・固定ページを出力しない」なんて処理を加えることができます。
以下でその方法を説明します。
目次
主な手順
サイトマップから、特定の「投稿・固定ページ」を出力しない処理を追加するには、以下の手順を行います。
- functions.php等にコードをコピペ
- 除外する投稿IDを指定する
基本的に、コードをコピペして除外したいIDを追加するだけです。
functions.php等にコードをコピペ
まずテーマでカスタマイズする場合は、子テーマのfunctions.phpに以下のコードをコピペしてください。
//サイトマップから投稿・固定ページを除外する
add_filter('wp_sitemaps_posts_query_args', function ($args){
$args['post__not_in'] = array(1, 125, 351);//投稿IDを配列で記入する
return $args;
});
サイトマップの投稿・固定ページを変更するためのフック(wp_sitemaps_posts_query_args)は、こんな感じで指定されています。
この記事を執筆時の場所はこちら。
ここで変更した$args配列からWP_Queryでデータベースにクエリを発行することで、出力を制御します。
今回は、WP_Queryに設定する$args配列に除外IDを指定することで、サイトマップに出力しないようにしています。
除外設定以外にも$args配列を変更することで、ある程度自由にサイトマップ出力を制御することが可能です。
WP_Query関数を利用するものなので、この関数を使ったことがあれば、問題なく利用できるかと思います。
詳しくは、以下を参照してください。
参考 関数リファレンス/WP Query – WordPress Codex 日本語版
除外する投稿IDを指定する
あとは、コピペしたコードの中の以下の「投稿・固定ページID」を変更するだけです。
$args['post__not_in'] = array(1, 125, 351);//投稿IDを配列で記入する
配列形式で指定します。
「投稿・固定ページID」を取得するには、投稿・固定ページ編集画面のアドレスにあるpostの値を取得してください。
まとめ
こんな感じでWordPress5.5からは、標準でサイトマップ機能が追加され、カスタマイズである程度変更できるようになっているようです。
投稿・固定ページをnoindexにしたい場合は、ページ内にnoindexタグさえ入っていれば、サイトマップ対応せずとも、Google側が反映してくれるとは思います。
ただ、noindex目的以外でも「どうしてもサイトマップの投稿出力を変更したい」なんて場合は、ある程度自由がきくので、今回の方法で変更できるかと思います。
