SEO Optimization
Control titles, descriptions, and meta tags for search engines and social previews. Jamdesk auto-generates sitemaps and Open Graph images.
Optimize your docs for search engines and social previews by setting titles, descriptions, and metadata in frontmatter.
What Jamdesk Does Automatically
Optimizing Your Content
Write Effective Frontmatter
---
title: User Authentication # Under 60 characters
description: Set up OAuth, JWT, and session-based authentication # 120-160 characters
---
Front-load keywords. "Authentication setup" is better than "How to set up authentication."
Page Titles
- Keep under 60 characters to avoid truncation in search results
- Include your primary keyword near the beginning
- Make each title unique across your docs
Descriptions
- Aim for 120-160 characters
- Summarize what the reader will learn
- Include relevant keywords naturally
Auto-generated fallback. When description is missing from frontmatter, Jamdesk automatically extracts the first prose paragraph from your page content (up to 155 characters). Headings, code blocks, images, and MDX components are skipped. This is used for <meta name="description">, Open Graph, and Twitter cards. Writing an explicit description is still recommended for best results.
Controlling Indexing
Site-Wide Settings
In your docs.json, configure default robot behavior:
{
"seo": {
"metatags": {
"robots": "index, follow"
}
}
}Per-Page Control
Override indexing for specific pages in frontmatter:
---
title: Internal Notes
noindex: true
---
Use noindex for:
- Draft or work-in-progress pages
- Internal documentation
- Deprecated content you're keeping for reference
Canonical URLs
If your docs are accessible at multiple URLs, set a canonical:
---
title: Getting Started
canonical: https://docs.example.com/getting-started
---
You can also set a site-wide canonical base in docs.json. Jamdesk appends each page's
path to it, so every page gets a correct per-page canonical:
{
"seo": {
"metatags": {
"canonical": "https://docs.acme.com"
}
}
}Social Previews & Open Graph
Jamdesk auto-generates a branded 1200×630 social card for every page. Override any
social tag in frontmatter. You can use flat top-level keys or a
nested seo: block. Both work, and when the same key is set both ways, the flat
top-level value wins.
---
title: API Reference
description: REST API endpoints and authentication
"og:title": API Reference — Acme
"og:description": Everything you need to call the Acme API
"og:image": /images/api-social-card.png
"twitter:card": summary_large_image
"twitter:creator": "@acme"
keywords: ["api", "rest", "authentication"]
canonical: https://docs.acme.com/api-reference
------
title: API Reference
description: REST API endpoints and authentication
seo:
"og:title": API Reference — Acme
"og:image": /images/api-social-card.png
"twitter:card": summary_large_image
x-custom-tag: any custom meta value
---Supported tags
| Group | Tags |
|---|---|
| Open Graph | og:title, og:description, og:image, og:image:width, og:image:height, og:image:alt, og:url, og:type, og:site_name, og:locale, og:video, og:audio |
| Article | og:type: article with article:published_time, article:modified_time, article:author, article:section, article:tag |
| Twitter / X | twitter:card, twitter:title, twitter:description, twitter:image, twitter:image:alt, twitter:site, twitter:creator, twitter:player, app-card tags |
| Other | keywords, author, robots, googlebot, google-site-verification, theme-color, plus any custom tag (place custom tags under seo:) |
Custom OG image dimensions. When you set a custom og:image, also set og:image:width
and og:image:height so crawlers render it crisply. The auto-generated card is always
1200×630.
Custom tags. Arbitrary meta tags (e.g. x-pinterest) are emitted as <meta name="...">.
Put them under the seo: block. Only recognized SEO keys are picked up when placed flat.
Twitter / X card type
The twitter:card tag controls which layout X (and other platforms) use when your link is shared:
| Value | What it looks like |
|---|---|
summary | Small square thumbnail on the left, title + description beside it. Compact. |
summary_large_image | Large full-width image on top, title + description below. The big, eye-catching one. |
For a branded 1200×630 card, use summary_large_image so the image renders at full width.
Site-wide default image
Set a fallback social image for every page in docs.json. Any page that sets its own og:image overrides it:
{
"seo": {
"metatags": {
"og:image": "https://docs.acme.com/images/default-card.png"
}
}
}Preview before you publish. After a build, paste the page URL into an Open Graph preview tool (such as opengraph.xyz) to check how the card renders on each platform.
Sitemap & Robots.txt
Every Jamdesk site generates sitemap.xml and robots.txt automatically on each build.
| File | Purpose |
|---|---|
sitemap.xml | Lists all pages with last-modified dates for search engines |
robots.txt | Allows all crawlers and points them to the sitemap |
Where to find them
The URLs depend on whether your docs live at a root domain or under a /docs subpath:
If your docs are at the root of your domain (e.g., docs.acme.com or acme.jamdesk.app):
https://docs.acme.com/sitemap.xml
https://docs.acme.com/robots.txtWhat's included in the sitemap
- All published pages (excluding those with
noindexorhiddenfrontmatter) - Last-modified dates from frontmatter when available
- Weekly change frequency
Excluding pages from the sitemap
Add noindex to frontmatter to exclude a page from both the sitemap and search engines:
---
title: Internal Notes
noindex: true
---
Pages with hidden: true are also excluded automatically.
JSON-LD Structured Data
Every page automatically includes schema.org structured data as a <script type="application/ld+json"> tag with two schemas:
WebSite: your site name, URL, and description (fromdocs.json).BreadcrumbList: navigation path from Home to the current page, derived from yournavigationconfig.
No configuration needed. Search engines use this for rich results like breadcrumb trails in search listings.
Verify your markup. Paste any page URL into Google's Rich Results Test to confirm the structured data is detected.
IndexNow
After each build, Jamdesk automatically submits changed page URLs to IndexNow for faster search engine indexing. This notifies Bing, Yandex, and other participating search engines about your content changes without waiting for their next crawl cycle.
- Fires after every successful build
- Only submits pages that actually changed
- Non-blocking, so it never delays your build
- No configuration required
Best Practices
Run through this checklist before you publish:
Pre-publish checklist
- Unique titles — Every page has a distinct, descriptive title under 60 characters.
- Accurate descriptions — Descriptions summarize the page in 120–160 characters.
- Logical headings — Headings follow a clean hierarchy: one H1, then H2 → H3.
- Descriptive links — Internal links use meaningful anchor text, never "click here."
- Image alt text — Every image has alt text for accessibility and image search.
- Social image — Set a custom
og:imageon key pages, or rely on the auto-generated card.
