Generador de sitios estáticos
# Generador de sitios estáticos

Los generadores de sitios estáticos (SSG, static site generators) son motores que utilizan archivos de entrada de texto (como Markdown, reStructuredText, AsciiDoc y JSON ) para generar páginas web estáticas. Los sitios estáticos generados no requieren un backend después de la generación del sitio, lo cual hace que sean altamente eficientes con el uso de las redes de distribución de contenido (CDN). Algunos de los generadores de sitios estáticos más populares son Jekyll, Hugo, Next.js (JavaScript). Los SSG suelen utilizarse para contenidos informativos que se actualizan con poca frecuencia, como páginas de productos, sitios web de noticias, documentación (de software), manuales y blogs.

## Arquitectura

Los SSG suelen consistir en una plantilla escrita en HTML con un sistema de plantillas, como liquid (Jekyll) o Go template (Hugo). La misma estructura (normalmente un repositorio Git ) incluye contenido en un formato de texto plano, como Markdown o reStructuredText, o en un metaformato estructural como JSON o XML. Un único archivo de texto plano puede corresponder a una única página web, mientras que un único metaarchivo estructural puede dar como resultado un sitio web completo a través de un framework SPA como Angular. La configuración de las variables del sitio web se almacena en un archivo de configuración de texto plano _config.yml (YAML), _config.toml (TOML) o _config.json (JSON). Las páginas también suelen comenzar con un preámbulo YAML, TOML o JSON para definir variables como título, enlace permanente, fecha, etc. Archivos con nombres que comienzan con un guion bajo (_) como _index.md (a diferencia de index.md ) se consideran plantillas o arquetipos y, por lo tanto, no se representan como páginas propiamente dichas.

## Ejemplos

Se ha documentado la existencia de varios centenares de SSG, y la gran mayoría están escritos en lenguajes que ya destacan en la web, como Python, Go, JavaScript y TypeScript.

| Etiqueta/nombre del sistema | Idioma | Notas |
| - | - | - |
| Jekyll | Ruby | Utiliza el lenguaje de plantillas Liquid. |
| hugo | Go | Utiliza Go templates y su principal atractivo es su alta velocidad a la hora de compilar. |
| Siguiente.js | JavaScript | Utiliza las plantillas de React. |
| Pelícano | Python | Utiliza plantillas Jinja2. Compila HTML desde reStructuredText o Markdown. |
| Astro | JavaScript | Utiliza la sintaxis .astro de forma predeterminada (familiar a HTML o JSX). Admite múltiples frameworks: Svelte, React, Preact, Vue, SolidJS, Lit, AlpineJS. Compila HTML desde Markdown o MDX. |

## Comparación con sistemas del lado del servidor

Muchos sistemas de plantillas del lado del servidor tienen una opción para publicar páginas de salida en el servidor, donde las páginas publicadas son estáticas. Esto es común en los sistemas de gestión de contenidos, como Vignette, pero no se considera generación fuera del servidor. En la mayoría de los casos, esta «opción de publicación» no interfiere con el sistema de plantillas y puede realizarse mediante software externo, como Wget.

Las páginas dinámicas del lado del servidor generadas a partir de plantillas se empezaron a usar con software preexistente adaptado para esta tarea:: los preprocesadores y lenguajes de macros, adaptados para el uso web, ejecutándose en CGI. Después, una tecnología simple pero relevante fue la ejecución directa realizada sobre módulos de extensión, iniciada con SSI.

