WordPressのsitemap.xml ~XMLサイトマップの出力と注意点など~
Index
― 目次 ―「XMLサイトマップ」とは?
「XMLサイトマップ」とは、Webサイト上のページや動画などのファイルについての情報、各ファイルの関係を伝えるための案内図的な役割を果たすファイルのことを言います。Googleなどの検索エンジンは、このファイルを読み込み、効率的にクロールを行うことで検索結果への反映も早くなり、上位表示につながるといった仕組みになっています。
「XMLサイトマップ」は、Webサイト内の重要なページとファイルを検索エンジンに伝えるだけではなく、重要なファイルについての情報(例えば、ページの最終更新日や全ての代替言語ページなど)も提供しています。
「サイトマップ」については、developers.google.comの「サイトマップについて」が参考になりますので、是非ご覧ください。
WordPressでのXMLサイトマップ出力について
WordPressには、バージョン5.5からXMLサイトマップを出力する機能が標準で搭載されています。
標準搭載されたXMLサイトマップは、バージョン5.5から自動で有効になっており「ドメイン/wp-sitemap.xml」で表示されます。
このwp-sitemap.xmlには、サイトマップのインデックスが表示されます(※固定ページ、投稿ページ、投稿者ページなどの種別ごとに分割されたリンクが表示され、リンクをクリックすると種別ごとのリンク一覧が表示されるようになっています)。
では、このバージョン5.5から実装されたXMLサイトマップで事足りるのか?というとそうではありません。
- 更新日時を通知することができない
- 一般的なsitemap.xmlではなく、wp-sitemap.xmlというファイルを生成する
- 登録したくないページもサイトマップに出力されてしまう(※サイトマップに不要なページを除外できない)
- 投稿者アーカイブでユーザー名が表示されてしまう(※author.phpを使っていなくても、リダイレクトにより404のURLにユーザー名が表示されてしまう)
これらの理由から、あまりWordPress標準搭載のXMLサイトマップを使いたいとは思えませんね。
そこで、投稿者アーカイブのセキュリティ対策は「functions.php」で対応し、XMLサイトマップ出力は「XML Sitemap & Google News」プラグインを導入する手順をご紹介します。
投稿者アーカイブのセキュリティ対策
WordPressでは、投稿者アーカイブのURLにユーザー名が使用されています。
管理画面にログインする際にも使用されるユーザー名がURL上に表示されてしまうわけです。セキュリティ面ではよくありません…。
ユーザー名が表示されるパターン
- 投稿者アーカイブへのリダイレクト時にURLにユーザー名が表示されてしまう
これは「投稿者アーカイブを使用していなくても、リダイレクト時にユーザー名が表示されてしまう」といった意味合いです。
以下にアクセスしてみてください。
・ドメイン/?author=1
※数字の「1」はユーザーIDを表しており、「1」は初めに作成したadmin userですので一番狙われ易いです
↓
・ドメイン/author/admin user名/
※404にリダイレクされ、ユーザー名が表示されてしまう - WordPress標準搭載のXMLサイトマップには、投稿者アーカイブが含まれているためユーザー名が表示されてしまう
以下にアクセスしてみてください。
・ドメイン/wp-sitemap-users-1.xml
※ドメイン/wp-sitemap.xmlでもリンクを辿ればユーザー名が表示されてしまいます - WordPressのREST APIでユーザー名が表示されてしまう
上記とは少し異なりますが、REST APIを経由しユーザー名の一覧が表示されてしまいます。
以下にアクセスしてみてください。
・ドメイン/wp-json/wp/v2/users
・ドメイン/?rest_route=/wp/v2/users
※JSON形式の表示からユーザー名が分かってしまいます
そこで、上記の1~3の対策をfunctions.phpで施していきます(※下記が参考ソース)。
1 2 3 4 5 6 7 8 9 |
// ドメイン/?author=Xの無効化 function disable_author_archive_query() { if( preg_match('/author=([0-9]*)/i', $_SERVER['QUERY_STRING']) && !preg_match('/post_author=/i', $_SERVER['QUERY_STRING']) ){ wp_redirect( home_url() ); exit; } } add_action('init', 'disable_author_archive_query'); |
3行目が「パラメーターauthorの使用不可」という内容(※author=Xが含まれており、post_authorが含まれていない場合)。
5行目は「条件に合致する場合、TOPページにリダイレクト」です。
1つ注意する点としては、こちらの対策は「投稿者アーカイブを使用していない場合(author.phpを使用していない場合)、リダイレクトの404のアドレスに表示されるユーザー名を見せない」といった対策です。投稿者アーカイブを使用している場合(author.phpを使用している場合)、アーカイブそのものを無効化することはできませんので、その場合、投稿者アーカイブのユーザー名をユーザーID(ユーザー番号)に変更できるプラグイン「Edit Author Slug」をご利用ください。
1 2 3 4 5 |
// WordPress標準のXMLサイトマップ機能の無効化 add_filter( 'wp_sitemaps_enabled', '__return_false' ); // XMLサイトマップ機能自体を無効化 remove_action( 'init', 'wp_sitemaps_get_server' ); |
2行目が「WordPress標準のXMLサイトマップ機能を無効化」という内容。
5行目が「XMLサイトマップ機能自体を無効化」という内容です。
「XMLサイトマップ機能自体を無効化」というのはどういうことかというと、2行目の記述でWordPress標準のXMLサイトマップ機能を無効化すると、XMLサイトマップは表示されなくなりますが、XMLサイトマップ機能自体は有効のままです。そのため、こちらも追記しておきましょう。
後程「XML Sitemap & Google Newsプラグインについて」の項目で説明しますが、プラグインを導入しXMLサイトマップを導入する場合、プラグイン側でWordPress標準のXMLサイトマップ機能は無効化できますので、こちらの記述は不要です(※コメントアウトするか、削除しましょう)。
1 2 3 4 5 6 7 8 9 10 |
// WordPress REST APIの不要なエンドポイントを削除 add_filter('rest_endpoints', function ($endpoints) { if ( isset( $endpoints['/wp/v2/users'] ) ) { unset( $endpoints['/wp/v2/users'] ); } if ( isset( $endpoints['/wp/v2/users/(?P[\d]+)'] ) ) { unset( $endpoints['/wp/v2/users/(?P[\d]+)'] ); } return $endpoints; }); |
・ドメイン/wp-json/wp/v2/users
・ドメイン/?rest_route=/wp/v2/users
にアクセスすると表示されるJSON形式の表示からユーザー名を隠すことができます(※ユーザー一覧を取得しようとすると404を表示します→”status”:404と表示されます)。
「XML Sitemap & Google News」プラグインについて
次は、WordPressでXMLサイトマップを自動で出力してくれるプラグインの導入です。
有名なプラグインとしては「XML Sitemap Generator for Google」がありますが、「バージョンアップの際に不具合が発生し、サイトマップの中身が空で出力される」といった現象が何度か起こっているようです。機能も充実していて、私も以前は利用していましたが、今回は「プラグインで急遽発生する不具合」を極力回避したいので、機能的にシンプル、かつ必要な条件をあらかた満たしている「XML Sitemap & Google News」を利用します。概ねできることは以下となります。
- 投稿ページのサイトマップ出力が可能
- 固定ページのサイトマップ出力が可能
- カテゴリーアーカイブのサイトマップ出力が可能
- タグアーカイブのサイトマップ出力が可能
- 投稿者アーカイブのサイトマップ出力が可能
- 出力可能なサイトマップに優先度(Priority)を付けられる
- サイトマップに最終更新日(lastmod)が出力できる
- 投稿ページと固定ページは、サイトマップから除外したい記事やページを設定できる
- カテゴリーアーカイブのサイトマップ出力を無効にできる
- 投稿者アーカイブのサイトマップ出力を無効にできる
XML Sitemap & Google Newsプラグインをインストールし有効化したら、WordPressとXML Sitemap & Google Newsプラグインの設定をしていきます。
[補足]
WordPressの管理画面のメニューより、[設定] → [表示設定]を選択します。
①検索エンジンでの表示の「検索エンジンがサイトをインデックスしないようにする」のチェックを外します
②XMLサイトマップを有効化の「XMLサイトマップインデックス」にチェックを入れます
↓
チェック内容を確認し、一番下に表示されている[変更を保存]ボタンを押します。
※説明を省略している項目は、そのまま(もしくは任意でチェック・選択)で構いません。
[補足]
WordPressの管理画面のメニューより、[設定] → [XML サイトマップ]を選択し、タブメニューの[一般]を選択します。
①サーバーの「プラグイン」を選択します
②無効化の「投稿者」にチェックを入れます
※投稿者アーカイブのセキュリティ対策として、投稿者ページを無効化します
[注意点]
「投稿者アーカイブのセキュリティ対策」の箇所でも少し触れましたが、こちらにチェックを入れると、WordPress標準のXMLサイトマップ機能は無効化されますので、functions.phpに記述した「2.WordPress標準のXMLサイトマップ機能を無効化・機能自体を無効化」は不要になります。こちらの記述は、コメントアウトするか、削除しておきましょう。
↓
チェック・選択内容を確認し、一番下に表示されている[変更を保存]ボタンを押します。
※説明を省略している項目は、そのまま(もしくは任意でチェック・選択)で構いません。
[補足]
タブメニューの[投稿タイプ]を選択します。
①サイトマップに投稿ページを含める場合、投稿の「投稿を含める」にチェックします
②投稿の「分割単位」より、サイトマップの分割方法を選択します
※投稿頻度が高ければ「月」を選択します
③投稿の「優先度」より、優先度を選択します
※重要度が高いほど数値を上げます
④サイトマップに固定ページを含める場合、固定ページの「固定ページを含める」にチェックします
⑤固定ページの「優先度」より、優先度を選択します
※重要度が高いほど数値を上げます
↓
チェック・選択内容を確認し、一番下に表示されている[変更を保存]ボタンを押します。
※説明を省略している項目は、そのまま(もしくは任意でチェック・選択)で構いません。
[補足]
タブメニューの[タクソノミー]を選択します。
①一般の「優先度」を選択します
※重要度が高いほど数値を上げます
②タクソノミーの「カテゴリー」にチェックします
※サイトマップにカテゴリーアーカイブが含まれます
③タクソノミーの「タグ」にチェックします
※サイトマップにタグアーカイブが含まれます
↓
チェック・選択内容を確認し、一番下に表示されている[変更を保存]ボタンを押します。
※説明を省略している項目は、そのまま(もしくは任意でチェック・選択)で構いません。
[補足]
タブメニューの[高度な設定]を選択します。
①XML SitemapのURLの「サイトマップのURL」を確認します
※Google Search Console(グーグルサーチコンソール)のサイトマップの送信などに必要です
※「サイトマップインデックスの別名」を指定する場合、XML Sitemap Advancedが必要です(sitemap.xmlのままで問題ありません)
↓
内容を確認し、設定画面を閉じます。
※「XML Sitemap Advanced」を利用し「サイトマップインデックスの別名を指定」する場合は、一番下に表示されている[変更を保存]ボタンを押します。
※説明を省略している項目は、そのまま(もしくは任意でチェック・選択)で構いません。
[補足]
記事やページごとに優先度を決めたい場合やサイトマップに含めたくないページがある場合、投稿・固定ページの編集画面に移動してください。
①記事やページごとに優先度を決めたい場合、優先度に数値を入力します
※入力しない場合、上記の投稿タイプやタクソノミーで設定した数値が設定されます
②サイトマップに含めたくないページがある場合、[XML サイトマップに含めない]にチェックします
↓
チェック・入力内容を確認し、[更新]ボタンなどを押し保存します。
※記事が公開されていないと、チェック・入力はできません
これで、ひと通り完了です。
あとは、「Google Search Console(グーグルサーチコンソール)」にも忘れずに登録し、サイトマップを送信しておきましょう。
今回は、WordPressで導入するXMLサイトマップの自動出力とセキュリティなどを含めた注意点についてご紹介しました。
手動で対応するのも大変ですし、プラグインで急遽発生する不具合も困ってしまいます。そこで、WrdPressでXMLサイトマップを準備するにあたって、極力手間はかけず、セキュリティ面にも配慮した対応についてのTipsです。