Skip to main content

Route Matching

Direct Matching

A URL can accurately reflect the path to a specific file within your project's structure. For example, /products/top-10 would refer to the file /products/top-10.js.

When there is nesting in the path, but you want it to be invoked, use index.js. For instance, /products/top-10 will map to either /products/top-10.js or /products/top-10/index.js.

RouteExample URL
/index.js/
/products/index.js/products
/products/top-10.js/products/top-10

Exact Matching

To capture exactly one parameter, use the following syntax in the folder or file name: [paramName].

RouteExample URLParamsNotes
/products/[id].js/products/123{ id: '123' }
/categories/[catId]/products/[prodId].js/categories/1/products/2{ catId: '1', prodId: '2' }Any nesting level
/categories/[id]/products/[id].js/categories/1/products/2{ id: '2' }If slug IDs have the same name, the last one will be taken.
/products/top-10.js/products/top-10You can still use direct matching. It will be prioritized over dynamic matching.

Catching All

This type of matching can identify a list of slugs, but only if they are provided.

RouteExample URLParamsNotes
/categories/[...categories].js/categories/men/shoes/sneakers{ categories: ['men', 'shoes', 'sneakers'] }
/categories/[...categories].js/categories/men{ categories: ['men'] }
/categories/[...categories].js/categoriesxWon't capture anything, 404

Optional Catching All

This document is nearly identical to the previous one. The main difference is that it includes the root when no parameters are specified.

RouteExample URLParamsNotes
/categories/[[...categories]].js/categories/men/shoes/sneakers{ categories: ['men', 'shoes', 'sneakers'] }
/categories/[[...categories]].js/categories/men{ categories: ['men'] }
/categories/[[...categories]].js/categoriesWill capture