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 renders normally when someone visits its URL, but 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.
Keep hidden pages in search
If you want a hidden tab or group out of the sidebar but still indexed for site search, AI answers, and the sitemap, add "searchable": true:
{
"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
Sometimes a page should stay in the sidebar and stay indexable, but stop turning up when someone searches or asks a question. Add search: false to its frontmatter:
---
title: Legacy v1 endpoints
search: false
---
The page keeps its place in navigation, your sitemap, llms.txt, and your RSS feed, and search engines still index it. What it leaves is 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, so a reader searching for "Rate limits" lands on that heading rather than the top of a long page.
Two limits apply to that, and both are automatic:
| Limit | Value | What happens past it |
|---|---|---|
| Entries per page | 50 | Sections are indexed in page order. Once the 50th is used, every remaining section is left out of search. |
| Text per section | First 300 characters | Wording 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 single-handedly account for half an index and push genuinely 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.
If a page has more than ~50 headings, either split it into several pages — better navigation anyway — or, if it's machine-generated and nobody searches it by hand, add search: false to keep the whole thing out of the index.
To put a term where search can weigh it properly, use the page title (weighted highest), then a heading, then the description. Body text is weighted lowest and only its first 300 characters per section count.
seo.metatags.keywords does not feed site search. It emits an HTML <meta name="keywords"> tag, which Google has stated it ignores for ranking. There's no way to attach extra search terms to a page — put the words you want matched in the title, a heading, or the description.
Project-wide controls
Both flags live under seo in docs.json:
| Flag | Default | Effect |
|---|---|---|
seo.indexing | "navigable" | Only pages listed in your navigation appear in artifacts. Set to "all" to include every MDX file in your repo. |
seo.indexHiddenPages | false | Set 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
| Scenario | Frontmatter | docs.json | Visible in sidebar | Direct URL | In sitemap |
|---|---|---|---|---|---|
| Normal page | — | listed | Yes | Yes | Yes |
| Hidden via frontmatter | hidden: true | listed | No | Yes | No |
| Page not in nav (orphan) | — | omitted | No | Yes | No |
| Hidden group | — | hidden: true on group | No | Yes | No |
| Hidden + searchable group | — | hidden: true, searchable: true | No | Yes | Yes |
| Out of search only | search: false | listed | Yes | Yes | Yes |
| Project opts into indexing all | — | any | Same as above | Yes | Yes |
When to use each
- Drafts and previews: frontmatter
hidden: trueon 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, just not surfaced by search or AI: frontmatter
search: false
Hidden pages aren't access control. Anyone who has the URL can read them. For real access control, see Password Protection.
