audit — el rastreo trimestral
analysis ve el repositorio; audit ve lo que un visitante y un rastreador ven: el HTML en vivo, los códigos de estado reales, las redirecciones, el mapa del sitio servido. Todo lo que encuentra se convierte en un elemento del backlog que el skill fix puede ejecutar mecánicamente, o en una línea de la lista del propietario para cosas que ningún skill debe tocar (navegación, diseños, páginas de precios y legales, alojamiento). Nunca edita un artículo y nunca abre un PR.
Scripts: ${CLAUDE_PLUGIN_ROOT}/scripts/{crawl,inventory,sitecheck}.js. Establecer P=${CLAUDE_PLUGIN_ROOT}.
Argumentos: --origin <url> (predeterminado: https://<dominio> de seo/brand.json, o el host de la línea Preview), --max <n> páginas (500), --external <n> enlaces externos a verificar (200), --cwv (consultar PageSpeed Insights para la página de inicio y los hubs del clúster; necesita red a googleapis.com, PAGESPEED_API_KEY opcional), --no-items (solo informe, no escribe nada en el backlog), --dry-run (rastrear e informar, no confirmar nada).
0. Precondiciones
Raíz del repositorio del producto; git status --porcelain vacío; en la rama predeterminada; existen seo/strategy.md y el bloque ## SEO agent. Ejecutar node $P/scripts/inventory.js --root . primero para que el rastreo pueda mapear rutas a archivos y tipos. No se necesita gh.
1. Rastreo
PREV=$(ls seo/data/crawl/*.json 2>/dev/null | sort | tail -1)
node $P/scripts/crawl.js --root . --origin <origin> --max <n> --external <n> [--cwv] --save seo/data/crawl ${PREV:+--diff $PREV} --quiet
Leer el JSON: summary (páginas, hallazgos por código, truncated), findings[] (code, severity fix|report, path, file, msg, to), sitemap (count, error, missing), external[], cwv[], diff (new, resolved desde la auditoría anterior). Una clave error en el nivel superior o sitemap.error → decirlo y detenerse; un sitio caído es problema del propietario, no un elemento del backlog. truncated: true → decir que el rastreo llegó al límite de --max y qué rutas aún estaban en cola.
Luego ejecutar también node $P/scripts/sitecheck.js --root .: ve el código fuente (argumentos Blade, rutas, marcos) que el HTML en vivo oculta, y los dos juntos forman la imagen completa.
2. Triaje
Tres cubos, en este orden:
- Elementos
fix— hallazgos conseverity: fix(códigostitle,description,canonical,alt,link,sitemap) en una página cuya entrada de inventario tiene unfilede tipo guía, artículo o herramienta. Un elemento por página, exactamente como los escribeanalysis§1c, con dos diferencias:- evidence: audit <fecha>: <n> findingsy cada líneafixes:termina con(audit <fecha>)para quefixsepa confirmarlo contra el sitio en vivo en lugar de sitecheck:
Una página que ya tiene un elemento### [B-nnn] fix: <ruta> - type: fix - target: <ruta> - score: <n> (potential <p> × ease 10 × fit <f>) ← potencial 3, o el gsc_potential de la página de la última instantánea seo/data/gsc; fit de la prioridad del clúster - evidence: audit <fecha>: <n> findings - status: open - fixes: link: enlace interno /ruta-antigua redirige a /ruta-nueva: enlazar la URL final (audit <fecha>) description: sin meta description (audit <fecha>)fixabierto/reclamado/en revisión → añadir las nuevas líneasfixes:(saltar líneas ya presentes por código +to). Una página propiedad de un elementorefreshabierto →owned by B-nnn, sin elemento fix. Un hallazgo que también reporta sitecheck (misma página, mismo código) se lista una vez, desde la auditoría, con la etiqueta(audit <fecha>). - Elementos
link— hallazgosorphanen páginas de artículo: un elementolinkpor clúster (formato$P/skills/analysis/SKILL.md§1c, líneas- links:/hub → /orphan (orphan, audit <fecha>)); un clúster con un elementolinkabierto recibe los pares añadidos. Los huérfanos sin clúster (ningún hub coincide) van a la lista del propietario. - Lista del propietario — todo lo demás:
broken-external,redirect-chain,duplicate-title/duplicate-description,noindex-in-sitemap,sitemap-404,thin,h1,mixed-content,slow,server-error, cada hallazgo en una página que no es de artículo (inicio, precios, legal, diseños),sitemap.missingy las filas de CWV. Agrupar por código, peor primero, ≤ 3 rutas de ejemplo por código; nombrar el archivo cuando el inventario lo conozca.thinen un artículo es una señal de actualización, no una corrección: decirlo y dejarlo paraanalysis.
--no-items → solo cubo 3, con un conteo de los elementos que se habrían creado.
3. Confirmar (commit)
A menos que --dry-run: git add seo/data/crawl/<fecha>.json seo/backlog.md y confirmar seo: audit <fecha> — <páginas> páginas, <hallazgos> hallazgos, <k> elementos fix, <m> elementos link en la rama predeterminada (los archivos de planificación se confirman directamente); hacer push si la rama tiene un upstream. Sin PR.
4. Informe (≤ 15 líneas)
audit <fecha>: <páginas> páginas rastreadas (<html> html, <truncated?>), <hallazgos> hallazgos (<corregibles> corregibles); mapa del sitio<count>URLs,<missing>faltantes o fallidas- Hallazgos por código, una línea, conteos
- Diff vs
<anterior>:<new>nuevas,<resolved>resueltas (nombrar las nuevas si ≤ 5) - Elementos: IDs
fixcon rutas; IDslinkcon clústeres; notas deowned by/already open - Lista del propietario: ≤ 8 líneas, peor primero (un 5xx o una cadena de redirección en la navegación antes que una descripción larga)
- Tabla CWV cuando
--cwv: ruta, LCP, CLS, INP, rendimiento, fuente - Siguiente:
fixejecuta los elementos el viernes (o/seo-agent:fixahora); la próxima auditoría vence en 3 meses
Reglas estrictas
- Solo lectura en el sitio: GET/HEAD con el agente de usuario
seo-agent-audit, un origen,--maxpáginas,--delayentre solicitudes; nunca enviar formularios, nunca iniciar sesión, nunca rastrear otro host - Nunca editar artículos, diseños o el mapa del sitio; nunca abrir un PR; escribir solo en
seo/data/crawl/yseo/backlog.md - Elementos del backlog solo para páginas de artículo que el skill
fixpueda editar; todo lo demás es del propietario - Determinista: los hallazgos provienen de
crawl.js; ningún hallazgo se añade leyendo HTML a simple vista thinnunca es un elemento fix