Saltar al contenido

Su página es perfecta. Google ya no la ve.

goflag es una CLI que lee su sitio como lo lee un rastreador, y hace fallar un paso de CI antes de que un defecto invisible llegue a producción.

npx @goflag/cli https://example.com
commit

Cambia una etiqueta.

día 0

Sin goflag

desplegado

Se despliega.

día 0
inadvertido

La página sale del índice.

semanas después
demasiado tarde

Alguien pregunta por qué cayó el tráfico.

meses después

Con goflag

detectado en CI

La CI da la alerta.

4 min después
corregido

Un desarrollador o un agente lo corrige.

minutos después
desplegado limpio

Se despliega limpio.

todavía el día 0

Lo que un navegador no puede mostrarle

Cada uno de estos casos se muestra a la perfección. El defecto está en la parte de la página que nadie mira, y el coste se paga en un índice de búsqueda que usted nunca ve.

Lo que usted ve

Una página que se muestra exactamente como se diseñó.

Lo que ve un rastreador

<link rel="canonical" href="/another-page">

Consecuencia

La página pide que se la descarte en favor de otra. Y así será.

Lo que usted ve

Cuatro idiomas, todos ellos accesibles.

Lo que ve un rastreador

no <link rel="alternate" hreflang> anywhere

Consecuencia

Cada traducción compite con las otras tres en lugar de consolidarse con ellas.

Lo que usted ve

Un sitio en producción, atendiendo tráfico real.

Lo que ve un rastreador

robots.txt → User-agent: * Disallow: /

Consecuencia

Ninguna página se descarga nunca, así que la directiva de indexación de cada página no se lee jamás.

Toda la interfaz

El informe JSON es la interfaz: canalícelo a sus scripts, compárelo entre ejecuciones, condicione la CI con él o déselo a leer a un agente de IA. La salida del terminal es una representación de él.

$ npx @goflag/cli https://example.com

goflag https://example.com/
RED FLAG  128 pages crawled, 128 scanned

3 broken links   2 missing translations   14 SEO issues   1 site issue   0 unreachable pages

Broken links
  https://example.com/blog/hreflang-basics
    [404] https://example.com/guides/canonical-tags
    [blocked 403 forbidden] https://api.partner.example/status

Missing translations
  /blog/hreflang-basics — missing de (have en, fr)
  missing-back-link https://example.com/fr/blog/hreflang-basics
    /fr/blog/hreflang-basics declares an alternate to /de/... but the peer does not link back.

SEO issues
  https://example.com/blog/hreflang-basics
    warn  canonical.missing  Page is missing <link rel="canonical">.
    warn  description.length  Description is 31 characters — short of the recommended 50–160 window.
  https://example.com/pricing
    error robots.conflict  Page asks to be indexed while robots.txt disallows it.
    warn  og.image.missing  Page has no og:image.

Site-wide issues
  locales: en, fr, de (via sitemap)
  https://example.com/
    error hreflang.missing  Site serves 3 locales but declares no hreflang alternates.

note: 1 link returned 403 from an anti-bot filter, not counted as broken.

Salida real; solo se ajusta el espaciado para esta página. El progreso va a stderr para que stdout quede limpio para el informe.

Bloquee por regresiones, no por perfección

Una ejecución que falla ante cualquier hallazgo es inservible en un sitio que todavía no está limpio: acaba desactivada, o ignorada sin decirlo. Tres opciones hacen que la barrera sea sostenible, y una de ellas es la que de verdad reduce la deuda acumulada.

  1. Capture una línea base

    goflag https://example.com \
      --baseline .goflag/baseline.json --update-baseline

    Congele los hallazgos de hoy como conocidos, para que la barrera pueda preguntar si este cambio ha empeorado las cosas en lugar de si el sitio es perfecto. La salida nunca dice que el sitio esté limpio mientras queden hallazgos pendientes; dice cuántos se están dejando pasar.

  2. Bloquee solo por lo nuevo

    goflag http://localhost:3000 --no-external \
      --baseline .goflag/baseline.json --regressions-only

    Los hallazgos se emparejan por huella, y las URL de las páginas se normalizan a rutas independientes del origen: así, una línea base capturada contra producción se compara sin ruido con una ejecución contra localhost.

  3. Baje el tope, un diente cada vez

    goflag … --baseline .goflag/baseline.json --max-debt 13

    Corrija un hallazgo, baje --max-debt en uno y haga commit de las dos cosas. Sin esto, una línea base se fosiliza detrás de una build que pasa.

En CI

Hay dos momentos que merece la pena auditar, y responden a preguntas distintas.

CuándoContra quéQué responde
En la merge requestLa build de la propia rama, arrancada por --start¿Este cambio introduce una regresión?
Después de desplegarEl entorno en ejecución¿Es correcto lo que se está sirviendo de verdad?

Las opciones que conviene conocer (--no-external, fijar la versión, los códigos de salida) caben en tres secciones cortas de la documentación.

Ver las recetas de CI

Construido auditando mis propios sitios

goflag existe porque cuatro sitios que gestiono lo necesitaban, este incluido: goflag.tech está protegido por su propia auditoría en CI, y un merge que la rompe no se fusiona. Todas las cifras de abajo están medidas, no estimadas.

sitios con barrera en CI
4sitios con barrera en CI
páginas auditadas en 4 min
456páginas auditadas en 4 min
tests en la CLI
516tests en la CLI

Lo que goflag no es

Un comando, un informe JSON, un código de salida. Si lo que quiere es una cifra que optimizar, esta es la herramienta equivocada: una puntuación invita a optimizar la puntuación.

Si quiere un rastreador de escritorio con interfaz, existe Screaming Frog; si solo busca enlaces rotos, lychee es más rápido. goflag sirve para condicionar una build a lo que lee un rastreador.

Antes de instalar

No. Necesita una URL. goflag lee lo que lee un rastreador, que es también la razón de que detecte cosas que una build local no puede mostrarle: la URL base real, lo que sirva el proxy para robots.txt, las redirecciones.

Apúntelo a su sitio.

El inicio rápido le lleva de una primera ejecución en rojo a una barrera en la que confiar.

npx @goflag/cli https://example.com