先に結論
WordPressが標準で用意するはずのサイトマップ /wp-sitemap.xml が、私のサイトでは404(ページが見つかりません)になりました。
直った方法は、これです。
- プラグイン「XML Sitemap & Google News」を入れる
- 設定 →「XML サイトマップ」→ サーバーを「WordPress」から「プラグイン」に切り替える
- 同じ画面の「リライトルールを再生成」を押す
これで /sitemap.xml が表示されるようになりました。
正直に書くと、404になった原因は、いまも分かっていません。 分かったのは「何が原因ではなかったか」と「どうすれば直るか」だけです。同じ症状の方の役に立つよう、試した順に全部書きます。
起きていたこと
サイトを作った直後、Search Consoleにサイトマップを登録しようとして気づきました。
| 確認したもの | 結果 |
|---|---|
/wp-sitemap.xml | 404 |
/sitemap.xml | /wp-sitemap.xml に転送されて404 |
robots.txt | 存在しない /wp-sitemap.xml をサイトマップとして案内していた |
| 記事のページ | 正常に表示される |
記事は普通に見られるのに、サイトマップだけが出ない状態です。しかも robots.txt は「サイトマップはここです」と、存在しないアドレスをGoogleに伝え続けていました。
環境は、エックスサーバー、テーマはSWELL、プラグインはセキュリティ系とお問い合わせフォームの2つだけでした。
試して、効かなかったこと
直るまでに試したことを、順番に書きます。どれも効きませんでした。
| 試したこと | 結果 | 分かったこと |
|---|---|---|
| キャッシュを疑って、別の方法でアクセスし直す | 404のまま | キャッシュではない |
| パーマリンク設定を保存し直す(2回) | 404のまま | よく紹介される方法だが、効かなかった |
| セキュリティプラグインを一時的に止める | 404のまま | プラグインの干渉ではない |
| 「検索エンジンがサイトをインデックスしないようにする」の設定を確認 | チェックは入っていなかった | この設定が原因ではない |
/?sitemap=index という別の形式でアクセス | これも404 | アドレスの書き換えの問題ではない |
最後の1行が、切り分けの決め手でした。
「パーマリンクを保存し直す」という対処は、アドレスを書き換える仕組み(リライトルール)が壊れているときに効きます。ところが /?sitemap=index は、その仕組みを通らない形式です。それも404ということは、リライトルールではなく、WordPressのサイトマップ機能そのものが動いていないことになります。
返ってきた404がWordPressの画面だったことからも、サーバーではなくWordPressの側の問題だと分かりました。
もう1つ、セキュリティプラグインの「ユーザー名漏えい防止」という機能も疑いました。WordPress標準のサイトマップには投稿者の一覧が含まれるからです。一時的にオフにして確かめましたが、無関係でした。 すぐ元に戻しています。
応急処置:RSSフィードを登録する
原因が分からない間は、RSSフィードをサイトマップの代わりに登録していました。
Search Console → サイトマップ →「feed」と入力して送信
Search Consoleは、RSSフィードもサイトマップとして受け付けます。登録すると「成功しました」になりました。
ただし、これは長く使える方法ではありません。
フィードに入るのは、最新の10件だけです(設定 → 表示設定 →「RSS/Atomフィードに表示する最新の項目数」の初期値)。記事が15本になった時点で、Googleに伝わっていたのは11ページ分でした。記事が増えるほど、伝わらない記事が増えていきます。
解決:プラグインの「サーバー」設定を切り替える
プラグインを入れただけでは、直りませんでした
「XML Sitemap & Google News」というプラグインを入れて有効化しました。それでも404のままでした。
理由は、あとで分かりました。このプラグインは、初期設定ではWordPress標準のサイトマップ機能をそのまま使うようになっています。標準の機能が動いていない私のサイトでは、プラグインを入れても同じ結果になるわけです。
「サーバー」を「プラグイン」に切り替える
設定 →「XML サイトマップ」を開くと、「一般」タブの一番上に「サーバー」という項目があります。
| 選択肢 | 意味 |
|---|---|
| WordPress(初期値) | WordPress標準の機能でサイトマップを作る |
| プラグイン | プラグイン自身がサイトマップを作る |
ここを「プラグイン」に変えて保存しました。
続けて、同じ画面の右側「ツール」にある「リライトルールを再生成」を押します。
結果
| 確認したもの | 前 | 後 |
|---|---|---|
/sitemap.xml | 404 | 表示される |
| 記事の収録 | — | 公開している記事がすべて入っている |
robots.txt の案内 | 存在しないアドレス | /sitemap.xml に自動で変わった |
robots.txt は自分では触っていません。プラグインの設定を変えたら、案内も正しいアドレスに変わりました。
そのあと、Search Consoleに sitemap.xml を送信しました。数日後に「成功しました」になり、公開しているページがすべて検出されています。
ついでにやったこと:投稿者のサイトマップを外す
サイトマップの中身を見ると、記事・固定ページ・カテゴリーのほかに、投稿者のページも入っていました。
一人で書いているブログでは、投稿者のページは記事一覧と同じ内容になるだけです。同じ設定画面の「Disable sitemaps」で「投稿者」にチェックを入れて、外しました。
原因について
繰り返しになりますが、なぜWordPress標準のサイトマップが動かなかったのかは、分かっていません。
分かっているのは、次のことだけです。
- キャッシュではない
- リライトルールではない(パーマリンクの保存し直しでは直らない)
- セキュリティプラグインではない
- 「検索エンジンに表示しない」設定ではない
- サイトマップを作る役目をプラグインに移すと、直る
原因が分からないまま使い続けることに、すっきりしない気持ちはあります。ただ、サイトマップの役目は「Googleに記事の一覧を伝えること」です。それが果たせていれば、どちらの仕組みで作られているかは問題になりません。
まとめ
/wp-sitemap.xmlが404になり、パーマリンクの保存し直しでは直りませんでした/?sitemap=indexも404なら、リライトルールの問題ではありません- 応急処置としてRSSフィード(
feed)をSearch Consoleに登録できますが、伝わるのは最新10件だけです - 「XML Sitemap & Google News」を入れ、サーバーを「プラグイン」に切り替え、リライトルールを再生成したら直りました
- プラグインを入れただけでは直りません。 設定の切り替えが必要でした
- 原因は、いまも分かっていません
この問題は、サイトを立ち上げたときに詰まった12か所のうちの1つでした。ほかの11か所はエックスサーバーでWordPressを始める手順にまとめています。
あわせて読みたい
- エックスサーバーでWordPressを始める手順|非エンジニアがつまずいた12か所
サイトの立ち上げで詰まった12か所 - エックスサーバーで2つ目のサイトを追加する手順|追加費用0円、1つ目への影響もありませんでした
同じサーバーに2つ目のサイトを追加した手順 - 10人の会社のセキュリティルール5つ、全部守られています|「守ってもらう」のではなく「破れなくする」
セキュリティの設定を「破れなくする」考え方 - Contact Form 7のメールがGmailに届かない?迷惑メールに入るときの対処|SPFもDKIMも設定済みなのに入りました
サイトを作った直後に詰まった、もう1つの問題
