El negocio tiene una especialidad con mucho encaje comercial: la limpieza profunda y el rejuntado de piscinas. La web no la mencionaba. Lo que sí tenía eran los restos de un trabajo a medias:
Piscinas Chisvert:
De un WordPress abandonado a una web rápida y sin deuda técnica
Rediseño y migración de una empresa de piscinas de L'Eliana: de WordPress a un sitio estático, conservando dominio y URLs, con la calidad comprobada por tests automáticos y lanzado en 12 días.
Una web pequeña con mucho abandono
Piscinas Chisvert llevaba años con una web en WordPress que nadie cuidaba, y con un servicio estrella que no explicaba en ningún sitio.
- La página de contacto hablaba de otra empresa. Era un resto de plantilla con una razón social ajena, justo en la página que más importa para convertir.
- El banner de cookies mostraba marcadores sin sustituir en lugar de texto real.
- Faltaban descripciones en varias páginas, y muchas imágenes no tenían texto alternativo o tenían el nombre del archivo.
- 20 MB de fotos sin formatos modernos, mezcladas con imágenes de stock genéricas.
- Un blog vacío, con solo la entrada de ejemplo de WordPress ofrecida a Google como contenido.
- Plugins sin actualizar durante años en un sitio en producción.
- El correo de contacto no lo leía nadie. El cliente usaba otra cuenta y el correo de la web apuntaba a un servidor antiguo.
En total, 8 páginas reales y 97 URLs rastreables, entre sitemaps, feeds, imágenes y direcciones técnicas. No había métricas históricas de tráfico para comparar, así que este caso habla de lo que construí y de lo que medí en la web nueva.
Rehacerla, pero conservando lo que tenía valor
Se conserva el activo, no la implementación.
Antes de tocar nada comparé dos caminos: una web nueva completa en el mismo dominio, o mantener la actual y crear otro dominio solo para limpieza y rejuntado. Gana el primero:
- Especializar no exige otro dominio. Se consigue con URLs, navegación, copy y recorrido de conversión.
- Dos dominios reparten las señales de enlaces, reseñas y autoridad. Un solo negocio, una sola ficha de Google y una sola entidad.
- Parchear WordPress era más caro que rehacerlo. Actualizar años de plugins sin acceso al hosting ni entorno de pruebas es un riesgo sin red, y con 8 páginas no compensa mantener un CMS.
Se mantuvieron el dominio, la marca, la ficha de Google y las URLs con valor. Se cambió todo lo demás.
Un sitio estático, sin terceros y con el SEO dentro
Menos piezas, más control sobre el HTML y sobre lo que carga el navegador.
| Capa | Elección | Por qué |
|---|---|---|
| Framework | Astro, sitio estático | HTML limpio, cero JavaScript por defecto y control total del <head> y de los datos estructurados |
| Estilos | CSS propio con tokens | Sin librerías ni hojas de estilo bloqueantes |
| Imágenes | WebP con srcset | Tamaños por pantalla, incluido un recorte vertical para móvil |
| Tipografías | Autoalojadas | Se eliminan dos orígenes de terceros |
| Hosting y DNS | Cloudflare Pages y zona propia | Despliegue desde GitHub, previews por rama y un único panel |
| Correo | Cloudflare Email Routing | El correo corporativo llega por fin a la cuenta que el cliente sí usa |
| Analítica | GA4 con consentimiento propio | Nada no técnico carga antes de aceptar |
Tres principios desde el primer día: móvil primero (se verifica a 375 px, con botón de llamada siempre accesible), accesibilidad real (HTML semántico, foco visible, contraste revisado a mano) y contenido sin inventar cifras, química ni precios.
El SEO técnico va integrado en la construcción, no como una capa posterior: un propietario por intención de búsqueda, un <h1> por página, un hub propio para la limpieza y el rejuntado, y datos estructurados JSON-LD con nombre, dirección, teléfono y área de servicio definidos en un único sitio. Una sola página de zonas de servicio, en lugar de una por municipio, porque una página local solo se justifica cuando tiene contenido propio.
97 URLs antiguas, cada una con un destino decidido
Cambiar de WordPress a otra cosa sin perder lo que Google ya conoce.
Cada URL de la web antigua tiene un destino decidido y un test automático que lo comprueba: 17 responden 200 directamente, 69 redirigen con 301 y el resto da 404 de forma deliberada. Las reglas:
- Redirección 301 solo donde existe un equivalente real. Nunca masiva a la home, que Google trata como un error blando.
- 404 propio para lo que no tiene equivalente, como el blog de prueba, los feeds y las direcciones técnicas.
- Los sitemaps antiguos apuntan al nuevo, porque Search Console los tiene registrados.
El cambio de DNS y de correo se hizo con un guion de pasos y puntos de control automáticos, con vuelta atrás definida. Primero la zona DNS (de 26 registros importados, casi todos restos del servidor antiguo, quedaron 3, más DMARC), luego el correo, probado con un mensaje a la dirección real y otro a una inventada, y por último la web. El control final recorrió el sitio vivo: DNS, HTTPS, redirección de www, ausencia de noindex, sitemap y las 97 URLs antiguas una a una, con 0 fallos.
Un filtro que bloquea lo que no cumple
Un filtro que no has visto fallar no demuestra nada.
Cada cambio pasa por un conjunto de comprobaciones en CI antes de poder fusionarse:
| Filtro | Qué comprueba |
|---|---|
| Build | El sitio compila |
| Datos estructurados | El JSON-LD parsea, sus referencias resuelven y usa solo tipos y propiedades válidos de schema.org |
| Filtros estáticos | Enlaces internos, un <h1>, título y descripción dentro de límites, canonical, texto alternativo y sitemap |
| Redirecciones | Las 97 URLs antiguas dan lo decidido |
| Accesibilidad | axe-core sobre el sitio construido, y falla ante cualquier violación |
| Lighthouse móvil | Accesibilidad, SEO y buenas prácticas en 100, presupuestos de peso y cero peticiones a terceros |
Lo que más me interesa de este sistema es que probé cada filtro metiendo fallos a propósito. Los filtros estáticos detectaron los nueve fallos inyectados, el de datos estructurados los cuatro, y Lighthouse bloqueó un script de terceros y una imagen de 1,4 MB. Así sé que el filtro funciona, en lugar de suponerlo.
De 7,2 MB de fotos a una home de 142 KB
Todas las cifras son de la web nueva y se midieron, no se estimaron.
- Fotos de la home: de 7,2 MB a 946 KB en móvil. Una sola foto pesaba 2,1 MB para pintarse a 343 px.
- Carga inicial en móvil con conexión lenta: 142 KB y 10 peticiones, frente a unos 1,4 MB y 19 al principio. El vídeo del hero ya no entra en la carga: se inyecta después del evento
loady solo si procede, nunca con movimiento reducido, ahorro de datos o conexión lenta. - Fondos decorativos en diferido y galería de proyectos de 405 KB a 10 KB en la carga inicial.
- Cabeceras de caché corregidas: todo se servía con
max-age=0, incluso los ficheros con hash en el nombre.
El LCP de las cabeceras con foto bajó con un recorte vertical propio para móvil, en lugar de escalar una foto apaisada:
| Página | Antes | Después |
|---|---|---|
| Rejuntado de piscinas | 2,78 s | 2,11 s |
| Mantenimiento y reparación | 2,85 s | 2,40 s |
| Piscinas a medida | 2,48 s | 2,18 s |
| Limpieza y rejuntado | 2,41 s | 2,18 s |
| Zonas de servicio | 2,33 s | 1,95 s |
Mediana de tres pasadas con el móvil lento simulado de Lighthouse. Por encima de 2,5 s el LCP deja de considerarse bueno.
Lo que salió mal por el camino
Un caso sin tropiezos no se lo cree nadie.
- El primer inventario se quedó corto. Faltaban 11 imágenes que solo aparecían dentro de hojas de estilo y estilos en línea, que un rastreador que solo sigue enlaces no ve. Lo cazó el cruce con un inventario anterior.
- Una medición estaba mal. La home salió en 74 KB porque la prueba era local, con las tipografías todavía en Google y en caché. Al autoalojarlas salieron 91 KB. Desde entonces comparo siempre con caché fría.
- El póster del vídeo era otra piscina. No se notaba porque el vídeo arrancaba solo. Al diferir el vídeo, se vio entero en conexión lenta. Ahora es el primer fotograma del propio vídeo y pesa 30 KB en vez de 101.
play()se rechaza en pestañas en segundo plano. Quien abría la web en una pestaña nueva veía el vídeo congelado. Se arregló activandoautoplaypor JavaScript en el momento de enganchar.- El aviso a IndexNow no llegó a tiempo en la primera ejecución. Esperó 15 minutos a que el dominio sirviera la web nueva y no envió nada. Se relanzó y funcionó.
- La caché DNS local guardó un «sin IPv4» durante el cambio y hubo que vaciarla para ver la web desde mi propio equipo.
- Decidí sin datos de Search Console. Las auditorías previas no sustituyen a las métricas reales, así que dejé abiertas las decisiones que dependían de ellas, como el slug definitivo de la página de reparación.
Lo que puedo afirmar a día de hoy
Lanzada el 24 de septiembre de 2026.
Web
De 8 páginas en WordPress a 14 páginas estáticas, con un hub propio de limpieza y rejuntado y 12 días entre el primer commit y el lanzamiento.
Velocidad y peso
Home de 142 KB con conexión lenta, fotos de 7,2 MB a 946 KB y LCP entre 1,95 y 2,40 s en móvil lento simulado.
Calidad comprobada
Lighthouse móvil en 100 en accesibilidad, SEO y buenas prácticas, 0 violaciones de axe y cero peticiones a terceros antes de aceptar cookies.
Migración y operativa
Las 97 URLs antiguas con destino verificado, correo corporativo funcionando, Search Console con propiedad de dominio y GA4 midiendo llamadas, WhatsApp y correo.
Lo que todavía no puedo afirmar es una mejora medida de tráfico, posiciones o llamadas: la web es reciente y aún no hay datos suficientes. Actualizaré este caso con Search Console y GA4 cuando haya historial, a los 60 o 90 días del lanzamiento.
Mención de Honor
Testimonio
"Mi web ahora es más moderna, mi correo corporativo funciona sin problemas y ya estoy subiendo posiciones en Google gracias al SEO."
¿Tu web también necesita ponerse al día?
Si tu web actual es lenta, está desactualizada o no te trae clientes,
puedo rehacerla sin perder lo que ya has ganado en Google.