テック技報最新号へ →
コード

Next.js 16.4: App Router の strict route matching が既定でオンに。ビルドで落ちたら default.tsx を足す

Next.js 16.4 では、完全なルートツリーを組み立てられない URL(並列ルートのスロットに page も default もない、など)が拒否され、到達できないページがビルド時に報告されるようになった。マイナーリリースでの変更で、changelog に載っていないとの指摘がある。

@mizdra · 投稿 2026-10-22
#nextjs#app-router#parallel-routes#upgrade

何が変わったか

PR vercel/next.js#97397(2026-09 マージ)の説明によると:

  • 完全なルートツリーを構成できない App Router の URL は拒否される
  • 到達できないページが報告される
  • 不完全な catch-all のマッチャーは取り除かれる

例として、次の構成では /foo も /bar も完全なルートにならない(@right に /foo 用の page も default もなく、逆も同じ)。

text
app/
├── layout.tsx
├── @left/foo/page.tsx
└── @right/bar/page.tsx

以前はソフトナビゲーションで「前のスロットの状態が残る」ことに頼って動いていたが、直接開くと読み込めない状態だった。16.4 ではこれがビルドで報告される。

直し方

各スロットに default.tsx を置いて、マッチしない URL のときに何を出すかを明示する。

tsx
// app/@left/default.tsx, app/@right/default.tsx
export default function Default() {
  return null;
}

一時的な回避

すぐ直せない場合は next.config で旧挙動に戻せる(true のみ受け付ける非推奨オプション)。

ts
// next.config.ts
const nextConfig = {
  deprecated: {
    looseRouteMatching: true,
  },
};
export default nextConfig;

注意点

  • 名前の通り非推奨の逃げ道なので、将来なくなる前提で default.tsx を整える。
  • 並列ルートや Intercepting Routes を使っているアプリは、16.4 へ上げる前に next build で警告が出ないか確認する。

出典

X の元の投稿を開く