この記事は最後に更新してから1年以上経過しています。

5.5の新機能:XMLサイトマップの生成

説明

来月にリリースされるWordPress 5.5に向けてついにRC 1が公開がされました。新機能であるXMLサイトマップについて「WordPress 5.5 RC 1(以降RC 1)」のソースコードを見ながら確認した。

はじめに、この記事は公開された5.5 RC 1をもとにしており、正式リリースの際に変更される可能性があることを予めお断りする。

生成されるXMLサイトマップ

5.5で組み込まれたXMLサイトマップを確認するため、まずはブラウザで「http://localhost/wp-sitemap.xml」を閲覧。表示されたのはXMLソースコードではなく、次のような内容だった。

ブラウザでwp-sitemap.xmlを閲覧

どんなソースコードなのか確認してみると、見た目はシンプルなXMLサイトマップだが(改行で整形)、「xml-stylesheet」の記述がある。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="http://localhost/wp-sitemap-index.xsl" ?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap><loc>http://localhost/wp-sitemap-posts-post-1.xml</loc></sitemap>
<sitemap><loc>http://localhost/wp-sitemap-posts-page-1.xml</loc></sitemap>
<sitemap><loc>http://localhost/wp-sitemap-taxonomies-category-1.xml</loc></sitemap>
<sitemap><loc>http://localhost/wp-sitemap-users-1.xml</loc></sitemap>
</sitemapindex>

ここで指定された「http://localhost/wp-sitemap-index.xsl」の内容を見てみると、先にブラウザに表示されたHTMLコードが含まれており、このファイルが適用されたことがわかる。

Webサーバーのディレクトリを確認してみると、wp-sitemap.xmlやwp-sitemap-index.xslファイルは存在せず、これらはWordPressが動的に生成されている。当然のことながら、wp-sitemap.xmlファイルが存在する場合はWebサーバーがその内容をレスポンスすることになり、結果的に5.5のXMLサイトマップ生成機能は有効に機能しない。

さて動的に生成されるwp-sitemap.xmlだが、これはwp-includes/sitemaps/class-wp-sitemaps.php(以降class-wp-sitemaps.php)内の add_rewrite_rule関数で設定されている。

add_rewrite_rule( '^wp-sitemap\.xml$', 'index.php?sitemap=index', 'top' );

ここではwp-sitemap.xmlのリクエストは「index.php?sitemap=index」へ書き換えられており、ブラウザで「http://localhost/index.php?sitemap=index」を閲覧しても同じXMLサイトマップが閲覧できた。このリライトルールを再設定すればXMLサイトマップのURLを変更できそうだが、時間に余裕ができれば検証してみたい。

XMLサイトマップの制御

稼働中のサイトの多くでは何らかのプラグインでXMLサイトマップを生成していると思われ、そんなサイトでは5.5のXMLサイトマップの生成機能をオフにしたいだろう。ここではいくつかある中の1つであるwp_sitemaps_enabledフィルターの活用を紹介する。

wp_sitemaps_enabledフィルターはclass-wp-sitemaps.php内で実行するフィルターで、以下のように記述されている(コメント部分をカット)。

$is_enabled = (bool) get_option( 'blog_public' );
return (bool) apply_filters( 'wp_sitemaps_enabled', $is_enabled );

パラメータ$is_enabledの値は「表示設定」-「検索エンジンでの表示」の「検索エンジンがサイトをインデックスしないようにする」がチェックされていない場合はtrueが、チェックされている場合はfalseになる。つまり検索エンジンがサイトをインデックスしないようにしている場合、標準ではXMLサイトマップは生成されず、アクセス時には404エラーとなる。

実際にXMLサイトマップを生成させたくない場合はテーマのfunctions.phpに次の記述を追加すればよい。

add_filter( 'wp_sitemaps_enabled', '__return_false' );

XMLサイトマップの生成機能について、5.5 RC1では設定画面は用意されていないが、さまざまフィルターで制御可能である。テストサーバーがあるなら「RC 1」で生成されるXMLサイトマップを確認し、生成そのものをオフにするか、生成される内容を調整するといった対応を検討しておきたい。

参考:Core Sitemaps – WordPress plugin | WordPress.org


最終更新 : 2020年08月12日 08:26


お勧め

the_author(2018年5月27日 更新)

string the_author( [ mixed $deprecated = '' [ , bool $deprecated_echo = true ] ] )
投稿者名をパラメータ$deprecated_echoがtrueならば表示する。$deprecated_echoがfalseの場合は表示せず、取得する。

human_readable_duration(2019年2月22日 更新)

string|false human_readable_duration( [ string $duration = '' ] )
持続時間を読みやすい書式に変換する。

get_header(2020年8月18日 更新)

void | false get_header( [ string $name = null [ , array $args = array() ] ] )
ヘッダパーツを記述したメインヘッダファイルheader.php(またはサブヘッダファイルheader-???.php)を読み込む。

the_post_thumbnail(2018年5月27日 更新)

void the_post_thumbnail( [ mixed $size = 'post-thumbnail' [ , mixed $attr = '' ] ] )
アイキャッチ画像(サムネイル)を表示する。

get_lastpostdate(2020年8月28日 更新)

string get_lastpostdate( [ string $timezone = 'server' [ , string $post_type = 'any' ] ] )
投稿記事の最終投稿日時を取得する。