CMS・WordPress

【Shifter】トップページをリダイレクトしたら静的化が失敗する理由|転送はWordPressではなくDNS・CDN側で行う

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の外で行います。

  1. Redirectionプラグインから/の転送を削除する
  2. ジェネレートして、生成が成功することを確認する
  3. 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で転送されています。

確認方法

  1. 生成:転送の設定を外したあと、ジェネレートが成功するか
  2. URLの一覧:WordPressの起動中にトップページのURLへ?urlsを付けて開き、記事のURLが並んでいるか(公式ドキュメント「静的化対象に任意のURLを追加する」で案内されている確認方法です)
  3. 転送:公開後のトップページにアクセスして、転送先に飛ぶか
  4. 記事ページ:記事の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が必要ならレスポンスを確認する
  • 生成が失敗したら、ログより先に直前の変更を疑う

関連記事

参考

スポンサーリンク