Jamdesk Documentation logo

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

Meta Tags

Title and description from frontmatter become meta tags.

Open Graph

Social sharing images generated for each page.

Sitemap & Robots

XML sitemap and robots.txt generated on every build.

JSON-LD

Schema.org structured data on every page for rich search results.

IndexNow

Changed URLs submitted to search engines after each build.

AI Endpoints

llms.txt and MCP server for AI tools to read your docs.

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:

docs.json
{
  "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:

docs.json
{
  "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.

Flat (top-level)
---
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
---
Nested (seo block)
---
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

GroupTags
Open Graphog: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
Articleog:type: article with article:published_time, article:modified_time, article:author, article:section, article:tag
Twitter / Xtwitter:card, twitter:title, twitter:description, twitter:image, twitter:image:alt, twitter:site, twitter:creator, twitter:player, app-card tags
Otherkeywords, 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:

ValueWhat it looks like
summarySmall square thumbnail on the left, title + description beside it. Compact.
summary_large_imageLarge 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:

docs.json
{
  "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.

FilePurpose
sitemap.xmlLists all pages with last-modified dates for search engines
robots.txtAllows 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.txt

What's included in the sitemap

  • All published pages (excluding those with noindex or hidden frontmatter)
  • 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 (from docs.json).
  • BreadcrumbList: navigation path from Home to the current page, derived from your navigation config.

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:image on key pages, or rely on the auto-generated card.
Frontmatter Reference

All available frontmatter options

docs.json Reference

Site-wide configuration options