Next.js 16.4: App Router の strict route matching が既定でオンに。ビルドで落ちたら default.tsx を足す
Next.js 16.4 では、完全なルートツリーを組み立てられない URL(並列ルートのスロットに page も default もない、など)が拒否され、到達できないページがビルド時に報告されるようになった。マイナーリリースでの変更で、changelog に載っていないとの指摘がある。
何が変わったか
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で警告が出ないか確認する。
出典
- @mizdra · 2026-10-22
- vercel/next.js PR #97397「Enable strict route matching by default」: github.com