# SEO Audit Eeat

> seo-audit-eeat — Analyse E-E-A-T & confiance

- Skill: `lcrvl2/seo-audit-eeat` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add lcrvl2/seo-audit-eeat`
- Raw SKILL.md: https://api.skillmd.com/api/skills/lcrvl2/seo-audit-eeat/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-audit-eeat

---


# seo-audit-eeat — Analyse E-E-A-T & confiance

Couvre **l'intégralité de la méthode E-E-A-T** (`references/process.md`, copie fidèle de la spec). Produit `findings/eeat.json` + un score E-E-A-T /100.

## Architecture hybride — deux couches, aucun process omis

1. **Couche script** (`scripts/analyze.py`) : tout ce qui est mécanisable — détection des pages auteur (4A.1), Person schema + complétude (4A.2), pages de confiance présence/indexabilité (4B.5), pages preuve client (4B.8), pages sécurité SaaS (4B.9). Calcule la part **mécanique** du score et écrit un score **partiel honnête**.
2. **Couche agent** (CE SKILL.md) : les **jugements qualitatifs** que le script ne peut pas faire — il les liste dans `to_judge` avec leur URL et leur **rubrique exacte**. L'agent les exécute via WebFetch, puis **complète le score**.

> Le script ne fabrique JAMAIS un proxy à la place d'un jugement. S'il ne peut pas évaluer la qualité d'une About page, il l'inscrit dans `to_judge` avec le barème — l'agent va lire la page et scorer.

## Procédure de l'agent

### Étape 1 — Lancer le socle script
```bash
python seo/skills/seo-audit-eeat/scripts/analyze.py <slug>
```
Produit `findings/eeat.json` avec `facts`, `score_breakdown` (part calculable + part à juger), `to_judge`, `findings`.

### Étape 2 — Exécuter chaque évaluation de `to_judge`

Pour chaque entrée de `to_judge`, WebFetch l'URL (ou l'échantillon) et applique la rubrique. Les rubriques (rappel) :

**4A.3 — Crédentials auteur** (échantillon 5 pages auteur) : checklist 7 points par page → 1) nom complet, 2) photo, 3) titre/rôle, 4) bio/crédentials, 5) liens sociaux, 6) indicateurs d'expertise, 7) lien vers ses articles. Score /7. Globalement : 0=aucun, 4=basique (1-3 éléments en moyenne), 8=bios complètes (5+).

**4A.4 — Bylines blog** (échantillon 10 articles) : par article → nom auteur visible, photo, bio snippet, lien page auteur, date pub, date MAJ. **Byline Coverage = (articles avec attribution / total) × 100**. Mappe : 0=<50%, 5=50-90%, 10=>90%.

**4B.6 — Qualité About** (/50) : Company story +15, Team avec bios +10, Mission +10, Office address +10, Awards +5. Mappe vers Authoritativeness.about_quality : 0=<20, 5=20-40, 10=>40. Note aussi industry_recognition (awards) : 0=aucune, 2=quelques, 5=prominents.

**4B.7 — Contact** : adresse physique, téléphone, email, formulaire, horaires, méthodes multiples, map. Complétude adresse → Trustworthiness.contact_address : 0=pas d'adresse, 4=ville seule, 8=adresse complète.

**4B.8a — Témoignages** : noms réels, logos, photos, résultats/métriques, citations vérifiables, vidéos, liens reviews tiers. Classer Bon (5+)/Basique (2-4)/Manquant (0-1) → Trustworthiness.testimonials : 0=Manquant, 3=Basique, 7=Bon.

**4B.9a — Sécurité SaaS** (si applicable) : SOC 2, GDPR, chiffrement, audits, pentesting, uptime SLA, certifications → 0=aucun, 2=basique, 5=certs documentées.

### Étape 3 — Compléter le score E-E-A-T /100

Reprends `score_breakdown`. Pour chaque sous-score marqué `to_judge`, remplace par les points obtenus à l'étape 2. Somme les 4 composantes (Experience + Expertise + Authoritativeness + Trustworthiness, chacune plafonnée à 25). Brackets (thresholds.eeat.total_score) : 80-100 excellent, 60-79 bon, 40-59 moyen, 20-39 faible, 0-19 critique.

Pour Authoritativeness.brand_citations : si pas de DataForSEO (`eeat.citations.spec_only` présent), laisse ce sous-score à 0 et note "citations à brancher" — ne l'invente pas.

### Étape 4 — Recommandations pilotées par les gaps (4D.14)

Ne PAS sortir un template générique par catégorie. La recommandation doit cibler le **sous-score précis qui manque**. Méthode :

1. Après l'étape 3, tu as la valeur de chaque **sous-score** (pas seulement le total par composante). Ex : Experience = 10 parce que author_pages=10 **mais credentials=0 et case_studies=0**.
2. Pour chaque composante < 15/25, **identifie quels sous-scores sont déficients** (à 0 ou sous leur palier) et ne recommande QUE pour ceux-là.
3. Mappe chaque sous-score déficient à sa correction spécifique :

| Sous-score déficient | Recommandation ciblée |
|---|---|
| `author_credentials` bas | Ajouter bio + crédentials/certifications visibles sur les pages auteur identifiées (lister les URLs) |
| `case_studies` = 0 | Créer des cas clients démontrant l'expérience pratique |
| `author_schema` partiel/0 | Ajouter/compléter le Person schema (jobTitle, sameAs, description) sur les pages auteur listées |
| `blog_bylines` < 90% | Ajouter une signature visible (+ lien page auteur) sur les articles sans byline (lister l'échantillon) |
| `about_quality` bas | Enrichir l'About sur les éléments manquants précis du barème /50 (story / team / mission / address / awards — dire lesquels manquent) |
| `brand_citations` bas | Viser des mentions sur sites sectoriels / publications (si à brancher : noter "mesure citations à activer") |
| `contact_address` bas | Ajouter l'adresse physique complète au Contact |
| `testimonials` bas | Créer/améliorer la page témoignages avec noms réels, logos, métriques |
| `privacy_terms` < complet | Compléter Privacy Policy / CGV manquantes (dire lesquelles) |
| `security_saas` bas (SaaS) | Documenter SOC 2 / GDPR / chiffrement sur une page sécurité |

La recommandation cite l'URL ou l'élément concret concerné, pas une phrase générique. Une composante peut être <15 avec UN seul sous-score à corriger — ne recommande pas les autres s'ils sont déjà bons.

### Étape 5 — Write-back du score et des recommandations (OBLIGATOIRE)

Une fois les sous-scores hydratés (étape 3), **réintègre tout dans `findings/eeat.json`** via le module partagé. Il stocke le `score_breakdown` complété ET génère automatiquement les recommandations **ciblées par sous-score déficient** (pas un template par catégorie) :

```bash
python seo/seo-os/scripts/judgment.py <findings/eeat.json> \
  --results '{"score_breakdown": <le score_breakdown avec tous les sous-scores hydratés en {"points": N}>, "total": <score /100>}' \
  --rule eeat_recos
```
La règle `eeat_recos` parcourt chaque composante < 15/25, repère les sous-scores à 0, et émet un finding `eeat.reco.<sous_score>` ciblé (ex : `eeat.reco.author_credentials`, `eeat.reco.contact_address`) — uniquement pour les déficits réels. Ajoute ensuite manuellement un finding `eeat.score` (via write-back) si le total < 60, avec le détail des composantes faibles.

## Données requises

- Crawl (raw.json) : obligatoire (pages, microdata). Toujours là après seo-collect.
- Contenu HTML des pages (WebFetch) : requis pour les `to_judge`. L'agent le récupère à la volée.
- DataForSEO Content Analysis : pour 4C.10-12 (citations). Non collecté → `collecte_a_brancher`.

## Contrat

Entrée : `data/crawl/<date>/raw.json`. Sortie : `findings/eeat.json` (facts + score_breakdown + to_judge + findings). Voir `references/process.md` pour la spec complète et `seo-os/references/data-contract.md` pour le format.

## Sur Hermes

Profil-worker `seo-eeat`, carte `parents=[seo-collect]`, parallèle aux autres analyses. La couche agent (WebFetch + jugement) tourne dans le worker ; le SKILL.md la pilote.

