Pages Configuration
The pages: block in site.yaml defines all pages on your site.
Location
config/site.yaml → pages:
Structure
# site.yaml
site:
# ... site metadata
pages:
docs:
base_url: "/docs/final-docs"
type: docs
layout: "@docs/doc_style1"
data: "@data/docs/final_docs"
blog:
base_url: "/blog"
type: blog
layout: "@blog/blog_style1"
data: "@data/blog"
home:
base_url: "/"
type: custom
layout: "@custom/home"
data: "@data/pages/home.yaml"
Page Properties
| Property | Type | Required | Description |
|---|---|---|---|
base_url |
string |
Yes | URL path for this section |
type |
string |
Yes | Content type: docs, blog, or custom |
layout |
string |
Yes | Layout alias to use |
data |
string |
Yes | Path to content directory or file |
Page Types
type: docs
Documentation pages with sidebar navigation:
docs:
base_url: "/docs/final-docs"
type: docs
layout: "@docs/doc_style1"
data: "@data/docs/final_docs"
- Uses
XX_prefix for ordering - Generates sidebar from folder structure
- Supports nested folders
type: blog
Blog posts with date-based ordering:
blog:
base_url: "/blog"
type: blog
layout: "@blog/blog_style1"
data: "@data/blog"
- Uses
YYYY-MM-DD-slugnaming - Automatic chronological sorting
- Generates blog index page
type: custom
Custom pages with YAML data:
home:
base_url: "/"
type: custom
layout: "@custom/home"
data: "@data/pages/home.yaml"
- Single YAML data file
- Complete design control
Layout Aliases
| Alias Pattern | Resolves To |
|---|---|
@docs/style_name |
src/layouts/docs/styles/style_name/Layout.astro |
@blog/style_name |
src/layouts/blog/styles/style_name/Layout.astro |
@custom/style_name |
src/layouts/custom/styles/style_name/Layout.astro |
Data Aliases
| Alias Pattern | Resolves To |
|---|---|
@data/path |
DATA_DIR/data/path |
@data/file.yaml |
DATA_DIR/data/file.yaml |
Multiple Documentation Sections
You can define multiple independent doc sections:
pages:
docs:
base_url: "/docs/final-docs"
type: docs
layout: "@docs/doc_style1"
data: "@data/docs/final_docs"
layouts:
base_url: "/docs/layouts"
type: docs
layout: "@docs/doc_style1"
data: "@data/docs/layouts"
components:
base_url: "/docs/components"
type: docs
layout: "@docs/doc_style1"
data: "@data/docs/components"
Each section:
- Has its own URL path
- Has its own sidebar
- Can use different layouts
- Is independent in navigation
Page References
Other configs can reference pages by name:
# In footer.yaml
links:
- label: "Blog"
page: "blog" # Resolves to "/blog"
- label: "About"
page: "about" # Resolves to "/about"
TypeScript Interface
type PageType = 'docs' | 'blog' | 'custom';
interface PageConfig {
base_url: string;
type: PageType;
layout: string;
data: string;
}
interface SiteConfig {
site: SiteMetadata;
pages: Record<string, PageConfig>;
}
Helper Functions
import { getPages, getPage, resolvePageUrl } from '@loaders/config';
// Get all pages
const pages = getPages();
// Get specific page
const blogConfig = getPage('blog');
// Resolve page name to URL
const blogUrl = resolvePageUrl('blog'); // "/blog"
Route Validation
The system validates routes at build time:
import { validateRoutes, getPages } from '@loaders/config';
const errors = validateRoutes(getPages());
// Returns errors for overlapping routes (except /)
Example error:
Overlapping routes: "docs" (/docs) and "api" (/docs/api)