Volver al blog

Secciones de testimonios en React: tarjetas, muros y carruseles

Publicado el 20 de marzo de 2026·6 min read

La prueba social es el elemento más persuasivo de cualquier landing page. Los visitantes confían más en otros clientes que en tu propio texto de marketing. Una sección de testimonios bien diseñada no se limita a mostrar citas: genera credibilidad justo en el momento en que el visitante decide si convertir o no.

Esta guía recorre cinco patrones de testimonios en React con Tailwind CSS: cuadrículas de tarjetas, muros tipo masonry, carruseles, testimonios en vídeo y barras de logos.

1. Tarjetas de testimonios en una cuadrícula

El patrón más sencillo: una cuadrícula de tarjetas, cada una con una cita, el nombre del autor, su cargo y su avatar. Tres columnas en escritorio, una en móvil.

interface Testimonial {
  quote: string;
  author: string;
  role: string;
  avatar: string;
  company: string;
}

function TestimonialGrid({ items }: { items: Testimonial[] }) {
  return (
    <section className="mx-auto max-w-7xl px-6 py-24">
      <h2 className="text-3xl font-bold tracking-tight text-center mb-12">
        What developers are saying
      </h2>
      <div className="grid gap-8 md:grid-cols-2 lg:grid-cols-3">
        {items.map((item) => (
          <figure
            key={item.author}
            className="rounded-2xl border border-neutral-200 p-8 dark:border-neutral-800"
          >
            <blockquote className="text-neutral-600 dark:text-neutral-400">
              &ldquo;{item.quote}&rdquo;
            </blockquote>
            <figcaption className="mt-6 flex items-center gap-4">
              <img
                src={item.avatar}
                alt={item.author}
                className="h-10 w-10 rounded-full"
              />
              <div>
                <p className="text-sm font-semibold">{item.author}</p>
                <p className="text-sm text-neutral-500">
                  {item.role}, {item.company}
                </p>
              </div>
            </figcaption>
          </figure>
        ))}
      </div>
    </section>
  );
}

Usa HTML semántico: <figure>, <blockquote> y <figcaption>. Esto ayuda a los buscadores a entender la estructura del contenido y mejora la accesibilidad.

Por qué funcionan los testimonios

Hay tres principios psicológicos que impulsan las secciones de testimonios:

Prueba social: cuando las personas tienen dudas, observan el comportamiento de los demás. Ver que miles de desarrolladores usan un producto reduce el riesgo percibido de probarlo.

Sesgo de autoridad: los testimonios de personas que trabajan en empresas reconocibles (o con cargos relevantes) pesan más. "CTO en Stripe" resulta más persuasivo que "User123".

Concreción: "Esto nos ahorró 40 horas por sprint" convierte mejor que "Gran producto". Cuanto más concreta es la afirmación, más creíble resulta.

2. Muro de testimonios tipo masonry

Un layout masonry genera interés visual porque las tarjetas tienen alturas distintas según la longitud de la cita. A diferencia de una cuadrícula normal donde cada celda tiene la misma altura, masonry deja que las citas cortas se queden cortas y que las largas se expandan con naturalidad.

Las columnas CSS ofrecen la implementación masonry más sencilla:

function TestimonialWall({ items }: { items: Testimonial[] }) {
  return (
    <div className="columns-1 gap-6 sm:columns-2 lg:columns-3">
      {items.map((item) => (
        <figure
          key={item.author}
          className="mb-6 break-inside-avoid rounded-2xl border border-neutral-200 p-6 dark:border-neutral-800"
        >
          <blockquote className="text-sm text-neutral-600 dark:text-neutral-400">
            &ldquo;{item.quote}&rdquo;
          </blockquote>
          <figcaption className="mt-4 flex items-center gap-3">
            <img
              src={item.avatar}
              alt={item.author}
              className="h-8 w-8 rounded-full"
            />
            <div>
              <p className="text-xs font-semibold">{item.author}</p>
              <p className="text-xs text-neutral-500">{item.role}</p>
            </div>
          </figcaption>
        </figure>
      ))}
    </div>
  );
}

La clase break-inside-avoid evita que las tarjetas se partan entre columnas. El enfoque con columns-3 se lee de arriba abajo dentro de cada columna, algo que funciona bien con testimonios donde el orden no importa.

3. Carrusel de testimonios

Cuando tienes más de 10 testimonios pero no quieres una cuadrícula gigante, un carrusel te permite mostrar tres a la vez con navegación. Usa overflow-x-auto junto con snap-x para un carrusel de scroll snap hecho solo con CSS:

function TestimonialCarousel({ items }: { items: Testimonial[] }) {
  return (
    <div className="relative">
      <div className="flex gap-6 overflow-x-auto snap-x snap-mandatory scroll-smooth pb-4 scrollbar-hide">
        {items.map((item) => (
          <figure
            key={item.author}
            className="min-w-[300px] max-w-[350px] snap-start flex-shrink-0 rounded-2xl border border-neutral-200 p-6 dark:border-neutral-800"
          >
            <blockquote className="text-sm text-neutral-600 dark:text-neutral-400">
              &ldquo;{item.quote}&rdquo;
            </blockquote>
            <figcaption className="mt-4 flex items-center gap-3">
              <img
                src={item.avatar}
                alt={item.author}
                className="h-8 w-8 rounded-full"
              />
              <div>
                <p className="text-xs font-semibold">{item.author}</p>
                <p className="text-xs text-neutral-500">
                  {item.role}, {item.company}
                </p>
              </div>
            </figcaption>
          </figure>
        ))}
      </div>
    </div>
  );
}

Las clases snap-x snap-mandatory y snap-start te dan un carrusel con scroll-snap nativo sin nada de JavaScript. En móvil, el usuario desliza; en escritorio, hace scroll horizontal o puedes añadir botones de flecha que llamen a scrollBy sobre el contenedor.

Para una experiencia más pulida con autoplay y gestos de arrastre, envuelve las tarjetas en las restricciones de arrastre de Framer Motion o usa embla-carousel-react.

4. Testimonios en vídeo

Los testimonios en vídeo son el formato más persuasivo. Una persona real hablando de su experiencia es más difícil de falsear y transmite más carga emocional que el texto.

El patrón: una cuadrícula de tarjetas con miniatura, cada una con un botón de reproducción superpuesto. Al hacer clic se abre un modal con el vídeo. Usa un elemento <dialog> para el modal, ya que gestiona de forma nativa el atrapado del foco y el cierre con la tecla Escape.

Mantén las miniaturas como imágenes estáticas (no vídeos en reproducción automática) para evitar penalizaciones de rendimiento. Carga el elemento <iframe> o <video> solo cuando el usuario pulse reproducir.

Para embeds de YouTube/Vimeo, usa loading="lazy" y el patrón srcdoc para diferir la carga del iframe hasta el clic:

<iframe
  src={`https://www.youtube.com/embed/${videoId}?autoplay=1`}
  allow="autoplay; encrypted-media"
  loading="lazy"
  className="aspect-video w-full rounded-xl"
/>

5. Barra de logos

La barra de logos no es un testimonio en el sentido tradicional, pero sí uno de los elementos de prueba social más efectivos. Una fila de logos de clientes transmite confianza de un vistazo, sin necesidad de leer.

Pautas de diseño: usa logos monocromos (en escala de grises o de un solo color) para que la barra no compita con tu contenido por la atención. Configura los logos con opacity-50 hover:opacity-100 para darles un toque interactivo. Mantén todos los logos con el mismo peso visual normalizando su altura.

Para una barra de logos con desplazamiento (marquesina infinita), duplica el array de logos y usa una animación CSS:

<div className="overflow-hidden">
  <div className="flex animate-marquee gap-12">
    {[...logos, ...logos].map((logo, i) => (
      <img
        key={i}
        src={logo.src}
        alt={logo.alt}
        className="h-8 w-auto opacity-50"
      />
    ))}
  </div>
</div>

Define el keyframe animate-marquee en tu configuración de Tailwind para desplazar la fila de 0 a -50%, creando así el bucle continuo.

Cómo elegir el patrón adecuado

  • 3-6 testimonios: cuadrícula de tarjetas. Limpia, fácil de escanear y sin interacción.
  • 10+ testimonios: carrusel o muro masonry. Muestra volumen sin abrumar.
  • Producto de precio alto: testimonios en vídeo. La confianza extra justifica el esfuerzo de producción.
  • B2B / enterprise: barra de logos + 2-3 tarjetas de testimonio destacadas. Los logos transmiten escala; las citas aportan profundidad.

Secciones de testimonios listas para usar

El catálogo de testimonios de Incubator cuenta con más de 15 secciones de testimonios: cuadrículas de tarjetas, muros masonry, carruseles, layouts de vídeo, barras de logos y patrones combinados, todos creados en React con Tailwind CSS.

Explora la biblioteca completa de secciones para combinar tus testimonios con secciones de CTA y precios y maximizar la conversión.

Relacionado en incubator

VA

Victor Aubague

Desarrollador y creador de Incubator

Desarrollador full-stack especializado en React, Next.js y TypeScript. Creé Incubator para ayudar a los desarrolladores a lanzar interfaces bonitas más rápido, todos los componentes provienen de proyectos reales de clientes y de código en producción.

LinkedIn

Related articles

Secciones de testimonios en React: tarjetas, muros y