WordPress標準のサイトマップをカスタマイズする方法

作成日:

WordPress 5.5から標準でサイトマップXMLファイルを出力出来るようになり、別途プラグインをインストールする必要がなくなりました。せっかくなので出力されるサイトマップxmlファイルをカスタマイズしてみようと思います。

さぁ、
いってみよう。

投稿のカスタマイズ

まずは投稿のサイトマップにURLだけでなく更新日と優先度を追加してみます。
優先度は更新日が今現在から1週間以内の投稿のみ「1.0」として、それ以外は「0.5」にしてみます。SEO効果があるかは不明ですが。

PHP
function add_sitemaps_posts_entry( $entry, $post ) {
	// 更新日の追加.
	$date             = $post->post_modified;
	$entry['lastmod'] = $date;
	// 投稿後1週間の投稿のみpriorityを1.0に.
	if ( strtotime( $date ) > strtotime( '-7 day' ) ) {
		$entry['priority'] = '1.0';
	} else {
		$entry['priority'] = '0.5';
	}
	return $entry;
}
add_filter( 'wp_sitemaps_posts_entry', 'add_sitemaps_posts_entry', 10, 2 );

投稿の除外

サイトマップには公開状態が「公開(publish)」の投稿がリストアップされます。もしテーマで例えばパスワード保護をしている投稿や別途プラグインなどでnoindex設定をしているのであれば、それらの投稿をサイトマップから除外します。

PHP
function exclude_sitemaps_posts_query_args( $args, $post_type ) {
	// 特定の投稿IDを指定して除く
	$args['post__not_in'] = array( 1, 2, 3 );
	// パスワード保護を除く
	$args['has_password'] = false;
	return $args;
};
add_filter( 'wp_sitemaps_posts_query_args', 'exclude_sitemaps_posts_query_args', 10, 2 );

投稿タイプの除外

今のところ使う予定は無いですが、投稿タイプ自体をサイトマップから除外してみます。

PHP
function remove_post_type_from_wp_sitemap( $post_types ) {
	unset( $post_types[ 'page' ] );
	return $post_types;
}
add_filter( 'wp_sitemaps_post_types', 'remove_post_type_from_wp_sitemap', 10, 2 );

タクソノミーの除外

カテゴリーやタグ自体をサイトマップから除外します。ここでは普段使わないけれど標準で入っている「post_format」を除外します。

PHP
function remove_tax_from_sitemap( $taxonomies ) {
	unset( $taxonomies['post_format'] );
	return $taxonomies;
}
add_filter( 'wp_sitemaps_taxonomies', 'remove_tax_from_sitemap', 10, 2 );

投稿者の除外

投稿者アーカイブページを必要としない場合は個別のユーザーではなく、ユーザー全体を除外します。

PHP
function remove_user_sitemap_provider( $provider, $name ) {
	if ( 'users' === $name ) {
		return false;
	}
	return $provider;
}
add_filter( 'wp_sitemaps_add_provider', 'remove_user_sitemap_provider', 10, 2 );
物草 灸太郎
物草 灸太郎

WordPressでホームページを制作しつつ、休日は畑を耕したりDIYを楽しんでいます。

コメントをどうぞ

※ メールアドレスが公開されることはありません。