WordPressでページが404になる原因は、単純な設定ミスから構造的な問題まで幅広く存在します。
「なんとなく触ってたら直る」ではなく、原因を切り分けて潰すことが重要です。
ここでは、実務で優先度が高い順に確認すべきポイントを整理します。
パーマリンク設定を更新する
まず最初にやるべきはこれです。
ほぼこれで直るケースも多い。
管理画面の「設定 → パーマリンク」に入り、何も変更せず「変更を保存」を押します。
これにより .htaccess が再生成され、URLのルーティングが正常に戻ることがあります。
.htaccess の内容を確認する
Apache環境の場合、.htaccess が壊れていると確実に404になります。
最低限必要な記述は以下です。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
これがない、もしくは書き換えられているなら原因はここです。
投稿・固定ページのスラッグを確認する
URLとスラッグがズレているケースはかなり多いです。
例えば
/about/ にアクセスしているのに
実際のスラッグが about-us になっている
この場合は当然404になります。
カスタム投稿タイプの設定ミス
開発している場合、ここが原因の可能性が高いです。
特に以下は要チェックです。
rewrite の設定が間違っている
has_archive が false になっている
register_post_type 実行後にパーマリンク更新していない
コードを変えたあとにパーマリンク更新していないなら、それはミスです。
テンプレートファイルの配置ミス
WordPressはテンプレート階層に従って表示します。
例えば
single.php
page.php
archive.php
single-{post_type}.php
これらが正しく存在していないと、意図しない挙動や404になることがあります。
特にカスタム投稿タイプでは
single-{post_type}.php が無い問題は頻出です。
クエリを書き換えている場合
pre_get_posts や WP_Query を使っている場合、条件ミスで404になります。
例えば
is_main_query() を見ていない
is_admin() を無視している
条件分岐がズレている
これは「見た目は合ってるのに404」の典型です。
サーバー設定の問題
ローカルでは動くのに本番で404になるなら、ほぼここです。
チェックポイントは以下。
mod_rewrite が有効か
.htaccess が読み込まれているか
Nginx の場合は rewrite 設定があるか
ここを見ないのは甘いです。
キャッシュの影響
意外と見落とされがちですが、キャッシュで古い状態が残っていることがあります。
ブラウザキャッシュ
WordPressのキャッシュプラグイン
サーバーキャッシュ(Xserverなど)
全部疑ってください。
URLの打ち間違い
一番基本ですが、意外とこれです。
全角スラッシュになっている
末尾スラッシュの有無
http / https の違い
「そんなわけない」と思うところほどミスります。
まとめ
404は「どこか1つが間違っている」のではなく
「複数の設定が噛み合っていない」ことで起きることが多いです。
だからこそ
パーマリンク
.htaccess
スラッグ
カスタム投稿
サーバー設定
この順で、機械的に潰していくのが正解です。
感覚で直そうとすると時間を無駄にします。
順序立てて切り分けることが、最短ルートです。