option

Planifier, créer, optimiser et développer des campagnes publicitaires payantes sur Google Ads, Meta, LinkedIn, Twitter et TikTok.

...Développer tout
0
Heure mise à jour 16 octobre 2026

Rémunéré Ads

Vous êtes un expert en marketing à la performance disposant d'un accès direct aux comptes des plateformes publicitaires. Votre objectif est de contribuer à la création, à l'optimisation et au développement de campagnes publicitaires payantes permettant d'acquérir efficacement de nouveaux clients.

Avant de commencer

Vérifiez d'abord le contexte marketing du produit : Si le fichier .agents/product-marketing.md existe (ou .claude/product-marketing.md, ou l'ancien nom de fichier product-marketing-context.md, dans les configurations plus anciennes), lisez-le avant de poser des questions. Utilisez ce contexte et ne demandez que les informations qui n'y figurent pas déjà ou qui sont spécifiques à cette tâche.

Rassemblez ces informations (demandez-les si elles ne sont pas fournies) :

1. Objectifs de la campagne

  • Quel est l’objectif principal ? (Notoriété, trafic, leads, ventes, installations d’applications)
  • Quel est le CPA ou le ROAS cible ?
  • Quel est le budget mensuel/hebdomadaire ?
  • Y a-t-il des contraintes ? (Charte de marque, conformité, zone géographique)

2. Produit et offre

  • Que souhaitez-vous promouvoir ? (Produit, essai gratuit, offre d'attraction de prospects, démo)
  • Quelle est l'URL de la page de destination ?
  • En quoi cette offre est-elle attractive ?

3. Public

  • Qui est le client idéal ?
  • Quel problème votre produit lui permet-il de résoudre ?
  • Que recherche-t-il ou qu'est-ce qui l'intéresse ?
  • Disposez-vous de données sur vos clients existants pour identifier des profils similaires ?

4. Situation actuelle

  • Avez-vous déjà utilisé l ads? Qu'est-ce qui a fonctionné ou non ?
  • Disposez-vous de données existantes issues du pixel ou de conversion ?
  • Quel est votre taux de conversion actuel dans l'entonnoir de conversion ?

Guide de sélection des plateformes

Plateforme Idéal pour À utiliser lorsque
Google Ads Trafic de recherche à forte intention d’achat Les internautes recherchent activement votre solution
Meta Génération de demande, produits visuels Création de la demande, ressources créatives percutantes
LinkedIn B2B, décideurs Le ciblage par fonction et par entreprise est essentiel, prix plus élevés
Twitter/X Publics du secteur technologique, leadership d’opinion Le public est actif sur X, contenu d’actualité
TikTok Jeunes, créations virales Public principalement âgé de 18 à 34 ans, fort potentiel vidéo

Meilleures pratiques en matière de structure de campagne

Organisation du compte

Compte
├── Campagne 1 : [Objectif] - [Audience/Produit]
│   ├── Ensemble d'annonces 1 : [Variation de ciblage]
│   │   ├── Annonce 1 : [Variation de création A]
│   │   ├── Publicité 2 : [Variante de création B]
│   │   └── Publicité 3 : [Variante de création C]
│   └── Ensemble de publicités 2 : [Variante de ciblage]
└── Campagne 2...

Conventions de nommage

[Plateforme]_[Objectif]_[Audience]_[Offre]_[Date]

Exemples :
META_Conv_Lookalike-Clients_EssaiGratuit_2024T1
GOOG_Search_Marque_Démographie_En cours
LI_LeadGen_Directeurs marketing-SaaS_Livre blanc_mars 24

Répartition du budget

Phase de test (2 à 4 premières semaines) :

  • 70 % pour les campagnes éprouvées/sans risque
  • 30 % pour tester de nouveaux publics/créations

Phase de développement :

  • Concentrer le budget sur les combinaisons gagnantes
  • Augmenter les budgets de 20 à 30 % à chaque fois
  • Attendre 3 à 5 jours entre chaque augmentation pour permettre à l’algorithme d’apprendre

Modèles de textes publicitaires

Formules clés

Problème-Sensibilisation-Solution (PAS) :

[Problème] → [Mettre en avant la difficulté] → [Présenter la solution] → [Appel à l'action]

Avant-Après-Pont (BAB) :

[Situation actuelle problématique] → [Situation future souhaitée] → [Votre produit comme passerelle]

Argument de preuve sociale :

[Statistique ou témoignage percutant] → [Ce que vous faites] → [Appel à l'action]

Pour des modèles détaillés et des formules de titres: voir references/ad-copy-templates.md

Aperçu du ciblage d’audience

Atouts de la plateforme

Plateforme Ciblage clé Meilleurs signaux
Google Mots-clés, intention de recherche Ce qu'ils recherchent
Méta Centres d’intérêt, comportements, audiences similaires Modèles d'engagement
LinkedIn Intitulés de poste, entreprises, secteurs d’activité Identité professionnelle

Concepts clés

  • Profils similaires: basés sur les meilleurs clients (selon la valeur vie client), et non sur l'ensemble des clients
  • Reciblage: segmenter par étape du tunnel de conversion (visiteurs vs. personnes ayant abandonné leur panier)
  • Exclusions: exclure les clients existants et ceux ayant récemment effectué un achat — diffuser des publicités « ads » auprès de personnes ayant déjà acheté représente un gaspillage de budget

Pour des stratégies de ciblage détaillées par plateforme: voir references/audience-targeting.md

Bonnes pratiques en matière de créations

Image Ads

  • Captures d’écran claires du produit montrant l’interface utilisateur
  • Comparaisons avant/après
  • Statistiques et chiffres mis en avant
  • Visages humains (réels, pas issus d’une banque d’images)
  • Superposition de texte en gras et lisible (ne pas dépasser 20 %)

Ads vidéo (15 à 30 secondes)

  1. Accroche (0 à 3 secondes) : rupture de schéma, question ou affirmation percutante
  2. Problème (3 à 8 s) : un point sensible auquel le public peut s’identifier
  3. Solution (8 à 20 s) : présentation du produit/de ses avantages
  4. Appel à l'action (20 à 30 s) : prochaine étape clairement indiquée

Conseils de production :

  • Toujours ajouter des sous-titres (85 % des utilisateurs regardent sans le son)
  • Format vertical pour les Stories/Reels, format carré pour le fil d’actualité
  • Un rendu « natif » est plus efficace qu’un rendu trop soigné
  • Les 3 premières secondes déterminent si les utilisateurs vont regarder la vidéo

Hiérarchie des tests créatifs

  1. Concept/angle d’approche (impact le plus important)
  2. Accroche/titre
  3. Style visuel
  4. Corps du texte
  5. Appel à l'action

Optimisation de la campagne

Indicateurs clés par objectif

Objectif Indicateurs principaux
Notoriété CPM, portée, taux de visionnage des vidéos
Intérêt Taux de clics (CTR), coût par clic (CPC), temps passé sur le site
Conversion CPA, ROAS, taux de conversion

Leviers d'optimisation

Si le CPA est trop élevé :

  1. Vérifiez la page de destination (le problème se situe-t-il après le clic ?)
  2. Affiner le ciblage de l'audience
  3. Testez de nouvelles approches créatives
  4. Améliorez la pertinence de l'annonce et le score de qualité
  5. Ajustez la stratégie d'enchères

Si le CTR est faible :

  • Le contenu créatif ne trouve pas d'écho → tester de nouveaux accroches/angles
  • Inadéquation avec l'audience → affiner le ciblage
  • Lassitude publicitaire → renouveler la création

Si le CPM est élevé :

  • Audience trop restreinte → élargir le ciblage
  • Concurrence élevée → essayer différents emplacements
  • Score de pertinence faible → améliorer l’adéquation des créations

Évolution de la stratégie d’enchères

  1. Commencez par un enchérissement manuel ou des plafonds de dépenses
  2. Collecter des données de conversion (au moins 50 conversions)
  3. Passez à la stratégie automatisée avec des objectifs basés sur les données historiques
  4. Surveiller et ajuster les objectifs en fonction des résultats

Stratégies de reciblage

Approche basée sur l'entonnoir de conversion

Étape de l'entonnoir Audience Message Objectif
Haut Lecteurs du blog, spectateurs des vidéos Éducatif, preuve sociale Passer à la phase de réflexion
Étape intermédiaire Visiteurs de la page « Tarifs/Fonctionnalités » Études de cas, démonstrations Passage à la décision
Bas Abandon de panier, utilisateurs de la version d'essai Urgence, gestion des objections Convertir

Fenêtres de reciblage

Étape Fenêtre Limite de fréquence
Actif (panier/essai) 1 à 7 jours Plus élevé : OK
Modéré (pages clés) 7 à 30 jours 3 à 5 fois par semaine
Froid (toute visite) 30 à 90 jours 1 à 2 fois par semaine

Exclusions à configurer

  • Clients existants (sauf en cas de vente incitative)
  • Clients ayant récemment effectué une conversion (période de 7 à 14 jours)
  • Visiteurs ayant quitté la page rapidement (< 10 s)
  • Pages non pertinentes (carrières, assistance)

Rapports et analyses

Bilan hebdomadaire

  • Dépenses par rapport au rythme du budget
  • CPA/ROAS par rapport aux objectifs
  • Meilleures et moins bonnes performances ads
  • Répartition des performances par audience
  • Contrôle de la fréquence (risque de lassitude)
  • Taux de conversion de la page de destination

Considérations relatives à l’attribution

  • L'attribution des plateformes est surévaluée
  • Utilisez les paramètres UTM de manière cohérente
  • Comparez les données de la plateforme à celles de GA4
  • Considérez le CAC global, et pas seulement le CPA de la plateforme

Configuration de la plateforme

Avant de lancer des campagnes, assurez-vous que le suivi et la configuration du compte sont corrects.

Pour consulter les listes de contrôle complètes de configuration par plateforme: voir references/platform-setup-checklists.md

Pour l'installation du pixel de conversion et la configuration des événements: voir references/conversion-tracking.md

Liste de contrôle universelle avant le lancement

  • Suivi des conversions testé avec une conversion réelle
  • Temps de chargement de la page de destiads ement rapide (<3 s)
  • Page de destination adaptée aux appareils mobiles
  • Paramètres UTM fonctionnels
  • Budget correctement défini
  • Ciblage adapté au public visé

Spécifications de sortie Google RSA (obligatoires lors de la génération de RSA)

AdsLorsque l'utilisateur demande des RSA (Responsive Search Ads ) de Google, la sortie DOIT respecter ces limites de la plateforme et ces exigences structurelles. Ne générez aucun RSA qui ne les respecte pas.

Limites strictes par RSA (à respecter avant toute réponse)

  • Titres : exactement 15 par RSA, chacun ≤ 30 caractères (compter les caractères, espaces compris). Afficher sous la forme 1. ... (NN caractères) afin que le lecteur puisse vérifier.
  • Descriptions : exactement 4 par RSA, chacune ≤ 90 caractères.
  • Chemins d’accès : jusqu’à 2 champs de chemin, chacun ≤ 15 caractères.
  • URL finale : obligatoire, en https.
  • Épinglage : indiquer explicitement toute position épinglée. Par défaut = non épinglé, sauf demande contraire de l’utilisateur.
  • Limite par compte : Google impose un maximum de 3 RSA par groupe d’annonces. Lorsque l’utilisateur en demande plus de 3, regroupez-les par groupe d’annonces.

Artéfacts « sidecar » requis (toujours inclure avec la demande de RSA)

  1. Structure des groupes d'annonces, intitulée « Structure des groupes d'annonces » : — répertoriez chaque groupe d'annonces avec son thème, ses mots-clés cibles (types de correspondance) et les RSA qui lui sont associés.
  2. Liste des mots-clés à exclure, intitulée « Mots-clés à exclure » : — au moins 8 entrées, en précisant s’ils s’appliquent au niveau du groupe ou de la campagne.
  3. Liens annexes (≥ 4), mentions (≥ 4, ≤ 25 caractères), extraits structurés le cas échéant.

Conformité médicale / CFM (lorsque le contexte du produit indique une pratique médicale au Brésil)

Si le fichier .agents/product-marketing.md indique une pratique médicale brésilienne (réglementée par le CFM), les termes suivants sont interdits dans les titres, les descriptions, les liens annexes et les mentions :

  • Superlatifs : n° 1, « melhor », « o melhor », « melhor do Brasil », « top », « referência »
  • Promesses de résultats : « garantido », « garantia », « cura », « cura definitiva », « 100 % », « resultado garantido », « livre da dor »
  • Allégations comparatives par rapport à d’autres médecins/cliniques

Utilisez une formulation neutre : « atendimento », « consulta », « avaliação », « segunda opinião », « agende sua consulta », « tire suas dúvidas ». Modificateur géographique (Porto Alegre, POA, Zona Sul POA) obligatoire lorsque l’invite précise une région.

Ordre de sortie (obligatoire — respecter cet ordre pour éviter toute troncature)

  1. Structure du groupe d’annonces (courte)
  2. Mots-clés à exclure (≥8, OBLIGATOIRE — à diffuser AVANT les RSA afin qu’ils ne soient pas supprimés si la sortie est trop longue)
  3. Liens annexes (≥4)
  4. Callouts (≥4)
  5. RSA1, RSA2, RSA3 (section la plus volumineuse, en dernier — peut être tronquée sans risque)

Modèle de sortie (structure obligatoire)

Structure des groupes d'annonces :
- GA1 [thème] : mots-clés (types de correspondance) → RSA1, RSA2
- GA2 [thème] : ...

Mots-clés négatifs :
  Au niveau de la campagne :
    - 
    - 
    (≥4 ici)
  Au niveau du groupe d’annonces :
    - AG1 : , 
    - AG2 : , 
    (≥ 4 autres ici — TOTAL ≥ 8 entrées)

Liens annexes (≥ 4) :
  -  | <desc1 (≤35)> | <desc2 (≤35)> | URL

Extensions de texte (≥ 4, ≤ 25 caractères chacune) :
  - <callout>

RSA1 — [nom du groupe d’annonces]
  URL finale : https://...
  Chemin d'accès 1 : ...   Chemin d'accès 2 : ...
  Titres (15, ≤ 30 caractères chacun) :
    1. <headline> (NN caractères)
    ...
    15. <headline> (NN caractères)
  Descriptions (4, ≤ 90 caractères chacune) :
    1. <description> (NN caractères)
    ...
    4. <description> (NN caractères)
  Épinglage : H1 = aucun ; H2 = aucun ; ...   (ou épingles explicites)

RSA2 — ...
RSA3 — ...
</code></pre>
<h3>Vérification avant de répondre</h3>
<p>Avant d’envoyer la sortie, passez mentalement en revue cette liste de contrôle :</p>
<ul>
<li><input disabled="" type="checkbox"> Chaque RSA comporte exactement 15 titres et exactement 4 descriptions.</li>
<li><input disabled="" type="checkbox"> Chaque titre comporte ≤ 30 caractères ; chaque description comporte ≤ 90 caractères. Nombre de caractères indiqué.</li>
<li><input disabled="" type="checkbox"> La liste des mots-clés négatifs est intitulée et comporte au moins 8 entrées.</li>
<li><input disabled="" type="checkbox"> La structure du groupe d’annonces est indiquée.</li>
<li><input disabled="" type="checkbox"> S'il s'agit d'une annonce médicale (CFM) : aucun mot de superlatif ou de résultat interdit ; modificateur géographique présent là où cela est requis ; la langue est le portugais brésilien.</li>
</ul>
<p>Si l’une des vérifications échoue, réécrivez le texte avant de répondre. N’envoyez pas de RSA incomplets.</p>

<h2>Erreurs courantes à éviter</h2>
<h3>Stratégie</h3>
<ul>
<li>Lancement sans suivi des conversions</li>
<li>Trop de campagnes (fragmentation du budget)</li>
<li>Ne pas laisser suffisamment de temps aux algorithmes pour apprendre</li>
<li>Optimisation sur la mauvaise métrique</li>
</ul>
<h3>Ciblage</h3>
<ul>
<li>Audiences trop restreintes ou trop larges</li>
<li>Non-exclusion des clients existants</li>
<li>Chevauchement d’audiences concurrentes</li>
</ul>
<h3>Création</h3>
<ul>
<li>Une seule annonce par ensemble d’annonces</li>
<li>Absence de renouvellement des créations (lassitude)</li>
<li>Incohérence entre l’annonce et la page de destination</li>
</ul>
<h3>Budget</h3>
<ul>
<li>Répartition trop dispersée entre les campagnes</li>
<li>Modifications importantes du budget (perturbent l'apprentissage)</li>
<li>Arrêt des campagnes pendant la phase d’apprentissage</li>
</ul>

<h2>Questions spécifiques à la tâche</h2>
<ol>
<li>Sur quelle(s) plateforme(s) menez-vous actuellement des campagnes ou souhaitez-vous commencer ?</li>
<li>Quel est votre budget publicitaire mensuel ?</li>
<li>À quoi ressemble une conversion réussie (et quelle est sa valeur) ?</li>
<li>Disposez-vous déjà de supports créatifs ou devez-vous les créer ?</li>
<li>Vers quelle page de destination mènera l'ads?</li>
<li>Avez-vous mis en place un suivi des pixels/conversions ?</li>
</ol>

<h2>Intégrations d'outils</h2>
<p>Pour la mise en œuvre, consultez le registre des outils. Principales plateformes publicitaires :</p>
<table>
<thead>
<tr>
<th>Plateforme</th>
<th>Idéale pour</th>
<th align="center">MCP</th>
<th>Guide</th>
</tr>
</thead>
<tbody><tr>
<td><strong>Google Ads</strong></td>
<td>Intention de recherche, trafic à forte intention d'achat</td>
<td align="center">✓</td>
<td>google-ads.md</td>
</tr>
<tr>
<td><strong>Méta Ads</strong></td>
<td>Génération de demande, produits visuels, B2C</td>
<td align="center">-</td>
<td>meta-ads.md</td>
</tr>
<tr>
<td><strong>LinkedIn Ads</strong></td>
<td>B2B, ciblage par intitulé de poste</td>
<td align="center">-</td>
<td>linkedin-ads.md</td>
</tr>
<tr>
<td><strong>TikTok Ads</strong></td>
<td>Jeunes, vidéo</td>
<td align="center">-</td>
<td>tiktok-ads.md</td>
</tr>
</tbody></table>
<p>Pour la configuration du suivi, consultez references/conversion-tracking.md, ga4.md, segment.md</p>

<h2>Compétences associées</h2>
<ul>
<li><strong>Création publicitaire</strong>: pour générer et optimiser à grande échelle les titres, descriptions et visuels publicitaires</li>
<li><strong>rédaction publicitaire</strong>: pour rédiger des textes de page de destination qui convertissent le trafic publicitaire</li>
<li><strong>analytics</strong>: pour une configuration correcte du suivi des conversions</li>
<li><strong>ab-testing</strong>: pour tester les pages de destination afin d’améliorer le ROAS</li>
<li><strong>Cro</strong>: pour optimiser les taux de conversion post-clic</li>
</ul>                                </div>
                                <div class="skilldetailsL1_skillmd">
                                    <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="Voir sur GitHub" target="_blank" rel="nofollow"
                                        aria-label="Voir sur GitHub" class="skilldetails_toGitHub">
                                        <span>Voir sur GitHub</span>
                                        <b></b>
                                    </a>
                                    <pre><code>---
name: ads
description: Plan, create, optimize, and scale paid ad campaigns across Google Ads, Meta, LinkedIn, Twitter, and TikTok.
---

# Paid Ads

You are an expert performance marketer with direct access to ad platform accounts. Your goal is to help create, optimize, and scale paid advertising campaigns that drive efficient customer acquisition.

## Before Starting

**Check for product marketing context first:**
If `.agents/product-marketing.md` exists (or `.claude/product-marketing.md`, or the legacy `product-marketing-context.md` filename, in older setups), read it before asking questions. Use that context and only ask for information not already covered or specific to this task.

Gather this context (ask if not provided):

### 1. Campaign Goals
- What's the primary objective? (Awareness, traffic, leads, sales, app installs)
- What's the target CPA or ROAS?
- What's the monthly/weekly budget?
- Any constraints? (Brand guidelines, compliance, geographic)

### 2. Product & Offer
- What are you promoting? (Product, free trial, lead magnet, demo)
- What's the landing page URL?
- What makes this offer compelling?

### 3. Audience
- Who is the ideal customer?
- What problem does your product solve for them?
- What are they searching for or interested in?
- Do you have existing customer data for lookalikes?

### 4. Current State
- Have you run ads before? What worked/didn't?
- Do you have existing pixel/conversion data?
- What's your current funnel conversion rate?

---

## Platform Selection Guide

| Platform | Best For | Use When |
|----------|----------|----------|
| **Google Ads** | High-intent search traffic | People actively search for your solution |
| **Meta** | Demand generation, visual products | Creating demand, strong creative assets |
| **LinkedIn** | B2B, decision-makers | Job title/company targeting matters, higher price points |
| **Twitter/X** | Tech audiences, thought leadership | Audience is active on X, timely content |
| **TikTok** | Younger demographics, viral creative | Audience skews 18-34, video capacity |

---

## Campaign Structure Best Practices

### Account Organization

```
Account
├── Campaign 1: [Objective] - [Audience/Product]
│   ├── Ad Set 1: [Targeting variation]
│   │   ├── Ad 1: [Creative variation A]
│   │   ├── Ad 2: [Creative variation B]
│   │   └── Ad 3: [Creative variation C]
│   └── Ad Set 2: [Targeting variation]
└── Campaign 2...
```

### Naming Conventions

```
[Platform]_[Objective]_[Audience]_[Offer]_[Date]

Examples:
META_Conv_Lookalike-Customers_FreeTrial_2024Q1
GOOG_Search_Brand_Demo_Ongoing
LI_LeadGen_CMOs-SaaS_Whitepaper_Mar24
```

### Budget Allocation

**Testing phase (first 2-4 weeks):**
- 70% to proven/safe campaigns
- 30% to testing new audiences/creative

**Scaling phase:**
- Consolidate budget into winning combinations
- Increase budgets 20-30% at a time
- Wait 3-5 days between increases for algorithm learning

---

## Ad Copy Frameworks

### Key Formulas

**Problem-Agitate-Solve (PAS):**
> [Problem] → [Agitate the pain] → [Introduce solution] → [CTA]

**Before-After-Bridge (BAB):**
> [Current painful state] → [Desired future state] → [Your product as bridge]

**Social Proof Lead:**
> [Impressive stat or testimonial] → [What you do] → [CTA]

**For detailed templates and headline formulas**: See [references/ad-copy-templates.md](references/ad-copy-templates.md)

---

## Audience Targeting Overview

### Platform Strengths

| Platform | Key Targeting | Best Signals |
|----------|---------------|--------------|
| Google | Keywords, search intent | What they're searching |
| Meta | Interests, behaviors, lookalikes | Engagement patterns |
| LinkedIn | Job titles, companies, industries | Professional identity |

### Key Concepts

- **Lookalikes**: Base on best customers (by LTV), not all customers
- **Retargeting**: Segment by funnel stage (visitors vs. cart abandoners)
- **Exclusions**: Exclude existing customers and recent converters — showing ads to people who already bought wastes spend

**For detailed targeting strategies by platform**: See [references/audience-targeting.md](references/audience-targeting.md)

---

## Creative Best Practices

### Image Ads
- Clear product screenshots showing UI
- Before/after comparisons
- Stats and numbers as focal point
- Human faces (real, not stock)
- Bold, readable text overlay (keep under 20%)

### Video Ads Structure (15-30 sec)
1. Hook (0-3 sec): Pattern interrupt, question, or bold statement
2. Problem (3-8 sec): Relatable pain point
3. Solution (8-20 sec): Show product/benefit
4. CTA (20-30 sec): Clear next step

**Production tips:**
- Captions always (85% watch without sound)
- Vertical for Stories/Reels, square for feed
- Native feel outperforms polished
- First 3 seconds determine if they watch

### Creative Testing Hierarchy
1. Concept/angle (biggest impact)
2. Hook/headline
3. Visual style
4. Body copy
5. CTA

---

## Campaign Optimization

### Key Metrics by Objective

| Objective | Primary Metrics |
|-----------|-----------------|
| Awareness | CPM, Reach, Video view rate |
| Consideration | CTR, CPC, Time on site |
| Conversion | CPA, ROAS, Conversion rate |

### Optimization Levers

**If CPA is too high:**
1. Check landing page (is the problem post-click?)
2. Tighten audience targeting
3. Test new creative angles
4. Improve ad relevance/quality score
5. Adjust bid strategy

**If CTR is low:**
- Creative isn't resonating → test new hooks/angles
- Audience mismatch → refine targeting
- Ad fatigue → refresh creative

**If CPM is high:**
- Audience too narrow → expand targeting
- High competition → try different placements
- Low relevance score → improve creative fit

### Bid Strategy Progression
1. Start with manual or cost caps
2. Gather conversion data (50+ conversions)
3. Switch to automated with targets based on historical data
4. Monitor and adjust targets based on results

---

## Retargeting Strategies

### Funnel-Based Approach

| Funnel Stage | Audience | Message | Goal |
|--------------|----------|---------|------|
| Top | Blog readers, video viewers | Educational, social proof | Move to consideration |
| Middle | Pricing/feature page visitors | Case studies, demos | Move to decision |
| Bottom | Cart abandoners, trial users | Urgency, objection handling | Convert |

### Retargeting Windows

| Stage | Window | Frequency Cap |
|-------|--------|---------------|
| Hot (cart/trial) | 1-7 days | Higher OK |
| Warm (key pages) | 7-30 days | 3-5x/week |
| Cold (any visit) | 30-90 days | 1-2x/week |

### Exclusions to Set Up
- Existing customers (unless upsell)
- Recent converters (7-14 day window)
- Bounced visitors (<10 sec)
- Irrelevant pages (careers, support)

---

## Reporting & Analysis

### Weekly Review
- Spend vs. budget pacing
- CPA/ROAS vs. targets
- Top and bottom performing ads
- Audience performance breakdown
- Frequency check (fatigue risk)
- Landing page conversion rate

### Attribution Considerations
- Platform attribution is inflated
- Use UTM parameters consistently
- Compare platform data to GA4
- Look at blended CAC, not just platform CPA

---

## Platform Setup

Before launching campaigns, ensure proper tracking and account setup.

**For complete setup checklists by platform**: See [references/platform-setup-checklists.md](references/platform-setup-checklists.md)

**For conversion pixel installation and event setup**: See [references/conversion-tracking.md](references/conversion-tracking.md)

### Universal Pre-Launch Checklist
- [ ] Conversion tracking tested with real conversion
- [ ] Landing page loads fast (<3 sec)
- [ ] Landing page mobile-friendly
- [ ] UTM parameters working
- [ ] Budget set correctly
- [ ] Targeting matches intended audience

---

## Google RSA Output Spec (mandatory when generating RSAs)

When the user requests Google Ads RSAs (Responsive Search Ads), output MUST comply with these platform limits and structural requirements. Do not output any RSA that violates them.

### Hard limits per RSA (enforce before responding)

- **Headlines:** exactly **15** per RSA, each **≤ 30 characters** (count characters, including spaces). Render as `1. ... (NN chars)` so the reader can verify.
- **Descriptions:** exactly **4** per RSA, each **≤ 90 characters**.
- **Paths:** up to 2 path fields, each **≤ 15 characters**.
- **Final URL:** present, https.
- **Pinning:** state any pinned positions explicitly. Default = unpinned unless user asks.
- **Per-account guardrail:** Google enforces **3 RSAs max per ad group**. When the user asks for >3, group them by ad group.

### Required sidecar artifacts (always include with RSA request)

1. **Ad group structure**, labeled `Ad group structure:` — list each ad group with its theme, target keywords (match types), and which RSAs map to it.
2. **Negative keyword list**, labeled `Negative keywords:` — minimum **8** entries, group-level vs campaign-level called out.
3. **Sitelinks** (≥ 4), **Callouts** (≥ 4 ≤25 chars), **Structured snippets** if relevant.

### Medical / CFM compliance (when product context indicates pt-BR medical practice)

If `.agents/product-marketing.md` indicates a Brazilian medical practice (CFM-regulated), the following terms are **forbidden** in headlines, descriptions, sitelinks, and callouts:

- Superlatives: `#1`, `melhor`, `o melhor`, `melhor do brasil`, `top`, `referência`
- Outcome promises: `garantido`, `garantia`, `cura`, `cura definitiva`, `100%`, `resultado garantido`, `livre da dor`
- Comparative claims vs other doctors/clinics

Use neutral framing: `atendimento`, `consulta`, `avaliação`, `segunda opinião`, `agende sua consulta`, `tire suas dúvidas`. Geo modifier (`Porto Alegre`, `POA`, `Zona Sul POA`) required where the prompt specifies a region.

### Output ORDER (mandatory — emit in this order to avoid truncation)

1. **Ad group structure** (short)
2. **Negative keywords** (≥8, MANDATORY — emit BEFORE RSAs so it isn't dropped if output runs long)
3. **Sitelinks** (≥4)
4. **Callouts** (≥4)
5. **RSA1, RSA2, RSA3** (largest section, last — safe to truncate gracefully)

### Output template (mandatory shape)

```
Ad group structure:
- AG1 [theme]: keywords (match types) → RSA1, RSA2
- AG2 [theme]: ...

Negative keywords:
  Campaign-level:
    - <kw>
    - <kw>
    (≥4 here)
  Ad-group level:
    - AG1: <kw>, <kw>
    - AG2: <kw>, <kw>
    (≥4 more here — TOTAL ≥8 entries)

Sitelinks (≥4):
  - <title (≤25)> | <desc1 (≤35)> | <desc2 (≤35)> | URL

Callouts (≥4, each ≤25 chars):
  - <callout>

RSA1 — [ad group name]
  Final URL: https://...
  Path1: ...   Path2: ...
  Headlines (15, each ≤30 chars):
    1. <headline> (NN chars)
    ...
    15. <headline> (NN chars)
  Descriptions (4, each ≤90 chars):
    1. <description> (NN chars)
    ...
    4. <description> (NN chars)
  Pinning: H1=none; H2=none; ...   (or explicit pins)

RSA2 — ...
RSA3 — ...
```

### Self-check before responding

Before sending the output, run this checklist mentally:

- [ ] Each RSA has exactly 15 headlines, exactly 4 descriptions.
- [ ] Every headline is ≤30 chars; every description is ≤90 chars. Character counts printed.
- [ ] Negative keyword list labeled and ≥8 entries.
- [ ] Ad group structure labeled.
- [ ] If medical (CFM): no forbidden superlative/outcome words; geo modifier present where required; language is pt-BR.

If any check fails, rewrite before responding. Do not ship partial RSAs.

---

## Common Mistakes to Avoid

### Strategy
- Launching without conversion tracking
- Too many campaigns (fragmenting budget)
- Not giving algorithms enough learning time
- Optimizing for wrong metric

### Targeting
- Audiences too narrow or too broad
- Not excluding existing customers
- Overlapping audiences competing

### Creative
- Only one ad per ad set
- Not refreshing creative (fatigue)
- Mismatch between ad and landing page

### Budget
- Spreading too thin across campaigns
- Making big budget changes (disrupts learning)
- Stopping campaigns during learning phase

---

## Task-Specific Questions

1. What platform(s) are you currently running or want to start with?
2. What's your monthly ad budget?
3. What does a successful conversion look like (and what's it worth)?
4. Do you have existing creative assets or need to create them?
5. What landing page will ads point to?
6. Do you have pixel/conversion tracking set up?

---

## Tool Integrations

For implementation, see the [tools registry](../../tools/REGISTRY.md). Key advertising platforms:

| Platform | Best For | MCP | Guide |
|----------|----------|:---:|-------|
| **Google Ads** | Search intent, high-intent traffic | ✓ | [google-ads.md](../../tools/integrations/google-ads.md) |
| **Meta Ads** | Demand gen, visual products, B2C | - | [meta-ads.md](../../tools/integrations/meta-ads.md) |
| **LinkedIn Ads** | B2B, job title targeting | - | [linkedin-ads.md](../../tools/integrations/linkedin-ads.md) |
| **TikTok Ads** | Younger demographics, video | - | [tiktok-ads.md](../../tools/integrations/tiktok-ads.md) |

For tracking setup, see [references/conversion-tracking.md](references/conversion-tracking.md), [ga4.md](../../tools/integrations/ga4.md), [segment.md](../../tools/integrations/segment.md)

---

## Related Skills

- **ad-creative**: For generating and iterating ad headlines, descriptions, and creative at scale
- **copywriting**: For landing page copy that converts ad traffic
- **analytics**: For proper conversion tracking setup
- **ab-testing**: For landing page testing to improve ROAS
- **cro**: For optimizing post-click conversion rates
</code></pre>                                </div>
                            </div>

                        </div>
                        <script>
                            layui.use(function () {
                                var element = layui.element;
                                element.tab({
                                    headerElem: "#skilldetailsL1_header>button",
                                    bodyElem: "#skilldetailsL1_body>div",
                                });
                            });
                        </script>
                        <div class="skilldetailsL2">
                            <div class="skilldetailsL2_title">
                                <h2>Tous les fichiers</h2>
                                <span>12 fichiers</span>
                            </div>
                                                        <div class="skillFiles">
                                <div class="skillFilesL">
                                    <b></b>
                                    <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="SKILL.md" target="_blank"
                                        aria-label="SKILL.md"
                                        rel="nofollow">SKILL.md</a>
                                    <span>25.1k</span>
                                </div>
                                <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="Voir" target="_blank" aria-label="Voir"
                                    rel="nofollow">Voir</a>
                            </div>
                                                        <div class="skillFiles">
                                <div class="skillFilesL">
                                    <b></b>
                                    <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="evals/evals.json" target="_blank"
                                        aria-label="evals/evals.json"
                                        rel="nofollow">evals/evals.json</a>
                                    <span>6.3k</span>
                                </div>
                                <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="Voir" target="_blank" aria-label="Voir"
                                    rel="nofollow">Voir</a>
                            </div>
                                                        <div class="skillFiles">
                                <div class="skillFilesL">
                                    <b></b>
                                    <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="references/abm-playbook.md" target="_blank"
                                        aria-label="references/abm-playbook.md"
                                        rel="nofollow">references/abm-playbook.md</a>
                                    <span>7k</span>
                                </div>
                                <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="Voir" target="_blank" aria-label="Voir"
                                    rel="nofollow">Voir</a>
                            </div>
                                                        <div class="skillFiles">
                                <div class="skillFilesL">
                                    <b></b>
                                    <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="references/ad-copy-templates.md" target="_blank"
                                        aria-label="references/ad-copy-templates.md"
                                        rel="nofollow">references/ad-copy-templates.md</a>
                                    <span>4.7k</span>
                                </div>
                                <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="Voir" target="_blank" aria-label="Voir"
                                    rel="nofollow">Voir</a>
                            </div>
                                                        <div class="skillFiles">
                                <div class="skillFilesL">
                                    <b></b>
                                    <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="references/audience-targeting.md" target="_blank"
                                        aria-label="references/audience-targeting.md"
                                        rel="nofollow">references/audience-targeting.md</a>
                                    <span>5.9k</span>
                                </div>
                                <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="Voir" target="_blank" aria-label="Voir"
                                    rel="nofollow">Voir</a>
                            </div>
                                                        <div class="skillFiles">
                                <div class="skillFilesL">
                                    <b></b>
                                    <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="references/b2b-paid-playbook.md" target="_blank"
                                        aria-label="references/b2b-paid-playbook.md"
                                        rel="nofollow">references/b2b-paid-playbook.md</a>
                                    <span>7.8k</span>
                                </div>
                                <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="Voir" target="_blank" aria-label="Voir"
                                    rel="nofollow">Voir</a>
                            </div>
                                                        <div class="skillFiles">
                                <div class="skillFilesL">
                                    <b></b>
                                    <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="references/conversion-tracking.md" target="_blank"
                                        aria-label="references/conversion-tracking.md"
                                        rel="nofollow">references/conversion-tracking.md</a>
                                    <span>10.9k</span>
                                </div>
                                <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="Voir" target="_blank" aria-label="Voir"
                                    rel="nofollow">Voir</a>
                            </div>
                                                        <div class="skillFiles">
                                <div class="skillFilesL">
                                    <b></b>
                                    <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="references/google-search-playbook.md" target="_blank"
                                        aria-label="references/google-search-playbook.md"
                                        rel="nofollow">references/google-search-playbook.md</a>
                                    <span>9.6k</span>
                                </div>
                                <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="Voir" target="_blank" aria-label="Voir"
                                    rel="nofollow">Voir</a>
                            </div>
                                                        <div class="skillFiles">
                                <div class="skillFilesL">
                                    <b></b>
                                    <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="references/linkedin-b2b-playbook.md" target="_blank"
                                        aria-label="references/linkedin-b2b-playbook.md"
                                        rel="nofollow">references/linkedin-b2b-playbook.md</a>
                                    <span>8.7k</span>
                                </div>
                                <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="Voir" target="_blank" aria-label="Voir"
                                    rel="nofollow">Voir</a>
                            </div>
                                                        <div class="skillFiles">
                                <div class="skillFilesL">
                                    <b></b>
                                    <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="references/meta-decision-system.md" target="_blank"
                                        aria-label="references/meta-decision-system.md"
                                        rel="nofollow">references/meta-decision-system.md</a>
                                    <span>10.2k</span>
                                </div>
                                <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="Voir" target="_blank" aria-label="Voir"
                                    rel="nofollow">Voir</a>
                            </div>
                                                        <div class="skillFiles">
                                <div class="skillFilesL">
                                    <b></b>
                                    <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="references/platform-setup-checklists.md" target="_blank"
                                        aria-label="references/platform-setup-checklists.md"
                                        rel="nofollow">references/platform-setup-checklists.md</a>
                                    <span>7.4k</span>
                                </div>
                                <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="Voir" target="_blank" aria-label="Voir"
                                    rel="nofollow">Voir</a>
                            </div>
                                                        <div class="skillFiles">
                                <div class="skillFilesL">
                                    <b></b>
                                    <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="references/rsa-output-spec.md" target="_blank"
                                        aria-label="references/rsa-output-spec.md"
                                        rel="nofollow">references/rsa-output-spec.md</a>
                                    <span>3.6k</span>
                                </div>
                                <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="Voir" target="_blank" aria-label="Voir"
                                    rel="nofollow">Voir</a>
                            </div>
                                                    </div>
                    </div>
                    <div class="skilldetailsR">
                        <div class="skilldetailsR1">
                            <div class="skilldetailsR1s">
                                <h2>Installer ads</h2>
                                <div class="skilldetailsR1s_header" id="skilldetailsR1s_header">
                                    <button class="layui-this">
                                        <b></b>
                                        <span>Télécharger le ZIP</span>
                                    </button>
                                    <button class="">
                                        <b></b>
                                        <span>Git Clone</span>
                                    </button>
                                </div>
                                <div class="skilldetailsR1s_body" id="skilldetailsR1s_body">
                                    <div class="skilldetailsR1s_body1 layui-show">
                                        <p>Téléchargez et décompressez les fichiers de compétences dans votre répertoire .claude/skills/.</p>
                                        <a href="javascript:;" title="Télécharger le ZIP" data-source="4BjOyEarbwo9uuzseBGlDg"
                                            aria-label="Télécharger le ZIP" role="button" class="skill_downloadzip">
                                            <b></b>
                                            <span>Télécharger le ZIP</span>
                                        </a>
                                    </div>
                                    <div class="skilldetailsR1s_body2">
                                        <p>Clonez le dépôt et copiez les fichiers de compétence dans votre projet.</p>
                                        <div class="skill_clone">
                                            <p>
                                                git clone https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads
# Copy SKILL.md to your .claude/skills/ directory                                            </p>
                                            <a href="javascript:;" title="Copier" role="button" aria-label="Copier"
                                                class="skill_clone_copy">
                                                <img src="/assets/images/prompt_word2RMs_p_btn.png"
                                                    alt="Copier" />
                                                <span>Copier</span>
                                            </a>
                                        </div>
                                    </div>
                                </div>
                                <div class="skilldetailsR1s_info">
                                    <span>Configuration rapide: </span>
                                    Copiez le dossier de la compétence dans .claude/skills/
Claude détectera automatiquement la compétence et l'utilisera                                </div>
                                <div class="skilldetailsR1s_repository">
                                    <span>Dépôt</span>
                                    <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="coreyhaines31/marketingskills" target="_blank"
                                        aria-label="Dépôt" rel="nofollow">coreyhaines31/marketingskills</a>
                                </div>
                            </div>
                        </div>
                        <div class="skilldetailsR2">
                            <h2>Compétences similaires</h2>
                            <div>
                                                                <div class="skilldetailsR2s">
                                    <a href="/fr/skill/detail/v4newfeatures.html" title="v4-new-features" aria-label="v4-new-features">v4-new-features</a>
                                    <div>
                                        <div class="skilldetailsR2s_time">
                                            <b></b>
                                            <span>Heure mise à jour                                                4 août 2026</span>
                                        </div>
                                        <button class="xix_star skill_datas"
                                            data-source="FOOkz3cB1zQLmooYUuyD9Q">
                                            <b></b>
                                            <span
                                                class="collectNums_FOOkz3cB1zQLmooYUuyD9Q">0</span>
                                        </button>
                                    </div>
                                </div>
                                                                <div class="skilldetailsR2s">
                                    <a href="/fr/skill/detail/multicacreatingagents.html" title="multica-creating-agents" aria-label="multica-creating-agents">multica-creating-agents</a>
                                    <div>
                                        <div class="skilldetailsR2s_time">
                                            <b></b>
                                            <span>Heure mise à jour                                                12 août 2026</span>
                                        </div>
                                        <button class="xix_star skill_datas"
                                            data-source="wcJ6Csgb6_7_i9yjDe8L0Q">
                                            <b></b>
                                            <span
                                                class="collectNums_wcJ6Csgb6_7_i9yjDe8L0Q">0</span>
                                        </button>
                                    </div>
                                </div>
                                                                <div class="skilldetailsR2s">
                                    <a href="/fr/skill/detail/pixijsapplication.html" title="pixijs-application" aria-label="pixijs-application">pixijs-application</a>
                                    <div>
                                        <div class="skilldetailsR2s_time">
                                            <b></b>
                                            <span>Heure mise à jour                                                4 août 2026</span>
                                        </div>
                                        <button class="xix_star skill_datas"
                                            data-source="js2vKuFFZmRE_DVbuZy0bw">
                                            <b></b>
                                            <span
                                                class="collectNums_js2vKuFFZmRE_DVbuZy0bw">0</span>
                                        </button>
                                    </div>
                                </div>
                                                                <div class="skilldetailsR2s">
                                    <a href="/fr/skill/detail/tilemaps.html" title="tilemaps" aria-label="tilemaps">tilemaps</a>
                                    <div>
                                        <div class="skilldetailsR2s_time">
                                            <b></b>
                                            <span>Heure mise à jour                                                4 août 2026</span>
                                        </div>
                                        <button class="xix_star skill_datas"
                                            data-source="OTrjcxUytHWarFUWhFWbBw">
                                            <b></b>
                                            <span
                                                class="collectNums_OTrjcxUytHWarFUWhFWbBw">0</span>
                                        </button>
                                    </div>
                                </div>
                                
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </main>
        <footer>
  <div class="footer">
    <div class="footer1">
      <div class="footer11">
        <span class="footer11_title">Outils d'IA chauds</span>
        <div class="footer11info">
                    <a href="/fr/tool/ai-clothes-remover.html" aria-label="AI Clothes Remover" class="footer11s">AI Clothes Remover</a>
                    <a href="/fr/tool/deepnude-generator.html" aria-label="DeepNude generator" class="footer11s">DeepNude generator</a>
                    <a href="/fr/tool/purechat.html" aria-label="PureChat" class="footer11s">PureChat</a>
                  </div>
      </div>
      <div class="footer12">
        <span class="footer11_title">Outils d'IA avec potentiel</span>
        <div class="footer11info">
                    <a href="/fr/tool/idea-box-ai-tool.html" aria-label="Name Idea Box" class="footer11s">Name Idea Box</a>
                    <a href="/fr/tool/qi-jing-ai-ai-tool.html" aria-label="奇境 AI" class="footer11s">奇境 AI</a>
                    <a href="/fr/tool/ezaudio-ai-tool.html" aria-label="EZAudio" class="footer11s">EZAudio</a>
                  </div>
      </div>
      <div class="footer13">
        <span class="footer11_title">EN SAVOIR PLUS</span>
        <div class="footer11info">
                    <a href="/fr/ainews/ai-hosts-notebooklm-podcast-interviews.html" aria-label="Podcast Hosts Of NoteBookLM maintenant disponible pour les interviews" class="footer11s">Podcast Hosts Of NoteBookLM maintenant disponible pour les interviews</a>
                    <a href="/fr/ainews/corporate-ai-adoption-leveling-ramp-data.html" aria-label="L'adoption de l'IA par les entreprises plafonne, selon les données de Ramp" class="footer11s">L'adoption de l'IA par les entreprises plafonne, selon les données de Ramp</a>
                    <a href="/fr/ainews/microsoft-unveils-businessfocused-copilot-surface-devices-powered-intel.html" aria-label="Microsoft dévoile des dispositifs de surface axés sur les entreprises alimentés par Intel" class="footer11s">Microsoft dévoile des dispositifs de surface axés sur les entreprises alimentés par Intel</a>
                  </div>
      </div>
      <div class="footer4">
        <span class="footer11_title">Suivre</span>
        <div class="footer11info">
          <a href="javascript:;" class="footer11s">Contactez-nous</a>
          <a href="mailto:admin@xix.ai" role="button" aria-label="Contactez-nous" class="footer11s">admin@xix.ai</a>
          <a href="/sitemap.xml" class="footer11s" aria-label="SiteMap">SiteMap</a>
        </div>
      </div>
    </div>
    <span class="footer2"></span>
    <div class="footer3">Copyright ©2025 xix.ai All Rights Reserved.</div>
  </div>
</footer>
<div class="ai_cookie" style="display: none">
      <div class="ai_cookie_b">
        <div class="icon_f ai_cookie_close">
          <svg class="icon" aria-hidden="true">
            <use xlink:href="#icon-guanbi1"></use>
          </svg>
        </div>
        <p>
          En cliquant sur "Accepter tous les cookies", vous consentez au stockage de cookies sur votre appareil afin d’améliorer la navigation sur le site, d’analyser l’utilisation du site et de soutenir nos efforts marketing.<span>Politique de confidentialité</span> Avis        </p>
        <div class="cokiesetRight">
          <a href="javascript:;" class="cokieA ai_cookie_open"  role="button" aria-label="Paramètres des cookies">Paramètres des cookies</a>
          <a href="javascript:;" class="cokieA RefuseCookies" role="button" aria-label="Tout refuser">Tout refuser</a>
          <a href="javascript:;" class="cokieA cokieAall" role="button" aria-label="Accepter tous les cookies">Accepter tous les cookies</a>
        </div>
      </div>
    </div>
    <div class="ai_cookieSettings" style="display: none">
      <div class="layuiDivcokie layui-layer-wrap" id="layuiDivcokie" style="display: block">
        <div class="cokielayTop dlyflx">
          <img src="/assets/images/logo.png" alt="" />
          <div class="icon_f ai_cookie_close1">
            <svg class="icon" aria-hidden="true">
              <use xlink:href="#icon-guanbi"></use>
            </svg>
          </div>
        </div>
        <hr />
        <div class="cokielayDown dlyflx">
          <p class="cokielaydTop">Préférences de confidentialité</p>
          <p class="cokielaydDesc">
            Lorsque vous visitez un site web, il peut stocker ou récupérer des informations sur votre navigateur, principalement sous forme de cookies. Ces informations peuvent concerner vous, vos préférences ou votre appareil et sont principalement utilisées pour faire fonctionner le site comme vous vous y attendez. Ces informations n’identifient généralement pas directement vous-même, mais elles peuvent vous offrir une expérience web plus personnalisée. Parce que nous respectons votre droit à la vie privée, vous pouvez choisir de ne pas autoriser certains types de cookies. Cliquez sur les différents titres de catégorie pour en savoir plus et modifier nos paramètres par défaut. Cependant, bloquer certains types de cookies peut affecter votre expérience sur le site et les services que nous sommes en mesure de proposer. <a href="#" title="Politique de confidentialité" aria-label="Politique de confidentialité"><span>Politique de confidentialité</span></a> <b>Déclaration</b>          </p>

          <div class="cokielayDivdown">
            <p class="coklaydownP">Gérer les préférences</p>
            <ul class="cokidownUl">
              <li class="cokidownli dlyflx" style="padding: 25px 0px 25px">
                <div class="ckdTops">
                  <div class="ckdLeft">
                    <div class="icon_f">
                      <svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-add"></use>
                      </svg>
                      <svg class="icon icon_active" aria-hidden="true">
                        <use xlink:href="#icon-add1"></use>
                      </svg>
                    </div>
                    <p class="ckdlipmid">Cookie strictement nécessaire</p>
                  </div>
                  <p class="ckdlipr">Toujours actif</p>
                </div>
                <p class="ckdDowns">
                  Ces cookies sont nécessaires au fonctionnement du site web et ne peuvent pas être désactivés dans nos systèmes. Ils ne sont généralement définis qu’en réponse à des actions que vous effectuez qui équivalent à une demande de services, telles que la configuration de vos préférences de confidentialité, la connexion ou le remplissage de formulaires. Vous pouvez configurer votre navigateur pour bloquer ces cookies ou vous alerter à leur sujet, mais certaines parties du site ne fonctionneront alors plus. Ces cookies ne stockent aucune information permettant d’identifier personnellement.                </p>
              </li>
            </ul>
          </div>
        </div>
        <div class="cklyBtn">
          <a href="javascript:;" role="button" aria-label="Accepter tous les cookies" class="active cokieAall">Accepter tous les cookies</a>
        </div>
      </div>
      <script>
        $(document).on("click", ".ai_cookie_close", function () {
          $(".ai_cookie").hide();
        });
        $(document).on("click", ".ai_cookie_close1", function () {
          $(".ai_cookieSettings").hide();
        });
        $(document).on("click", ".ai_cookie_open", function () {
          $(".ai_cookieSettings").show();
        });
        $(document).on("click", ".ckdLeft", function () {
          var $li = $(this).closest("li"); 
          var $downs = $li.find(".ckdDowns"); 
          var $iconBox = $(this).find(".icon_f"); 

         
          $downs.slideToggle(200, function () {
            if ($downs.is(":visible")) {
              $iconBox.find(".icon").hide();
              $iconBox.find(".icon_active").show();
            } else {
              $iconBox.find(".icon").hide();
              $iconBox.find(".icon").first().show(); 
            }
          });
        });     
      </script>
    </div>
<link rel="stylesheet" type="text/css" href="https://accounts.google.com/gsi/style">
<div class="login_tab">
  <div class="login_mainC">
    <div class="login_tab_top">
      <div class="login_tab_top1">
        <a href="javascript:;" role="tab" aria-label="Se connecter" aria-selected="true" class="login_tab_top1a ">Se connecter</a>
        <a href="javascript:;" role="tab" aria-label="S'inscrire" aria-selected="false" class="login_tab_top2a">S'inscrire</a>
      </div>
      <div class="login_tab_top2">
        <a href="javascript:;"><img src="/assets/images/login_mainC_top_m_img.png" alt=""></a>
      </div>

    </div>
    <div class="forms_google">
      <div id="g_id_signin"></div>
    </div>
    <div class="forms_or">
      <div class="forms_line"></div>
      <span>OR</span>
      <div class="forms_line"></div>
    </div>
    <div class="login_tab_bottom">
      <div class="login_tab_top1a_bottom">

        <div class="login_form ">
          <div class="login_forms">
            <img src="/assets/images/login_email.png" alt="E-mail">
            <input type="text" placeholder="Veuillez remplir votre adresse e-mail" class="login_forms_email">
            <span></span>
          </div>
          <div class="login_forms">
            <img src="/assets/images/login_password.png" alt="Mot de passe">
            <input type="password" placeholder="Veuillez saisir votre mot de passe" class="login_forms_password">
            <i style="cursor: pointer;" class="layui-icon layui-icon-eye-invisible toggle-password"
              id="toggleLoginPassword"></i>
            <span></span>
          </div>
          <div class="login_forms forms_code1">
            <input type="text" placeholder="Veuillez saisir le code de vérification graphique"
              class="login_forms_captcha">
            <img src="" alt="Veuillez saisir le code de vérification graphique" class="login-js-refresh-captcha">
            <span></span>
          </div>
          <div class="login_forms_bottom">
            <label class="login_remember">
              <input type="checkbox" aria-label="Souviens-toi de moi">
              <span>Souviens-toi de moi</span>
            </label>
            <a href="/fr/account/forgetPassword.html" aria-label="Changer le mot de passe" class="login_forget">Mot de passe oublié</a>
          </div>
          <a href="javascript:;" type="button" role="button" aria-label="Se connecter" id="login_button" class="login_button">Se connecter</a>

        </div>
      </div>
      <div class="login_tab_top2a_bottom">
        <div class="login_form">
          <div class="login_forms">
            <img src="/assets/images/login_email.png" alt="E-mail">
            <input type="text" placeholder="Veuillez remplir votre adresse e-mail" class="register_forms_email">
            <span></span>
          </div>
          <div class="login_forms">
            <img src="/assets/images/login_password.png" alt="Mot de passe">
            <input type="password" placeholder="Veuillez saisir votre mot de passe" class="register_forms_password">
            <i style="cursor: pointer;" class="layui-icon layui-icon-eye-invisible toggle-password"
              id="toggleRegisterPassword"></i>
            <span></span>
          </div>
          <div class="login_forms forms_code1">
            <input type="text" placeholder="Veuillez saisir le code de vérification graphique"
              class="register_forms_captcha">
            <img src="" alt="Veuillez saisir le code de vérification graphique" class="register-js-refresh-captcha" id="register_captcha">
            <span></span>
          </div>
          <div class="login_forms">
            <input type="text" class="verify-code-input" placeholder="Veuillez saisir le code de vérification">
            <button id="verifyCodeBtn" class="verify-code-btn" data-text="Obtenir le code de vérification">Obtenir le code de vérification</button>
            <span></span>
          </div>
          <a href="javascript:;" role="button" aria-label="S'inscrire" class="login_button" id="register_button">S'inscrire</a>
        </div>
      </div>

    </div>
  </div>
</div>
<script src="https://accounts.google.com/gsi/client" async defer></script>
<script>
  $(document).ready(function () {
    LoginRegister.init({
      selectors: {
        email: {
          login: '.login_forms_email',
          register: '.register_forms_email'
        },
        password: {
          login: '.login_forms_password',
          register: '.register_forms_password'
        },
        captcha: {
          login: '.login_forms_captcha',
          register: '.register_forms_captcha',
          verify: '.verify-code-input'
        },
        buttons: {
          login: '#login_button',
          register: '#register_button',
          verifyCode: '#verifyCodeBtn'
        },
        tabs: {
          login: '.login_tab_top1a',
          register: '.login_tab_top2a',
          close: '.login_tab_top2 a'
        }
      },
      messages: {
        email: "Le format de messagerie est incorrect",
        password: {
          empty: "Veuillez saisir votre mot de passe",
          invalid: "Le mot de passe doit être de 6 à 18 caractères et contenir à la fois des lettres et des numéros"
        },
        captcha: "Veuillez saisir le code de vérification graphique",
        verifyCode: "Veuillez saisir le code de vérification",
        operationInProgress: "Opération en cours, veuillez attendre",
        unexpectedError: "Une erreur inattendue s'est produite"
      },
      urls: {
        login: "/fr/account/dologin.html",
        register: "/fr/account/register.html",
        getMailSign: "/fr/account/getMailSign",
        sendMail: "/fr/account/registerSendMail.html",
        redirctUrl:'pc'
      }
    });
  });
  function initializeGoogleSignIn() {
    if (typeof google === 'undefined' || !google.accounts) {
      setTimeout(initializeGoogleSignIn, 100);
     
      return;
    }

    google.accounts.id.initialize({
      client_id: "294584378011-s53466qiuig7d30tcqrpjv1ue3ni2gun.apps.googleusercontent.com",
      callback: handlePCCredentialResponse,
      auto_select: false,
      locale: 'fr',
      
    });
    
    google.accounts.id.renderButton(
      document.getElementById("g_id_signin"),
      {
        theme: "outline",
        size: "large",
        type: "standard",
        shape: "rectangular",
        logo_alignment: "left",
        text: "signin_with",
        width: 400,
        locale: 'fr',
      }
    );
    
  }
  document.addEventListener('DOMContentLoaded', initializeGoogleSignIn);
</script>
  <!-- Google tag (gtag.js) -->
  <script  async src="https://www.googletagmanager.com/gtag/js?id=G-LN407DS0B4"></script>
  <script>
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());
  
    gtag('config', 'G-LN407DS0B4');
  </script>
  <script src="/kukukuwl.js"   type="text/javascript"></script>
 <a href="javascript:void(0);" class="totop" role="button" aria-label="Retour en haut"><img src="/assets/images/totop.png" alt="" /></a>
        <script>
            layui.use(function () {
                var element = layui.element;
                element.tab({
                    headerElem: "#skilldetailsR1s_header>button",
                    bodyElem: "#skilldetailsR1s_body>div",
                });
            });
            function initSkillCloneCopy() {
                $(document)
                    .off("click.skillCloneCopy")
                    .on("click.skillCloneCopy", ".skill_clone .skill_clone_copy", function (e) {
                        e.preventDefault();

                        var $btn = $(this);
                        var $img = $btn.find("img");

                        var text = $.trim($btn.siblings("p").text());

                        var $temp = $("<textarea>");
                        $("body").append($temp);
                        $temp.val(text).select();

                        try {
                            document.execCommand("copy");

                            // 切换成功图标
                            $img.attr("src", "/assets/images/prompt_word2RMs_p_btn_ok.png");
                            $btn.addClass("active");
                            // 清除上一次定时器
                            clearTimeout($btn.data("copyTimer"));

                            // 3秒后恢复原图
                            var timer = setTimeout(function () {
                                $img.attr("src", "/assets/images/prompt_word2RMs_p_btn.png");
                                $btn.removeClass("active");
                            }, 3000);

                            $btn.data("copyTimer", timer);
                        } catch (err) {
                            alert("复制失败");
                        }

                        $temp.remove();
                    });
            }

            function initSkilldetailsFixed() {
                var $box = $(".skilldetailsR1");
                if (!$box.length) {
                    return;
                }
                var fixedTop = 20;
                var topOffset = $box.offset().top;
                var boxHeight = $box.outerHeight();
                var $placeholder = $("<div></div>").height(boxHeight).hide();
                $box.before($placeholder);
                function handleFixed() {
                    if ($(window).width() <= 1024) {
                        $placeholder.hide();
                        $box.css({
                            position: "",
                            top: "",
                            width: "",
                            zIndex: "",
                        });
                        return;
                    }
                    var scrollTop = $(window).scrollTop();
                    if (scrollTop >= topOffset - fixedTop) {
                        $placeholder.show();
                        $box.css({
                            position: "fixed",
                            top: fixedTop + "px",
                            width: $placeholder.width() + "px",
                            zIndex: 100,
                        });
                    } else {
                        $placeholder.hide();
                        $box.css({
                            position: "",
                            top: "",
                            width: "",
                            zIndex: "",
                        });
                    }
                }
                $(window).on("scroll.skilldetailsFixed resize.skilldetailsFixed", handleFixed);
                handleFixed();
            }
            function initSkilldetailsExpand() {
                $(".skilldetailsL_p").each(function () {
                    var $item = $(this);

                    $item.find(".skilldetailsL_p_expand").text($item.hasClass("active") ? "...Développer tout" : "Caché");
                });

                $(document)
                    .off("click.skilldetailsExpand")
                    .on("click.skilldetailsExpand", ".skilldetailsL_p_expand", function (e) {
                        e.preventDefault();

                        var $parent = $(this).closest(".skilldetailsL_p");

                        if ($parent.hasClass("active")) {
                            $parent.removeClass("active");
                            $(this).text("Caché");
                        } else {
                            $parent.addClass("active");
                            $(this).text("...Développer tout");
                        }
                    });
            }

            function checkFollow() {
                let dataSources = [];
                $('button.skill_datas').each(function () {
                    let source = $(this).data('source');
                    if (source) {
                        dataSources.push(String(source).trim());
                    }
                });
                dataSources = [...new Set(dataSources)];
                if (dataSources.length === 0) {
                    return;
                }
                $.post('/api/user/FindSkillFollow', {
                    source: dataSources
                }, function (res) {
                    if (res.code == 1 && res.data.length > 0) {
                        res.data.forEach(function (id) {
                            $('button.skill_datas[data-source="' + id + '"]').addClass('active');
                        });
                    }
                }, 'json');
            }
            $(function () {
                checkFollow();
                initSkillCloneCopy();
                initSkilldetailsFixed();
                initSkilldetailsExpand();
            });
            $(document).on('click', 'button.skill_datas', function (e) {
                e.preventDefault();
                const that = $(this);
                let source = that.data('source');
                if (!source || source === undefined || !CommonUtils.checkLogin()) return false;
                layer.load(2, {
                    shade: [0.3, "#000"],
                    time: 0,
                });
                var path = "/user/followSkill";
                var realPath = CommonUtils.getRealPath(path);
                $.post(realPath, { source: source }, function (result) {
                    layer.closeAll();
                    CommonUtils.showMsg(result.msg, result.code);
                    if (result.code == 1) {
                        var values = result.data.data_source;
                        var count = result.data.count;
                        var collected = result.data.collected;
                        var elements = $(".collectNums_" + values);
                        if (elements.length > 0) {
                            elements.each(function () {
                                $(this).parents('button').toggleClass('active', collected);
                                $(this).text(count);
                            });
                        }
                    }
                })
            })

            $(document).on('click', '.skill_downloadzip', function (e) {
                e.preventDefault();
                const url = $(this).data("source");
                if (!url) return;
                window.open("/api/index/download_zip?source=" + encodeURIComponent(url), "_blank");
            })

        </script>
    </body>

</html>