# SEO Report

> seo-report — Synthèse et rapport d'audit

- Skill: `lcrvl2/seo-report` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add lcrvl2/seo-report`
- Raw SKILL.md: https://api.skillmd.com/api/skills/lcrvl2/seo-report/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Marketing & Growth
- Author: lcrvl2 (https://skillmd.com/u/lcrvl2)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/lcrvl2/seo-report

---


# 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)

1. **Rapport client** — `outputs/audit/<date>/report.md` + `report.html` : lisible, high-level, pour le décideur. (`--pdf` ajoute un PDF via Chrome headless ; sur Hermes, le deliverable mode l'uploade en pièce jointe.)
2. **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 (appel `remediation.build_remediation_items` en fin de `report.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

1. Résoudre le client, localiser le dernier `outputs/audit/<date>/findings/`.
2. Charger tous les `*.json` présents (technical, et plus tard eeat/geo/backlinks/manual).
3. Compter par sévérité + trier les priorités (par `priorite`).
4. 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.
5. Écrire `outputs/audit/<date>/report.md` + `report.html`.

## Lancement

```bash
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.

