Nuxt 3 の開発中にコンソールに次のような警告が表示されることがあります。
[Vue Router warn]: No match found for location with path "/hoge"
この警告は、Vue Router が指定されたパスに一致するルートを見つけられなかった場合に発生します。
ローカル開発時だけでなく、ビルド後の本番環境で 404 にリダイレクトされる場合もあるため、原因を正確に特定することが重要です。
本記事では、この警告の典型的な発生原因、デバッグ手順、修正方法を Nuxt 3 目線で解説します。
1. 警告が発生する仕組み
Nuxt 3 は Vue Router v4 を内部的に利用しています。ルート情報は pages/
ディレクトリの構造から自動生成されますが、存在しないパスへ遷移した場合、Vue Router はルートを見つけられず警告を出します。
たとえば pages/index.vue
しか存在しないのに /about
へ遷移すると、この警告が出力されます。
さらに、動的ルート(例: pages/users/[id].vue
)のパラメータが間違っている場合も同様です。例えば /users/
の末尾スラッシュが余計だったり、意図しない型(文字列ではなくオブジェクト)を渡していると一致せず警告になります。
2. よくある原因パターン
以下のパターンで発生することが多いです。
pages
ディレクトリに対応するファイルが存在しない- 動的ルートのパラメータが間違っている (
/users/undefined
) - SSR 時に
useRoute
を呼び出すタイミングが早すぎて空の値が渡る - ルーター設定の
base
やtrailingSlash
のオプションが合っていない - 本番環境のリバースプロキシ設定でパスが書き換わり、存在しないルートになっている
3. デバッグと再現方法
まずは 実際のパスをログ出力 して確認します。
<script setup>
import { useRoute } from 'vue-router'
const route = useRoute()
console.log('Current path:', route.fullPath)
</script>
これにより、どのパスに遷移して警告が発生しているかを特定できます。さらに、nuxt dev --verbose
で詳細ログを確認すると、ルート解決の過程が表示されるため、存在しないパスであることが明確になります。
4. 解決方法
エラーの原因が特定できたら、以下のいずれかで解決します。
- 該当するページファイルを作成する
- 動的ルートのパラメータを正しく渡す
- SSR でルートがまだ確定していない場合は
onMounted
内でアクセスする - リバースプロキシや CDN のルーティング設定を見直す
例: 動的ルートを正しく扱うコード
<script setup>
import { useRouter } from 'vue-router'
const router = useRouter()
function goToUser(id) {
router.push({ name: 'users-id', params: { id: String(id) } })
}
</script>
params
を必ず文字列に変換することで、Vue Router のルート一致判定に成功しやすくなります。
5. 実運用での注意点
本番環境では、SPA モードではなく SSR や静的生成モードを使うことが多いため、ビルド時に存在しないパスは 404 ページが生成されません。error.vue
を設置しておくことで、ユーザーに適切なエラーメッセージを表示できます。また、意図しない警告を放置するとログがノイズになり、他の本番エラーを見落とすリスクが高まります。
さらに、route.matched
を活用して一致したルートを確認し、意図せず空配列が返る場合はデフォルトのフォールバックページにリダイレクトする処理を追加すると UX が向上します。
6. まとめ
Nuxt 3 で「No match found for location」警告が出る場合、多くは存在しないページへの遷移か、動的ルートのパラメータミスが原因です。デバッグログや Vue Router の API を使い、どのパスで失敗しているかを特定した上で、ファイル作成やパラメータ修正を行えば解決できます。放置せず早めに対処することで、ユーザー体験と開発効率の両方を守ることができます。
参考
- Nuxt 3 Routing [https://nuxt.com/docs/guide/directory-structure/pages]
- Vue Router Documentation [https://router.vuejs.org/]