Qué comprueba
site_audit escanea tu sitio estático compilado (Astro dist/, Next.js out/, Hugo public/ — cualquier cosa con archivos HTML) y reporta problemas en cuatro grupos:
SEO técnico
- Páginas huérfanas (en sitemap, sin enlaces internos)
- Enlaces internos rotos y 301 por falta de barra final
- Títulos y meta descripciones ausentes / duplicados / longitud anómala
- H1 ausente, H1 múltiple, saltos de jerarquía (H1→H3)
- Conflictos de canonical, imágenes sobredimensionadas, alt y dimensiones ausentes
- Declaración de sitemap en robots.txt, Open Graph, viewport, html lang, favicon
GEO / visibilidad IA
- Presencia y profundidad de llms.txt y llms-full.txt
- Schema FAQPage/HowTo ausente en contenido Q&A, Product/Offer ausente en páginas comerciales
- Señales de contenido en robots.txt (ai-input / search)
- Detección BLUF (conclusión primero), estructura de contenido (H2, listas, tablas)
- Bloqueo de rastreo (noindex en contenido, disallow-all)
Agent readiness (v1.4.4)
- llms.txt debe incluir una sección When to use — sin ella, los agentes no pueden saber para qué sirve tu sitio
- llms.txt necesita una línea how-to-call (comando de instalación / endpoint / entrada MCP)
i18n y rendimiento
- Alternates hreflang y fallback x-default
- Tamaño de página (crawl budget), fugas de subdominio staging, inventario de URLs del sitemap, validación de campos JSON-LD
Uso
# Básico — apunta a tu salida de build y sitemap
python3 -m zens_ink.site_audit --dist dist --sitemap dist/sitemap.xml
# Informe JSON para CI
python3 -m zens_ink.site_audit --dist dist --sitemap dist/sitemap.xml --format json --output audit.json
# Auditar un solo subárbol de idioma
python3 -m zens_ink.site_audit --dist dist --sitemap dist/sitemap.xml --base /es
Leer el informe
Los problemas se agrupan por tipo con severidad (error / warning / info) y rutas afectadas. Cada grupo termina con una pista de corrección. La línea de resumen muestra conteos deduplicados para escaneo rápido.
Cero dependencias — Python stdlib puro. Funciona offline sobre cualquier salida de build; sin claves API, sin rastrear sitios en vivo.
Integración en CI
Falla el build cuando los errores superan el umbral:
python3 -m zens_ink.site_audit --dist dist --sitemap dist/sitemap.xml --format json --output audit.json
python3 -c "
import json
r = json.load(open('audit.json'))
errors = [i for i in r['issues'] if i['severity'] == 'error']
exit(1 if len(errors) > 0 else 0)
"