Navegación

El modelo completo de navegación — navbar, tabs, sidebar, breadcrumbs, on-this-page, page nav y el resolvedor de enlaces — incluyendo el protocolo site: y cómo se infieren los prefijos de locale y versión.

Boltdocs trae un sistema de navegación de cuatro capas. Entender las capas — y qué clave de configuración controla cada una — es la diferencia entre un sitio que los lectores recorren con fluidez y uno en el que se pierden.

text
┌───────────────────────────────────────────────────────────┐
│ Navbar (theme.navbar)          enlaces principales + dropdowns │
├──────────┬────────────────────────────────────────────────┤
│ Tabs     │                                                │
│ (theme.  │  Breadcrumbs (automáticos, desde la ruta)      │
│  tabs)   │                                                │
├──────────┤────────────────────────────────────────────────┤
│ Sidebar  │  Contenido de la página                        │
│ (auto o  │                    OnThisPage (rail derecho)   │
│  theme.  │                    — headings de la página     │
│  sidebar)│                                                │
│          │  PageNav (página anterior / siguiente)         │
└──────────┴────────────────────────────────────────────────┘
CapaClave de configQué hace
Navbartheme.navbarHeader global: branding, enlaces principales, dropdowns.
Tabstheme.tabsTira horizontal de secciones (Guías / API / Blog).
Sidebartheme.sidebar, theme.sidebarGroups, meta.jsonNavegación de directorio, auto-generada desde tu árbol de docs/.
BreadcrumbsautoRuta de migas sobre el título (consciente de locale/versión).
OnThisPageautoTOC en el rail derecho con los headings de la página actual.
PageNavautoEnlaces anterior / siguiente al final de cada página.

Las tres últimas las renderiza automáticamente el layout por defecto a partir de los datos de ruta — solo configuras las dos primeras y, opcionalmente, tomas control del sidebar.


El navbar es el header global. Muestra tu logo, título y enlaces principales. Los enlaces pueden ser entradas simples o dropdowns anidados:

boltdocs.config.ts
export default defineConfig({
  theme: {
    navbar: [
      { label: 'Docs', href: '/docs' },
      { label: 'Blog', href: '/blog' },
      {
        label: 'Recursos',
        href: '/recursos',
        items: [
          { label: 'Changelog', href: '/changelog' },
          { label: 'Showcase', href: '/showcase' },
        ],
      },
    ],
  },
})

Referencia del item de navbarLink

PropiedadTipoDescripción
labelstring | Record<string, string>Texto del enlace. Pasa un mapa de locales para i18n (p. ej. { en: 'Docs', es: 'Documentación' }).
hrefstringRuta de destino.
itemsNavbarItem[]Sub-items opcionales que se renderizan como dropdown al pasar el cursor.

Opciones de display relacionadas: theme.githubRepo añade automáticamente el icono de GitHub, y theme.socialLinks añade iconos de Discord/X/Bluesky.

¿Construyendo un navbar personalizado?

El navbar por defecto es un componente — consulta el componente Navbar para componer el tuyo con búsqueda, toggle de tema y drawer móvil.


Tabs — theme.tabsLink

Los tabs dividen tu documentación en secciones horizontales. Cada tab mapea a una carpeta entre paréntesis en docs/:

text
docs/
├── (guides)/        → tab "guides"
├── (api)/           → tab "api"
└── (blog)/          → tab "blog"
boltdocs.config.ts
export default defineConfig({
  theme: {
    tabs: [
      { id: 'guides', text: 'Guías', icon: 'BookOpen' },
      { id: 'api', text: 'API', icon: 'Code2' },
      { id: 'blog', text: 'Blog', icon: 'History' },
    ],
  },
})

Referencia de tabLink

PropiedadTipoDescripción
idstringDebe coincidir con el nombre de la carpeta entre paréntesis.
textstring | Record<string, string>Etiqueta mostrada en la tira de tabs.
iconstringNombre de icono Lucide o SVG en bruto opcional.

Los paréntesis se eliminan de las URLs: docs/(guides)/getting-started se sirve en /docs/guides/getting-started. Los tabs funcionan con i18n anidando carpetas de locale dentro de ellos. Consulta File-System Routing para las convenciones completas de carpetas.


El sidebar se genera automáticamente desde tu árbol de docs/ por defecto: cada carpeta se convierte en un grupo, cada archivo en un item hijo. Es la forma más rápida de tener un sidebar completo — nunca escribes config de navegación para ello.

  • Las carpetas se convierten en grupos colapsables; los títulos de grupo por defecto son el nombre de la carpeta capitalizado.
  • El orden viene de prefijos numéricos de archivo (01-intro.md) o del frontmatter sidebarPosition.
  • El meta.json de una carpeta controla su título, icono, orden y estado de colapso.

Sobrescribir títulos de grupo — theme.sidebarGroupsLink

Ajusta títulos e iconos de grupo sin reconstruir todo el sidebar:

boltdocs.config.ts
export default defineConfig({
  theme: {
    sidebarGroups: {
      'getting-started': { title: 'Quick Start', icon: 'Rocket' },
    },
  },
})

Toma control total de la estructura de un prefijo:

boltdocs.config.ts
export default defineConfig({
  theme: {
    sidebar: {
      '/docs/guides': [
        { text: 'Introduction', link: '/docs/guides/introduction' },
        { text: 'Installation', link: '/docs/guides/installation' },
      ],
    },
  },
})
Manual desactiva el auto-descubrimiento

Definir theme.sidebar para un prefijo desactiva el auto-descubrimiento para ese prefijo. Los items se listan exactamente como los defines.

Frontmatter de sidebar por páginaLink

Clave de frontmatterEfecto
sidebarPositionOrden numérico dentro del grupo.
sidebarLabelEtiqueta personalizada en el sidebar (por defecto usa title).
sidebarHiddentrue mantiene la página enrutable pero la oculta del sidebar.
badgeRenderiza un badge pequeño junto al item (p. ej. 'New', 'Beta').
iconIcono Lucide o SVG en bruto junto al item.

Consulta la guía de Routing para las reglas de orden y la guía de Metadatos para meta.json en profundidad.


Estos tres son automáticos — el layout por defecto los deriva de los metadatos de ruta. No los configuras, pero debes saber qué hacen y cómo sustituirlos:

  • Breadcrumbs — una ruta de migas sobre el título (p. ej. Guías → Navegación), construida desde la cadena de grupos de la ruta y localizada automáticamente. Referencia: Breadcrumbs.
  • OnThisPage — el TOC del rail derecho que lista los headings h2–h4 de la página. Referencia: OnThisPage.
  • PageNav — enlaces "Anterior / Siguiente" al final, siguiendo el orden del sidebar. Referencia: PageNav.

Usarlos en un layout personalizadoLink

Se exportan como primitivas, así que un layout personalizado puede colocarlas donde quieras:

tsx
import { Breadcrumbs, OnThisPage, PageNav } from 'boltdocs/primitives'

export function MyLayout() {
  return (
    <>
      <Breadcrumbs />
      <main>{/* contenido de la página */}</main>
      <OnThisPage />
      <PageNav />
    </>
  )
}

Todos los enlaces de Boltdocs — entradas del navbar, entradas del sidebar, cards y enlaces MDX — pasan por el mismo resolvedor de rutas (useLocalizedTo). Calcula la URL final a partir de una ruta canónica sin localizar más el contexto del visitante (locale, versión y base de docs). Escribes hrefs canónicos; el framework los localiza. El resolvedor nunca reescribe URLs externas.

Orden de resoluciónLink

Cuando el resolvedor ve un href, aplica estas reglas en orden:

  1. Las URLs externas pasan intactas — https://…, http://…, relativas de protocolo //…, otros esquemas URI (mailto:, tel:, data:), anclas internas (#section) y strings solo de query (?q=term).
  2. El prefijo site: fuerza la resolución contra la raíz del sitio — el destino se resuelve contra la raíz del sitio, fuera de la base de docs.
  3. Las rutas conocidas ganan — si la ruta coincide con una ruta del índice de rutas (incluidas las páginas de pages-external/ y las rutas de colección), se respeta su propio tipo: las páginas externas se quedan en la raíz, las colecciones se quedan bajo la base.
  4. Las rutas desconocidas con / se tratan como rutas de docs — se aplica la base configurada y se añaden los prefijos de locale/versión activos.

Tabla de decisión de hrefsLink

HrefTipoResolución
/docs/guides/getting-startedPágina de docsRuta canónica de docs. Localizada con el locale/versión activos.
/guides/getting-startedPágina de docs (sin base)La base se antepone automáticamente → /docs/guides/getting-started.
/roadmap, /showcasePágina externaRuta servida por una página de pages-external/. Las rutas externas conocidas se mantienen tal cual.
site:/Raíz del sitioResuelve a la raíz del sitio (localizada: / en el locale por defecto, /es en español).
site:/roadmapExterna con prefijo siteFuerza la resolución contra la raíz del sitio → /roadmap, incluso si la ruta no está en el índice.
site:/blog/postColección con prefijo siteUna colección conocida recibe la base → /docs/blog/post.
https://example.com, //cdn...URL externaNunca se reescribe — se pasa tal cual.
#section, ?q=termAncla / querySe pasa tal cual, unida a la URL de la página actual.

El protocolo site:Link

site: es un prefijo tipo URI que le dice al resolvedor que deje de tratar el destino como una ruta de docs. Es la vía de escape para enlaces que deben resolverse contra la raíz del sitio en lugar de la base de docs. En prosa a menudo lo verás escrito como site:// — la forma soportada es el prefijo site: seguido de la ruta absoluta (site:/ruta).

¿Cuándo se necesita?

  • Enlazar a páginas de nivel superior del sitio — la home, pricing, roadmap o una landing que vive fuera de docs/. Si la ruta no está en el índice del resolvedor, un /roadmap simple se trataría como ruta de docs y se convertiría en /docs/roadmap. site:/roadmap siempre resuelve a /roadmap.
  • Enlazar desde superficies que se renderizan pronto — banners, heroes y páginas externas que se renderizan antes de la hidratación pueden tener un índice de rutas vacío. site: mantiene esos enlaces correctos.
  • Enlazar a entradas de colección desde cualquier lugar — site:/blog/mi-post resuelve a /docs/blog/mi-post (la base se aplica a colecciones conocidas), así los enlaces de colección funcionan aunque el índice no esté cargado.
mdx
- [Home](site:/)
- [Roadmap](site:/roadmap)
- [Último release](site:/blog/boltdocs-3.3.0)
boltdocs.config.ts
export default defineConfig({
  theme: {
    navbar: [
      { label: 'Home', href: 'site:/' },
      { label: 'Docs', href: '/docs/guides' },
      { label: 'Showcase', href: '/showcase' },
    ],
  },
})
Las rutas externas conocidas no necesitan site:

Si una página está registrada en el índice de rutas (por ejemplo una página de pages-external/ como /showcase), un href /showcase simple ya resuelve correctamente — site: es para cuando quieres ser explícito o cuando la ruta puede no ser conocida.


Cómo funciona la inferencia de localeLink

El i18n se basa en convenciones de carpetas, y el resolvedor refleja esa convención en las URLs:

  • Las rutas canónicas nunca contienen un locale. Escribes /docs/guides/getting-started, no /es/docs/guides/getting-started.
  • El locale activo viene del contexto del visitante (la URL en la que está más su preferencia guardada).
  • Cuando el locale activo no es el predeterminado, el resolvedor lo antepone: /docs/guides/getting-started → /docs/es/guides/getting-started.
  • El locale predeterminado nunca recibe prefijo — vive en la raíz de la base.
  • El parsing también es consciente del locale: un primer segmento que coincida con un locale configurado (p. ej. /docs/es/...) se reconoce y se elimina antes de clasificar, así los enlaces mixtos también resuelven.
text
Locale activo: es (predeterminado: en)
  /docs/guides/getting-started  →  /docs/es/guides/getting-started
  site:/                        →  /es
  /docs/es/guides/getting-started  →  /docs/es/guides/getting-started (se mantiene)

Locale activo: en (predeterminado: en)
  /docs/guides/getting-started  →  /docs/guides/getting-started (sin prefijo)

Consulta Internacionalización para el layout de carpetas y el comportamiento de respaldo.


Cómo funciona la inferencia de versiónLink

El versionado sigue el mismo patrón que el locale:

  • Las rutas canónicas no contienen segmento de versión. Escribes /docs/guides/getting-started.
  • La versión activa viene del contexto del visitante. Cuando no es la versión predeterminada, el resolvedor antepone el/los segmento(s) de versión construidos desde versions.prefix + la ruta de la versión.
  • Una versión explícita en el destino gana sobre la preferencia activa: /docs/v2/guides/getting-started resuelve exactamente a eso, aunque el visitante esté leyendo v1.
  • Si el versionado está desactivado (o la versión es desconocida), nunca se añade un segmento de versión — una preferencia obsoleta no puede corromper las URLs.
text
Config: versions: { prefix: 'v', defaultVersion: 'v1', versions: [{ path: 'v1' }, { path: 'v2' }] }

Versión activa: v1 (predeterminada)
  /docs/guides/getting-started  →  /docs/guides/getting-started (sin prefijo)

Versión activa: v2, locale: es
  /docs/guides/getting-started  →  /docs/v2/es/guides/getting-started

Consulta Versionado para el layout de carpetas y la estructura de URLs.


Buenas prácticas para navegar desde MDXLink

1. Escribe siempre hrefs canónicos. Hardcodear prefijos de locale o versión rompe la localización — el resolvedor espera rutas canónicas sin localizar y añade los prefijos él mismo.

mdx
<!-- ✅ Canónico — se localiza automáticamente -->
- [Primeros pasos](/docs/guides/getting-started)

<!-- ❌ Nunca escribas prefijos de locale/versión a mano -->
- [Primeros pasos](/es/docs/guides/getting-started)
- [Primeros pasos](/v2/docs/guides/getting-started)

2. Usa rutas absolutas canónicas para enlaces entre páginas. Son inequívocas sin importar dónde viva la página actual:

mdx
- [Routing](/docs/guides/getting-started/routing)
- [Instalación](/docs/guides/getting-started/installation)

3. Usa enlaces relativos para saltos dentro de la misma carpeta y ../ para carpetas hermanas:

mdx
[Siguiente: metadatos](../content/metadata)

4. Usa site: para todo lo que deba vivir en la raíz del sitio — home, páginas de marketing o entradas de colección referenciadas desde fuera del tab de docs:

mdx
[Home](site:/)
[Blog](/docs/blog)
[Showcase](/showcase)

5. Mantén las anclas y queries locales. #section y ?q=term se conservan y se unen a la página actual:

mdx
[Saltar a la sección site:](#el-protocolo-site)

6. Prefiere <Link> sobre <a> en componentes. La primitiva Link de boltdocs/primitives pasa cada href por el resolvedor y mantiene la navegación client-side rápida. Llama a useLocalizedTo() directamente solo cuando necesites el string resuelto (estados activos, analytics, menús):

tsx
import { Link } from 'boltdocs/primitives'
import { useLocalizedTo } from 'boltdocs/client'

const resolved = useLocalizedTo('/docs/guides')

<Link href="/docs/guides">Guías</Link>
Nunca escribas prefijos de locale a mano

Hardcodear /es/docs/guides o /v2/docs/guides rompe la localización — el resolvedor espera rutas canónicas sin localizar. Escribe /docs/guides y deja que useLocalizedTo añada el prefijo del locale y la versión activos.


Cómo navegan los lectores (referencia rápida)Link

  1. Arriba — los enlaces del navbar cambian de área principal; los tabs cambian de sección de documentación.
  2. Izquierda — el sidebar muestra la estructura completa de la sección actual; la página activa está resaltada.
  3. Derecha — OnThisPage salta dentro de la página actual.
  4. Abajo — PageNav mueve a la página anterior/siguiente en orden de lectura.
  5. En todas partes — los breadcrumbs muestran dónde está la página en la jerarquía; la búsqueda (⌘K) encuentra páginas en todos los tabs.

Dónde seguirLink

Last updated on October 18, 2026

Was this page helpful?