WordPressでトップページは表示されるのに下層ページが404エラーになる場合の解決方法

intermediate📝 WordPress2026-04-02| WordPress 5.0+, Apache 2.4 / Nginx 1.18+, Ubuntu/CentOS/Debian, PHP 7.4/8.x

Error Message

404 Not Found (Internal pages fail, homepage works)
#wordpress#404エラー#htaccess#nginx#パーマリンク

問題点

これはフラストレーションの溜まる、しかしよくある状況です。WordPressのホームページは正常に表示されるのに、投稿やページへのリンクを開くとすべて 404 Not Found エラーが返されるというものです。これは通常、サイトの移転、ドメインの変更、またはプラグインの更新後に発生します。多くの場合、ウェブサーバーが /blog/my-awesome-post/ のような「パーマリンク(カスタム構造)」の処理方法を認識していないため、存在しない物理的なフォルダーやファイルを探してしまっていることが原因です。

60秒でできる解決策

まずはこれを試してください。WordPressに内部のルーティングルールを強制的に再構築させることで、約90%のケースで問題が解決します。

  • WordPressの管理画面にログインします。
  • 設定 > パーマリンク に移動します。
  • 設定は何も変更しないでください。そのまま一番下までスクロールし、変更を保存 をクリックします。
  • エラーが出ていたページを更新してください。これで解決すれば、単にリライトルールが同期されていなかっただけです。解決しない場合は、読み進めてください。

なぜこの問題が発生するのか?

  • .htaccessの欠落: トラフィックを index.php に誘導するファイルが存在しないか、破損しています。
  • Mod_Rewriteが無効: Apacheサーバーで、カスタムURLを処理するために必要なモジュールが有効になっていません。
  • 設定のオーバーライド: サーバーの設定で、ローカルの .htaccess ファイルを無視するように指定されています。
  • Nginxの設定: Nginxは .htaccess を使用しないため、サイトの設定ファイルに特定のルールを記述する必要があります。

Apacheサーバーでのエラー修正

1. .htaccessファイルを手動で再作成する

WordPressにサーバーへの書き込み権限がない場合があります。「変更を保存」で解決しなかった場合は、手動で行う必要があります。FTPまたはホスティングサービスのファイルマネージャーを使用して、ルートディレクトリに移動してください。.htaccess という名前のファイルを作成し、以下の標準コードを貼り付けます。

# 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>
# WordPress 終了

ファイルのパーミッションが 644 に設定されていることを確認してください。これにより、サーバーがファイルを読み取れるようになり、かつ不正な編集から保護されます。

2. Rewriteモジュールを有効にする

自前のVPS(DigitalOceanやLinodeなど)を運用している場合、rewriteモジュールが無効になっている可能性があります。以下のコマンドを実行して有効にします。

sudo a2enmod rewrite
sudo systemctl restart apache2

3. VirtualHostの設定(AllowOverride)を更新する

サーバーが .htaccess ファイルを完全に無視している可能性があります。通常 /etc/apache2/sites-available/000-default.conf にあるサイト設定ファイルを開きます。ウェブフォルダーの <Directory> ブロックを探し、AllowOverrideAll に設定されていることを確認してください。

<Directory /var/www/html>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

ファイルを保存し、Apacheを再起動して変更を適用します。

Nginxサーバーでのエラー修正

Nginxは .htaccess ファイルを認識しません。下層ページで404エラーが出る場合、サーバーブロックにリライトのロジックが欠けている可能性があります。Nginxの設定ファイル(例:/etc/nginx/sites-available/your-site)を開いてください。

location / ブロックを探し、try_files ディレクティブが含まれていることを確認します。

location / {
    try_files $uri $uri/ /index.php?$args;
}

この行は、Nginxにまずファイルまたはフォルダーを探すよう指示します。見つからない場合は、リクエストを index.php に渡します。再起動する前に、必ず設定をテストしてください。

sudo nginx -t
sudo systemctl reload nginx

注意すべき特殊なケース

セキュリティプラグインによる干渉

iThemes SecurityWordfence などのプラグインは、多くの場合 .htaccess ファイルを「読み取り専用」にして保護します。パーマリンク設定を保存できない場合は、これらのプラグインを一時的に無効化して、ファイルが再び書き込み可能になるか試してみてください。

ローカル開発環境(WAMP/XAMPP)

WindowsやMacのローカル環境では、rewrite_module がデフォルトで無効になっていることがよくあります。XAMPPやWAMPのコントロールパネルでApacheのアイコンをクリックし、httpd.conf を開いて mod_rewrite を検索し、行頭の # を削除してください。

修正の確認方法

  • シークレットモードを使用する: ブラウザは404レスポンスをキャッシュすることがあります。常にプライベートウィンドウでテストし、最新の状態を確認してください。
  • ヘッダーチェックを実行する: ターミナルで curl を使用してサーバーのレスポンスコードを確認します。

curl -I https://yourdomain.com/sample-post/

    `HTTP/1.1 200 OK` と表示されれば成功です。
  - **「基本」設定でのテスト:** **設定 > パーマリンク** に移動し、設定を「基本」に変更します。これで投稿が表示されるようになれば、原因は間違いなくサーバーのリライト設定にあります。

Related Error Notes