Cada página emite un head completo, una descripción estructurada de sí misma, una
tarjeta social y una entrada en la sitemap. Casi todo lo escribe [Nuxt
SEO](https://nuxtseo.com), que la capa instala como un solo paquete; el resto es
la parte que depende de versiones y traducciones, y esa es propia de la capa. Un
valor tiene que venir de ti.

## Por página

- **Meta** — el título con el nombre del sitio añadido, la descripción y el par
  `og:`/`twitter:` derivado de ambos. `og:type` y `og:url` se fijan por página;
  `og:locale` y sus alternativas salen de los idiomas que sirve el sitio.
- **JSON-LD** — un grafo por página: un `WebSite` (y tu `Organization`, una vez
  definida) declarados para todo el sitio, más un `TechArticle` y una
  `BreadcrumbList` construida con el mismo rastro que dibuja la miga de pan.
- **Una imagen de Open Graph**, renderizada desde la plantilla propia de la capa
  — también en la página de inicio. Publica un componente con el mismo nombre
  para reemplazarla.
- **`canonical` y `robots`**, que son la mitad de versión — ver
  [URL y versiones](/concepts/urls-and-versions). El canónico de una versión
  antigua apunta a la actual, y por eso lo escribe la capa en lugar de dejar el
  automático del módulo.
- **Una alternativa en Markdown y su índice** — `rel="alternate"
  type="text/markdown"` apunta a esta página más `.md`, y `rel="describedby"` a
  `/llms.txt`. A diferencia del canónico, la alternativa nombra la página que se
  está representando, así que una versión antigua entrega su propio código
  fuente — ver [Lectores automáticos](/concepts/machine-readers).

La página de error lleva `noindex, follow`: una 404 indexada compite con la
página que buscaba quien lee, y las sugerencias que ofrece son páginas reales a
las que un rastreador todavía debe llegar.

## Para todo el sitio

`/sitemap.xml` lista las páginas de la versión por defecto, por idioma. Una
versión que no es la por defecto queda excluida porque sus páginas llevan
`noindex` de todos modos, y una versión `eol` queda excluida sea o no la por
defecto: listar cualquiera de las dos pide a un rastreador que traiga justo lo
que la página le dirá luego que descarte. `/robots.txt` se genera al lado.

`duxt.organization` es lo que nombra a quien publica — ver
[Configuración](/reference/configuration). Sin definir, el sitio sigue
describiéndose como un `WebSite`; lo que pierde es la entidad detrás, que es lo
que lee un panel de conocimiento o un resumen de IA para acreditar una fuente.

## Qué se comprueba y qué solo se informa

`pnpm check:seo` lee las páginas construidas y falla ante un segundo `canonical`,
un `hreflang` ausente, una página de error indexable, un `og:locale` con formato
incorrecto, un grafo que no se analiza o una página que no enlaza a su
alternativa en Markdown y a `/llms.txt`. Se ejecuta en `pnpm check` después de la
compilación, porque estas etiquetas solo existen en el HTML renderizado.

El verificador de enlaces informa en lugar de fallar. Un enlace que no lleva a
ninguna parte ya hace fallar la compilación mediante las
[comprobaciones de compilación](/concepts/build-checks) propias de la capa, que
son las que entienden versiones y respaldos de idioma; el valor del módulo aquí
es el panel de devtools y la comprobación en vivo mientras se escribe.

## El único valor que debes declarar

El origen. `hreflang`, `canonical`, el sitemap y las imágenes de Open Graph son
todas URL absolutas, y una capa no puede conocer el dominio en el que se
desplegará. Define `i18n.baseUrl` o `NUXT_PUBLIC_I18N_BASE_URL`; la capa lo
copia a `site.url`, que es donde miran los módulos de SEO.

Si no se define, cada uno de ellos degrada a salida relativa en lugar de
inventar un dominio. Esa es la elección deliberada: un `canonical` relativo
sigue resolviéndose correctamente, y uno adivinado es activamente erróneo —
apuntaría a un rastreador al sitio de otra persona.

## Una variable más para un despliegue progresivo

`NUXT_OG_IMAGE_SECRET` firma las URL de las imágenes de Open Graph. Sin ella se
genera un secreto por compilación, lo cual está bien con una instancia y mal con
dos: una tarjeta cuya URL firmó una instancia es rechazada por la siguiente, así
que un enlace compartido durante un despliegue progresivo pierde su imagen.
Genérala una vez; no rota.