Aller au contenu

Votre page est parfaite. Google ne la voit plus.

goflag est un CLI qui lit votre site comme un crawler le lit, et fait échouer une étape de CI avant qu’un défaut invisible ne parte en production.

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

Une balise change.

jour 0

Sans goflag

déployé

Ça part en production.

jour 0
inaperçu

La page quitte l’index.

des semaines plus tard
trop tard

Quelqu’un demande pourquoi le trafic a baissé.

des mois plus tard

Avec goflag

détecté en CI

La CI lève le drapeau.

4 min plus tard
corrigé

Un développeur ou un agent corrige.

quelques minutes plus tard
déployé propre

Ça part en production, propre.

toujours jour 0

Ce qu’un navigateur ne peut pas vous montrer

Chacun de ces cas s’affiche parfaitement. Le défaut se trouve dans la partie de la page que personne ne regarde, et le prix se paie dans un index de recherche que vous ne voyez jamais.

Ce que vous voyez

Une page qui s’affiche exactement comme prévu.

Ce que voit un crawler

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

Conséquence

La page demande à être écartée au profit d’une autre. Elle le sera.

Ce que vous voyez

Quatre locales, toutes accessibles.

Ce que voit un crawler

no <link rel="alternate" hreflang> anywhere

Conséquence

Chaque traduction concurrence les trois autres au lieu de se consolider avec elles.

Ce que vous voyez

Un site de production en ligne, qui sert du trafic.

Ce que voit un crawler

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

Conséquence

Aucune page n’est jamais récupérée, donc la directive d’indexation présente sur chaque page n’est jamais lue.

Toute l’interface

Le rapport JSON est l’interface : redirigez-le dans vos scripts, comparez-le entre deux exécutions, conditionnez la CI dessus, ou donnez-le à lire à un agent IA. La sortie du terminal en est un rendu.

$ 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.

Sortie réelle ; seul l’espacement est ajusté pour la page. La progression part sur stderr pour que stdout reste propre pour le rapport.

Bloquer sur les régressions, pas sur la perfection

Une exécution qui échoue au moindre constat est inutilisable sur un site qui n’est pas encore propre, alors on la désactive, ou on l’ignore en silence. Trois flags rendent le garde-fou tenable, et l’un d’eux fait vraiment diminuer la dette.

  1. Capturer une baseline

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

    Figez les constats du jour comme connus, pour que le garde-fou puisse demander si ce changement a aggravé les choses plutôt que si le site est parfait. La sortie ne dit jamais que c’est propre tant que des constats restent en suspens; elle dit combien on en laisse passer.

  2. Bloquer sur ce qui est nouveau

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

    Les constats sont appariés par empreinte, et les URL de pages sont normalisées en routes indépendantes de l’origine: une baseline capturée contre la production se compare donc proprement à une exécution contre localhost.

  3. Abaisser le cliquet

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

    Corrigez un constat, baissez --max-debt de un, committez les deux. Sans cela, une baseline se fossilise derrière un build qui passe.

En CI

Deux moments méritent un audit, et ils répondent à des questions différentes.

QuandContreRépond à
Sur la merge requestLe build de la branche elle-même, démarré par --startCe changement provoque-t-il une régression ?
Après le déploiementL’environnement en cours d’exécutionCe qui est réellement servi est-il correct ?

Les flags à connaître (--no-external, l’épinglage de version, les codes de sortie) tiennent en trois courtes sections de la documentation.

Voir les recettes CI

Construit en auditant mes propres sites

goflag existe parce que quatre sites que j’exploite en avaient besoin, celui-ci compris: goflag.tech est gardé par son propre audit en CI, et un merge qui le casse ne passe pas. Chaque chiffre ci-dessous est mesuré, pas estimé.

sites sous garde-fou en CI
4sites sous garde-fou en CI
pages auditées en 4 min
456pages auditées en 4 min
tests dans le CLI
516tests dans le CLI

Ce que goflag n’est pas

Une commande, un rapport JSON, un code de sortie. Si ce que vous voulez est un chiffre à optimiser, ce n’est pas le bon outil : une note invite à optimiser la note.

Si vous voulez un crawler de bureau avec une interface, Screaming Frog existe ; si vous ne cherchez que les liens morts, lychee est plus rapide. goflag sert à conditionner un build sur ce qu’un crawler lit.

Avant d’installer

Non. Il a besoin d’une URL. goflag lit ce que lit un crawler, ce qui explique aussi pourquoi il attrape des choses qu’un build local ne peut pas vous montrer: la vraie URL de base, ce que le proxy sert pour robots.txt, les redirections.

Pointez-le vers votre site.

Le démarrage rapide vous mène d’un premier passage rouge à un garde-fou auquel vous faites confiance.

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