Overview
Pages are MDX entries under content/pages. Each page includes SEO, a title, optional subtitle, and a sections list (Header, Text, Image). These pages render at the site root via the dynamic [slug] route.
Location and slug
- Collection: page
- Path:
content/pages - Filename: editable; generated from title by slugify (lowercase, trimmed).
Use unique slugs. Avoid reserved paths used by other routes (e.g. blog, docs, roadmap, changelog, dashboard, auth).
Fields
- seo - shared SEO object (title, description ≤ 160 chars, Open Graph, article meta).
- title - required.
- subtitle - optional.
- sections - list of content blocks (Header, Text, Image).
Sections and templates
Available templates for pages:
- Header -
variant(Primary/Secondary) andtext. - Text - rich text
content. - Image - image fields plus optional
source { title, url }.
The editor shows friendly labels via getSectionLabel to make blocks easy to identify.
Single page route
generateStaticParams()lists page slugs from the Tina connection for SSG.generateMetadata()mapspage.seowithgenerateSeoMetadata()andpathname: <slug>.- The page component renders:
- PageHeader (title, subtitle)
- PageSections (maps section types to UI templates)
PageSections mapping
The renderer maps Tina section types to UI components:
PageSectionsHeader→HeaderTemplatePageSectionsText→TextTemplatePageSectionsImage→ImageTemplate
Unknown templates are ignored gracefully.
SEO and sitemap
- Page-level SEO comes from the page’s seo object.
- The sitemap service reads pages from the Tina connection and uses
seo.openGraph.updatedTimeforlastModifiedwhen available. homeorindexis emitted as/in the sitemap.
Guidelines
- Keep titles short; slugs are generated from the title.
- Use Primary header for main sections and Secondary for subheads.
- Add image
sourceinfo when relevant. - Update
seo.openGraph.updatedTimewhen you make edits.