Especialista en Web

Tracking · Landing pages · SEO local · Integración de chatbot y CRM · Conversión

← Volver al Roadmap  ·  Tracking  ·  Landings  ·  SEO  ·  Integraciones

Este rol cubre: la configuración del tracking (GTM, GA4, Meta Pixel), la creación y optimización de landing pages por tratamiento, el SEO local, la integración del chatbot y el widget de reserva en la web, y la sincronización de formularios con HubSpot.

Mis tareas
Lo que debo hacer como Especialista en Web
1
Fase 1 — Tracking y Fundamentos (Semanas 1–3)
Prioridad crítica
  • Instalar Google Tag Manager en la web
    Contenedor GTM en el <head> y <body> de todas las páginas. Crear variables de capa de datos (dataLayer) para eventos clave: CTA click, scroll depth, form submit, chatbot open.
    Crítico
  • Configurar GA4 y Meta Pixel vía GTM
    Propiedad GA4 nueva para Dental Basté. Meta Pixel conectado al Business Manager. Eventos estándar: page_view, scroll_25/50/75/90, click_cta, form_start, form_submit, booking_started, booking_completed.
    Crítico
  • Integrar widget de chatbot en la web
    Widget flotante (bottom-right) que conecta con el backend del especialista IA. Aparece tras 8 seg o al intentar salir (exit intent). Responsive y accesible (ARIA labels). Evento GA4 al abrir.
    Crítico
  • Crear landing page de captación principal
    Página de aterrizaje para todas las campañas de ads. Hero con propuesta de valor, formulario visible sin scroll, chatbot flotante, CTA: "Reserva tu primera visita gratis". Sin menú de navegación (más conversión).
    Alta
  • Embeber Calendly / Cal.com en web y landing
    Widget inline en la página de contacto y en todas las landings. Sincronización con Google Calendar de la clínica. Configurar confirmación de evento → webhook a HubSpot (coordinar con especialista IA).
    Alta
2
Fase 2 — Landings y SEO (Semanas 4–8)
Landings por tratamiento · QR · SEO on-page
  • Landing pages por tratamiento (ortodoncia, implantes, blanqueamiento, periodoncia)
    Una página por tratamiento. Estructura: hero + beneficios + proceso en 3 pasos + testimonios + FAQ + CTA. Contenido SEO generado con IA revisado por el equipo. Formulario y chatbot integrados.
    Alta
  • Página de destino para QR del escaparate
    URL corta dedicada (ej: dentalbaste.com/escaparate). Landing minimalista: logo + "Has escaneado desde nuestra clínica" + botón reserva directa. Sin distracciones. Tracking de fuente = "qr_escaparate".
    Alta
  • SEO on-page en todas las páginas
    Meta title y description únicos, H1 con keyword principal, schema markup LocalBusiness + MedicalClinic, Google Business Profile actualizado, imágenes con alt text, URL canónicas. Priorizar búsquedas locales "dentista [ciudad]".
    Alta
  • Analizar comportamiento con Microsoft Clarity (gratuito)
    Heatmaps y grabaciones de sesión para ver dónde hacen click y dónde abandonan. Instalar vía GTM. Funnel tracking: landing → formulario → Calendly. Revisar cada 2 semanas.
    Media
3
Fase 3 — Optimización y CRO (Semanas 9–12)
A/B testing · velocidad · HubSpot sync
  • Sincronización bidireccional HubSpot ↔ formularios web
    Todos los formularios envían datos directamente a HubSpot via API o formulario nativo. Webhook para actualizar etapas del pipeline cuando cambia el estado en CRM.
    Media
  • Optimización Core Web Vitals (LCP, CLS, INP)
    LCP < 2.5 seg, CLS < 0.1, INP < 200ms. Optimizar imágenes (WebP, lazy loading), diferir scripts no críticos, usar CDN para estáticos. Google PageSpeed Insights como referencia.
    Media
  • A/B testing de headlines y CTAs principales
    Probar variantes del hero de la landing principal: headline, subheadline, CTA ("Reserva gratis" vs "Primera visita sin coste"). Mínimo 200 visitas por variante antes de concluir.
    Baja
Tracking y Analítica
GTM · GA4 · Meta Pixel · Clarity — eventos clave y configuración

Google Tag Manager

  • Un único contenedor GTM gestiona todos los tags
  • Variables: URL, clic elemento, formulario, scroll depth
  • Triggers basados en dataLayer events
  • Publicar siempre en modo Preview antes de producción

Google Analytics 4

  • Propiedad GA4 nueva para Dental Basté
  • Conversiones: form_submit, booking_completed
  • Audiencias para retargeting en Google Ads
  • Conectar a Search Console y Looker Studio

Meta Pixel

  • Pixel instalado en todas las páginas vía GTM
  • Eventos: ViewContent, Lead, InitiateCheckout, CompleteRegistration
  • Conversions API (CAPI) para datos de servidor — coordinar con IA
  • Audiencias de retargeting: visitantes 30 días, abandonos de formulario

Microsoft Clarity

  • Heatmaps en landing principal y páginas de tratamiento (gratuito)
  • Grabaciones de sesión: identificar puntos de abandono
  • Funnel: landing → formulario → Calendly → confirmación
  • Instalar vía GTM — sin límite de sesiones grabadas

Esquema de Eventos GTM / GA4

Evento GA4Trigger GTMMeta Pixel equivalenteConversión
page_viewAll PagesPageViewNo
scroll_depthScroll 25/50/75/90%No
click_ctaClick en .cta-buttonInitiateCheckoutNo
chatbot_openClick en widget chatbotNo
form_startFocus en primer campoNo
form_submitForm Submit SuccessLead
booking_startedClick en widget CalendlyInitiateCheckoutNo
booking_completedEvento Calendly event_scheduledCompleteRegistration
qr_scan_landingPage View URL contiene /escaparateViewContentNo

Código GTM — dataLayer Events

JavaScript — dataLayer push para eventos clave
// Al abrir el chatbot
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
  event: 'chatbot_open',
  chatbot_source: 'floating_widget',
  page_path: window.location.pathname
});

// Al enviar formulario con éxito
function onFormSuccess(tratamiento) {
  window.dataLayer.push({
    event: 'form_submit',
    form_type: 'lead_capture',
    tratamiento_interes: tratamiento,
    fuente: document.referrer || 'direct'
  });
}

// Calendly: escuchar evento de cita confirmada
window.addEventListener('message', function(e) {
  if (e.data.event === 'calendly.event_scheduled') {
    window.dataLayer.push({
      event: 'booking_completed',
      booking_type: 'calendly'
    });
  }
});

Meta Pixel — Eventos Estándar

JavaScript — Meta Pixel custom events vía GTM
// Instalar en tag GTM de tipo "Custom HTML" — activar en All Pages
!function(f,b,e,v,n,t,s) {
  if(f.fbq) return; n=f.fbq=function(){...}; /* código estándar Meta */
}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js');
fbq('init', 'TU_PIXEL_ID');
fbq('track', 'PageView');

// Lead — trigger: dataLayer event "form_submit"
fbq('track', 'Lead', {
  content_name: {{DLV - tratamiento_interes}},
  content_category: 'dental_treatment'
});

// Cita confirmada — trigger: dataLayer event "booking_completed"
fbq('track', 'CompleteRegistration', {
  content_name: 'appointment_booked'
});
Landing Pages
Estructura, páginas necesarias y landing del QR escaparate

Páginas a crear

PáginaURL sugeridaObjetivoFuente de tráficoPrioridad
Landing captación principal /primera-visita-gratis Convertir tráfico de ads en leads Google Ads, Meta Ads Crítico
QR escaparate /escaparate Convertir transeúntes que escanean el QR QR de la TV Crítico
Ortodoncia /ortodoncia SEO + conversión tratamiento específico Orgánico, Google Ads Alta
Implantes dentales /implantes-dentales SEO + conversión (ticket alto) Orgánico, Google Ads Alta
Blanqueamiento /blanqueamiento-dental SEO + conversión Orgánico, Meta Ads Alta
Periodoncia /periodoncia SEO + conversión Orgánico Media

Estructura de una Landing por Tratamiento

1. Hero

  • Headline con keyword + beneficio principal
  • Subheadline: "En Dental Basté, [ciudad]"
  • CTA primario: "Reserva tu primera visita gratis"
  • Imagen del equipo o de la clínica (real, no stock)

2. Beneficios + Proceso

  • 3 beneficios del tratamiento en iconos
  • Proceso en 3 pasos: Consulta → Diagnóstico → Tratamiento
  • Badge de confianza: años de experiencia, nº pacientes

3. Testimonios + FAQ

  • 2–3 testimonios reales con foto (con permiso)
  • 5–7 preguntas frecuentes en acordeón
  • Enlace a reseñas de Google

4. CTA Final + Booking

  • Widget Calendly embebido o formulario corto
  • CTA repetido: "Primera visita sin compromiso"
  • Chatbot flotante activo en toda la página

Landing QR Escaparate — Especificación

Esta página es crítica: el transeúnte que escanea el QR de la TV viene con alta intención. La página debe cargarse en <2 seg (mobile first), sin menú, sin distracciones — solo reservar.
HTML — Estructura de la landing /escaparate
<!-- URL: dentalbaste.com/escaparate -->
<!-- Sin menú, sin footer, sin distracciones -->

<section class="qr-hero">
  <img src="/logo.svg" alt="Dental Basté" />
  <h1>¡Bienvenido a Dental Basté!</h1>
  <p>Has escaneado el QR de nuestra clínica.
     Reserva ahora tu primera visita — sin coste.</p>
  <a href="#booking" class="cta-button">Reservar cita gratis →</a>
</section>

<section id="booking">
  <!-- Widget Calendly inline -->
  <div class="calendly-inline-widget"
       data-url="https://calendly.com/dentalbaste/primera-visita?utm_source=qr_escaparate">
  </div>
</section>

<!-- GTM: registrar qr_scan_landing en dataLayer -->
<script>
  dataLayer.push({ event: 'qr_scan_landing', source: 'tv_escaparate' });
</script>
SEO Local
On-page · Schema markup · Google Business Profile · Core Web Vitals

Checklist On-Page (por página)

  • Meta title: keyword principal + ciudad (55–60 car.)
  • Meta description con CTA implícito (150–160 car.)
  • H1 único con keyword principal, solo uno por página
  • H2/H3 con variaciones semánticas de la keyword
  • URL corta y descriptiva, sin parámetros
  • Imágenes: WebP, <100KB, alt text descriptivo
  • Enlace interno a la página de reserva en cada sección
  • Schema markup (ver código abajo)

Google Business Profile

  • Verificar y completar el perfil al 100%
  • Categoría principal: "Dentista". Secundarias: ortodoncia, implantes
  • Fotos reales de la clínica (mínimo 10, incluyendo equipo)
  • Horario actualizado, incluyendo festivos
  • Publicaciones semanales con el contenido del equipo de vídeo
  • Responder a todas las reseñas (el especialista IA ayuda con esto)

Schema Markup — LocalBusiness + MedicalClinic

JSON-LD — Schema para Dental Basté (insertar en <head>)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": ["Dentist", "LocalBusiness"],
  "name": "Dental Basté",
  "url": "https://dentalbaste.com",
  "telephone": "+34 9XX XXX XXX",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "Calle ...",
    "addressLocality": "[Ciudad]",
    "addressCountry": "ES"
  },
  "openingHoursSpecification": [
    { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"], "opens": "09:00", "closes": "20:00" }
  ],
  "priceRange": "€€",
  "medicalSpecialty": ["Dentistry", "Orthodontics"],
  "hasMap": "https://maps.google.com/?q=Dental+Basté"
}
</script>

Core Web Vitals — Objetivos y Acciones

MétricaObjetivoCómo conseguirlo
LCP (Largest Contentful Paint) < 2.5 seg Imagen hero en WebP preloaded, CDN para estáticos, hosting rápido
CLS (Cumulative Layout Shift) < 0.1 Dimensiones fijas en imágenes y embeds (Calendly, widget chatbot)
INP (Interaction to Next Paint) < 200ms Diferir scripts de terceros (GTM, Pixel, Clarity) con loading="lazy"
TTFB (Time to First Byte) < 600ms Caché del servidor, evitar redirects innecesarios, hosting SSD
Integraciones Web
Calendly · Chatbot · Formularios HubSpot · Mapa de conexiones

Calendly — Embed en landing

HTML — Calendly widget inline con tracking
<!-- Cargar script de Calendly -->
<link href="https://assets.calendly.com/assets/external/widget.css" rel="stylesheet"/>
<script src="https://assets.calendly.com/assets/external/widget.js" async></script>

<!-- Widget inline -->
<div class="calendly-inline-widget"
     data-url="https://calendly.com/dentalbaste/primera-visita
               ?hide_gdpr_banner=1
               &utm_source=web
               &utm_medium=landing"
     style="min-width:320px; height:700px;">
</div>

<!-- Escuchar evento de cita confirmada para GTM -->
<script>
  window.addEventListener('message', function(e) {
    if (e.data.event === 'calendly.event_scheduled') {
      dataLayer.push({ event: 'booking_completed' });
    }
  });
</script>

Formulario de Captación — Integración con HubSpot

HTML + JavaScript — Formulario con envío a HubSpot API
<form id="lead-form">
  <input name="nombre" placeholder="Tu nombre" required />
  <input name="email" type="email" placeholder="Tu email" required />
  <input name="telefono" placeholder="Teléfono" />
  <select name="tratamiento">
    <option>Ortodoncia</option>
    <option>Implantes</option>
    <option>Blanqueamiento</option>
    <option>Otra consulta</option>
  </select>
  <button type="submit">Reserva tu primera visita gratis →</button>
</form>

<script>
document.getElementById('lead-form').addEventListener('submit', async function(e) {
  e.preventDefault();
  const data = Object.fromEntries(new FormData(e.target));

  // Enviar a HubSpot Forms API
  await fetch('https://api.hsforms.com/submissions/v3/integration/submit/TU_PORTAL_ID/TU_FORM_ID', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      fields: [
        { name: 'firstname', value: data.nombre },
        { name: 'email', value: data.email },
        { name: 'phone', value: data.telefono },
        { name: 'tratamiento_interes', value: data.tratamiento }
      ],
      context: { pageUri: window.location.href }
    })
  });

  // Disparar evento GA4 + Meta Pixel
  dataLayer.push({ event: 'form_submit', tratamiento_interes: data.tratamiento });
});
</script>

Mapa de Conexiones Web

Elemento webDestinoMétodoDato enviado
Formulario de captaciónHubSpot CRMHubSpot Forms APINombre, email, teléfono, tratamiento
Widget CalendlyHubSpot + MakeWebhook CalendlyCita confirmada, datos del lead
Widget chatbotBackend IA (Make/n8n)Iframe / WebSocketMensajes de conversación
GTM — form_submitGA4 + Meta PixeldataLayer pushEvento de conversión + tratamiento
GTM — booking_completedGA4 + Meta Pixel + HubSpotdataLayer pushConversión de cita
Landing /escaparateGA4 + CalendlyUTM params + dataLayerFuente = qr_escaparate