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_taxonomies_query_args', function ($args){ if (isset($args['taxonomy'])) { if ($args['taxonomy'] == 'category') { //除外するカテゴリーIDを指定する $args['exclude'] = array(123, 456, 789); } if ($args['taxonomy'] == 'post_tag') { //除外するタグIDを指定する $args['exclude'] = array(11, 22, 33); } } return $args; });
サイトマップのカテゴリー・タグページを変更するためのフック(wp_sitemaps_taxonomies_query_args)は、こんな感じで指定されています。
この記事を執筆時の場所はこちら。
ここで変更した$args配列からWP_Term_Queryでデータベースにクエリを発行することで、出力を制御します。
今回は、WP_Term_Queryに設定する$args配列に除外IDを指定することで、サイトマップに出力しないようにしています。
除外設定以外にも$args配列を変更することで、ある程度自由にサイトマップ出力を制御することが可能です。
WP_Term_Query関数を利用するものなので、この関数を使ったことがあれば、問題なく利用できるかと思います。WP_Queryと同じような使い方です。
詳しくは、以下を参照してください。
参考 WP_Term_Query | Class | WordPress Developer Resources
参考 WP_Term_Query::__construct() | Method | WordPress Developer Resources
除外する投稿IDを指定する
あとは、コピペしたコードの中の以下の「カテゴリー・タグID」を変更するだけです。
if ($args['taxonomy'] == 'category') { //除外するカテゴリーIDを指定する $args['exclude'] = array(123, 456, 789); } if ($args['taxonomy'] == 'post_tag') { //除外するタグIDを指定する $args['exclude'] = array(11, 22, 33); }
カテゴリーID、タグIDそれぞれは、配列形式で指定します。
カテゴリーIDの取得方法
「カテゴリーID」を取得するには、カテゴリーページ編集画面のアドレスにあるtag_IDの値を取得してください。
カテゴリーのIDであっても、tag_IDの値になります。
タグIDの取得
「タグID」を取得するには、タグページ編集画面のアドレスにあるtag_IDの値を取得してください。
カテゴリーであっても、タグであってもtag_IDの値を取得します。
まとめ
今回のカスタマイズは、わざわざカスタマイズしたとしても、SEOに与える影響はほぼほぼないのではと推測します。
なので、「カテゴリがnoindexになっているんだから、サイトマップにも出力したくない」といったように、厳密に指定したい場合向けかもしれません。
ただ、クエリの指定方法によっては、様々な出力にできることから応用すれば、ある程度自由なサイトマップ出力は果たせるかと思います。