はじめに
2025年8月、WordPressサイトが突然 「501 Not Implemented」 を返す事象が発生しました。
トップページや記事ページだけでなく、静的ファイル(health.html / health.php)もすべて 501。
エラーログも空で、通常のWordPress障害と異なる挙動でした。
本記事では、発生状況から切り分け、最終的に特定した原因と教訓を記録します。
発生状況
- WordPressの全ページ → 501
- 静的ファイル(health.html / health.php) → 501
- サブディレクトリの別WordPress(/sub/) → 501
- エラーログ → 記録なし
- アクセスログ → 501 の記録あり
アプリ層ではなく、サーバー層でリクエストがブロックされていると推測しました。
調査過程
パーミッション確認
ディレクトリ 755 / ファイル 644 に是正 → 変化なし。
.htaccess最小化
WordPress標準の最小構成へ変更。一時的に表示されたが、ブラウザキャッシュを参照していただけでリロード後は再び 501。
同じページだけで検証するとキャッシュにだまされる典型例。
静的ファイル検証
health.html / health.php も 501。WordPress経由ではないため、アプリ起因は除外。
WAF設定切り分け
Xserverの WAF(ファイル対策/コマンド対策/PHP対策)を順にOFF。
コマンド対策OFF時のみ正常化 → 原因は WAF コマンド対策に確定。
注意点
- 設定反映に 最大1時間かかる
- ブラウザキャッシュをクリアしないと確認不可
→ これが切り分けを遅延させる要因となった。
調査を難しくした要素
- ログ空白:エラーログには残らず、アクセスログのみ 501。
- キャッシュ:一時的に直ったように見え、誤認を招いた。
- 海外アクセス:国外アクセス制限をOFFにしていたため、影響を疑った。
- FTP不具合:同時期にディレクトリ一覧エラーもあり、関連を疑った。
- WAF反映遅延+キャッシュクリア:仕様を理解していないと検証が混乱する。
真因の特定
AdSense管理画面を確認したところ、**自動最適化テスト(フラスコマーク実験)**が有効化されていました。
自動広告を無効化しても、Google側で最大90日間テストが継続し、リクエストが送信される仕様です。
このリクエストが Xserver WAF コマンド対策に誤検知され、全リクエストが 501 でブロックされていました。
実験を終了させた後、WAFコマンド対策ONでも安定稼働を確認。
解決策と教訓
解決策
- AdSense管理画面から自動最適化テストを終了
- 現在は WAFコマンド対策OFFで安定運用(他のWAFはON)
- 必要に応じて Xserver サポートに URI 除外設定を依頼
教訓
- 501はアプリ層ではなくWAF層が原因の可能性
- Xserver WAFは反映に1時間+キャッシュクリア必須
- エラーログが空でもアクセスログを確認
- 切り分けは複数ページで検証
- Google広告の自動最適化テストはユーザーが止めても勝手に走る
まとめ
今回の 501 は WordPress起因ではなく、Xserver WAFコマンド対策 × Google広告自動最適化テストの組み合わせによる誤検知でした。
「ログ空白」「キャッシュ参照」「海外アクセス設定」「FTP不具合」「WAF反映遅延」など、迷宮化要因が重なり、原因特定に時間を要しました。
監視用の health.html と外部監視サービス(UptimeRobot+LINE通知)を導入し、再発時には迅速に検知できる体制を構築しました。
同様の501エラーに遭遇した際は、WordPressやプラグインではなく、サーバーWAFと外部サービス(広告・計測タグ)の相性を疑うことが重要です。