--- icon: IconDirectory title: 'pages' head.title: Pages directory --- The `pages/` directory is optional, meaning that if you only use [app.vue](/docs/directory-structure/app), vue-router won't be included, reducing your application bundle size. # Pages directory Nuxt will automatically integrate [Vue Router](https://next.router.vuejs.org/) and map `pages/` directory into the routes of your application. ::alert{type=warning} Unlike components, your pages must have a single root element to allow Nuxt to apply route transitions between pages. :: ## Dynamic Routes If you place anything within square brackets, it will be turned into a [dynamic route](https://next.router.vuejs.org/guide/essentials/dynamic-matching.html) parameter. You can mix and match multiple parameters and even non-dynamic text within a file name or directory. If you need a catch-all route, you create it by using a file named like `[...slug].vue`. This will match _all_ routes under that path, and thus it doesn't support any non-dynamic text. ### Example ```bash -| pages/ ---| index.vue ---| users-[group]/ -----| [id].vue ``` Given the example above, you can access group/id within your component via the `$route` object: ```vue ``` Navigating to `/users-admins/123` would render: ```text admins 123 ``` ## Nested Routes We provide a semantic alias for `RouterView`, the `NuxtChild` component, for displaying the children components of a [nested route](https://next.router.vuejs.org/guide/essentials/nested-routes.html). ### Example ```bash -| pages/ ---| parent/ ------| child.vue ---| parent.vue ``` To display the `child.vue` component, simply put the `` component inside the `parent.vue` component: ```html{}[pages/parent/child.vue] ``` ```html{}[pages/parent.vue] ``` The example file tree above should generate these routes: ```js [ { path: '/parent', component: '~/pages/parent.vue', name: 'parent', children: [ { path: 'child', component: '~/pages/parent/child.vue', name: 'parent-child' } ] } ] ```