seo-report — Synthèse et rapport d'audit
Dernier maillon du pipeline. Lit tous les findings/*.json de l'audit (un par skill d'analyse) et produit un rapport client : compte factuel par sévérité, top priorités, et pour chaque reco son critère de succès (où tu en es / où arriver / comment on mesure).
Ce qu'il produit (2 livrables)
- Rapport client —
outputs/audit/<date>/report.md+report.html: lisible, high-level, pour le décideur. (--pdfajoute un PDF via Chrome headless ; sur Hermes, le deliverable mode l'uploade en pièce jointe.) - Plan de remédiation —
remediation-plan.md+.json: les éléments EXACTS à corriger, page par page, pour l'exécution (agent ou dev). C'est ce qui rend l'audit actionnable. Généré automatiquement avec le rapport (appelremediation.build_remediation_itemsen fin dereport.py).
Le plan donne, par correction : l'action exacte, qui peut le faire, si c'est automatisable, et la liste exhaustive des cibles avec valeur actuelle + cible chiffrée (ex : titre_actuel="Audit Paris" · longueur=11 car. · cible=30-60 car.). Les on-page (titre/meta/H1) sont lus page par page depuis raw.json (pas seulement les 5 exemples des findings). Ne jamais retirer ce 2e livrable : le feedback récurrent est qu'un audit qui décrit sans pointer les éléments exacts n'est pas actionnable.
Pas de health score synthétique
Décision (2026-06-18) : pas de note /100. Un score global compresse 4 choix arbitraires empilés (poids des sévérités, poids des piliers, modèle math, plafonnement) en un chiffre indéfendable ligne à ligne — exactement l'« audit flou » que le positionnement combat. Le rapport repose sur des faits défendables : compte par sévérité (X critiques, Y élevées…), verdict factuel par pilier (conforme / N à corriger), et pour chaque finding son état réel, sa cible chiffrée et sa cadence de re-mesure. Ne pas réintroduire de note synthétique.
Procédure
- Résoudre le client, localiser le dernier
outputs/audit/<date>/findings/. - Charger tous les
*.jsonprésents (technical, et plus tard eeat/geo/backlinks/manual). - Compter par sévérité + trier les priorités (par
priorite). - Générer le rapport : en-tête (compte par sévérité), top 10 priorités avec critère de succès, gains rapides, puis détail par catégorie.
- Écrire
outputs/audit/<date>/report.md+report.html.
Lancement
python seo/skills/seo-report/scripts/report.py <slug>
Contrat
Entrée : outputs/audit/<date>/findings/*.json (format unifié du contrat). Sortie : report.md. Le rapport ne fait que présenter les findings — il n'invente aucune donnée. Si un skill d'analyse n'a pas tourné, sa section est simplement absente (pas d'erreur).
Sur Hermes
Profil-worker seo-report, carte Kanban parents=[toutes les analyses]. Attend que toutes les analyses soient finies, lit leurs findings, produit le livrable que la messagerie pousse au client.