Файловый роутинг
В App Router маршруты создаются папками внутри app/. Каждая папка — сегмент URL.
Базовые правила
- Папка = сегмент URL
page.tsxделает сегмент доступным- Папка без
page.tsxне создаёт маршрут
app/
├── page.tsx → /
├── about/
│ └── page.tsx → /about
├── blog/
│ ├── page.tsx → /blog
│ └── post/
│ └── page.tsx → /blog/post
Файлы, которые создают маршруты
page.tsx— страницаroute.ts— API-роут
Другие файлы (layout, loading, error) маршрутов не создают.
Приватные папки
Папки с _ в начале исключаются из роутинга:
app/
├── _components/
│ └── Button.tsx → не маршрут
├── _lib/
│ └── utils.ts → не маршрут
└── page.tsx → /
Используется для колокации: компоненты рядом с использующими их страницами.
Группы маршрутов
Папки в (скобках) не попадают в URL:
app/
├── (marketing)/
│ ├── about/page.tsx → /about
│ └── pricing/page.tsx → /pricing
└── (shop)/
├── cart/page.tsx → /cart
└── checkout/page.tsx → /checkout
Для группировки по layout или логике. URL не содержит marketing или shop.
Несколько групп с одним URL
Нельзя, если создаёт конфликт. /about только в одной группе.
Вложенные папки
app/
├── dashboard/
│ ├── page.tsx → /dashboard
│ ├── settings/
│ │ └── page.tsx → /dashboard/settings
│ └── profile/
│ └── page.tsx → /dashboard/profile
Соглашения об именовании
- kebab-case для URL:
my-page - camelCase или kebab-case для папок
- Не используй пробелы и спецсимволы
Специальные файлы
В каждой папке могут быть:
page.tsx— страницаlayout.tsx— layoutloading.tsx— загрузкаerror.tsx— ошибкаnot-found.tsx— 404route.ts— APItemplate.tsx— пересоздаваемый layoutdefault.tsx— для параллельных маршрутов
Итоги
- Папки в
app/— маршруты page.tsxделает сегмент доступным_folder— приватная папка(group)— группа без URL- kebab-case для URL
- Специальные файлы для layout, loading, error