CommunityRédaction et éditiongithub.com

Insightful-Pipe/brand-voice

Construit un guide de la voix et du ton de marque ainsi qu'une structure de message à partir de vos annonces Google Ads, Meta Ads, publications sociales et contenu de site, puis vérifie le contenu en direct par rapport à ce guide. À utiliser lorsque vous avez besoin d'un guide de style, d'un cadre de messagerie ou d'un audit de messagerie de site web. Ne convient pas pour rédiger de nouveaux textes (utilisez plutôt une compétence de copywriting).

Qu'est-ce que brand-voice ?

Cette compétence d'agent AI spécialisée, conçue pour des plateformes comme Claude Code, Cursor ou Codex, génère un guide complet de la voix et du ton de marque, ainsi qu'une structure de message, en analysant les textes publicitaires, les publications sociales et le contenu de site web existants, ainsi que les résultats de performance des clients. Elle s'appuie sur les données de Google Ads, Meta Ads (Facebook et Instagram), LinkedIn, la Search Console Google, et DataForSEO pour extraire le vocabulaire, les modèles de messagerie et les termes de recherche, et les croiser avec les pages du site web afin de garantir la cohérence du récit. La compétence applique des règles strictes : elle exige l'API MCP InsightfulPipe, respecte les limites de taux (un appel toutes les 2 secondes), gère les échecs d'API (par exemple, 403, données vides) avec des solutions de repli documentées, et fonctionne sur les 90 derniers jours de données. En option, elle propose un mode 'audit de messagerie web' qui lit les pages clés du site, vérifie la cohérence avec les annonces et classe les correctifs par trafic, à l'aide de GA4, de la Search Console et des vérifications du robot d'exploration. Tous les résultats sont compilés dans un guide structuré avec des preuves issues des données réelles, ce qui la rend idéale pour les équipes marketing, les rédacteurs et les chefs de marque qui ont besoin d'une approche fondée sur les données pour la cohérence de la marque.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Insightful-Pipe/content-creative-skills/tree/HEAD/skills/brand-voice

Installed? Explore more Rédaction et édition skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Voix de Marque

Un guide de la voix construit à partir de ce que la marque dit déjà et de ce à quoi ses clients répondent déjà. La voix est la personnalité qui reste la même partout. Le ton est la manière dont cette personnalité s'adapte au moment : une annonce de recherche, des excuses, un client inquiet qui écrit à 23h. Le style est l'ensemble des petites règles qui rendent les deux reproductibles. Cette compétence documente les trois, et fonde chaque choix sur le texte propre de la marque, ses résultats de clics, les mots de ses clients et les lacunes que ses concurrents laissent ouvertes.

Elle exécute également un mode seul : l'audit de messagerie web (après l'étape 7). Ce mode lit les pages clés du site ensemble et vérifie qu'elles racontent la même histoire que les annonces, puis classe les corrections par trafic.

Avant de commencer

Vous devez avoir l'API MCP InsightfulPipe connectée avec au moins une source de texte propre de la marque : un compte Google Ads ou Meta Ads, une Page Facebook, Instagram ou une Page LinkedIn, ou un site web que DataForSEO peut lire. Sans aucun d'entre eux, utilisez « Sans connexion » à la fin.

  1. Appelez query_contexts avec request="accounts" pour google-ads, facebook-ads, facebook-pages, instagram-profile, linkedin-pages, google-search-console et dataforseo. Notez workspace_id, le brand_id propre à chaque ligne (les comptes d'une même entreprise peuvent se trouver sous différentes marques), et l'identifiant du compte, de la page, du site ou de l'organisation. Dans un espace de travail d'agence, demandez pour quelle entreprise ce guide est destiné et lisez uniquement les comptes de cette entreprise.
  2. Appelez query_contexts avec request="actions_details" pour chaque lecture dans « Les appels » ci-dessous, et suivez les formes de corps qu'il renvoie, à l'exception des exceptions listées sous « Comment exécuter les requêtes ».
  3. Demandez à l'utilisateur, et utilisez les valeurs par défaut lorsqu'il ne sait pas :
    • La marque en une ligne : ce qu'elle fait et pour qui. Par défaut : déduit des annonces et des pages ; précisez qu'il s'agit d'une déduction.
    • Les textes qu'elle aime et les textes qui lui semblent faux. Deux ou trois exemples de chaque, les siens ou ceux de quelqu'un d'autre. Facultatif, et il vaut la peine de le demander : ce qui semble faux est aussi utile que ce qui semble juste.
    • Ce que la marque défend et contre quoi elle se bat. Deux ou trois croyances qui façonnent sa façon de parler, par exemple « les gens méritent une réponse directe ». Facultatif. Par défaut : non fourni, et les piliers reposent uniquement sur les preuves ; précisez-le.
    • Concurrents. Deux à cinq noms ou domaines. Par défaut : les entreprises qui apparaissent dans Google pour les deux principaux thèmes de recherche non liés à la marque (étape 5).
    • Règles qui existent déjà : un guide de style, des mots interdits, des limites légales ou réglementaires sur les allégations (droit, santé, finance, alcool). Par défaut : aucune, mais chaque superlatif est quand même signalé (étape 6).
    • Où va le texte : les canaux que le guide doit couvrir. Par défaut : les canaux trouvés à l'étape 1, plus le site web et l'email.

Pour un audit de messagerie web uniquement, consultez également google-analytics et crawler à l'étape 1, et posez les propres questions du mode (sous « Mode : Audit de messagerie web ») au lieu de la liste ci-dessus.

Fenêtre. Annonces, publications et termes de recherche : les 90 derniers jours complets. Indiquez les dates en haut du rapport.

Comment exécuter les requêtes

Chaque lecture passe par query_data avec le nom de la plateforme. Cette compétence n'appelle jamais execute_action. Règles découvertes lors des exécutions en direct :

  • Dates Google Ads. DURING LAST_90_DAYS est refusé. Utilisez segments.date BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'.
  • Meta Ads refuse les champs imbriqués. get_ads avec creative{title,body} est refusé. Demandez le champ creative simple, qui renvoie l'identifiant de la création, puis lisez le texte avec get_ad_creatives. Les annonces qui ont été supprimées apparaissent encore dans les insights mais pas dans get_ads ; excluez-les et comptez-les.
  • Certains sites refusent les lecteurs automatisés. Lors de l'exécution de construction, le site du client a répondu 403, et onpage_content_parsing est revenu avec 0 élément (pas d'erreur). Quand cela se produit, lisez la voix de la page à partir des propres titres et extraits Google des pages de la marque dans les recherches de l'étape 5, demandez à l'utilisateur de coller une ou deux pages clés, et dites lesquelles vous avez utilisées.
  • Le robot d'exploration SEO peut être en panne. Le 2026-10-06, chaque action du robot d'exploration retournait Error fetching URL, même sur les sites de contrôle. Utilisez DataForSEO pour le texte des pages, et traitez content-quality-checker et brand-extractor comme des options supplémentaires. Le 2026-10-30, le robot d'exploration était de retour, et brand-extractor a renvoyé les couleurs, polices et boutons.
  • Les bibliothèques publicitaires peuvent être en panne. Le même jour, google_company_ads et google_search_advertisers sont revenus vides même pour de très grands annonceurs, et facebook_search_companies a échoué avec une réinitialisation de connexion. Les annonces des concurrents provenant des bibliothèques sont non testées lors de l'exécution de construction ; la voix des concurrents provient des résultats Google (étape 5) à la place.
  • Les Pages LinkedIn peuvent nécessiter une reconnexion. Si un appel renvoie « Veuillez reconnecter votre Page LinkedIn », ignorez LinkedIn, dites-le et continuez. La lecture LinkedIn est non testée jusqu'à ce qu'elle soit connectée.
  • Search Console limite une extraction par requête à 1 000 lignes. C'est suffisant pour le vocabulaire ; dites que la liste correspond aux 1 000 premières.
  • DataForSEO coûte de l'argent. Utilisez location_code 2840 et language_code en sauf si le public se trouve ailleurs. Limitez une exécution à 6 appels : jusqu'à 3 lectures de pages et 2 ou 3 recherches. Lisez d'abord la page la plus visitée ; si elle revient avec 0 élément, le site refuse les lecteurs, donc ne payez pas pour les autres pages. L'audit de messagerie web a son propre budget : une lecture de page par page, indiquée avant son exécution (W1).
  • Les appels de l'audit de messagerie web ont été testés le 2026-10-30. get_report de GA4 par landingPage a renvoyé les sessions et les événements clés par page. search_analytics de Search Console par page et requête a renvoyé la row_limit complète de 5 000 lignes. Les vérifications du robot d'exploration ont fonctionné sur un site qui autorise les lecteurs, et brand-extractor a renvoyé les étiquettes des boutons. Sur un site qui refuse les lecteurs automatisés, le robot d'exploration ne donne pas d'erreur : meta-tags-checker renvoie title_tag_count 0 et headings-checker renvoie no_headings. Traitez cela comme « impossible de lire », jamais comme un titre ou H1 manquant. Lorsque la marque possède plus d'une connexion DataForSEO, ajoutez account_id à la lecture de la page.
  • Échelonnez les appels. N'envoyez pas plus d'un appel toutes les 2 secondes. Lorsqu'un appel est refusé avec un délai de nouvelle tentative, attendez ce délai et réessayez une fois.

Si un appel échoue, continuez. Marquez cette source comme inconnue, dites quel appel a échoué et pourquoi, et ne comblez jamais le vide avec une supposition.

Les appels

Google Ads : chaque titre et description avec ses propres clics

{"platform": "google-ads", "action": "gaql", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "account_id": "<CUSTOMER_ID>",
 "query": "SELECT campaign.name, ad_group_ad_asset_view.field_type, ad_group_ad_asset_view.performance_label, asset.text_asset.text, metrics.impressions, metrics.clicks, metrics.conversions FROM ad_group_ad_asset_view WHERE segments.date BETWEEN '<START>' AND '<END>' AND ad_group_ad_asset_view.field_type IN ('HEADLINE', 'DESCRIPTION') AND campaign.status = 'ENABLED' AND ad_group_ad_asset_view.enabled = TRUE AND metrics.impressions > 0 ORDER BY metrics.impressions DESC LIMIT 1000"}

Google Ads : les annonces et où elles envoient les gens

{"platform": "google-ads", "action": "gaql", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "account_id": "<CUSTOMER_ID>",
 "query": "SELECT campaign.name, ad_group.name, ad_group_ad.ad.id, ad_group_ad.ad.responsive_search_ad.headlines, ad_group_ad.ad.responsive_search_ad.descriptions, ad_group_ad.ad.final_urls, ad_group_ad.ad_strength, metrics.impressions, metrics.clicks, metrics.conversions FROM ad_group_ad WHERE segments.date BETWEEN '<START>' AND '<END>' AND ad_group_ad.status = 'ENABLED' AND campaign.status = 'ENABLED' AND ad_group_ad.ad.type = 'RESPONSIVE_SEARCH_AD' AND metrics.impressions > 0 ORDER BY metrics.impressions DESC LIMIT 50"}

Les URL finales avec le plus d'impressions sont les pages à lire à l'étape 1.

Google Ads : les impressions et clics totaux du compte (pour indiquer la couverture du rapport de termes de recherche)

{"platform": "google-ads", "action": "gaql", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "account_id": "<CUSTOMER_ID>",
 "query": "SELECT metrics.impressions, metrics.clicks FROM customer WHERE segments.date BETWEEN '<START>' AND '<END>'"}

Google Ads : les mots avec lesquels les clients recherchent

{"platform": "google-ads", "action": "search_terms_report", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "account_id": "<CUSTOMER_ID>", "start_date": "<START>", "end_date": "<END>", "limit": 5000}

Meta Ads : quelles annonces ont été diffusées, puis leur texte

{"platform": "facebook-ads", "action": "get_insights_adaccount", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "ad_account_id": "act_<ID>", "level": "ad", "fields": ["ad_id", "ad_name", "impressions", "inline_link_clicks", "inline_link_click_ctr", "spend"], "time_range": {"since": "<START>", "until": "<END>"}}
{"platform": "facebook-ads", "action": "get_ads", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "ad_account_id": "act_<ID>", "fields": ["id", "name", "status", "creative"]}
{"platform": "facebook-ads", "action": "get_ad_creatives", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "ad_account_id": "act_<ID>", "fields": ["id", "name", "title", "body", "object_story_spec"]}

Faites correspondre annonce → identifiant de création → body (texte principal) et title (titre). Le texte principal peut également se trouver dans object_story_spec.link_data.message.

Publications de Page Facebook

{"platform": "facebook-pages", "action": "get_posts", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "page_id": "<PAGE_ID>", "fields": ["id", "message", "created_time", "permalink_url", "status_type", "shares"], "since": "<START>", "until": "<END>", "limit": 50}
{"platform": "facebook-pages", "action": "get_post_insights", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "page_id": "<PAGE_ID>", "post_id": "<POST_ID>", "metrics": ["post_media_view", "post_clicks", "post_reactions_by_type_total"], "period": "lifetime"}

get_posts refuse les champs imbriqués comme likes.summary(true), même si l'assistant les liste, donc ces appels ne renvoient pas de nombre de commentaires. shares peut être absent d'une publication (il était absent de chaque publication de la page lue lors de l'exécution de construction) ; comptez un champ manquant comme 0. Un appel d'insights par publication ; lisez au maximum les 30 publications les plus récentes.

Publications Instagram

{"platform": "instagram-profile", "action": "get_media", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "account_id": "<INSTAGRAM_USER_ID>", "fields": "id,caption,media_type,media_product_type,permalink,timestamp,comments_count,like_count", "limit": 50}

Publications de Page LinkedIn (non testées jusqu'à ce qu'elles soient connectées)

{"platform": "linkedin-pages", "action": "fetch_organization_posts", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "org_id": "<ORG_ID>", "count": 50}

Search Console : comment les gens trouvent le site

{"platform": "google-search-console", "action": "search_analytics", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "site_url": "<SITE_URL>", "dimensions": ["query"], "start_date": "<START>", "end_date": "<END>", "row_limit": 1000}

Texte de la page (DataForSEO, un appel payant par page)

{"platform": "dataforseo", "action": "onpage_content_parsing", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "url": "<PAGE_URL>"}

Le texte se trouve dans page_content.main_topic : chaque bloc a h_title, level et primary_content[].text. Lisez la page d'accueil et la ou les deux pages vers lesquelles les annonces envoient le plus de gens.

Concurrents et propres extraits de la marque dans Google (DataForSEO, un appel payant par recherche)

{"platform": "dataforseo", "action": "serp_google_organic", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "keyword": "<TOP_NON_BRAND_THEME>", "location_code": 2840, "language_code": "en", "depth": 20}

Options supplémentaires

{"platform": "crawler", "action": "content-quality-checker", "workspace_id": "<WORKSPACE_ID>", "url": "<PAGE_URL>"}
{"platform": "crawler", "action": "brand-extractor", "workspace_id": "<WORKSPACE_ID>", "url": "<HOMEPAGE_URL>"}

content-quality-checker ajoute la lisibilité et le nombre de mots ; brand-extractor ajoute les couleurs, polices et boutons pour une ligne d'identité visuelle dans le guide. Annonces des concurrents : facebook_search_companies puis facebook_company_ads avec le page_id, ou google_company_ads avec le domain du concurrent (bibliothèques publicitaires).

Appels pour l'audit de messagerie web

GA4 : les pages de début de visite, avec les événements clés

{"platform": "google-analytics", "action": "get_report", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "property_id": "properties/<PROPERTY_ID>", "dimensions": ["landingPage"], "metrics": ["sessions", "keyEvents"], "start_date": "<START>", "end_date": "<END>"}

Les sessions par page de destination sont des entrées : des visites qui ont commencé sur cette page.

Search Console : les requêtes associées à chaque page

{"platform": "google-search-console", "action": "search_analytics", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "site_url": "<SITE_URL>", "dimensions": ["page", "query"], "start_date": "<START>", "end_date": "<END>", "row_limit": 5000}

Robot d'exploration : titre, méta-description, titres et étiquettes de boutons d'une page (aucun crédit payant)

{"platform": "crawler", "action": "meta-tags-checker", "workspace_id": "<WORKSPACE_ID>", "url": "<PAGE_URL>"}
{"platform": "crawler", "action": "headings-checker", "workspace_id": "<WORKSPACE_ID>", "url": "<PAGE_URL>"}
{"platform": "crawler", "action": "brand-extractor", "workspace_id": "<WORKSPACE_ID>", "url": "<PAGE_URL>"}

Les étiquettes des boutons se trouvent dans primaryButton.text et buttons[].text de brand-extractor. Si les deux vérifications du robot d'exploration reviennent vides (title_tag_count 0 et no_headings), le site a refusé le robot d'exploration : prenez le titre, le titre principal et les étiquettes à partir du texte de la page ou demandez un collage.

Texte du corps de la page : l'appel DataForSEO onpage_content_parsing est utilisé comme ci-dessus (un appel payant par page). Si DataForSEO est indisponible, utilisez le robot d'exploration en dernier recours. Le coût total de l'audit : X appels payants pour X pages, plus aucune limite de Search Console (comprise dans votre abonnement).

Structure du rapport

Chaque section est fondée sur des preuves, pas sur des opinions. Lorsque vous citez un texte, rattachez-le directement à la source (l'annonce, la publication, la page). Indiquez toujours le nombre d'impressions, de clics ou de réactions lorsque des données de performance existent, afin que l'équipe sache ce qui a fonctionné et ce qui n'a pas fonctionné.

Tout guide doit inclure :

  1. Résumé – la position, le public et la conviction centrale de la marque, extraits des textes, des clics et des réponses des clients. Y compris : l'abréviation en une ligne, le public principal et la conviction centrale distincte des concurrents.
  2. Personnalité de la marque – une analyse de la voix basée sur les preuves, avec des dimensions telles que formelle vs décontractée, autoritaire vs accessible, etc., avec des citations des textes et des performances comme preuve.
  3. Piliers de message – trois à cinq thèmes récurrents dans les textes et ce que les clients recherchent, chacun avec un noyau de message (« Nous croyons que… »), des preuves issues des textes et des données, et l'angle du concurrent pour chacun.
  4. Ton de voix – les ajustements en fonction du canal et de la situation, avec des exemples d'annonces Google, d'annonces Meta, de publications sociales, de pages web et d'emails rédigés dans chaque ton.
  5. Cadre de style – points de grammaire, de ponctuation, de majuscules et de formatage pour rendre la marque cohérente. Inclut les mots bannis et les phrases à éviter, les listes de vocabulaire (ce que la marque dit, ce qu'elle ne dit pas) et les verbes d'action par pilier.
  6. Analyse concurrentielle – comment les concurrents parlent des mêmes sujets, ce que la marque peut emprunter, ce qu'elle doit éviter, et l'espace de messagerie que la marque peut revendiquer comme sien.
  7. Annexe de données – les sources de chaque conclusion (l'annonce, la publication ou la recherche), avec des chiffres de performance lorsque disponibles.

Mode : Audit de messagerie web

Dans ce mode, 5 à 10 pages clés sont lues individuellement, puis vérifiées par rapport aux annonces et entre elles, et chaque décalage est classé par trafic. Exécutez ce mode comme suit :

  1. Appels : exécutez les appels de l'audit de messagerie web ci-dessus. GA4 montre sur quelles pages les visites commencent. Search Console montre pour quoi chaque page est trouvée. Le robot d'exploration lit le titre de la page, la méta-description, les titres principaux (H1, H2) et les étiquettes des boutons pour vérifier la cohérence du message.
  2. Par page : pour chaque page (page d'accueil, page « À propos », pages de fonctionnalités/produits, page de tarification, page de contact) :
    • Dites ce que cette page essaie de faire (d'après son URL, ses titres et ses liens), quel est son message principal, comment elle s'aligne avec les piliers de message, et si elle est cohérente avec les annonces.
    • Attribuez un score de cohérence de messagerie (1-5) et énumérez les décalages.
  3. Classement : pour chaque décalage, multipliez le score de trafic de la page par le nombre de requêtes de recherche, pour montrer à l'équipe quoi corriger en premier.
  4. Rapport : résumez en un tableau : Page, message principal, score (1-5), trafic (sessions GA4), requêtes (Search Console), décalages, impact (score × requêtes), correctif suggéré.

Chaque décalage doit être fondé sur un texte réel (par exemple, « La page dit X, mais l'annonce dit Y »). Si le robot d'exploration n'a pas pu lire la page, dites-le et fondez l'analyse sur le texte de DataForSEO ou sur le collage de l'utilisateur.

Sans connexion

Lorsque vous n'avez accès à aucun texte de la marque (aucun compte publicitaire, aucune page sociale, aucun site web), créez le guide de la même manière mais avec les preuves et la base de données en moins :

  • Construisez les piliers de message et la voix à partir de ce que l'utilisateur fournit dans les invites : la marque en une ligne, les textes qu'elle aime et ceux qu'elle n'aime pas, ce qu'elle défend et contre quoi elle se bat, et les concurrents. Ce guide sera plus vague et moins fiable ; dites-le en haut du rapport.
  • Sans données de performance, vous ne pouvez pas classer ce qui fonctionne et ce qui ne fonctionne pas. Utilisez les exemples de l'utilisateur.
  • Le cadre de style et l'analyse de la personnalité restent les mêmes, mais fondés sur la parole de l'utilisateur plutôt que sur les données.
  • Omettez l'annexe de données. Ajoutez une section « Prochaines étapes : » qui recommande de connecter un compte publicitaire ou de site web pour valider les décisions avec des données réelles.

Skills associés