Publicado ·Calen Team

Cómo añadir un botón de "Añadir al calendario" a tu sitio web [Guía 2026]

Construiste una página de eventos. La gente la visita. Lee los detalles, incluso puede entusiasmarse. Luego se va, lo olvida y nunca se presenta.

La solución es un botón. Un solo botón: "Añadir al calendario", que pone tu evento en su teléfono, en su vista diaria, con un recordatorio que se dispara automáticamente. Los eventos con un botón de añadir al calendario ven un 20-40% más de asistencia en comparación con los que no lo tienen.

Esta guía cubre cuatro formas de añadir un botón de "Añadir al calendario" a tu sitio web, desde HTML puro hasta widgets de terceros y páginas de evento que lo hacen por ti. Con ejemplos de código incluidos.

Por qué los botones de añadir al calendario no son negociables

Si organizas eventos (webinars, meetups, lanzamientos de producto, horarios de atención), el botón de añadir al calendario es el elemento con mayor ROI de tu página.

Esto es lo que muestran los datos:

MétricaSin botónCon botón
Tasa de recuerdo del evento~30%~85%
Tasa de ausencia40-60%15-25%
Asistencia recurrenteBaja2-3x mayor
Tiempo para implementar5-30 minutos

La psicología es simple: una entrada de calendario convierte un "quizás voy" pasivo en un compromiso. El evento aparece en su vista diaria. Su teléfono les recuerda. Planifican su día en torno a él. El botón es el puente entre el interés y la asistencia.

Sáltatelo y dependerás de que la gente recuerde, cosa que no hará.

Método 1: HTML + JavaScript (enfoque manual)

El enfoque DIY. Construyes las URLs de calendario para cada proveedor y las presentas como botones. Control total, coste cero, máximo esfuerzo.

Botón de Google Calendar

Google Calendar acepta eventos mediante parámetros de URL. Un ejemplo funcional:

<a
  href="https://calendar.google.com/calendar/render?action=TEMPLATE&text=Product+Launch+Webinar&dates=20260415T180000Z/20260415T193000Z&details=Join+us+for+the+Q2+product+launch.+Link:+https://example.com/join&location=https://zoom.us/j/123456"
  target="_blank"
  rel="noopener noreferrer"
  class="calendar-btn"
>
  Añadir a Google Calendar
</a>

Botón de Outlook

Outlook Web y Office 365 usan URLs base distintas. Necesitas ambas:

<!-- Outlook personal -->
<a
  href="https://outlook.live.com/calendar/0/deeplink/compose?subject=Product+Launch+Webinar&startdt=2026-04-15T18:00:00Z&enddt=2026-04-15T19:30:00Z&body=Join+us+for+the+Q2+product+launch.&location=https://zoom.us/j/123456"
  target="_blank"
  rel="noopener noreferrer"
  class="calendar-btn"
>
  Añadir a Outlook
</a>

<!-- Office 365 -->
<a
  href="https://outlook.office.com/calendar/0/deeplink/compose?subject=Product+Launch+Webinar&startdt=2026-04-15T18:00:00Z&enddt=2026-04-15T19:30:00Z&body=Join+us+for+the+Q2+product+launch.&location=https://zoom.us/j/123456"
  target="_blank"
  rel="noopener noreferrer"
  class="calendar-btn"
>
  Añadir a Office 365
</a>

Botón de Yahoo Calendar

<a
  href="https://calendar.yahoo.com/?v=60&title=Product+Launch+Webinar&st=20260415T180000Z&et=20260415T193000Z&desc=Join+us+for+the+Q2+product+launch.&in_loc=https://zoom.us/j/123456"
  target="_blank"
  rel="noopener noreferrer"
  class="calendar-btn"
>
  Añadir a Yahoo Calendar
</a>

Implementación completa en JavaScript

Una función reutilizable que genera las cuatro URLs de calendario a partir de un único objeto de evento:

function generateCalendarLinks(event) {
  const { title, start, end, description, location } = event;

  // Formato de fecha para Google/Yahoo: YYYYMMDDTHHmmSSZ
  const formatGoogleDate = (date) =>
    date.toISOString().replace(/[-:]/g, "").replace(/\.\d{3}/, "");

  // Formato de fecha para Outlook: ISO 8601
  const formatOutlookDate = (date) => date.toISOString();

  const googleStart = formatGoogleDate(start);
  const googleEnd = formatGoogleDate(end);
  const outlookStart = formatOutlookDate(start);
  const outlookEnd = formatOutlookDate(end);

  return {
    google: `https://calendar.google.com/calendar/render?action=TEMPLATE&text=${encodeURIComponent(title)}&dates=${googleStart}/${googleEnd}&details=${encodeURIComponent(description)}&location=${encodeURIComponent(location)}`,

    outlook: `https://outlook.live.com/calendar/0/deeplink/compose?subject=${encodeURIComponent(title)}&startdt=${outlookStart}&enddt=${outlookEnd}&body=${encodeURIComponent(description)}&location=${encodeURIComponent(location)}`,

    office365: `https://outlook.office.com/calendar/0/deeplink/compose?subject=${encodeURIComponent(title)}&startdt=${outlookStart}&enddt=${outlookEnd}&body=${encodeURIComponent(description)}&location=${encodeURIComponent(location)}`,

    yahoo: `https://calendar.yahoo.com/?v=60&title=${encodeURIComponent(title)}&st=${googleStart}&et=${googleEnd}&desc=${encodeURIComponent(description)}&in_loc=${encodeURIComponent(location)}`,
  };
}

// Uso
const event = {
  title: "Product Launch Webinar",
  start: new Date("2026-04-15T18:00:00Z"),
  end: new Date("2026-04-15T19:30:00Z"),
  description: "Join us for the Q2 product launch. Link: https://example.com/join",
  location: "https://zoom.us/j/123456",
};

const links = generateCalendarLinks(event);

Estilizado de los botones

.calendar-btn {
  display: inline-block;
  padding: 10px 20px;
  margin: 4px;
  border-radius: 6px;
  background: #1a73e8;
  color: #fff;
  text-decoration: none;
  font-weight: 600;
  font-size: 14px;
}

.calendar-btn:hover {
  background: #1557b0;
}

El problema con este enfoque

Funciona, pero mantenerlo es doloroso:

  • Cuatro formatos de URL distintos. Cada calendario tiene sus propios nombres de parámetros, formatos de fecha y peculiaridades.
  • Sin soporte para Apple Calendar. Apple no acepta la creación de eventos mediante URL. Necesitas un enfoque separado con archivos ICS.
  • Conversión manual de zona horaria. Todas las URLs requieren UTC. Si tu evento es a las 14:00 hora del Este, tienes que convertirlo tú.
  • Sin seguimiento. No tienes visibilidad de cuánta gente realmente hizo clic.
  • Frágil. Un error tipográfico en una fecha y el evento aparece a la hora equivocada, o no aparece.

Para un evento estático único, este enfoque es aceptable. Para cualquier cosa recurrente o a escala, se convierte en una carga de mantenimiento.

Método 2: descarga de archivo ICS

El formato .ics es el estándar universal de calendario. Toda app principal (Google, Apple, Outlook, Yahoo) puede importarlo. También es la única forma de dar soporte a Apple Calendar desde un sitio web.

Crear el archivo ICS

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Your Company//Event//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART:20260415T180000Z
DTEND:20260415T193000Z
SUMMARY:Product Launch Webinar
DESCRIPTION:Join us for the Q2 product launch.\nLink: https://example.com/join
LOCATION:https://zoom.us/j/123456
STATUS:CONFIRMED
UID:product-launch-20260415@example.com
END:VEVENT
END:VCALENDAR

Servirlo desde tu sitio web

Guarda el archivo como event.ics en tu servidor y enlázalo:

<a href="/events/event.ics" class="calendar-btn">
  Añadir al calendario (Apple, Outlook, Google)
</a>

Tu servidor debe devolver el MIME type correcto. En Apache:

AddType text/calendar .ics

En Nginx:

types {
  text/calendar ics;
}

Generar archivos ICS dinámicamente (Node.js)

function generateICS(event) {
  const formatDate = (date) =>
    date.toISOString().replace(/[-:]/g, "").replace(/\.\d{3}/, "");

  return `BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//YourApp//Events//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART:${formatDate(event.start)}
DTEND:${formatDate(event.end)}
SUMMARY:${event.title}
DESCRIPTION:${event.description.replace(/\n/g, "\\n")}
LOCATION:${event.location}
STATUS:CONFIRMED
UID:${event.id}@yourdomain.com
END:VEVENT
END:VCALENDAR`;
}

// Endpoint de Express.js
app.get("/api/event/:id/calendar", (req, res) => {
  const event = getEvent(req.params.id);
  const ics = generateICS(event);

  res.setHeader("Content-Type", "text/calendar");
  res.setHeader("Content-Disposition", `attachment; filename="${event.title}.ics"`);
  res.send(ics);
});

Limitaciones de ICS

  • El paso de descarga añade fricción. Los usuarios ven un aviso de descarga de archivo. En móvil puede resultar confuso.
  • Algunos clientes de correo bloquean los adjuntos .ics por seguridad.
  • Sin seguimiento. Sabes que alguien descargó el archivo, pero no si realmente lo importó.
  • El manejo de zona horaria es complicado. El valor de DTSTART debe coincidir exactamente con la especificación de zona horaria, o el evento aparecerá a la hora equivocada.

Método 3: widgets de terceros para añadir al calendario

Si no quieres construir la lógica de calendario tú mismo, los servicios de widget lo hacen por ti. Incrustas un script o fragmento de botón y genera los botones de calendario.

AddEvent

La herramienta más consolidada para añadir al calendario. Incrustas un widget JavaScript en tu sitio y muestra un menú desplegable con opciones de calendario.

<!-- Ejemplo de incrustado de AddEvent -->
<div class="addeventatc">
  Añadir al calendario
  <span class="start">04/15/2026 02:00 PM</span>
  <span class="end">04/15/2026 03:30 PM</span>
  <span class="timezone">America/New_York</span>
  <span class="title">Product Launch Webinar</span>
  <span class="description">Join us for the Q2 product launch.</span>
  <span class="location">https://zoom.us/j/123456</span>
</div>
<script src="https://addevent.com/libs/atc/1.6.1/atc.min.js"></script>

Realidad del precio: el plan gratis te da 100 adiciones al calendario/mes y 20 suscriptores. Las funciones útiles comienzan en $36/mes (plan Small Business). Por un botón de calendario en tu propio sitio web.

CalGet

Una alternativa más simple. Crea un botón, obtén el fragmento, incrústalo.

Realidad del precio: gratis hasta 50 adiciones al calendario por evento y 25 suscriptores por calendario. Después, los planes de pago comienzan en $16/mes. Si tu evento consigue 200 inscritos, ya superaste el plan gratuito 4 veces.

El problema con los widgets

Ambas herramientas funcionan. Pero las dos tienen el mismo problema de fondo: estás pagando una suscripción por lo que son básicamente un par de enlaces y un menú desplegable.

WidgetLímite del plan gratisPrecio inicial pagadoQué obtienes
AddEvent100 adiciones/mes, 20 suscriptores$36/mesBotón incrustable + desplegable
CalGet50 adiciones/evento, 25 suscr./calendario$16/mesBotón simple + páginas alojadas

Para un negocio que organiza eventos semanales, AddEvent cuesta $432/año. Por un botón. El modelo de pago por uso de CalGet penaliza el crecimiento: cuanto más exitoso sea tu evento, más pagas.

Método 4: página de evento con añadir al calendario integrado (Calen)

Hay otro enfoque que esquiva por completo el modelo de widget. En lugar de incrustar botones en tu sitio existente, creas una página de evento dedicada con añadir al calendario ya integrado.

Calen adopta este enfoque. Creas un evento (título, fecha, descripción, imagen) y obtienes una página de evento compartible con botones de un clic para añadir a Google, Apple, Outlook, Yahoo y Office 365.

Cómo funciona

  1. Crea tu evento en Calen (toma unos 3 minutos)
  2. Obtén una URL compartible: https://calen.events/tu-slug-de-evento
  3. Los asistentes visitan la página, hacen clic en "Añadir al calendario", eligen su calendario: listo
  4. Enlaza la página del evento desde tu sitio web, correos, publicaciones en redes

Lo que no tienes que construir

  • Construcción de URLs de calendario para cada proveedor
  • Generación y alojamiento de archivos ICS
  • Lógica de conversión de zona horaria
  • UI responsive de botones de calendario para móvil
  • Seguimiento y analíticas

Precio

Eventos ilimitados. Adiciones al calendario ilimitadas. Gratis.

El plan gratuito incluye hasta 100 suscriptores por correo (personas que te siguen para futuros eventos). Si necesitas más suscriptores, el plan Pro cuesta $9.99/mes. Pero la funcionalidad principal (páginas de evento y adiciones al calendario) no tiene tope.

Esa es la diferencia clave con AddEvent y CalGet: no hay límite en adiciones al calendario. Tu evento puede recibir 10 o 10,000 adiciones al calendario: el coste es el mismo.

Incrustar en tu sitio web

Puedes enlazar directamente a tu página de evento de Calen, o incrustarla como un enlace/botón en tu sitio existente:

<a
  href="https://calen.events/tu-slug-de-evento"
  target="_blank"
  rel="noopener noreferrer"
  class="calendar-btn"
>
  Ver evento y añadir al calendario
</a>

Sin fragmentos de JavaScript que mantener. Sin scripts de terceros cargando en tu página. Sin conflictos de estilo entre widgets y tu CSS.

Comparación: los cuatro métodos

CaracterísticaHTML + JSArchivo ICSWidget (AddEvent)Página de evento (Calen)
Google Calendar
Apple CalendarNo
OutlookSí (2 URLs)
Yahoo
Manejo de zona horariaManualManualAutomáticoAutomático
SeguimientoNingunoNinguno
UX móvilLa construyes túDescarga de archivoDesplegableBotones nativos
Tiempo de configuración1-2 horas30-60 min15 min3 min
MantenimientoAltoMedioBajoNinguno
CosteGratisGratis$36/mes+Gratis
Límite de adicionesNingunoNingunoDepende del planNinguno
Tarjeta OGPLa construyes túNoNoGenerada automáticamente
Sistema de suscriptoresNoNoNo
Código en tu sitioSí (script tag)No (solo un enlace)

Cuándo usar cada método

Usa HTML + JavaScript si: eres desarrollador y quieres control total, tienes uno o dos eventos estáticos y no necesitas soporte para Apple Calendar ni seguimiento.

Usa archivos ICS si: necesitas soporte universal incluyendo Apple, estás cómodo gestionando la generación de archivos y tu audiencia es lo suficientemente técnica como para manejar una descarga.

Usa un widget (AddEvent) si: eres una empresa con presupuesto, necesitas el botón incrustado directamente en tu sitio con tu marca y quieres una solución gestionada.

Usa una página de evento (Calen) si: quieres el camino más rápido entre "tengo un evento" y "la gente lo está añadiendo a su calendario". Sin código, sin mantenimiento, sin comisiones por adición.

Mejores prácticas para botones de añadir al calendario

Elijas el método que elijas, sigue estas reglas:

1. Coloca el botón en un lugar visible

El botón de calendario debe ser el llamado a la acción más prominente de la página de evento o pantalla de confirmación. No al final. No en una barra lateral. Al frente y al centro.

2. Usa un texto directo en el botón

Bueno:  "Añadir al calendario"
Bueno:  "Guardar en Google Calendar"
Bueno:  "Añadir a mi calendario"

Malo:   "Haz clic aquí"
Malo:   "Confirmar asistencia"
Malo:   "Guardar este evento"

"Añadir al calendario" es la frase estándar que los usuarios reconocen. No seas creativo con eso.

3. Soporta múltiples calendarios

No asumas que todos usan Google Calendar. El mercado está dividido:

CalendarioCuota de mercado aproximada
Google Calendar~45%
Apple Calendar~25%
Outlook / Office 365~25%
Yahoo Calendar~3%
Otros~2%

Si solo ofreces un botón de Google Calendar, estás excluyendo a más de la mitad de tu audiencia de una experiencia de un clic.

4. Incluye el enlace de unión en el evento del calendario

Este es el detalle más comúnmente olvidado. La entrada del calendario debe contener todo lo necesario para asistir, especialmente la URL de la reunión. Cuando el recordatorio se dispare en su teléfono 15 minutos antes, el enlace para unirse debe estar ahí mismo. Sin buscar en correos.

5. Pon el botón también en tu correo de confirmación

No todos añaden el evento al calendario de inmediato. Incluye el botón de añadir al calendario en:

  • La página de confirmación de inscripción
  • El correo de confirmación
  • El correo de recordatorio 24 horas antes

Tres puntos de contacto. Cada uno atrapa a las personas que los anteriores dejaron pasar.

6. Prueba en móvil

Más del 60% del tráfico de páginas de evento viene de móvil. Prueba tus botones en teléfonos reales. La experiencia de descargar un archivo ICS en móvil es particularmente áspera: un botón nativo (como el que provee Calen) es significativamente más fluido.

7. Añade marcado Schema.org para eventos

Si tu página de evento está en tu propio dominio, añade datos estructurados para que los buscadores la entiendan:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "Product Launch Webinar",
  "startDate": "2026-04-15T18:00:00Z",
  "endDate": "2026-04-15T19:30:00Z",
  "eventAttendanceMode": "https://schema.org/OnlineEventAttendanceMode",
  "eventStatus": "https://schema.org/EventScheduled",
  "location": {
    "@type": "VirtualLocation",
    "url": "https://zoom.us/j/123456"
  },
  "description": "Join us for the Q2 product launch."
}
</script>

Las páginas de evento de Calen incluyen este marcado automáticamente.

Inicio rápido: consigue un botón en vivo en 3 minutos

Si quieres un botón de añadir al calendario funcionando hoy sin escribir código:

  1. Usa el generador gratuito de enlaces de calendario para crear enlaces para Google, Apple, Outlook y Yahoo en un solo paso
  2. Pega los enlaces en tu sitio web como botones
  3. Listo

Si quieres una página de evento completa con adiciones al calendario, tarjetas sociales, gestión de suscriptores y analíticas, crea un evento en Calen y comparte el enlace. Tres minutos, sin código, sin límites en adiciones al calendario.

Deja de perder asistentes entre "interesado" y "se presentó". Un solo botón cambia las cuentas.


Lectura relacionada: