Mallorca es una hermosa isla situada en el Mediterráneo, conocida por sus playas de aguas cristalinas, su rica cultura y su deliciosa gastronomía. Si tienes un negocio o prestas servicios en Mallorca, es esencial que aproveches al máximo las técnicas de optimización de contenido para aumentar tu visibilidad en línea y atraer a más clientes.

En este artículo, te presentaremos algunas estrategias clave que puedes implementar para mejorar tu posicionamiento en los motores de búsqueda y lograr que tu negocio destaque en la web.

Investigación de palabras clave

La investigación de palabras clave es el primer paso fundamental en cualquier estrategia de optimización de contenido. Es importante que identifiques cuáles son las palabras clave más relevantes para tu negocio en Mallorca. Esto implica investigar términos de búsqueda populares relacionados con tus productos o servicios.

Puedes utilizar herramientas como Google Keyword Planner o SEMrush para obtener información sobre el volumen de búsqueda y la competencia de las palabras clave relevantes para tu negocio. Una vez que hayas identificado las palabras clave adecuadas, debes asegurarte de incluirlas de manera natural en tu contenido.

Creación de contenido original y de alta calidad

El contenido original y de alta calidad es fundamental para atraer a los motores de búsqueda y a los usuarios. Debes crear contenido que sea informativo, útil y atractivo para tu público objetivo en Mallorca. Esto puede incluir artículos, guías, tutoriales, infografías y videos relacionados con tu industria o nicho.

Es importante que tu contenido sea único y no una copia de otros sitios web. Esto ayudará a mejorar tu posición en los resultados de búsqueda y te posicionará como una autoridad en tu área. Además, recuerda utilizar tus palabras clave de manera estratégica en el título, encabezados, párrafos y metadatos de tus páginas.

Optimización de metaetiquetas y descripciones

Las metaetiquetas y descripciones son elementos clave que aparecen en los resultados de búsqueda. Son una gran oportunidad para persuadir a los usuarios a hacer clic en tu enlace. Asegúrate de optimizar tus metaetiquetas y descripciones con palabras clave relevantes y mensajes llamativos.

Las metaetiquetas incluyen el título de la página (etiqueta ) y la descripción (etiqueta <meta name="description">). El título debe ser breve y tienden a utilizar las palabras clave más importantes al comienzo. La descripción debe ser persuasiva y resumir el contenido de la página de manera interesante. Recuerda que estos elementos deben ser únicos para cada página de tu sitio web.</p><h2>Optimización de velocidad de carga</h2><p>La velocidad de carga de tu sitio web es un factor crucial para el éxito en línea. Los usuarios en Mallorca, al igual que en cualquier otro lugar, esperan que las páginas se carguen rápidamente. Si tu sitio web tarda mucho en cargarse, es probable que los usuarios se vayan y busquen otra opción.</p><p>Para optimizar la velocidad de carga de tu sitio web, asegúrate de tener un buen alojamiento web, comprime y optimiza las imágenes, minimiza el código HTML, CSS y JavaScript, utiliza la memoria efectivamente y reduce el número de redireccionamientos. Estas acciones te ayudarán a proporcionar una experiencia rápida y satisfactoria para tus usuarios, lo cual es un factor importante para los motores de búsqueda.</p><h2>Optimización para dispositivos móviles</h2><p>En la actualidad, más personas acceden a Internet a través de dispositivos móviles que desde computadoras de escritorio. Por lo tanto, es fundamental que tu sitio web esté optimizado para dispositivos móviles. Esto implica utilizar un diseño responsive, que se adapte a diferentes tamaños de pantalla, y asegurarse de que todas las funciones y contenido sean accesibles desde dispositivos móviles.</p><p>La optimización para dispositivos móviles no solo mejorará la experiencia del usuario, sino que también te ayudará a obtener una mejor posición en los resultados de búsqueda móviles. Google, por ejemplo, favorece los sitios web optimizados para dispositivos móviles y los muestra en la parte superior de los resultados para búsquedas realizadas desde dispositivos móviles.</p><h2>Optimización de enlaces internos</h2><p>Los enlaces internos son aquellos que conectan diferentes páginas dentro de tu sitio web. La optimización de enlaces internos es importante porque ayuda a los motores de búsqueda a comprender la estructura de tu sitio y a indexar tus páginas de manera efectiva.</p><p>Asegúrate de incluir enlaces relevantes en tus páginas y utiliza palabras clave en el texto de anclaje. Estos enlaces no solo ayudarán a mejorar tu posicionamiento en los motores de búsqueda, sino que también ayudarán a los usuarios a encontrar de manera más fácil y rápida información relacionada dentro de tu sitio web.</p><h2>Promoción de contenido en redes sociales</h2><p>Las redes sociales son una excelente plataforma para promocionar tu contenido y aumentar la visibilidad de tu negocio en Mallorca. Crea perfiles empresariales en las principales redes sociales (como Facebook, Instagram y Twitter) y comparte regularmente contenido relevante y de calidad.</p><p>Incluye enlaces a tu sitio web en tus publicaciones y utiliza hashtags populares relacionados con tu industria. Además, interactúa con tu audiencia, responde a sus preguntas y comentarios, y participa en conversaciones relevantes. Esto te ayudará a crear una comunidad de seguidores leales y a generar más tráfico hacia tu sitio web.</p><p>En resumen, las técnicas de optimización de contenido son fundamentales para aumentar la visibilidad y el tráfico hacia tu negocio en Mallorca. Realiza una investigación exhaustiva de palabras clave, crea contenido original y de calidad, optimiza tus metaetiquetas y descripciones, mejora la velocidad de carga de tu sitio web, optimiza para dispositivos móviles, utiliza enlaces internos estratégicamente y promociona tu contenido en redes sociales. Asegúrate de implementar estas estrategias de manera consistente y verás cómo tu negocio se destaca en línea. ¡Buena suerte!</p> </div> </div> </section> </article> <!-- CTA intermedio --> <section class="section cta-section"> <div class="container"> <div class="cta-content fade-up"> <span class="section-label">¿Necesitas ayuda?</span> <h2>¿Te interesa implementar algo así?</h2> <p>Cuéntanos tu proyecto y te asesoramos sin compromiso.</p> <div class="hero-buttons hero-buttons-center"> <a href="/contacto/" class="btn btn-accent btn-lg"> Solicitar asesoramiento <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> </a> </div> </div> </div> </section> <!-- Schema.org: Article + Breadcrumbs --> <script type="application/ld+json">{"@context":"https://schema.org","@type":"BlogPosting","headline":"Técnicas de optimización de contenido para aumentar la visibilidad en Mallorca","datePublished":"2023-10-26","dateModified":"2023-10-26","author":{"@type":"Organization","name":"SINT"},"publisher":{"@type":"Organization","name":"SINT","logo":{"@type":"ImageObject","url":"https://sint.es/assets/img/logo.png"}},"description":"Mallorca es una hermosa isla situada en el Mediterráneo, conocida por sus playas de aguas cristalinas, su rica cultura y su deliciosa gastronomía. Si tienes un negocio o prestas servicios en Mallorca, es esencial que...","mainEntityOfPage":{"@type":"WebPage","@id":"https://sint.es/blog/tecnicas-de-optimizacion-de-contenido-para-aumentar-la-visibilidad-en-mallorca/"},"image":"https://sint.es/assets/img/blog/tecnicas-de-optimizacion-de-contenido-para-aumentar-la-visibilidad-en-mallorca.jpg"}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Inicio","item":"https://sint.es/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https://sint.es/blog/"},{"@type":"ListItem","position":3,"name":"Técnicas de optimización de contenido para aumentar la visibilidad en Mallorca","item":"https://sint.es/blog/tecnicas-de-optimizacion-de-contenido-para-aumentar-la-visibilidad-en-mallorca/"}]}</script> <!-- POSTS RELACIONADOS --> <section class="section"> <div class="container"> <div class="section-header fade-up"> <span class="section-label">Sigue leyendo</span> <h2>Posts relacionados</h2> </div> <div class="solutions-grid"> <article class="solution-card fade-up"> <img src="/assets/img/blog/como-utilizar-palabras-clave-en-la-optimizacion-de-contenido-para-servicios-seo-en-mallorca.jpg" alt="Cómo utilizar palabras clave en la optimización de contenido para servicios SEO en Mallorca" class="solution-card-img blog-card-img" loading="lazy" decoding="async"> <div class="solution-card-body"> <span class="solution-badge mb-sm">Optimización de contenido</span> <h3>Cómo utilizar palabras clave en la optimización de contenido para servicios SEO en Mallorca</h3> <p>En el mundo del SEO, una de las estrategias más importantes para mejorar la visibilidad de un sitio web en los motores de búsqueda es la optimizaci...</p> <div class="blog-card-meta"> <span class="blog-card-date">2023-10-26</span> <a href="/blog/como-utilizar-palabras-clave-en-la-optimizacion-de-contenido-para-servicios-seo-en-mallorca/" class="solution-card-link"> Leer <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> </a> </div> </div> </article> <article class="solution-card fade-up"> <img src="/assets/img/blog/la-importancia-de-la-optimizacion-de-contenido-en-el-posicionamiento-organico-de-mallorca.jpg" alt="La importancia de la optimización de contenido en el posicionamiento orgánico de Mallorca" class="solution-card-img blog-card-img" loading="lazy" decoding="async"> <div class="solution-card-body"> <span class="solution-badge mb-sm">Optimización de contenido</span> <h3>La importancia de la optimización de contenido en el posicionamiento orgánico de Mallorca</h3> <p>Mallorca es uno de los destinos turísticos más populares del mundo. Con sus playas de ensueño, su clima mediterráneo y su rica cultura, esta isla a...</p> <div class="blog-card-meta"> <span class="blog-card-date">2023-10-26</span> <a href="/blog/la-importancia-de-la-optimizacion-de-contenido-en-el-posicionamiento-organico-de-mallorca/" class="solution-card-link"> Leer <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> </a> </div> </div> </article> <article class="solution-card fade-up"> <img src="/assets/img/blog/optimizacion-de-contenido-clave-para-destacar-en-los-buscadores-de-mallorca.jpg" alt="Optimización de contenido: clave para destacar en los buscadores de Mallorca" class="solution-card-img blog-card-img" loading="lazy" decoding="async"> <div class="solution-card-body"> <span class="solution-badge mb-sm">Optimización de contenido</span> <h3>Optimización de contenido: clave para destacar en los buscadores de Mallorca</h3> <p>La optimización de contenido es una estrategia fundamental para cualquier empresa o negocio que desee destacar en los resultados de búsqueda de los...</p> <div class="blog-card-meta"> <span class="blog-card-date">2023-10-26</span> <a href="/blog/optimizacion-de-contenido-clave-para-destacar-en-los-buscadores-de-mallorca/" class="solution-card-link"> Leer <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> </a> </div> </div> </article> </div> </div> </section> <!-- NAVEGACIÓN --> <section class="section cta-section"> <div class="container"> <div class="cta-content fade-up"> <div class="hero-buttons hero-buttons-center"> <a href="/blog/" class="btn btn-outline btn-lg"> <svg class="class="flip-h"" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> Volver al blog </a> <a href="/contacto/" class="btn btn-accent btn-lg"> Contactar <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> </a> </div> </div> </div> </section> </main> <!-- FOOTER --> <footer class="site-footer"> <div class="container"> <div class="footer-grid"> <!-- Columna marca --> <div class="footer-brand"> <a href="/" class="footer-logo"> <img src="/assets/img/logo.png" alt="SINT" class="footer-logo-img" loading="lazy" decoding="async"> </a> <p class="footer-tagline">IA para Administración Pública y Empresa</p> <div class="footer-contact-info"> <a href="tel:+34679888971" class="footer-contact-link"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6A19.79 19.79 0 0 1 2.12 4.18 2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.81.36 1.6.68 2.36a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.72-1.27a2 2 0 0 1 2.11-.45c.76.32 1.55.55 2.36.68A2 2 0 0 1 22 16.92z"/></svg> +34 679 888 971 </a> <a href="mailto:miquel@sint.es" class="footer-contact-link"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2" y="4" width="20" height="16" rx="2"/><polyline points="22 7 12 13 2 7"/></svg> miquel@sint.es </a> <span class="footer-contact-link"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg> Calle des Bartoli, 22 — 07579 Artà, Illes Balears </span> </div> <div class="footer-social"> <a href="https://linkedin.com/company/sint-es" target="_blank" rel="noopener" aria-label="LinkedIn"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-4 0v7h-4v-7a6 6 0 0 1 6-6z"/><rect x="2" y="9" width="4" height="12"/><circle cx="4" cy="4" r="2"/></svg></a> <a href="https://twitter.com/sint_es" target="_blank" rel="noopener" aria-label="Twitter"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z"/></svg></a> </div> </div> <!-- Columnas de enlaces --> <div class="footer-col"> <h4 class="footer-col-title">Soluciones IA</h4> <ul class="footer-links"> <li><a href="/soluciones/turismo/">Agente Turismo</a></li> <li><a href="/soluciones/eventos/">Agente Eventos</a></li> <li><a href="/soluciones/tutor/">Agente Tutor</a></li> <li><a href="/soluciones/comercio/">Agente Comercio</a></li> <li><a href="/soluciones/ordenanza/">Agente Ordenanza</a></li> <li><a href="/soluciones/subvenciones/">Agente Subvenciones</a></li> <li><a href="/soluciones/">Todas las soluciones →</a></li> </ul> </div> <div class="footer-col"> <h4 class="footer-col-title">Servicios</h4> <ul class="footer-links"> <li><a href="/servicios/ciberseguridad/">Ciberseguridad NIS2</a></li> <li><a href="/servicios/desarrollo-web/">Desarrollo Web</a></li> <li><a href="/servicios/seo/">SEO</a></li> <li><a href="/servicios/linkbuilding/">Linkbuilding</a></li> <li><a href="/servicios/email-marketing/">Email Marketing</a></li> <li><a href="/servicios/consultoria-ia/">Consultoría IA</a></li> </ul> </div> <div class="footer-col"> <h4 class="footer-col-title">Auditorías</h4> <ul class="footer-links"> <li><a href="/auditorias/">Todas las auditorías</a></li> </ul> </div> <div class="footer-col"> <h4 class="footer-col-title">Empresa</h4> <ul class="footer-links"> <li><a href="/sobre-nosotros/">Sobre nosotros</a></li> <li><a href="/casos-exito/">Casos de éxito</a></li> <li><a href="/blog/">Blog</a></li> <li><a href="/contacto/">Contacto</a></li> <li><a href="/aviso-legal/">Aviso Legal</a></li> </ul> </div> </div> <div class="footer-bottom"> <p>© 2026 SINT — Sistemas Inteligentes y Nuevas Tecnologías, S.L. · CIF B75455246</p> </div> </div> </footer> <!-- CTA Sticky móvil — sólo se muestra fuera de /contacto/ --> <div class="cta-sticky" id="cta-sticky"> <a href="/contacto/" class="btn btn-accent">Solicitar demo</a> </div> <!-- JS: menú móvil, scroll header, animaciones, glow cards --> <script> (function() { var toggle = document.getElementById('nav-toggle'); var menu = document.getElementById('nav-menu'); var header = document.getElementById('site-header'); // Toggle tema claro/oscuro var themeToggle = document.getElementById('theme-toggle'); function setTheme(theme) { document.documentElement.setAttribute('data-theme', theme); localStorage.setItem('sint-theme', theme); } // Cargar preferencia guardada o respetar preferencia del sistema var saved = localStorage.getItem('sint-theme'); if (saved) { setTheme(saved); } else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: light)').matches) { setTheme('light'); } if (themeToggle) { themeToggle.addEventListener('click', function() { var current = document.documentElement.getAttribute('data-theme'); setTheme(current === 'light' ? 'dark' : 'light'); }); } // Toggle menú móvil if (toggle && menu) { toggle.addEventListener('click', function() { var open = menu.classList.toggle('open'); toggle.classList.toggle('open'); toggle.setAttribute('aria-expanded', open ? 'true' : 'false'); if (open) { // Focus trap: primer enlace del menú var firstLink = menu.querySelector('.nav-link'); if (firstLink) firstLink.focus(); } }); // Cerrar menú con Escape document.addEventListener('keydown', function(e) { if (e.key === 'Escape' && menu.classList.contains('open')) { menu.classList.remove('open'); toggle.classList.remove('open'); toggle.setAttribute('aria-expanded', 'false'); toggle.focus(); } }); // Focus trap dentro del menú móvil menu.addEventListener('keydown', function(e) { if (e.key !== 'Tab' || !menu.classList.contains('open')) return; var focusable = menu.querySelectorAll('a, button'); if (!focusable.length) return; var first = focusable[0]; var last = focusable[focusable.length - 1]; if (e.shiftKey && document.activeElement === first) { e.preventDefault(); last.focus(); } else if (!e.shiftKey && document.activeElement === last) { e.preventDefault(); first.focus(); } }); } // Header con fondo al hacer scroll var ticking = false; window.addEventListener('scroll', function() { if (!ticking) { requestAnimationFrame(function() { var st = window.pageYOffset || document.documentElement.scrollTop; if (st > 50) { header.classList.add('scrolled'); } else { header.classList.remove('scrolled'); } ticking = false; }); ticking = true; } }, { passive: true }); // Animación de entrada al scroll (IntersectionObserver) if ('IntersectionObserver' in window) { var observer = new IntersectionObserver(function(entries) { entries.forEach(function(entry) { if (entry.isIntersecting) { entry.target.classList.add('visible'); observer.unobserve(entry.target); } }); }, { threshold: 0.08, rootMargin: '0px 0px -60px 0px' }); document.querySelectorAll('.fade-up').forEach(function(el) { observer.observe(el); }); } // Efecto glow en tarjetas al mover el cursor (con throttle vía rAF) var cards = document.querySelectorAll('.service-card, .reason-item, .solution-card, .testimonial-card, .feature-card'); cards.forEach(function(card) { var glowTicking = false; card.addEventListener('mousemove', function(e) { if (!glowTicking) { var cx = e.clientX; var cy = e.clientY; requestAnimationFrame(function() { var rect = card.getBoundingClientRect(); card.style.setProperty('--mouse-x', (cx - rect.left) + 'px'); card.style.setProperty('--mouse-y', (cy - rect.top) + 'px'); glowTicking = false; }); glowTicking = true; } }, { passive: true }); }); // Cerrar menú móvil al hacer clic en un enlace if (menu) { menu.querySelectorAll('.nav-link').forEach(function(link) { link.addEventListener('click', function() { if (window.innerWidth <= 900) { menu.classList.remove('open'); toggle.classList.remove('open'); } }); }); } // --- CTA Sticky móvil --- // Muestra barra fija cuando el usuario pasa el hero; la oculta cerca del footer var ctaSticky = document.getElementById('cta-sticky'); var heroSection = document.querySelector('.hero'); if (ctaSticky && heroSection && 'IntersectionObserver' in window) { var heroObs = new IntersectionObserver(function(entries) { entries.forEach(function(entry) { // Si el hero NO es visible y no estamos cerca del fondo var nearBottom = (window.innerHeight + window.pageYOffset) >= (document.body.scrollHeight - 200); if (!entry.isIntersecting && !nearBottom) { ctaSticky.classList.add('visible'); } else { ctaSticky.classList.remove('visible'); } }); }, { threshold: 0 }); heroObs.observe(heroSection); // Ocultar cuando el usuario está cerca del footer (200px del fondo) — con throttle var ctaTicking = false; window.addEventListener('scroll', function() { if (!ctaTicking && ctaSticky.classList.contains('visible')) { requestAnimationFrame(function() { var nearBottom = (window.innerHeight + window.pageYOffset) >= (document.body.scrollHeight - 200); if (nearBottom) { ctaSticky.classList.remove('visible'); } ctaTicking = false; }); ctaTicking = true; } }, { passive: true }); } // --- Validación de formularios y estado de carga --- var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; // Validar un campo: vacío o formato email function validarCampo(input) { var valor = input.value.trim(); var invalido = false; if (input.hasAttribute('required') && valor === '') { invalido = true; } else if (input.type === 'email' && valor !== '' && !emailRegex.test(valor)) { invalido = true; } if (invalido) { input.classList.add('invalid'); input.setAttribute('aria-invalid', 'true'); } else { input.classList.remove('invalid'); input.removeAttribute('aria-invalid'); } return !invalido; } // Aplicar validación on blur a todos los formularios de contacto var formularios = document.querySelectorAll('.contact-form, .cta-form'); formularios.forEach(function(form) { // Validar campos nombre y email al perder el foco var campos = form.querySelectorAll('input[name="nombre"], input[name="email"]'); campos.forEach(function(campo) { campo.addEventListener('blur', function() { validarCampo(campo); }); // Quitar estado inválido al escribir campo.addEventListener('input', function() { if (campo.classList.contains('invalid')) { validarCampo(campo); } }); }); // Estado de carga al enviar form.addEventListener('submit', function(e) { // Validar campos requeridos antes de enviar var todosValidos = true; campos.forEach(function(campo) { if (!validarCampo(campo)) { todosValidos = false; } }); if (!todosValidos) { e.preventDefault(); return; } var btnSubmit = form.querySelector('button[type="submit"]'); if (btnSubmit && !btnSubmit.classList.contains('loading')) { var textoOriginal = btnSubmit.innerHTML; btnSubmit.classList.add('loading'); btnSubmit.disabled = true; btnSubmit.textContent = 'Enviando...'; // Red de seguridad: rehabilitar tras 5 segundos setTimeout(function() { btnSubmit.classList.remove('loading'); btnSubmit.disabled = false; btnSubmit.innerHTML = textoOriginal; }, 5000); } }); }); })(); </script> </body> </html>