# SEO Audit Backlinks

> seo-audit-backlinks — Backlinks & concurrents

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

---


# seo-audit-backlinks — Backlinks & concurrents

Analyse le profil de liens et la position face aux concurrents. Produit `findings/backlinks.json`.

## Dépendance aux données DFS

Contrairement aux autres analyses (qui lisent le crawl), celle-ci a besoin du **baseline DataForSEO Labs** (`data/dataforseo/<date>/baseline.json`) : domain rank, backlinks, referring domains, top keywords, et idéalement les métriques concurrents. Ces données sont collectées par `seo-collect` (DFS Labs).

**Dégradation honnête** : si le baseline n'est pas dans la réserve (ex: démo sans collecte DFS), le skill produit un finding "données backlinks non collectées" plutôt que d'inventer. Pas de faux chiffres.

## Process couverts (logique d'analyse complète)

`scripts/analyze.py` code l'**intégralité de la logique** de la phase 3 (`references/process.md`) — pas un sous-ensemble :

| Process | Logique codée |
|---|---|
| 3A.3 Diversité ancres | catégorisation 5 catégories (branded/keyword/url/generic/compound), %, flags (branded <20%/>80%, keyword >40%), diversity_score |
| 3A.4 Vélocité | net_change 30j → growing/stable/declining |
| 3A.5 Spam | seuils 5%/15% → good/monitor/critical |
| 3B.7 Table concurrents | 5 métriques + gap (client − moyenne) |
| 3C.9 Featured snippets | rank 2-5 + FS non possédé → score vol×(1/pos), top 10 |
| 3D.14 Content gaps | opportunity score vol×(1−KD/100), top 20 |
| 3E.15-18 Topic clusters | n-grams → clusters → coverage → silo gaps |
| 3F.19 Striking distance | rank 4-20, vol ≥200, top 15 |

Ces fonctions sont **réelles et testées** : elles tournent dès que la donnée est dans la réserve.

## Dégradation honnête + to_collect

Si une donnée manque (ex : pas d'`anchors`, pas de `ranked_keywords` dans le baseline), le skill **ne fabrique aucun chiffre**. Il émet `backlinks.data.not_collected` (si rien) et liste dans `to_collect` les **appels API DataForSEO exacts** à brancher pour chaque process manquant (ex : `backlinks_anchors(limit=100)`, `domain_intersection`, `ranked_keywords(limit=200)`). La logique d'analyse ne change pas quand la donnée arrive ; seule la source se branche.

## Interprétation (agent)

L'agent contextualise (un faible nombre de backlinks est-il normal pour ce secteur/cette taille ?), priorise les opportunités de content gap, et valide/renomme les topic clusters (3E.15) et la catégorisation d'ancres (3A.3) pour cohérence sémantique.

## Lancement

```bash
python seo/skills/seo-audit-backlinks/scripts/analyze.py <slug>
```

## Contrat

Entrée : `data/dataforseo/<date>/baseline.json`. Sortie : `findings/backlinks.json`. Voir `seo-os/references/data-contract.md`.

## Sur Hermes

Profil-worker `seo-backlinks`, carte `parents=[seo-collect]`. Nécessite que seo-collect ait recueilli le baseline DFS (sinon dégrade).

