WordPressの静的ホスティングサービスShifterで、トップページだけを別のURLへ転送しようと、Redirectionプラグインで/のリダイレクトを設定しました。すると、次の静的化(ジェネレート)から生成が失敗するようになりました。エラーの内容からは原因が読み取れず、切り分けに時間がかかりました。
この記事は2026年10月時点のShifter公式ドキュメントと、Shifter・Redirectionプラグインの公開ソースコードをもとにしています。ドメインやパスはすべて架空の値です。
結論:トップページの転送は、WordPressではなくDNS・CDN側で行う
先に結論です。
- Shifterの公式ドキュメントでは、Redirectionプラグインでトップページ(
/)を転送元にするリダイレクトは設定できないとされています。 - ShifterのWordPressプラグインのソースでも、トップページを転送元にした設定は、静的化の対象から外されています。
- トップページを転送したいときは、Redirectionプラグインではなく、WordPressの外(DNS・CDN側)で設定します。
発生した症状:設定を足した直後から生成が失敗する
やったことは、Redirectionプラグインに次の1行を足しただけです。
| 転送元 | 転送先 |
|---|---|
/ |
/news/ |
記事ページ(/2026/04/hello/など)はそのまま残し、トップページだけを別のURLに送るつもりでした。ところが次のジェネレートで生成が失敗し、公開用のファイル(アーティファクト)が作られなくなりました。
環境
- Shifter(WordPressの静的化・ホスティング)
- Redirectionプラグイン
- 独自ドメインで公開中のサイト
まず疑ったこと:ログに出ていたPHPのWarning
生成のログには、PHPのDEPRECATEDやWARNINGが多数出ていました。最初はこれを疑いましたが、今回の失敗の原因ではありませんでした。
ログに目立つメッセージがあっても、それが原因とは限りません。成功していたときのログと比べて、増えたものだけを見るのが近道です。
切り分け:直前の変更を疑う
ログで原因が特定できないときは、最後に成功した生成のあとに何を変えたかを洗い出します。今回は、直前の変更がRedirectionの1行でした。
疑わしい変更が見つかったら、その設定だけを無効にしてジェネレートし、成功するかを確かめます。成功すれば、その変更が原因です。
原因:トップページを転送元にする設定は、Shifterでは非対応
Shifterの公式ドキュメント「Redirectionプラグインを使ったリダイレクトの設定方法」には、「Shifterで設定できないリダイレクト設定」として次の項目があります。
- ルートディレクトリから他のディレクトリ・投稿・ページへのリダイレクト(転送元を
/だけにする設定は許可されない) - 正規表現
- 条件一致
- 末尾にスラッシュのない値
今回の/ → /news/は、1つ目にそのまま当てはまります。転送先が同じサイト内でも、別のドメインでも同じです。
Shifterが公開しているWordPressプラグイン(shifter-artifact-helper)のソースでも、Redirectionの設定を静的化用の転送リストに変える処理で、転送元がトップページのURLのものは読み飛ばされています。トップページの転送は、そもそも静的化の対象として想定されていません。
なお、この設定でなぜ生成そのものが失敗するのかまでは、公開されている情報からは分かりませんでした。確かなのは、「公式に非対応の設定で、外したら生成できる」ということです。
解決方法:トップページの転送はWordPressの外で行う
Shifterの公式ドキュメント「Shifterにおけるリダイレクト」でも、ドメインやサブドメイン単位の転送はShifterでは対応しておらず、DNSプロバイダーのリダイレクト機能を使うよう勧めています。トップページの転送も同じ考え方で、WordPressの外で行います。
- Redirectionプラグインから
/の転送を削除する - ジェネレートして、生成が成功することを確認する
- CDNのリダイレクト機能で、トップページ(パスが
/のリクエスト)だけを転送先に送る
静的化はShifterの中で動くWordPressに対して行われるので、公開側のドメインで転送しても静的化には影響しません。
条件は「パスが/と完全に一致する」にしてください。前方一致にすると、記事ページまで転送されます。
なお、多くのDNSプロバイダーの転送機能はホスト名単位です。パスが/のときだけ転送するには、CDNのプロキシでルールを書く必要があります。CDNをShifterの前に置く場合は、Shifterがその構成に対応しているかを先に確認してください。
補足:ShifterのRedirectionは301を返さない
Redirectionプラグインの設定画面では301などのステータスコードを選びますが、Shifterの公式ドキュメントによると、すべてのリダイレクトはmeta refreshとしてファイルに出力され、301・302などのステータスコードは返りません。「Shifterにおけるリダイレクト」のページに出てくる「301リダイレクト」は設定の例で、出力の形式を説明したものではありません。
SEOのために301が必要な場合は、実際のレスポンスを確認してください。
curl -s -o /dev/null -w '%{http_code} %{redirect_url}\n' https://example.com/old-page/
200が返る場合は、HTMLの中のmeta refreshで転送されています。
確認方法
- 生成:転送の設定を外したあと、ジェネレートが成功するか
- URLの一覧:WordPressの起動中にトップページのURLへ
?urlsを付けて開き、記事のURLが並んでいるか(公式ドキュメント「静的化対象に任意のURLを追加する」で案内されている確認方法です) - 転送:公開後のトップページにアクセスして、転送先に飛ぶか
- 記事ページ:記事のURLが転送されず、そのまま表示されるか
curl -s -o /dev/null -w '%{http_code} %{redirect_url}\n' https://example.com/
curl -s -o /dev/null -w '%{http_code}\n' https://example.com/2026/04/hello/
チェックリスト
- WordPress側(Redirectionプラグインやテーマ)で、トップページを転送していないか
- 生成が失敗したら、最後に成功したあとの変更を洗い出したか
- ログのWarningは、成功していたときのログと比べたか
- トップページの転送を、CDN側で「完全一致」の条件で設定したか
- 301が必要な場合、実際のステータスコードを確認したか
よくある質問
Q. トップページ以外のページを転送するのも危険ですか?
A. 記事ページの完全一致の転送は、Redirectionプラグインで設定できると公式ドキュメントに書かれています。非対応とされているのは、トップページ(/)を転送元にする設定や正規表現などです。
Q. ログに出ているPHPのWarningは放置してよいですか?
A. 今回の生成失敗の原因ではありませんでしたが、放置してよいとは限りません。テーマやプラグインの更新で直るものは直しておくと、次に問題が起きたときにログを読みやすくなります。
Q. サイト全体を別のドメインに移したい場合は?
A. ドメイン単位の転送はShifterでは対応していないため、DNS・CDN側で設定します。WordPress側での一括転送の考え方は、関連記事「Redirectionの正規表現で全ページを一括301リダイレクト」も参考にしてください(Shifterでは正規表現が使えず、301も返らない点に注意してください)。
まとめ
- Shifterでは、Redirectionプラグインでトップページ(
/)を転送元にする設定は非対応と公式に書かれている - Shifterのプラグインも、トップページの転送を静的化の対象から外している
- トップページの転送は、CDN側で「完全一致」の条件で行う
- ShifterのRedirectionの転送はmeta refreshで出力され、301は返らない。301が必要ならレスポンスを確認する
- 生成が失敗したら、ログより先に直前の変更を疑う
関連記事
参考
- Redirectionプラグインを使ったリダイレクトの設定方法 – Shifter公式ドキュメント
- Shifterにおけるリダイレクト – Shifter公式ドキュメント
- 静的化対象に任意のURLを追加する – Shifter公式ドキュメント
- URLの追加と除外 – Shifter公式ドキュメント
- getshifter/shifter-artifact-helper – GitHub
