WordPressでサイトを構築していて、「ページを作ったのに表示されない」「URLにアクセスすると意図しない画面になる」といったトラブルに遭遇したことはありませんか?
その原因のひとつとしてよくあるのが、「固定ページのスラッグ」と「サーバー上の実在ディレクトリ名」が同じになっているケースです。
- 固定ページのスラッグを「
contact
」に設定した - 同時に、サーバー上にも「
/contact/
」というディレクトリが存在している
このような場合、WordPressでは固定ページが正しく表示されず、代わりにディレクトリ内のindexファイルが優先されて表示されます。
スラッグと同名のディレクトリを設置したいことが稀にあります。
この記事では、スラッグと実在ディレクトリが重複した場合の原因と回避策について、具体的な設定方法も含めてわかりやすく解説します。
【原因を解説】なぜ固定ページが表示されないのか?
WordPressでは、固定ページを作成すると、そのスラッグに応じてURLが自動生成されます。
たとえば「お問い合わせ」ページのスラッグを contact
にすれば、URLは https://example.com/contact/
になります。
ところが、同じ contact
という名前のディレクトリがサーバー上に存在していると、状況が変わってきます。
競合が起きる仕組み
Webサーバー(Apacheやnginxなど)は、URLに対応するパスを解決する際に、次のような優先順位でファイルを探します。
- サーバー上に実在するディレクトリやファイルがあるかを確認する
- あればそちらを優先して表示する
- なければ WordPress に処理を渡す(
index.php
へ)
つまり、/contact/
というURLにアクセスしたときに、サーバー上に contact
という実在するディレクトリがあると、そちらの中身が表示されてしまい、WordPressの固定ページは無視されてしまいます。
【解決策①】サーバー上のディレクトリ名を変更する
もっともシンプルで確実な方法は、サーバー上にある実在のディレクトリの名前を変更することです。
たとえば、固定ページのスラッグが contact
なのに、サーバー上にも contact
というディレクトリがある場合、
そのディレクトリ名を contact_old
や contact_form
など、WordPressのスラッグとかぶらない名前に変更します。
- サーバーにFTPで接続(Filezillaなどのソフトを使用)
public_html
などのルートディレクトリを開く- 競合しているディレクトリ(例:
contact
)を見つける - 右クリックして「名前の変更」で別の名前に変更
- WordPressの固定ページが正しく表示されるか確認
- そのディレクトリ内に設置していたフォームや画像などを利用している場合、リンク切れや動作不良が起きる可能性があります。
- → URLの書き換えや新しいスクリプトへの移行が必要です。
- 不要なディレクトリであれば、名前の変更ではなく削除してもOKです。
- WordPressの構造を変えずに解決できる
- ディレクトリが原因で表示できなかった問題が一発で解消される
この方法は最も根本的で確実ですが、「そのディレクトリに依存したフォームや静的ファイルがある場合」には、他の解決策も検討する必要があります。
【解決策②】スラッグ名を変更する(WordPress側を調整)
次にシンプルで安全な方法が、WordPressの固定ページ側のスラッグ名を変更することです。
たとえば、実在ディレクトリ /column/
がすでに存在していて、同じスラッグで固定ページを作ってしまうと、そのページは表示されません。
これは WordPress が「物理的なディレクトリを優先」して処理してしまうためです。
- WordPress管理画面で該当固定ページを編集し、スラッグを別の名称に変更しましょう。

- ディレクトリ構成を壊さずに対応できる
- 技術的な知識が少なくても対応しやすい
- ただし、すでにURLを公開済みでSEO的に影響がある場合は、リダイレクト処理を入れることも検討しましょう
変更後はリンク修正を忘れずに
スラッグを変えるとURLも変わるため、内部リンクやメニュー項目なども併せて修正してください。
【解決策③】index.phpを使った方法
index.phpを使った特殊な方法で、共存させることが可能です。以下に手順を紹介します。
1.WordPress直下のindex.phpをコピー

まず、WordPressのルートディレクトリ(例:public_html
)にある「index.php」ファイルをコピーします。
このファイルはWordPress本体の入口として働く重要なファイルなので、コピー元を絶対に編集しないよう注意してください。
2.コピーしたindex.phpを対象ディレクトリに配置
次に、スラッグ名と同じ名前の物理ディレクトリをサーバー上に作成し、先ほどコピーした「index.php」をその中に設置します。
たとえば、スラッグが「service」であれば、「/service/」というディレクトリを作って、その中に「index.php」を置きます。
3.requireのパスを正しく書き換える
設置した「index.php」内の以下の記述を探します。
require __DIR__ . '/wp-blog-header.php';
このパスは、元の位置を前提としているため、新しい設置場所に応じてパスを相対的に変更する必要があります。例:
require __DIR__ . '/../wp-blog-header.php';
1階層下に移動しているので、../
で上の階層に戻す形です。
4.パーミッションやURLを確認する
設置後、ブラウザで /service/
にアクセスして、WordPressの固定ページが正しく表示されるか確認しましょう。
403や404エラーが出る場合は、パーミッションや記述ミスの可能性があるので注意してください。
index.phpのサンプルコード
WordPressルート直下の場合
もしWordPressがドキュメントルートに直接インストールされているなら、以下のように「index.php」を修正します。
<?php
/**
* Templated index.php for coexisting directory and WordPress page
*/
require __DIR__ . '/../wp-blog-header.php';
../
で1階層上の WordPress を参照するのがポイントです。
「wp」ディレクトリにインストールしている場合
WordPress本体を「wp」ディレクトリに入れている構成の場合、さらに一段階深くなります。
<?php
require __DIR__ . '/../wp/wp-blog-header.php';
WordPressのインストール場所によって、wp-blog-header.php
までのパスは必ず見直してください。
間違いやすいパス指定の注意点
ABSPATH
や__FILE__
を使った動的なパス指定でもOKですが、相対パスで明示的に書いた方が動作が安定します。- 「パーミッション」や「.htaccessのルール」でアクセスがブロックされていないかも確認しましょう。
共存させるときの注意点と落とし穴
index.phpの上書きに注意(既存ファイルのバックアップ)
既にそのディレクトリに「index.php」がある場合は、上書きしないよう注意が必要です。
既存ファイルはバックアップを取り、必要に応じて内容を統合してください。
ディレクトリ内に別のindex.htmlがあると競合する
サーバーによっては、index.htmlがindex.phpよりも優先されてしまい、WordPressの処理が動かないことがあります。
不要なindex.htmlがないか確認しましょう。
テーマやパーマリンク設定によっても表示が左右される
WordPressのテーマが特定のテンプレートに依存している場合、うまく読み込まれないことがあります。
また、パーマリンク設定がカスタム構造の場合、.htaccessの設定とも干渉する可能性があるため、パーマリンク再設定(保存)を試すと解決することがあります。
まとめ:WordPressのスラッグとディレクトリが重なるときの鉄則
- WordPressでは「スラッグ=実ディレクトリ名」の状態だとページが正しく表示されないことがある。
- ディレクトリやスラッグ名を変更できる場合は、簡単に変更出来ます。
変更できない場合は、index.php
をコピーして対象ディレクトリに設置し、wp-blog-header.php
へのパスを調整することで共存が可能。- 上書きやファイル競合、.htaccessの影響には十分注意。
- どうしても安定しない場合は、【解決策②】スラッグ名を変更するのも有効な手段。
コメント