seo-content-pruning : l'existant, page par page
Répond à UNE question : que fait-on de chaque page déjà en ligne ? C'est le premier livrable client (implémentable dans la semaine), le plus gros gain rapide du SEO. La stratégie de mots-clés (quoi créer) est un AUTRE skill (seo-strategy) : les deux partagent seulement le socle des offres.
Règles dures : la GSC est la SEULE source de données (pas d'estimation tierce) ; la coupe et la fusion sont des PROPOSITIONS avec brief, tranchées par un humain, jamais exécutées par l'agent ; sur un petit site le verdict par défaut est garder (tout trafic sain envoie de bons signaux à Google). Aucun métier ni secteur hardcodé.
L'arbre de décision (implémenté dans le script)
Questions posées dans l'ordre, par page. Les seuils sont des seuils de MISE EN REVUE, jamais des couperets :
- Trop récente ? (moins de 6 mois si la date est connue) : on ne juge pas.
- Elle performe ? (clics 90j au-dessus du benchmark du site = médiane des pages à clics) : garder.
- Gain proche ? (position 5-20 avec au moins 30 impressions, ou fortes impressions à CTR quasi nul) : optimiser, priorisé par proximité du gain (la position la plus proche de la page 1 d'abord).
- Sujet daté ? (année révolue dans l'URL ou le title) : actualiser sur l'année courante.
- Cannibalisation ? (une même requête portée par 2+ pages) : fusion proposée (garder la plus forte, rapatrier les meilleures sections, 301 des absorbées) : humain.
- Zéro trafic sur 12 mois ? Trois verrous avant la proposition de coupe : page prestation (valeur de conversion, jamais coupée), backlinks (la règle la plus unanime des sources : jamais de coupe sèche, 301 vers la page la plus proche), fenêtre 12 mois obligatoire (protège le saisonnier). Sinon : à examiner (coupe), avec brief quoi/pourquoi/comment.
- Sous-performance persistante (impressions sans clics sur 12 mois, pas de gain proche) : à trancher par l'agent : la structure tient = actualiser, l'intent a changé = réécrire.
Procédure de l'agent
Étape 1 : le socle des offres (partagé avec seo-strategy)
Si outputs/socle.json existe (déposé par seo-strategy ou un run précédent) : le relire, ne re-juger que le delta. Sinon le construire :
- Lire le cerveau :
product-value.md(offres + priorités),audiences-personas.md(cibles + hors-cible),positioning-messages.md(national/local),vocabulary.md(NAP). - Si product-value ne délimite pas des offres nettes : NE PAS deviner, remonter les trous au owner et s'arrêter.
- Assigner chaque page à une offre + un rôle (
prestation/soutien/hors-offre), jugé sur les REQUÊTES GSC de la page, pas le titre seul (une page peut contenir les mots d'une offre et attirer un public hors-ICP).prestation= la page VEND une offre ACTUELLE de product-value.md (CTA, devis, tarifs visibles), pas juste elle en parle. Conséquences : une LP d'une offre qui n'est plus vendue ne matche aucune offre = hors-offre = arbre normal (la protection disparaît quand le cerveau est à jour) ; une page qui parle d'une offre sans la vendre = soutien ; deux LP pour la même offre = la cannibalisation les attrape (fusion proposée). Le rôle prestation ne protège que de la COUPE : optimiser/actualiser/réécrire s'appliquent normalement. - Écrire
outputs/socle.json:
{
"offers": [{"name": "...", "priority": 1, "sectors": ["..."], "zones": ["..."]}],
"page_map": {"https://...": {"offre": "... ou null", "role": "prestation|soutien|hors-offre"}},
"protected_urls": ["https://.../lp-principale", "https://.../page-copy-gelee"]
}
protected_urls : les pages que le système ne modifie JAMAIS. La home est protégée d'office (script) et les pages légales/utilitaires par pattern. L'agent y ajoute ce qu'il identifie (pages de campagne actives) et demande au owner les pages non devinables : la LP principale, toute page à copy validée/gelée. Une page protégée = verdict "garder (protégée)", jamais candidate à la coupe, jamais absorbée par une fusion ; ses signaux de gain sont remontés en information seulement.
Étape 2 : déposer l'export GSC
Via gsc-mcp (get_search_analytics), sur site_url = client.gsc_property, DEUX fenêtres : 90 jours (signaux de gain) et 12 mois (verdicts de coupe/fusion, saisonnalité). Écrire data/gsc/<date>/pruning-export.json :
{
"gsc_property": "sc-domain:...",
"date": "YYYY-MM-DD",
"windows": {"short_days": 90, "long_days": 365},
"pages_short": [{"page": "https://...", "clicks": 0, "impressions": 0, "ctr": 0.0, "position": 0.0}],
"pages_long": [{"page": "https://...", "clicks": 0, "impressions": 0, "ctr": 0.0, "position": 0.0}],
"queries_by_page_short": [{"page": "https://...", "query": "...", "clicks": 0, "impressions": 0, "ctr": 0.0, "position": 0.0}],
"page_dates": {"https://...": "YYYY-MM-DD"}
}
page_dates (optionnel) : dates de publication si connues (sitemap lastmod). Absentes = la question "trop récente" est sautée, le noter au livrable.
Backlinks (optionnel mais recommandé) : l'API GSC n'expose pas le rapport Liens ; c'est un export UI (GSC > Liens > Pages les plus liées > Exporter). Déposer le fichier tel quel à côté : data/gsc/<date>/links-top-pages.csv (ou .json). Sans lui, les candidates à la coupe sont marquées "backlinks à vérifier dans GSC > Liens" et la vérification fait partie de la décision humaine.
Étape 3 : lancer le script
python seo/skills/seo-content-pruning/scripts/pruning.py <slug>
Idempotent par jour (--force pour relancer). Sortie : outputs/pruning/<date>/actions.json (verdict, raisons, signaux, flags par page + groupes de fusion + benchmark utilisé + règles appliquées).
Étape 4 : les jugements restants (agent)
- Trancher les
a_trancher_reecrire: relire la page (crawl) et ses requêtes ; la structure et l'angle collent encore à l'intent = actualiser ; l'intent de la requête a changé ou la page est à côté = réécrire (même URL, on repart du sujet). - Vérifier les fusions proposées : une "cannibalisation" peut être une pagination ou deux intents réellement différents ; ne garder dans le livrable que les fusions défendables.
- Écrire les briefs des décisions humaines (coupe et fusion) : quoi / pourquoi (métriques à l'appui) / comment (mécanique 301 ou 410, liens internes à nettoyer, par lots avec mesure entre les lots).
Étape 5 : le livrable
Écrire outputs/pruning/<date>/content-pruning.md, en français, sobre :
- Le socle : les offres, ce que le site en couvre, les trous (offre sans page prestation = signalée, elle part dans seo-strategy).
- La liste d'action page par page : URL | clics/impressions (90j et 12 mois) | offre + rôle | verdict | action précise | rang. Les "optimiser" triés par proximité du gain.
- Les décisions humaines : fusions proposées et candidates à la coupe, chacune avec son brief. Rappeler la mécanique d'exécution (301/410, par lots, mesure).
- Les anomalies : pages invisibles (dans le site, zéro impression 12 mois), orphelines (impressions mais hors crawl), et le statut backlinks (export fourni ou à vérifier).
Jamais : présenter un export simulé comme réel, supprimer ou fusionner soi-même, conclure sur une position sous 30 impressions, juger une page de moins de 6 mois.
Tools (harness-aware)
En Claude Code : ToolSearch: "select:mcp__gsc-mcp__get_search_analytics" (et get_search_by_page_query). Dans les autres harness (Hermes inclus) : l'accès GSC équivalent. Pas d'accès GSC = code 2 = le skill s'arrête et le dit.
Contrat
| Lit | data/gsc/<date>/pruning-export.json (+ links-top-pages.* optionnel), outputs/socle.json, crawl de la réserve (optionnel : titles, union crawl ∪ GSC) |
| Écrit | outputs/socle.json (si premier à tourner), outputs/pruning/<date>/actions.json + content-pruning.md |
| Consommateurs | Content-refresh et les briques de brief (les "optimiser/actualiser/réécrire" validés), l'humain (coupe/fusion), seo-strategy (le socle + les offres sans page) |
Frontière avec Content-refresh : ce skill est la photo stratégique complète, prise une fois ; refresh est la boucle hebdo qui surveille le delta ensuite.
Sur Hermes
Run ponctuel (pas de scheduled job) : au démarrage d'un client, puis au re-run annuel de la stratégie. Le livrable peut être déposé en commentaire d'une carte dédiée du board. Les décisions humaines (coupe/fusion) se matérialisent en cartes bloquées "Décision owner : coupe/fusion proposée" si on veut les tracer sur le board.