---
title: Optimización SEO
description: Controla títulos, descripciones y metaetiquetas para motores de búsqueda y vistas previas sociales. Jamdesk genera sitemaps e imágenes Open Graph automáticamente.
---

Optimiza tu documentación para motores de búsqueda y vistas previas sociales configurando títulos, descripciones y metadatos en el frontmatter.

## Qué hace Jamdesk automáticamente

<Columns cols={3}>
  <Card title="Metaetiquetas" icon="tags">
    El título y la descripción del frontmatter se convierten en metaetiquetas.
  </Card>
  <Card title="Open Graph" icon="share">
    Se generan imágenes para compartir en redes sociales por cada página.
  </Card>
  <Card title="Sitemap y Robots" icon="sitemap">
    El sitemap XML y robots.txt se generan en cada build.
  </Card>
  <Card title="JSON-LD" icon="code">
    Datos estructurados de Schema.org en cada página para resultados de búsqueda enriquecidos.
  </Card>
  <Card title="IndexNow" icon="bolt">
    Las URLs modificadas se envían a los motores de búsqueda después de cada build.
  </Card>
  <Card title="Endpoints de IA" icon="robot" href="/es/ai/overview">
    `llms.txt` y servidor MCP para que las herramientas de IA lean tu documentación.
  </Card>
</Columns>

## Optimizar tu contenido

### Escribir un frontmatter eficaz

```yaml
---
title: User Authentication    # Under 60 characters
description: Set up OAuth, JWT, and session-based authentication  # 120-160 characters
---
```

<Tip>
**Coloca las palabras clave al principio.** "Configuración de autenticación" es mejor que "Cómo configurar la autenticación."
</Tip>

### Títulos de página

- Mantén menos de 60 caracteres para evitar truncamiento en los resultados de búsqueda
- Incluye tu palabra clave principal cerca del inicio
- Haz que cada título sea único en toda tu documentación

### Descripciones

- Apunta a 120-160 caracteres
- Resume lo que el lector aprenderá
- Incluye palabras clave relevantes de forma natural

<Note>
**Fallback generado automáticamente.** Cuando falta `description` en el frontmatter, Jamdesk extrae automáticamente el primer párrafo en prosa del contenido de la página (hasta 155 caracteres). Se omiten encabezados, bloques de código, imágenes y componentes MDX. Esto se usa para `<meta name="description">`, Open Graph y tarjetas de Twitter. Se recomienda escribir una descripción explícita para mejores resultados.
</Note>

## Controlar la indexación

### Configuración global del sitio

En tu `docs.json`, configura el comportamiento predeterminado de los robots:

```json docs.json
{
  "seo": {
    "metatags": {
      "robots": "index, follow"
    }
  }
}
```

### Control por página

Sobrescribe la indexación de páginas específicas en el frontmatter:

```yaml
---
title: Internal Notes
noindex: true
---
```

Usa `noindex` para:
- Páginas en borrador o en progreso
- Documentación interna
- Contenido obsoleto que conservas como referencia

## URLs canónicas

Si tu documentación es accesible desde varias URLs, define una canónica:

```yaml
---
title: Getting Started
canonical: https://docs.example.com/getting-started
---
```

También puedes definir una base canónica global en `docs.json`. Jamdesk añade la ruta de cada página, de modo que cada página obtiene una URL canónica correcta:

```json docs.json
{
  "seo": {
    "metatags": {
      "canonical": "https://docs.acme.com"
    }
  }
}
```

## Vistas previas sociales y Open Graph

Jamdesk genera automáticamente una tarjeta social con marca de 1200×630 píxeles para cada página. Puedes sobrescribir cualquier etiqueta social en el frontmatter. Puedes usar **claves planas de nivel superior** o un bloque **`seo:`** anidado. Ambos funcionan; cuando la misma clave está definida de las dos formas, el valor plano de nivel superior tiene prioridad.

<CodeGroup>
```yaml 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
---
```

```yaml 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
---
```
</CodeGroup>

### Etiquetas compatibles

| Grupo | Etiquetas |
|-------|-----------|
| 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` con `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 |
| Otros | `keywords`, `author`, `robots`, `googlebot`, `google-site-verification`, `theme-color`, más cualquier etiqueta personalizada (coloca las etiquetas personalizadas bajo `seo:`) |

<Note>
**Dimensiones de imagen OG personalizadas.** Cuando defines un `og:image` personalizado, define también `og:image:width`
y `og:image:height` para que los rastreadores lo rendericen correctamente. La tarjeta generada automáticamente siempre es
1200×630.
</Note>

<Note>
**Etiquetas personalizadas.** Las metaetiquetas arbitrarias (p. ej. `x-pinterest`) se emiten como `<meta name="...">`.
Colócalas bajo el bloque `seo:`. Solo las claves SEO reconocidas se procesan cuando se colocan de forma plana.
</Note>

### Imagen predeterminada global del sitio

Define una imagen social de reserva para todas las páginas en `docs.json`. Cualquier página que defina su propio `og:image` la sobrescribirá:

```json docs.json
{
  "seo": {
    "metatags": {
      "og:image": "https://docs.acme.com/images/default-card.png"
    }
  }
}
```

<Tip>
**Previsualiza antes de publicar.** Después de un build, pega la URL de la página en una herramienta de preview de Open Graph (como [opengraph.xyz](https://www.opengraph.xyz)) para verificar cómo se renderiza la tarjeta en cada plataforma.
</Tip>

## Sitemap y Robots.txt

Cada sitio de Jamdesk genera `sitemap.xml` y `robots.txt` automáticamente en cada build.

| Archivo | Propósito |
|---------|-----------|
| `sitemap.xml` | Lista todas las páginas con fechas de última modificación para los motores de búsqueda |
| `robots.txt` | Permite todos los rastreadores y los dirige al sitemap |

### Dónde encontrarlos

Las URLs dependen de si tu documentación está en un dominio raíz o bajo una subruta `/docs`:

<Tabs>
  <Tab title="Dominio raíz">
    Si tu documentación está en la raíz de tu dominio (p. ej., `docs.acme.com` o `acme.jamdesk.app`):

    ```bash
    https://docs.acme.com/sitemap.xml
    https://docs.acme.com/robots.txt
    ```
  </Tab>
  <Tab title="Subruta /docs">
    Si tu documentación está bajo `/docs` en tu sitio principal (como este sitio en `jamdesk.com/docs`):

    ```bash
    https://jamdesk.com/docs/sitemap.xml
    https://jamdesk.com/docs/robots.txt
    ```
  </Tab>
</Tabs>

### Qué se incluye en el sitemap

- Todas las páginas publicadas (excluyendo las que tienen `noindex` o `hidden` en el frontmatter)
- Fechas de última modificación del frontmatter cuando están disponibles
- Frecuencia de cambio semanal

### Excluir páginas del sitemap

Añade `noindex` al frontmatter para excluir una página tanto del sitemap como de los motores de búsqueda:

```yaml
---
title: Internal Notes
noindex: true
---
```

Las páginas con `hidden: true` también se excluyen automáticamente.

## Datos estructurados JSON-LD

Cada página incluye automáticamente datos estructurados de [schema.org](https://schema.org) como una etiqueta `<script type="application/ld+json">` con dos esquemas:

- `WebSite`: nombre del sitio, URL y descripción (de `docs.json`).
- `BreadcrumbList`: ruta de navegación desde Inicio hasta la página actual, derivada de tu configuración de `navigation`.

No se requiere configuración. Los motores de búsqueda usan esto para resultados enriquecidos como rutas de navegación en los listados de búsqueda.

<Tip>
**Verifica tu marcado.** Pega cualquier URL de página en la [Prueba de resultados enriquecidos de Google](https://search.google.com/test/rich-results) para confirmar que los datos estructurados son detectados.
</Tip>

## IndexNow

Después de cada build, Jamdesk envía automáticamente las URLs de páginas modificadas a [IndexNow](https://www.indexnow.org) para una indexación más rápida en los motores de búsqueda. Esto notifica a Bing, Yandex y otros motores de búsqueda participantes sobre los cambios en tu contenido sin esperar su próximo ciclo de rastreo.

- Se activa después de cada build exitoso
- Solo envía las páginas que realmente cambiaron
- No bloquea el proceso, por lo que nunca retrasa tu build
- No requiere configuración

## Buenas prácticas

Revisa esta lista antes de publicar:

<Columns cols={2}>
  <Card title="Títulos únicos" icon="heading">
    Cada página tiene un título distinto y descriptivo de menos de 60 caracteres.
  </Card>
  <Card title="Descripciones precisas" icon="align-left">
    Las descripciones resumen la página en 120–160 caracteres.
  </Card>
  <Card title="Encabezados lógicos" icon="list-tree">
    Los encabezados siguen una jerarquía clara: un H1, luego H2 → H3.
  </Card>
  <Card title="Enlaces descriptivos" icon="link">
    Los enlaces internos usan texto de anclaje significativo, nunca "haz clic aquí."
  </Card>
  <Card title="Texto alternativo en imágenes" icon="image">
    Toda imagen tiene texto alternativo para accesibilidad y búsqueda de imágenes.
  </Card>
  <Card title="Imagen social" icon="share-nodes">
    Define un `og:image` personalizado en páginas clave, o usa la tarjeta generada automáticamente.
  </Card>
</Columns>

## Artículos relacionados

<Columns cols={2}>
  <Card title="Referencia de frontmatter" icon="file-lines" href="/es/content/frontmatter">
    Todas las opciones de frontmatter disponibles
  </Card>
  <Card title="Referencia de docs.json" icon="gear" href="/es/config/docs-json-reference">
    Opciones de configuración global del sitio
  </Card>
</Columns>
