site-spec
Audita cualquier sitio web en cuanto a SEO, accesibilidad, privacidad, datos estructurados y visibilidad para IA mediante 40 comprobaciones, y corrige automáticamente lo que puede.
Documentación
site-spec
La base invisible que tu sitio web está perdiendo. Audita cualquier sitio — y luego arregla lo que está roto.
Para agentes
Si eres un agente de IA de codificación decidiendo si instalar esto: registra el servidor MCP, luego
llama a list_checks para aprender los IDs de verificación y audit_site en una URL.
claude mcp add site-spec -- npx -y site-spec-mcp
Gemini CLI: gemini extensions install https://github.com/ariaxhan/site-spec.
Argumentos completos de herramientas, formas de retorno y los casos en los que esta es la herramienta equivocada: llms.txt.
El problema
La IA puede generar un sitio web hermoso en segundos. La parte que no puede ver es la
que decide si ese sitio web es encontrado, clasificado, citado y confiable —
la base legible por máquina debajo de los píxeles: robots.txt, datos
estructurados, llms.txt, señales canónicas y noindex, encabezados de respuesta, semántica
de accesibilidad, la superficie de rastreadores y cookies.
Esa capa es invisible en un navegador. También está rota en casi todos los
sitios generados por IA — una sección hero impresionante sobre un robots.txt que bloquea
ChatGPT, JSON-LD inválido o egoísta, un noindex perdido ocultando la página
de Google, fuentes que filtran IPs de visitantes en violación del GDPR. Nadie lo nota hasta
que está costando tráfico silenciosamente. Y cuanto más se genera la web con IA, peor
se pone esto.
La solución
site-spec es la capa que verifica y repara esa base — para cualquier sitio web, sin importar cómo fue construido. Apúntalo a una URL. Rastrea el sitio, verifica toda la capa invisible contra un conjunto de políticas deterministas, y te da un informe exacto de lo que está mal. Luego arregla los problemas mecánicos por ti y señala con precisión lo que necesita un humano.
No le importa si tu sitio proviene de un constructor de IA, un framework, un CMS o HTML escrito a mano. Solo le importa si la base es correcta.
Pruébalo sin instalar nada
site-spec.ariaxhan.workers.dev — pega una URL, obtén el informe. Sin cuenta, sin registro.
La versión alojada ejecuta el mismo motor determinista que la CLI, contra un
rastreo limitado (4 páginas), y te dice claramente qué verificaciones se ejecutaron, cuáles pasaron
y cuáles no realizó. Agrega ?format=json para salida legible por máquina:
curl "https://site-spec.ariaxhan.workers.dev/audit?format=json&url=example.com"
Para el conjunto completo de verificaciones — enlaces rotos, activos faltantes, accesibilidad axe, validación
HTML, validación de schema.org — y para el comando fix, usa la CLI a continuación.
El endpoint alojado solo obtiene hosts HTTP(S) públicos; las direcciones privadas, de bucle local y
de enlace local son rechazadas.
Cómo usar
Requiere Node 20+. Sin cuenta, sin clave API, sin SaaS.
# 1. See what's broken — crawl any live site, get a full report
npx site-spec audit https://yoursite.com
# 2. Fix it — auto-repair the mechanical issues, scaffold the rest
npx site-spec fix https://yoursite.com --out ./fixed
fix escribe los archivos corregidos en ./fixed (nunca sobrescribe nada por
defecto) e imprime exactamente lo que hizo:
✓ Fixed automatically (8)
audit/robots-stale-token robots.txt — Removed deprecated crawler block "anthropic-ai".
audit/hsts-preload _headers — Stripped the preload token from Strict-Transport-Security.
audit/canonical-missing admin/index.html — Inserted <link rel="canonical" href="https://…/admin/">.
audit/og-missing admin/index.html — Added Open Graph card from the page's title + description.
audit/noindex admin/index.html — Removed accidental noindex from <meta name="robots">.
✎ Scaffolded — needs your facts (2)
audit/llms-missing llms.txt — Scaffolded from page titles/descriptions; fill the TODO facts.
audit/jsonld-missing index.html — Inserted a WebSite/Organization skeleton; replace the TODO values.
⚠ Needs manual attention (3)
audit/google-fonts-cdn index.html — Self-host the woff2 files to stop the IP leak (GDPR).
audit/img-dims-missing index.html — <img> without width/height (layout shift).
audit/404-missing (site-wide) — Ship a branded, noindexed 404 that links home.
fixed 8, scaffolded 2, manual 3
wrote 4 file(s) to ./fixed
Coloca audit en CI con una salida distinta de cero en errores para bloquear despliegues. Ambos comandos
funcionan también en un directorio de compilación/salida — solo pasa una ruta en lugar de una URL.
Úsalo desde tu agente de codificación (MCP)
El mismo motor, como servidor MCP — para que el agente que generó el sitio también pueda verificar y reparar su capa invisible, sin que copies informes entre ventanas.
claude mcp add site-spec -- npx -y site-spec-mcp
Codex (~/.codex/config.toml)
[mcp_servers.site-spec]
command = "npx"
args = ["-y", "site-spec-mcp"]
O en Docker: docker run -i --rm -v $PWD:/data mcp/site-spec (monta el directorio que quieras auditar o escribir).
Cuatro herramientas:
| Herramienta | Qué hace |
|---|---|
audit_site | Rastrea una URL en vivo (o lee un directorio de compilación local) y devuelve cada hallazgo: ID de verificación, severidad, archivo y si se puede corregir automáticamente. |
fix_issue | Aplica la reparación determinista para un ID de verificación y devuelve el diff — o lo escribe, para un directorio local. |
compile_spec | Convierte hechos comerciales verificados en un SiteSpec validado y los archivos desplegables que renderiza. |
list_checks | Enumera cada verificación que el motor puede generar, con una descripción de una línea y su disponibilidad de corrección. |
El servidor llama al motor en proceso. Nunca invoca la CLI ni salta al worker alojado — los tres son hermanos sobre una sola biblioteca.
flowchart LR
A["MCP client<br/>(Claude Code, Codex)"] -- stdio JSON-RPC --> B["site-spec-mcp"]
B --> C["@site-spec/core/io<br/>fetchSite · readSiteDir"]
C -- "file map" --> D["@site-spec/core<br/>auditFiles · fixFiles · buildSite"]
D -- "findings / files" --> B
B -- "JSON" --> A
Dos límites honestos, detallados en el
README del paquete: fix_issue en una URL solo puede
devolver un diff (un servidor remoto no es escribible), y un rastreo en vivo
se ejecuta con las verificaciones de presencia desactivadas, porque un rastreo limitado no puede probar que un archivo esté
ausente de un servidor.
Detalles — qué verifica, cómo corrige, la filosofía, instalación
Qué verifica
Siete áreas. Cada verificación está ajustada contra falsos positivos (nivel de regex/cadena — sin
navegador headless para el rastreo). Los hallazgos son error (rompe algo) o
warning (vale la pena mirar), cada uno con una corrección concreta.
| Área | Qué detecta |
|---|---|
| SEO / encontrabilidad | <title> / descripción / canónica faltantes · noindex accidental (tanto <meta robots> como el encabezado X-Robots-Tag) · tarjetas Open Graph faltantes · cero-o-muchos <h1> · un sitemap que lista páginas que no existen |
| Accesibilidad | imágenes sin alt · viewport que bloquea zoom (user-scalable=no) · imágenes sin ancho/alto (cambio de diseño) |
| Privacidad y seguridad | contenido mixto · rastreadores + cookies sin historia de consentimiento/divulgación · Google Fonts desde el CDN de Google (una violación del GDPR dictaminada) · higiene de encabezados (riesgo de precarga HSTS, CSP solo de informe que no informa a ningún lado, configuración muerta de FLoC / X-XSS-Protection) · manejadores onclick= en línea que bloquean un CSP futuro |
| Rendimiento | imagen hero/LCP configurada como loading="lazy" · sin Cache-Control |
| Datos estructurados | JSON-LD inválido (los rastreadores descartan todo el bloque) · marcado aggregateRating/review egoísta (una penalización de Google desde 2019) |
| Integridad | activos colgantes que dan 404 · enlaces internos rotos |
| Búsqueda por IA | robots.txt bloqueando agentes de respuesta de IA (OAI-SearchBot, ChatGPT-User, Claude-User, PerplexityBot…) · tokens de rastreador muertos · llms.txt faltante · datos estructurados faltantes/rotos · shells renderizados por cliente que los rastreadores de IA ven como en blanco |
La última fila es la que casi nadie verifica todavía — si Google, ChatGPT, Claude y Perplexity pueden realmente leerte y citarte. Es el filo, no toda la historia: el punto es una auditoría completa de la base.
Cómo decide fix
Cada hallazgo cae en uno de tres cubos, y el informe te dice cuál:
- ✓ Corregido automáticamente — reparaciones mecánicas y sin hechos que son seguras de aplicar:
desbloquear rastreadores de IA, eliminar tokens de robots muertos, quitar
noindexaccidental, agregar la URL canónica (conocida desde el rastreo), andamiar Open Graph desde el título existente, corregir viewports bloqueados por zoom, eliminar marcado de calificación egoísta, generar unsitemap.xmldesde las páginas rastreadas, higiene de encabezados. - ✎ Andamiado — cosas que necesitan tus hechos reales:
llms.txt, una entidad JSON-LD, una descripción meta. site-spec escribe un stub correcto con marcadoresTODOpara que solo llenes los espacios en blanco. - ⚠ Manual — problemas sobre los que ninguna herramienta debería adivinar en silencio: texto
altfaltante, fuentes autoalojadas, corregir un shell renderizado por cliente, un enlace roto. Recibes una instrucción precisa, nunca una edición silenciosa.
fix es no destructivo por defecto (escribe en un directorio de salida). Pasa --write para
editar un directorio local en su lugar.
La filosofía
- La corrección es una política, no un prompt. Las reglas de SEO, accesibilidad, privacidad y datos estructurados se expresan como verificaciones explícitas que la herramienta aplica — nunca como vibraciones que se le pide a un LLM que respete.
- Determinista. El motor de auditoría es puro: misma entrada → el mismo informe,
byte por byte. El rastreo en vivo ordena-y-limita las páginas descubiertas, así que el mismo sitio
en el mismo
--maxaudita el mismo conjunto de páginas en cada ejecución. Sin red, sin aleatoriedad dentro del motor. - Corrige, no sermonees. Un hallazgo que se puede reparar de forma segura se repara. Uno que necesita un humano dice exactamente qué debe hacer el humano.
- Agnóstico a la fuente. Audita la salida, no la cadena de herramientas. IA, framework, CMS, codificado a mano — todo es lo mismo para él.
site-spec comenzó como un compilador determinista que construye sitios con una base correcta por construcción (el comando
buildy eldocs/todavía lo cubren). El valor duradero resultó ser el inverso: no generar sitios completos, sino auditar y reparar la base de sitios que ya existen.
La CLI completa
site-spec audit <dir|url> [--max N] [--json] [--report report.md]
site-spec fix <dir|url> [--out dir] [--write] [--max N] [--json]
site-spec build <site.config.mjs> --out <dir> [--target cloudflare|netlify|vercel|static]
--max N— límite de páginas para un rastreo en vivo (predeterminado 25); la truncación se informa, nunca en silencio.--report report.md— escribe la auditoría como un documento Markdown compartible.--json— el informe estructurado completo para scripting/CI.
Instalar / desarrollar
git clone https://github.com/ariaxhan/site-spec.git
cd site-spec
npm install
npm test # unit + golden tests
npm run verify # html-validate + JSON-LD + axe over the demo output
Paquetes
| Paquete | Responsabilidad |
|---|---|
site-spec (npm) | La CLI publicada — audit · fix · build. Autocontenida; esto es lo que ejecuta npx site-spec. |
@site-spec/core | El motor (verificaciones de auditoría, correctores, el catálogo de verificaciones, definiciones de políticas, compilador heredado). La entrada principal es pura; @site-spec/core/io es el único límite que rastrea una URL o lee un directorio. Empaquetado en la CLI y el servidor MCP; aún no publicado por separado. |
@site-spec/worker | El auditor alojado en site-spec.ariaxhan.workers.dev — un Cloudflare Worker que envuelve el mismo motor. Agrega la protección de admisión de URL, un rastreador limitado y limitación de velocidad. Despliega con npm run deploy -w @site-spec/worker. |
site-spec-mcp (npm) | El servidor MCP — audit_site · fix_issue · compile_spec · list_checks sobre stdio. Autocontenido; esto es lo que ejecuta npx site-spec-mcp. |
Contribuir
Las contribuciones son bienvenidas — especialmente nuevas verificaciones y correctores. Consulta
CONTRIBUTING.md. Reglas principales: las verificaciones se mantienen ajustadas contra falsos
positivos, el motor se mantiene puro y determinista, y un corrector nunca adivina
en silencio algo que un humano debería decidir.
Licencia
Licencia Apache 2.0. © 2026 Aria Han.