Jamdesk Documentation logo

Hidden pages

Keep pages out of your sidebar and search results without deleting them. Use frontmatter, docs.json, or seo controls to manage visibility.

Some pages don't belong in the public sidebar: drafts, internal handbooks, deprecated guides you still need to link to. Hidden pages stay reachable by direct URL but disappear from navigation, search, your sitemap, and the AI context fed to LLMs.

Hide a single page

Add hidden: true to the page's frontmatter:

---
title: Internal handbook
hidden: true
---

The page still renders at its URL. Jamdesk:

  • Drops it from the sidebar
  • Adds <meta name="robots" content="noindex, follow"> so search engines skip it
  • Excludes it from sitemap.xml, llms.txt, llms-full.txt, and on-site search

Hide a whole group or tab

Set "hidden": true on a group or tab in docs.json:

{
  "navigation": {
    "tabs": [
      {
        "tab": "Public",
        "groups": [{ "group": "Guides", "pages": ["intro", "quickstart"] }]
      },
      {
        "tab": "Internal",
        "hidden": true,
        "groups": [{ "group": "Runbooks", "pages": ["oncall", "postmortems"] }]
      }
    ]
  }
}

Every page under the hidden node inherits the rule. The same flag works on tabs, groups, anchors, dropdowns, products, languages, and versions.

Add "searchable": true to keep a hidden tab or group indexed for site search, AI answers, and the sitemap:

{
  "tab": "Internal",
  "hidden": true,
  "searchable": true,
  "groups": [{ "group": "Runbooks", "pages": ["oncall"] }]
}

Frontmatter hidden: true on a child page still wins. searchable only re-opens descendants that haven't opted out themselves.

Keep a page out of search only

Add search: false to the frontmatter of a page that should stay in the sidebar and stay indexable, but not turn up in site search or AI answers:

---
title: Legacy v1 endpoints
search: false
---

The page keeps its place in navigation, your sitemap, llms.txt, and your RSS feed. Search engines still index it. It leaves the lookup surfaces: on-site search, AI chat answers, and the MCP server.

search: false is the opposite job from hidden: true. hidden takes a page out of navigation and the indexing surfaces. search: false leaves all of that alone and only stops the page being retrieved. Don't confuse it with the navigation-level searchable, which opts hidden pages back into search.

How much of a page gets indexed

Search doesn't index a page as one blob. It indexes it section by section. Each heading becomes its own search entry. A search for "Rate limits" lands on that heading rather than the top of a long page.

Two limits apply automatically:

LimitValueWhat happens past it
Entries per page50Sections are indexed in page order. Sections after the 50th are left out of search.
Text per sectionFirst 300 charactersWording deeper into a section isn't matched.

The page itself takes one of the 50 slots, so 49 sections are indexed.

The cap exists because search weighs every entry against the rest of your index. One page emitting hundreds of entries crowds the others out of results. A generated changelog can fill half an index and push relevant pages off the first screen.

A page over the cap still renders in full. Only its later sections stop being findable, and nothing on the page tells your readers that.

Split a page with more than ~50 headings into several pages. That also improves navigation. For a machine-generated page that nobody searches by hand, add search: false instead to keep the whole page out of the index.

Put a term where search weighs it most: the page title (weighted highest), then a heading, then the description. Body text is weighted lowest. Only its first 300 characters per section count.

seo.metatags.keywords does not feed site search. It emits an HTML <meta name="keywords"> tag. Google has stated it ignores that tag for ranking. You can't attach extra search terms to a page. Put the words you want matched in the title, a heading, or the description.

Project-wide controls

These flags live under seo in docs.json:

FlagDefaultEffect
seo.indexing"navigable"Only pages listed in your navigation appear in artifacts. Set to "all" to include every MDX file in your repo.
seo.indexHiddenPagesfalseSet to true to include hidden: true pages in sitemap, llms.txt, and search, and drop the auto-noindex tag.

Example:

{
  "seo": {
    "indexing": "all"
  }
}

Quick reference

ScenarioFrontmatterdocs.jsonVisible in sidebarDirect URLIn sitemap
Normal page-listedYesYesYes
Hidden via frontmatterhidden: truelistedNoYesNo
Page not in nav (orphan)-omittedNoYesNo
Hidden group-hidden: true on groupNoYesNo
Hidden + searchable group-hidden: true, searchable: trueNoYesYes
Out of search onlysearch: falselistedYesYesYes
Project opts into indexing all-anySame as aboveYesYes

When to use each

  • Drafts and previews: frontmatter hidden: true on individual pages
  • Internal sections for a small team: a hidden group or tab
  • Compliance docs that should be public but not promoted: hidden group with searchable: true
  • Full-repo indexing for AI grounding only: seo.indexing: "all"
  • Superseded pages you still want linkable and indexed but not surfaced by search or AI: frontmatter search: false

Hidden pages aren't access control. Anyone who has the URL can read them. For access control, see Password Protection.