Frontmatter
Configure page titles, descriptions, icons, sidebar overrides, and SEO metadata with the YAML frontmatter block at the top of every MDX file.
Every MDX file starts with a YAML block between --- markers. This metadata controls your page title, sidebar appearance, and how the page looks when shared on social media or in search results.
Basic Frontmatter
Every page needs at least a title:
---
title: Getting Started
description: Learn the basics in 5 minutes
---
Available Fields
Required
| Field | Type | Description |
|---|---|---|
title | string | Page title shown in navigation and browser tab |
Recommended
| Field | Type | Description |
|---|---|---|
description | string | Brief summary for SEO and search results (50-160 chars) |
Optional
| Field | Type | Default | Description |
|---|---|---|---|
icon | string | - | Font Awesome icon shown next to the page title in sidebar navigation |
sidebarTitle | string | title | Shorter title for sidebar navigation |
mode | string | - | Set to "wide" for full-width layout |
hideFooter | boolean | false | Hide the social footer on this page |
rss | boolean | false | Enable RSS feed generation from Update components on this page |
search | boolean | true | Set to false to keep the page out of site search, AI chat answers, and MCP. It stays in your sidebar, sitemap, and llms.txt. See Keep a page out of search only |
private | boolean | false | Require the site password to view this page. Setting this on any page activates specific-pages mode on the next build. |
public | boolean | false | Exempt this page from password protection or JWT authentication when the whole site is gated. Wins over private: true if both are set. |
groups | string[] | - | With JWT authentication on, only visitors whose token lists at least one of these groups can open the page. Everyone else gets a 404 and doesn't see it in the navigation. Up to 32 groups per page. Ignored in password mode. See Group-based access. |
lastUpdatedDate | string | - | Override the "Last updated on" date for this page instead of using its last Git commit date. Quote the value: "2026-09-01". The footer line needs metadata.timestamp in docs.json; your sitemap and structured data use the date either way. See Last updated date |
Last updated date
With metadata.timestamp enabled in docs.json, every page shows the date of the last commit that touched its file. lastUpdatedDate replaces that date on one page:
---
title: Authentication
lastUpdatedDate: "2026-09-01"
---
Use it when you've reviewed a page and want to say so, or when a formatting commit moved a date without changing anything a reader would notice.
Quote the value. An unquoted 2026-09-01 is read as a timestamp rather than a date and can display a day off. A value that isn't a date is ignored. The commit date shows instead.
The footer line only appears with metadata.timestamp enabled. Your sitemap's <lastmod> and the page's structured-data dateModified use lastUpdatedDate even with the footer off. Set it when the date is what you mean, not only when you want it displayed.
The override also sets dateModified in the page's structured data. Search engines and AI assistants see the same date as your readers.
SEO & Social
Control how the page appears in search results and social previews. Set these as flat top-level keys or under a nested seo: block. Per-page values override your docs.json seo.metatags defaults.
| Field | Type | Default | Description |
|---|---|---|---|
keywords | string[] | - | Search keywords, emitted as a <meta name="keywords"> tag |
canonical | string | auto | Canonical URL for this page, overriding the auto-generated one |
noindex | boolean | false | Exclude this page from search engines and the sitemap |
og:* / twitter:* | string | - | Open Graph and Twitter/X social-preview tags (e.g. og:title, og:image, twitter:card) |
seo | object | - | Nested block holding any of the above plus arbitrary custom meta tags |
---
title: API Reference
description: REST endpoints and authentication
"og:image": /images/api-card.png
"twitter:card": summary_large_image
canonical: https://docs.acme.com/api-reference
---
See SEO Optimization for the full list of supported tags and examples.
After a build, paste the page URL into the free OpenGraph Preview tool to see how these tags render on X, Facebook, LinkedIn, Slack, Discord, and more.
Examples
Standard Documentation Page
---
title: Authentication
description: Secure your API with OAuth 2.0 and API keys
icon: lock
---
Long Title with Sidebar Override
---
title: Configuring Single Sign-On with SAML 2.0
sidebarTitle: SSO Setup
description: Set up enterprise SSO for your organization
---
The full title appears on the page. The shorter sidebarTitle appears in navigation.
Wide Layout
---
title: API Reference
description: Complete API documentation
mode: wide
---
Wide mode removes the table of contents and expands content to full width. Use it for API reference pages or content with wide tables.
Hide Footer
---
title: Custom Landing
description: A focused landing page experience
hideFooter: true
---
Use hideFooter for landing pages, changelog pages, or any page that shouldn't show social links at the bottom.
SEO Best Practices
Your title appears in:
- Browser tabs
- Search engine results
- Navigation sidebar
- Social media shares
Keep titles under 60 characters. Front-load important keywords.
# Good - clear and keyword-rich
title: Deploy to Production
# Avoid - vague or too long
title: How to Deploy Your Application to Production ServersDescriptions appear in search results and social previews. Aim for 50-160 characters that:
- Summarize the page content
- Include relevant keywords
- Give searchers a reason to click
# Good - actionable and specific
description: Deploy your docs to production in under 2 minutes with zero configuration
# Avoid - generic or missing
description: Documentation pageIcons make navigation faster to scan. Use the same icon for related pages:
| Topic | Suggested Icon |
|---|---|
| Getting started | rocket |
| Authentication | lock |
| API reference | code |
| Settings | gear |
| Billing | credit-card |
Browse icons at Font Awesome.
Validation
Jamdesk validates frontmatter when building. Common errors:
Error: Page "api/auth.mdx" is missing required field: titleFix: Add the title field to your frontmatter.
Error: Invalid frontmatter in "guide.mdx": unexpected tokenFix: Check for:
- Missing quotes around strings with special characters
- Incorrect indentation
- Missing colons after keys
Paste the block between the --- markers into the free YAML Validator to pinpoint the line and column of the error.
