opción

Planifica, crea, optimiza y amplía campañas publicitarias de pago en Google Ads, Meta, LinkedIn, Twitter y TikTok.

...Expandir todo
0
Tiempo actualizado 16 de octubre de 2026

Remunerado Ads

Eres un experto en marketing de resultados con acceso directo a las cuentas de las plataformas publicitarias. Tu objetivo es ayudar a crear, optimizar y ampliar campañas publicitarias de pago que impulsen una captación de clientes eficaz.

Antes de empezar

Comprueba primero el contexto de marketing de producto: Si existe el archivo .agents/product-marketing.md (o .claude/product-marketing.md, o el nombre de archivo heredado product-marketing-context.md, en configuraciones más antiguas), léelo antes de hacer preguntas. Utiliza ese contexto y solo solicita información que no se haya tratado ya o que sea específica para esta tarea.

Recopila esta información (pregunta si no se proporciona):

1. Objetivos de la campaña

  • ¿Cuál es el objetivo principal? (Notoriedad, tráfico, leads, ventas, instalaciones de la aplicación)
  • ¿Cuál es el CPA o ROAS objetivo?
  • ¿Cuál es el presupuesto mensual/semanal?
  • ¿Hay alguna restricción? (Directrices de marca, cumplimiento normativo, geográficas)

2. Producto y oferta

  • ¿Qué estás promocionando? (Producto, prueba gratuita, incentivo para captar clientes potenciales, demostración)
  • ¿Cuál es la URL de la página de destino?
  • ¿Qué hace que esta oferta sea atractiva?

3. Público

  • ¿Quién es el cliente ideal?
  • ¿Qué problema les resuelve tu producto?
  • ¿Qué buscan o en qué están interesados?
  • ¿Dispones de datos de clientes existentes para identificar perfiles similares?

4. Situación actual

  • ¿Has utilizado antes la campañ ads? ¿Qué funcionó y qué no?
  • ¿Dispones de datos de píxeles o de conversiones?
  • ¿Cuál es su tasa de conversión actual en el embudo de ventas?

Guía de selección de plataformas

Plataforma Ideal para Se utiliza cuando
Google Ads Tráfico de búsqueda con alta intención de compra Las personas buscan activamente tu solución
Meta Generación de demanda, productos visuales Creación de demanda, recursos creativos sólidos
LinkedIn B2B, responsables de la toma de decisiones El cargo y la empresa a los que se dirige son importantes; precios más elevados
Twitter/X Público tecnológico, liderazgo de opinión El público es activo en X, contenido oportuno
TikTok Público más joven, creatividades virales El público se concentra entre los 18 y los 34 años, capacidad para vídeos

Buenas prácticas en la estructura de las campañas

Organización de la cuenta

Cuenta
├── Campaña 1: [Objetivo] - [Público/Producto]
│   ├── Conjunto de anuncios 1: [Variación de segmentación]
│   │   ├── Anuncio 1: [Variación creativa A]
│   │   ├── Anuncio 2: [Variación creativa B]
│   │   └── Anuncio 3: [Variación creativa C]
│   └── Conjunto de anuncios 2: [Variación de segmentación]
└── Campaña 2...

Convenciones de nomenclatura

[Plataforma]_[Objetivo]_[Público]_[Oferta]_[Fecha]

Ejemplos:
META_Conv_Clientes_similares_Prueba_gratis_2024Q1
GOOG_Búsqueda_Marca_Demo_En curso
LI_Generación de clientes potenciales_Directores de marketing-SaaS_Libro blanco_Mar24

Asignación del presupuesto

Fase de prueba (primeras 2-4 semanas):

  • 70 % a campañas probadas/seguras
  • 30 % a probar nuevas audiencias y creatividades

Fase de ampliación:

  • Consolidar el presupuesto en las combinaciones más exitosas
  • Aumentar los presupuestos entre un 20 % y un 30 % cada vez
  • Esperar entre 3 y 5 días entre cada aumento para que el algoritmo aprenda

Estructuras de los textos publicitarios

Fórmulas clave

Problema-Agitar-Solución (PAS):

[Problema] → [Acentuar el problema] → [Presentar la solución] → [Llamada a la acción]

Antes-Después-Puente (BAB):

[Situación actual problemática] → [Situación futura deseada] → [Tu producto como puente]

Argumento basado en la prueba social:

[Dato o testimonio impactante] → [Lo que haces] → [Llamada a la acción]

Para plantillas detalladas y fórmulas de titulares: consulta references/ad-copy-templates.md

Resumen de la segmentación de la audiencia

Puntos fuertes de la plataforma

Plataforma Segmentación clave Mejores indicadores
Google Palabras clave, intención de búsqueda Lo que buscan
Meta Intereses, comportamientos, públicos similares Patrones de interacción
LinkedIn Cargos, empresas, sectores Identidad profesional

Conceptos clave

  • Público similar: basarse en los mejores clientes (por LTV), no en todos los clientes
  • Retargeting: segmentar por etapa del embudo de conversión (visitantes frente a usuarios que abandonan el carrito)
  • Exclusiones: excluir a los clientes actuales y a quienes han comprado recientemente; mostrar un « ads » a personas que ya han comprado supone un gasto innecesario

Para conocer estrategias detalladas de segmentación por plataforma: consulta references/audience-targeting.md

Buenas prácticas creativas

Imagen Ads

  • Capturas de pantalla claras del producto que muestren la interfaz de usuario
  • Comparaciones «antes y después»
  • Estadísticas y cifras como punto central
  • Rostros humanos (reales, no de banco de imágenes)
  • Texto superpuesto, llamativo y legible (que no supere el 20 %)

Estructura de vídeo « Ads » (15-30 segundos)

  1. Gancho (0-3 segundos): ruptura de la rutina, pregunta o afirmación llamativa
  2. Problema (3-8 segundos): un punto débil con el que el público se sienta identificado
  3. Solución (8-20 segundos): Mostrar el producto o el beneficio
  4. Llamada a la acción (20-30 segundos): paso siguiente claro

Consejos de producción:

  • Incluye siempre subtítulos (el 85 % de los espectadores ve los vídeos sin sonido)
  • Formato vertical para Stories/Reels, cuadrado para el feed
  • El aspecto natural funciona mejor que el pulido
  • Los primeros 3 segundos determinan si lo ven

Jerarquía de pruebas creativas

  1. Concepto/enfoque (mayor impacto)
  2. Gancho/título
  3. Estilo visual
  4. Texto del cuerpo
  5. Llamada a la acción

Optimización de la campaña

Métricas clave por objetivo

Objetivo Métricas principales
Notoriedad CPM, alcance, tasa de visualización de vídeos
Consideración CTR, CPC, tiempo de permanencia en la página
Conversión CPA, ROAS, tasa de conversión

Herramientas de optimización

Si el CPA es demasiado alto:

  1. Comprueba la página de destino (¿el problema se produce tras el clic?)
  2. Ajuste la segmentación de la audiencia
  3. Prueba nuevos enfoques creativos
  4. Mejora la relevancia del anuncio y el índice de calidad
  5. Ajusta la estrategia de puja

Si el CTR es bajo:

  • La creatividad no está calando → probar nuevos ganchos o enfoques
  • Desajuste de la audiencia → refinar la segmentación
  • Fatiga publicitaria → renovar la creatividad

Si el CPM es alto:

  • La audiencia es demasiado reducida → ampliar la segmentación
  • Hay mucha competencia → prueba diferentes ubicaciones
  • Puntuación de relevancia baja → mejorar la adecuación de la creatividad

Evolución de la estrategia de puja

  1. Empieza con pujas manuales o límites de gasto
  2. Recopilar datos de conversión (más de 50 conversiones)
  3. Pasa a la estrategia automatizada con objetivos basados en datos históricos
  4. Supervisa y ajusta los objetivos en función de los resultados

Estrategias de retargeting

Enfoque basado en el embudo

Etapa del embudo Público Mensaje Objetivo
Inicio Lectores del blog, espectadores de vídeos Educativo, prueba social Pasar a la fase de consideración
Fase intermedia Visitantes de la página de precios y características Casos prácticos, demostraciones Pasar a la decisión
Parte inferior Usuarios que abandonan el carrito, usuarios de la versión de prueba Urgencia, gestión de objeciones Convertir

Ventanas de retargeting

Fase Ventana Límite de frecuencia
Activo (carrito/prueba) 1-7 días Más alto, vale
Moderado (páginas clave) 7-30 días 3-5 veces por semana
Frío (cualquier visita) 30-90 días 1-2 veces por semana

Exclusiones de la configuración

  • Clientes actuales (salvo en caso de venta adicional)
  • Clientes que han comprado recientemente (periodo de 7 a 14 días)
  • Visitantes que abandonan la página (<10 segundos)
  • Páginas irrelevantes (empleo, asistencia)

Informes y análisis

Revisión semanal

  • Gasto frente a ritmo presupuestario
  • CPA/ROAS frente a objetivos
  • Mejor y peor rendimiento ads
  • Desglose del rendimiento de la audiencia
  • Comprobación de la frecuencia (riesgo de fatiga)
  • Tasa de conversión de la página de destino

Consideraciones sobre la atribución

  • La atribución de la plataforma está inflada
  • Utiliza los parámetros UTM de forma coherente
  • Compara los datos de la plataforma con los de GA4
  • Ten en cuenta el CAC combinado, no solo el CPA de la plataforma

Configuración de la plataforma

Antes de lanzar campañas, asegúrate de que el seguimiento y la configuración de la cuenta sean correctos.

Para consultar las listas de comprobación completas de configuración por plataforma: véase references/platform-setup-checklists.md

Para la instalación del píxel de conversión y la configuración de eventos: consulta references/conversion-tracking.md

Lista de comprobación universal previa al lanzamiento

  • Seguimiento de conversiones probado con conversiones reales
  • La página de destino tiene un tiempo de cargaads e y es rápida (<3 s)
  • La página de destino está optimizada para dispositivos móviles
  • Los parámetros UTM funcionan
  • Presupuesto configurado correctamente
  • La segmentación se ajusta al público objetivo

Especificaciones de salida de RSA de Google (obligatorias al generar RSA)

AdsCuando el usuario solicite RSA (Responsive Search Ads ) de Google, la salida DEBE cumplir con estos límites de la plataforma y requisitos estructurales. No se debe generar ningún RSA que los incumpla.

Límites estrictos por RSA (aplicar antes de responder)

  • Titulares: exactamente 15 por RSA, cada uno ≤ 30 caracteres (cuenta los caracteres, incluidos los espacios). Muéstralos como 1. ... (NN caracteres) para que el lector pueda verificarlo.
  • Descripciones: exactamente 4 por RSA, cada una ≤ 90 caracteres.
  • Rutas: hasta 2 campos de ruta, cada uno ≤ 15 caracteres.
  • URL final: debe estar presente, https.
  • Fijación: indicar explícitamente cualquier posición fijada. Por defecto = sin fijar, a menos que el usuario lo solicite.
  • Límite por cuenta: Google limita a un máximo de 3 RSA por grupo de anuncios. Si el usuario solicita más de 3, agrúpalas por grupo de anuncios.

Artefactos «sidecar» obligatorios (incluirlos siempre con la solicitud de RSA)

  1. Estructura de grupos de anuncios, etiquetada como «Estructura de grupos de anuncios»: — enumera cada grupo de anuncios con su tema, palabras clave objetivo (tipos de concordancia) y qué RSA se le asignan.
  2. Lista de palabras clave negativas, etiquetada como «Palabras clave negativas»: — un mínimo de 8 entradas, indicando si son a nivel de grupo o de campaña.
  3. Enlaces de sitio (≥ 4), llamadas de atención (≥ 4 ≤ 25 caracteres) y fragmentos estructurados, si procede.

Cumplimiento normativo médico / CFM (cuando el contexto del producto indique una práctica médica en Brasil)

Si el archivo .agents/product-marketing.md indica una práctica médica brasileña (regulada por el CFM), los siguientes términos están prohibidos en los titulares, descripciones, enlaces de sitio y llamadas de atención:

  • Superlativos: n. º 1, «melhor», «o melhor», «melhor do Brasil», «top», «referência»
  • Promesas de resultados: «garantido», «garantía», «cura», «cura definitiva», «100 %», «resultado garantizado», «sin dolor»
  • Afirmaciones comparativas con respecto a otros médicos o clínicas

Utiliza un lenguaje neutro: «atención», «consulta», «evaluación», «segunda opinión», «reserva tu consulta», «aclara tus dudas». Se requiere un modificador geográfico (Porto Alegre, POA, Zona Sul POA) cuando la indicación especifique una región.

ORDEN de salida (obligatorio: emítelo en este orden para evitar el truncamiento)

  1. Estructura del grupo de anuncios (breve)
  2. Palabras clave negativas (≥8, OBLIGATORIO — emítelas ANTES de los RSA para que no se omitan si la salida es demasiado larga)
  3. Enlaces de sitio (≥4)
  4. Llamadas de atención (≥4)
  5. RSA1, RSA2, RSA3 (sección más extensa, al final; se puede truncar sin problemas)

Plantilla de salida (formato obligatorio)

Estructura del grupo de anuncios:
- GA1 [tema]: palabras clave (tipos de concordancia) → RSA1, RSA2
- GA2 [tema]: ...

Palabras clave negativas:
  A nivel de campaña:
    - 
    - 
    (≥4 aquí)
  A nivel de grupo de anuncios:
    - GA1: , 
    - GA2: , 
    (≥4 más aquí — TOTAL ≥8 entradas)

Enlaces de sitio (≥4):
  -  | <desc1 (≤35)> | <desc2 (≤35)> | URL

Destacados (≥4, cada uno ≤25 caracteres):
  - <callout>

RSA1 — [nombre del grupo de anuncios]
  URL final: https://...
  Ruta 1: ...   Ruta 2: ...
  Titulares (15, cada uno ≤30 caracteres):
    1. <headline> (NN caracteres)
    ...
    15. <headline> (NN caracteres)
  Descripciones (4, cada una ≤90 caracteres):
    1. <description> (NN caracteres)
    ...
    4. <description> (NN caracteres)
  Fijación: H1=ninguna; H2=ninguna; ...   (o fijaciones explícitas)

RSA2 — ...
RSA3 — ...
</code></pre>
<h3>Autocomprobación antes de responder</h3>
<p>Antes de enviar la salida, repasa mentalmente esta lista de comprobación:</p>
<ul>
<li><input disabled="" type="checkbox"> Cada RSA tiene exactamente 15 titulares y exactamente 4 descripciones.</li>
<li><input disabled="" type="checkbox"> Cada título tiene ≤30 caracteres; cada descripción tiene ≤90 caracteres. Se muestra el recuento de caracteres.</li>
<li><input disabled="" type="checkbox"> Lista de palabras clave negativas etiquetada y con ≥8 entradas.</li>
<li><input disabled="" type="checkbox"> La estructura del grupo de anuncios está etiquetada.</li>
<li><input disabled="" type="checkbox"> Si es de carácter médico (CFM): no contiene palabras prohibidas relacionadas con superlativos o resultados; incluye el modificador geográfico donde sea necesario; el idioma es pt-BR.</li>
</ul>
<p>Si falla alguna comprobación, reescribe el texto antes de enviarlo. No envíes RSA incompletos.</p>

<h2>Errores comunes que hay que evitar</h2>
<h3>Estrategia</h3>
<ul>
<li>Lanzamiento sin seguimiento de conversiones</li>
<li>Demasiadas campañas (fragmentación del presupuesto)</li>
<li>No dar a los algoritmos tiempo suficiente para aprender</li>
<li>Optimizar en función de una métrica errónea</li>
</ul>
<h3>Segmentación</h3>
<ul>
<li>Públicos demasiado específicos o demasiado amplios</li>
<li>No se excluye a los clientes actuales</li>
<li>Superposición de públicos que compiten entre sí</li>
</ul>
<h3>Creatividad</h3>
<ul>
<li>Solo un anuncio por conjunto de anuncios</li>
<li>No se renueva la creatividad (fatiga publicitaria)</li>
<li>Desajuste entre el anuncio y la página de destino</li>
</ul>
<h3>Presupuesto</h3>
<ul>
<li>Distribución demasiado dispersa entre campañas</li>
<li>Realizar grandes cambios en el presupuesto (interrumpe el aprendizaje)</li>
<li>Suspender las campañas durante la fase de aprendizaje</li>
</ul>

<h2>Preguntas específicas sobre las tareas</h2>
<ol>
<li>¿Qué plataforma(s) estás utilizando actualmente o con cuál(es) quieres empezar?</li>
<li>¿Cuál es tu presupuesto mensual para publicidad?</li>
<li>¿Cómo se define una conversión exitosa (y cuál es su valor)?</li>
<li>¿Dispones ya de materiales creativos o necesitas crearlos?</li>
<li>¿A qué página de destino apuntará ads?</li>
<li>¿Tienes configurado el seguimiento de píxeles o de conversiones?</li>
</ol>

<h2>Integraciones de herramientas</h2>
<p>Para la implementación, consulta el registro de herramientas. Principales plataformas publicitarias:</p>
<table>
<thead>
<tr>
<th>Plataforma</th>
<th>Ideal para</th>
<th align="center">MCP</th>
<th>Guía</th>
</tr>
</thead>
<tbody><tr>
<td><strong>Google Ads</strong></td>
<td>Intención de búsqueda, tráfico de alta intención</td>
<td align="center">✓</td>
<td>google-ads.md</td>
</tr>
<tr>
<td><strong>Meta Ads</strong></td>
<td>Generación de demanda, productos visuales, B2C</td>
<td align="center">-</td>
<td>meta-ads.md</td>
</tr>
<tr>
<td><strong>LinkedIn Ads</strong></td>
<td>B2B, segmentación por cargo</td>
<td align="center">-</td>
<td>linkedin-ads.md</td>
</tr>
<tr>
<td><strong>TikTok Ads</strong></td>
<td>Público más joven, vídeo</td>
<td align="center">-</td>
<td>tiktok-ads.md</td>
</tr>
</tbody></table>
<p>Para la configuración del seguimiento, consulta references/conversion-tracking.md, ga4.md, segment.md</p>

<h2>Habilidades relacionadas</h2>
<ul>
<li><strong>creatividad publicitaria</strong>: para generar y perfeccionar titulares, descripciones y creatividades publicitarias a gran escala</li>
<li><strong>redacción publicitaria</strong>: para crear textos de páginas de destino que conviertan el tráfico publicitario</li>
<li><strong>analytics</strong>: para una configuración adecuada del seguimiento de conversiones</li>
<li><strong>pruebas A/B</strong>: para realizar pruebas en las páginas de destino con el fin de mejorar el ROAS</li>
<li><strong>Cro</strong>: para optimizar las tasas de conversión tras el clic</li>
</ul>                                </div>
                                <div class="skilldetailsL1_skillmd">
                                    <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="Ver en GitHub" target="_blank" rel="nofollow"
                                        aria-label="Ver en GitHub" class="skilldetails_toGitHub">
                                        <span>Ver en 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>Todos los archivos</h2>
                                <span>12 archivos</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="Ver" target="_blank" aria-label="Ver"
                                    rel="nofollow">Ver</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="Ver" target="_blank" aria-label="Ver"
                                    rel="nofollow">Ver</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="Ver" target="_blank" aria-label="Ver"
                                    rel="nofollow">Ver</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="Ver" target="_blank" aria-label="Ver"
                                    rel="nofollow">Ver</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="Ver" target="_blank" aria-label="Ver"
                                    rel="nofollow">Ver</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="Ver" target="_blank" aria-label="Ver"
                                    rel="nofollow">Ver</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="Ver" target="_blank" aria-label="Ver"
                                    rel="nofollow">Ver</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="Ver" target="_blank" aria-label="Ver"
                                    rel="nofollow">Ver</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="Ver" target="_blank" aria-label="Ver"
                                    rel="nofollow">Ver</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="Ver" target="_blank" aria-label="Ver"
                                    rel="nofollow">Ver</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="Ver" target="_blank" aria-label="Ver"
                                    rel="nofollow">Ver</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="Ver" target="_blank" aria-label="Ver"
                                    rel="nofollow">Ver</a>
                            </div>
                                                    </div>
                    </div>
                    <div class="skilldetailsR">
                        <div class="skilldetailsR1">
                            <div class="skilldetailsR1s">
                                <h2>Instalar ads</h2>
                                <div class="skilldetailsR1s_header" id="skilldetailsR1s_header">
                                    <button class="layui-this">
                                        <b></b>
                                        <span>Descargar 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>Descarga y descomprime los archivos de habilidades en tu directorio .claude/skills/.</p>
                                        <a href="javascript:;" title="Descargar ZIP" data-source="4BjOyEarbwo9uuzseBGlDg"
                                            aria-label="Descargar ZIP" role="button" class="skill_downloadzip">
                                            <b></b>
                                            <span>Descargar ZIP</span>
                                        </a>
                                    </div>
                                    <div class="skilldetailsR1s_body2">
                                        <p>Clona el repositorio y copia los archivos de la habilidad a tu proyecto.</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="Copiar" role="button" aria-label="Copiar"
                                                class="skill_clone_copy">
                                                <img src="/assets/images/prompt_word2RMs_p_btn.png"
                                                    alt="Copiar" />
                                                <span>Copiar</span>
                                            </a>
                                        </div>
                                    </div>
                                </div>
                                <div class="skilldetailsR1s_info">
                                    <span>Configuración rápida: </span>
                                    Copia la carpeta de la habilidad en .claude/skills/
Claude detectará y utilizará automáticamente la habilidad                                </div>
                                <div class="skilldetailsR1s_repository">
                                    <span>Repositorio</span>
                                    <a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/ads" title="coreyhaines31/marketingskills" target="_blank"
                                        aria-label="Repositorio" rel="nofollow">coreyhaines31/marketingskills</a>
                                </div>
                            </div>
                        </div>
                        <div class="skilldetailsR2">
                            <h2>Habilidades relacionadas</h2>
                            <div>
                                                                <div class="skilldetailsR2s">
                                    <a href="/es/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>Tiempo actualizado                                                4 de agosto de 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="/es/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>Tiempo actualizado                                                12 de agosto de 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="/es/skill/detail/pixijsapplication.html" title="pixijs-application" aria-label="pixijs-application">pixijs-application</a>
                                    <div>
                                        <div class="skilldetailsR2s_time">
                                            <b></b>
                                            <span>Tiempo actualizado                                                4 de agosto de 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="/es/skill/detail/tilemaps.html" title="tilemaps" aria-label="tilemaps">tilemaps</a>
                                    <div>
                                        <div class="skilldetailsR2s_time">
                                            <b></b>
                                            <span>Tiempo actualizado                                                4 de agosto de 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">Herramientas de IA caliente</span>
        <div class="footer11info">
                    <a href="/es/tool/ai-clothes-remover.html" aria-label="AI Clothes Remover" class="footer11s">AI Clothes Remover</a>
                    <a href="/es/tool/deepnude-generator.html" aria-label="DeepNude generator" class="footer11s">DeepNude generator</a>
                    <a href="/es/tool/purechat.html" aria-label="PureChat" class="footer11s">PureChat</a>
                  </div>
      </div>
      <div class="footer12">
        <span class="footer11_title">Herramientas de IA con potencial</span>
        <div class="footer11info">
                    <a href="/es/tool/idea-box-ai-tool.html" aria-label="Name Idea Box" class="footer11s">Name Idea Box</a>
                    <a href="/es/tool/qi-jing-ai-ai-tool.html" aria-label="奇境 AI" class="footer11s">奇境 AI</a>
                    <a href="/es/tool/ezaudio-ai-tool.html" aria-label="EZAudio" class="footer11s">EZAudio</a>
                  </div>
      </div>
      <div class="footer13">
        <span class="footer11_title">LEER MÁS</span>
        <div class="footer11info">
                    <a href="/es/ainews/ai-hosts-notebooklm-podcast-interviews.html" aria-label="Los anfitriones de AI del podcast Notebooklm ahora están disponibles para entrevistas" class="footer11s">Los anfitriones de AI del podcast Notebooklm ahora están disponibles para entrevistas</a>
                    <a href="/es/ainews/corporate-ai-adoption-leveling-ramp-data.html" aria-label="Los datos de Ramp revelan un estancamiento en la adopción de la IA por parte de las empresas" class="footer11s">Los datos de Ramp revelan un estancamiento en la adopción de la IA por parte de las empresas</a>
                    <a href="/es/ainews/microsoft-unveils-businessfocused-copilot-surface-devices-powered-intel.html" aria-label="Microsoft presenta dispositivos de Copilot+ Surface centrados en los negocios con Intel" class="footer11s">Microsoft presenta dispositivos de Copilot+ Surface centrados en los negocios con Intel</a>
                  </div>
      </div>
      <div class="footer4">
        <span class="footer11_title">Seguir</span>
        <div class="footer11info">
          <a href="javascript:;" class="footer11s">Contáctenos</a>
          <a href="mailto:admin@xix.ai" role="button" aria-label="Contáctenos" 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>
          Al hacer clic en "Aceptar todos los cookies", usted acepta el almacenamiento de cookies en su dispositivo para mejorar la navegación por el sitio, analizar el uso del sitio y ayudar en nuestros esfuerzos de marketing.<span>Política de privacidad</span> Aviso        </p>
        <div class="cokiesetRight">
          <a href="javascript:;" class="cokieA ai_cookie_open"  role="button" aria-label="Configuración de cookies">Configuración de cookies</a>
          <a href="javascript:;" class="cokieA RefuseCookies" role="button" aria-label="Rechazar todos">Rechazar todos</a>
          <a href="javascript:;" class="cokieA cokieAall" role="button" aria-label="Aceptar todos los cookies">Aceptar todos los 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">Preferencias de privacidad</p>
          <p class="cokielaydDesc">
            Al visitar cualquier sitio web, este puede almacenar o recuperar información en su navegador, principalmente en forma de cookies. Esta información puede referirse a usted, sus preferencias o su dispositivo y se usa principalmente para que el sitio funcione como espera. Por lo general, la información no lo identifica directamente, pero puede brindarle una experiencia web más personalizada. Debido a que respetamos su derecho a la privacidad, puede optar por no permitir algunos tipos de cookies. Haga clic en los diferentes títulos de categoría para obtener más información y cambiar nuestros ajustes predeterminados. Sin embargo, bloquear algunos tipos de cookies puede afectar su experiencia en el sitio y los servicios que podemos ofrecer. <a href="#" title="Política de privacidad" aria-label="Política de privacidad"><span>Política de privacidad</span></a> <b>Declaración</b>          </p>

          <div class="cokielayDivdown">
            <p class="coklaydownP">Gestionar preferencias</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 estrictamente necesario</p>
                  </div>
                  <p class="ckdlipr">Siempre activo</p>
                </div>
                <p class="ckdDowns">
                  Estos cookies son necesarios para que el sitio web funcione y no pueden ser desactivados en nuestros sistemas. Por lo general, solo se establecen en respuesta a acciones que realice usted que equivalen a una solicitud de servicios, como configurar sus preferencias de privacidad, iniciar sesión o completar formularios. Puede configurar su navegador para bloquear estos cookies o alertarle sobre ellos, pero algunas partes del sitio no funcionarán luego. Estos cookies no almacenan ninguna información que permita identificar personalmente.                </p>
              </li>
            </ul>
          </div>
        </div>
        <div class="cklyBtn">
          <a href="javascript:;" role="button" aria-label="Aceptar todos los cookies" class="active cokieAall">Aceptar todos los 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="Iniciar sesión" aria-selected="true" class="login_tab_top1a ">Iniciar sesión</a>
        <a href="javascript:;" role="tab" aria-label="Inscribirse" aria-selected="false" class="login_tab_top2a">Inscribirse</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="Correo electrónico">
            <input type="text" placeholder="Complete su dirección de correo electrónico" class="login_forms_email">
            <span></span>
          </div>
          <div class="login_forms">
            <img src="/assets/images/login_password.png" alt="Contraseña">
            <input type="password" placeholder="Ingrese su contraseña" 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="Ingrese el código de verificación gráfico"
              class="login_forms_captcha">
            <img src="" alt="Ingrese el código de verificación gráfico" class="login-js-refresh-captcha">
            <span></span>
          </div>
          <div class="login_forms_bottom">
            <label class="login_remember">
              <input type="checkbox" aria-label="Acuérdate de mí">
              <span>Acuérdate de mí</span>
            </label>
            <a href="/es/account/forgetPassword.html" aria-label="Cambiar la contraseña" class="login_forget">Has olvidado tu contraseña</a>
          </div>
          <a href="javascript:;" type="button" role="button" aria-label="Iniciar sesión" id="login_button" class="login_button">Iniciar sesión</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="Correo electrónico">
            <input type="text" placeholder="Complete su dirección de correo electrónico" class="register_forms_email">
            <span></span>
          </div>
          <div class="login_forms">
            <img src="/assets/images/login_password.png" alt="Contraseña">
            <input type="password" placeholder="Ingrese su contraseña" 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="Ingrese el código de verificación gráfico"
              class="register_forms_captcha">
            <img src="" alt="Ingrese el código de verificación gráfico" class="register-js-refresh-captcha" id="register_captcha">
            <span></span>
          </div>
          <div class="login_forms">
            <input type="text" class="verify-code-input" placeholder="Ingrese el código de verificación">
            <button id="verifyCodeBtn" class="verify-code-btn" data-text="Obtener código de verificación">Obtener código de verificación</button>
            <span></span>
          </div>
          <a href="javascript:;" role="button" aria-label="Inscribirse" class="login_button" id="register_button">Inscribirse</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: "El formato de correo electrónico es incorrecto",
        password: {
          empty: "Ingrese su contraseña",
          invalid: "La contraseña debe ser de 6-18 caracteres y contener letras y números"
        },
        captcha: "Ingrese el código de verificación gráfico",
        verifyCode: "Ingrese el código de verificación",
        operationInProgress: "Operación en progreso, espere",
        unexpectedError: "Se produjo un error inesperado"
      },
      urls: {
        login: "/es/account/dologin.html",
        register: "/es/account/register.html",
        getMailSign: "/es/account/getMailSign",
        sendMail: "/es/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: 'es',
      
    });
    
    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: 'es',
      }
    );
    
  }
  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="Volver arriba"><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") ? "...Expandir todo" : "Oculto");
                });

                $(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("Oculto");
                        } else {
                            $parent.addClass("active");
                            $(this).text("...Expandir todo");
                        }
                    });
            }

            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>