Pipeline complet de la donnée GSC à la publication Google Sheets : extraction, catégorisation, rédaction, refine, QA et push — orchestré par 7 skills isolés en sub-agents.
Fetch du sitemap FR Aubainerie, filtrage par handle (ex. femme-robes), construction de la regex .*/collections/{handle}.* pour cibler GSC.
femme-robes)Extraction de 500 queries max, dimensions [query, page], métriques [clicks, impressions, ctr, position], triées par impressions DESC.
sc-domain:aubainerie.comRetire les queries brand (aubainerie + variantes orthographiques), géographiques (villes) et génériques non pertinentes. Ne garde que les queries non-brand uniques pertinentes pour le segment.
Appel ./scripts/dataforseo.sh volume en batches de 100 keywords (limite API). Location Canada (2124), langue FR. Fusion sur query avec le dataset GSC.
search_volumecompetition (LOW/MEDIUM/HIGH)cpcClassification des queries en sous-catégories sémantiques (couleur, longueur, occasion, style, prix, morphologie). Combine regex pour les catégories évidentes + jugement Claude pour les cas ambigus. Calcule la stratégie par catégorie.
L'orchestrateur affiche un brief stratégique complet (catégories, concurrents, FAQs data-driven, sous-collections proposées) et attend une réponse. Édouard valide ou demande des ajustements.
📋 Analyse GSC · Catégories proposées avec stratégie colorée · Concurrents dominants · Brief contenu (angle, mots-clés défensifs/offensifs, FAQs) · Sous-collections à créer
Génère output/aubainerie-seo-{segment}-{date}.xlsx avec conditional formatting, freeze panes et auto-filter.
Génère les sous-collections via generate_all_subcollections() (couleur, type, grande_taille, liquidation) et construit la ligne parent à la main avec 5 H2 et 4 FAQs data-driven.
Rédige Title, Body HTML, title_tag, description_tag, seo_paragraph_onpage et FAQ pour la page parent + toutes les sous-collections. Isolé en sub-agent pour ne pas mélanger contexte data et contexte rédactionnel. Lit aubainerie-redaction-rules.yaml + aubainerie-redaction-guide.md comme sources de vérité.
Task(subagent_type="general-purpose",
description="Rédaction contenu SEO Aubainerie",
prompt="Sub-agent /aubainerie-seo-redaction. Lookup strategic_modes par sous-cat ...")
{rows_written, parent_handle, sub_handles}Score chaque row de l'OUTPUT sur 5 dimensions (Keyword targeting, Search intent, Internal linking, GEO, Competitive). Applique un fixer LLM bouclé jusqu'à convergence. Modifie le contenu (≠ QA report-only). Backup OUTPUT_PRE_REFINE créé avant tout fix.
Re-run après crash quasi gratuit : les rows déjà CONVERGED sont skippées via cache (cost ≈ 0, < 30s).
Flag --skip-refine sur /aubainerie-seo-data pour aller direct au QA (debug ou re-run après correction manuelle).
Pass 1 : longueurs, regex, balises, listes noires, em dash. Pass 2 : ton cliente, ancrage usage, banque adjectifs, humanisation, anti-templating (parallélisé sur Sonnet via CLI claude). Écrit un onglet QA avec violations classées BLOCK / WARN / INFO. Ne corrige jamais.
Patche l'OUTPUT pour les BLOCK auto-fixables uniquement (suffixe brand, point final, troncature, em dash, double hyphen, espace avant ?, ? manquant en FAQ). Les WARN/INFO et corrections sémantiques (forbidden_words, AI patterns, FIELD_EMPTY) sont listés en skipped.
Après fix → re-run /aubainerie-seo-qa pour vérifier que les BLOCK sont bien résolus avant de continuer vers le push.
Refus de push si l'onglet QA contient des BLOCK non résolus. La banner STATUS: PASS doit être présente.
Conversion via to_shopify_row() (jamais de colonnes ad-hoc). Création de l'onglet si manquant, écriture de la ligne parent + headers (clear), append des sous-collections en batches de 5 (append).
drive_mathilde@cardiganmtl.com1_H8DT2u…Affichage : queries pullées · enrichies · sous-catégories · % top 10 Aubainerie · position moyenne · top 5 catégories par volume · top competitors · chemin Excel · lien Google Sheets.
Pourquoi cette structure
/aubainerie-seo-data drive le flow. Chaque sub-skill est invoqué via Task tool en sub-agent isolé.
Le QA ne doit pas voir le contexte data. Le redacteur ne doit pas voir le contexte data brut. Chaque sub-agent reçoit uniquement ce dont il a besoin (Excel path + brief).
Refine : modifie. QA : report-only. Fix : mécanique uniquement. Push : write-only sur Sheets.
Gate 1 (pré-rédaction) bloque sur confirmation explicite. Gate 2 (QA pass) bloque sur statut machine. Aucune dérive autonome possible.
L'Excel multi-onglets est la source de vérité. Backup OUTPUT_PRE_REFINE. Onglet SCORE_SEO + QA permettent un re-run idempotent.
config/aubainerie-seo.yaml · aubainerie-redaction-rules.yaml · aubainerie-redaction-guide.md · aubainerie-seo-refine.yaml = single source of truth.
scripts/lib/ : categorizer.py · seo_excel.py · subcollections.py · redaction_qa.py · redaction_fix.py · seo_refine.py
GSC via MarkiFact MCP · DataForSEO via script bash · Google Sheets via connection Drive Mathilde · CLI Claude (subscription) pour QA Pass 2.