h-ash design works|アッシュデザインワークス

WordPressのsitemap.xml ~XMLサイトマップの出力と注意点など~

WordPressのsitemap.xml

今回、当サイトで「WordPressのsitemap.xml」を準備したのですが、プラグインの対応状況の問題(プラグインの種類によっては、アップグレードすると不具合が発生するなど)、投稿者アーカイブのセキュリティ的な問題(ブラウザを通してユーザー名が表示されてしまうなど)があったりします。
手動で対応するのも大変ですし、プラグインで急遽発生する不具合も困ってしまいます。そこで、WrdPressでXMLサイトマップを準備するにあたって、極力手間はかけず、セキュリティ面にも配慮した対応についてのTipsです。

Index

― 目次 ―

「XMLサイトマップ」とは?

「XMLサイトマップ」とは、Webサイト上のページや動画などのファイルについての情報、各ファイルの関係を伝えるための案内図的な役割を果たすファイルのことを言います。Googleなどの検索エンジンは、このファイルを読み込み、効率的にクロールを行うことで検索結果への反映も早くなり、上位表示につながるといった仕組みになっています。
「XMLサイトマップ」は、Webサイト内の重要なページとファイルを検索エンジンに伝えるだけではなく、重要なファイルについての情報(例えば、ページの最終更新日や全ての代替言語ページなど)も提供しています。

― §参考サイト ―
「サイトマップ」については、developers.google.comの「サイトマップについて」が参考になりますので、是非ご覧ください。

WordPressでのXMLサイトマップ出力について

WordPress標準搭載のXMLサイトマップ

WordPressには、バージョン5.5からXMLサイトマップを出力する機能が標準で搭載されています。
標準搭載されたXMLサイトマップは、バージョン5.5から自動で有効になっており「ドメイン/wp-sitemap.xml」で表示されます。
このwp-sitemap.xmlには、サイトマップのインデックスが表示されます(固定ページ、投稿ページ、投稿者ページなどの種別ごとに分割されたリンクが表示され、リンクをクリックすると種別ごとのリンク一覧が表示されるようになっています)。
では、このバージョン5.5から実装されたXMLサイトマップで事足りるのか?というとそうではありません。

WordPress標準搭載のXMLサイトマップのデメリット
  • 更新日時を通知することができない
  • 一般的なsitemap.xmlではなく、wp-sitemap.xmlというファイルを生成する
  • 登録したくないページもサイトマップに出力されてしまう(サイトマップに不要なページを除外できない)
  • 投稿者アーカイブでユーザー名が表示されてしまう(author.phpを使っていなくても、リダイレクトにより404のURLにユーザー名が表示されてしまう)

これらの理由から、あまりWordPress標準搭載のXMLサイトマップを使いたいとは思えませんね。
そこで、投稿者アーカイブのセキュリティ対策は「functions.php」で対応し、XMLサイトマップ出力は「XML Sitemap & Google News」プラグインを導入する手順をご紹介します。

投稿者アーカイブのセキュリティ対策

WordPressでは、投稿者アーカイブのURLにユーザー名が使用されています。
管理画面にログインする際にも使用されるユーザー名がURL上に表示されてしまうわけです。セキュリティ面ではよくありません…。

ユーザー名が表示されるパターン

  1. 投稿者アーカイブへのリダイレクト時にURLにユーザー名が表示されてしまう
    これは「投稿者アーカイブを使用していなくても、リダイレクト時にユーザー名が表示されてしまう」といった意味合いです。
    以下にアクセスしてみてください。
    ・ドメイン/?author=1
    数字の「1」はユーザーIDを表しており、「1」は初めに作成したadmin userですので一番狙われ易いです

    ・ドメイン/author/admin user名/
    404にリダイレクされ、ユーザー名が表示されてしまう
  2. WordPress標準搭載のXMLサイトマップには、投稿者アーカイブが含まれているためユーザー名が表示されてしまう
    以下にアクセスしてみてください。
    ・ドメイン/wp-sitemap-users-1.xml
    ドメイン/wp-sitemap.xmlでもリンクを辿ればユーザー名が表示されてしまいます
  3. WordPressのREST APIでユーザー名が表示されてしまう
    上記とは少し異なりますが、REST APIを経由しユーザー名の一覧が表示されてしまいます。
    以下にアクセスしてみてください。
    ・ドメイン/wp-json/wp/v2/users
    ・ドメイン/?rest_route=/wp/v2/users
    JSON形式の表示からユーザー名が分かってしまいます

そこで、上記の1~3の対策をfunctions.phpで施していきます(下記が参考ソース)。

[補足]
3行目が「パラメーターauthorの使用不可」という内容(author=Xが含まれており、post_authorが含まれていない場合)。
5行目は「条件に合致する場合、TOPページにリダイレクト」です。
1つ注意する点としては、こちらの対策は「投稿者アーカイブを使用していない場合(author.phpを使用していない場合)、リダイレクトの404のアドレスに表示されるユーザー名を見せない」といった対策です。投稿者アーカイブを使用している場合(author.phpを使用している場合)、アーカイブそのものを無効化することはできませんので、その場合、投稿者アーカイブのユーザー名をユーザーID(ユーザー番号)に変更できるプラグイン「Edit Author Slug」をご利用ください
[補足]
2行目が「WordPress標準のXMLサイトマップ機能を無効化」という内容。
5行目が「XMLサイトマップ機能自体を無効化」という内容です。
「XMLサイトマップ機能自体を無効化」というのはどういうことかというと、2行目の記述でWordPress標準のXMLサイトマップ機能を無効化すると、XMLサイトマップは表示されなくなりますが、XMLサイトマップ機能自体は有効のままです。そのため、こちらも追記しておきましょう。
後程「XML Sitemap & Google Newsプラグインについて」の項目で説明しますが、プラグインを導入しXMLサイトマップを導入する場合、プラグイン側でWordPress標準のXMLサイトマップ機能は無効化できますので、こちらの記述は不要です(コメントアウトするか、削除しましょう)。
[補足]
・ドメイン/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」を利用します。概ねできることは以下となります。

XML Sitemap & Google Newsプラグインでできること
  • 投稿ページのサイトマップ出力が可能
  • 固定ページのサイトマップ出力が可能
  • カテゴリーアーカイブのサイトマップ出力が可能
  • タグアーカイブのサイトマップ出力が可能
  • 投稿者アーカイブのサイトマップ出力が可能
  • 出力可能なサイトマップに優先度(Priority)を付けられる
  • サイトマップに最終更新日(lastmod)が出力できる
  • 投稿ページと固定ページは、サイトマップから除外したい記事やページを設定できる
  • カテゴリーアーカイブのサイトマップ出力を無効にできる
  • 投稿者アーカイブのサイトマップ出力を無効にできる

XML Sitemap & Google Newsプラグインをインストールし有効化したら、WordPressとXML Sitemap & Google Newsプラグインの設定をしていきます。

1.WordPressの表示設定
表示設定

[補足]
WordPressの管理画面のメニューより、[設定] → [表示設定]を選択します。
①検索エンジンでの表示の「検索エンジンがサイトをインデックスしないようにする」のチェックを外します
②XMLサイトマップを有効化の「XMLサイトマップインデックス」にチェックを入れます

チェック内容を確認し、一番下に表示されている[変更を保存]ボタンを押します。
説明を省略している項目は、そのまま(もしくは任意でチェック・選択)で構いません。

2.XML Sitemap & Google Newsプラグインの一般設定
一般設定

[補足]
WordPressの管理画面のメニューより、[設定] → [XML サイトマップ]を選択し、タブメニューの[一般]を選択します。
①サーバーの「プラグイン」を選択します
②無効化の「投稿者」にチェックを入れます
投稿者アーカイブのセキュリティ対策として、投稿者ページを無効化します
[注意点]
「投稿者アーカイブのセキュリティ対策」の箇所でも少し触れましたが、こちらにチェックを入れると、WordPress標準のXMLサイトマップ機能は無効化されますので、functions.phpに記述した「2.WordPress標準のXMLサイトマップ機能を無効化・機能自体を無効化」は不要になります。こちらの記述は、コメントアウトするか、削除しておきましょう。

チェック・選択内容を確認し、一番下に表示されている[変更を保存]ボタンを押します。
説明を省略している項目は、そのまま(もしくは任意でチェック・選択)で構いません。

3.XML Sitemap & Google Newsプラグインの投稿タイプ設定
投稿タイプ設定

[補足]
タブメニューの[投稿タイプ]を選択します。
①サイトマップに投稿ページを含める場合、投稿の「投稿を含める」にチェックします
②投稿の「分割単位」より、サイトマップの分割方法を選択します
投稿頻度が高ければ「月」を選択します
③投稿の「優先度」より、優先度を選択します
重要度が高いほど数値を上げます
④サイトマップに固定ページを含める場合、固定ページの「固定ページを含める」にチェックします
⑤固定ページの「優先度」より、優先度を選択します
重要度が高いほど数値を上げます

チェック・選択内容を確認し、一番下に表示されている[変更を保存]ボタンを押します。
説明を省略している項目は、そのまま(もしくは任意でチェック・選択)で構いません。

4.XML Sitemap & Google Newsプラグインのタクソノミー設定
タクソノミー設定

[補足]
タブメニューの[タクソノミー]を選択します。
①一般の「優先度」を選択します
重要度が高いほど数値を上げます
②タクソノミーの「カテゴリー」にチェックします
サイトマップにカテゴリーアーカイブが含まれます
③タクソノミーの「タグ」にチェックします
サイトマップにタグアーカイブが含まれます

チェック・選択内容を確認し、一番下に表示されている[変更を保存]ボタンを押します。
説明を省略している項目は、そのまま(もしくは任意でチェック・選択)で構いません。

5.XML Sitemap & Google Newsプラグインの高度な設定
高度な設定

[補足]
タブメニューの[高度な設定]を選択します。
①XML SitemapのURLの「サイトマップのURL」を確認します
Google Search Console(グーグルサーチコンソール)のサイトマップの送信などに必要です
「サイトマップインデックスの別名」を指定する場合、XML Sitemap Advancedが必要です(sitemap.xmlのままで問題ありません)

内容を確認し、設定画面を閉じます。
「XML Sitemap Advanced」を利用し「サイトマップインデックスの別名を指定」する場合は、一番下に表示されている[変更を保存]ボタンを押します。
説明を省略している項目は、そのまま(もしくは任意でチェック・選択)で構いません。

6.WordPressの投稿・固定ページ編集画面での設定
投稿・固定ページ編集画面での設定

[補足]
記事やページごとに優先度を決めたい場合やサイトマップに含めたくないページがある場合、投稿・固定ページの編集画面に移動してください。
①記事やページごとに優先度を決めたい場合、優先度に数値を入力します
入力しない場合、上記の投稿タイプやタクソノミーで設定した数値が設定されます
②サイトマップに含めたくないページがある場合、[XML サイトマップに含めない]にチェックします

チェック・入力内容を確認し、[更新]ボタンなどを押し保存します。
記事が公開されていないと、チェック・入力はできません

これで、ひと通り完了です。
あとは、「Google Search Console(グーグルサーチコンソール)」にも忘れずに登録し、サイトマップを送信しておきましょう。

今回は、WordPressで導入するXMLサイトマップの自動出力とセキュリティなどを含めた注意点についてご紹介しました。

キーワード関連キーワード