Publicado el · Por Jesús Iturbide, en colaboración con el equipo de Marketing España · Lectura: 20 min
seonidas.com, la web de SEO técnico de la cooperativa, dejó WordPress el 3 de septiembre de 2026 y se sirve como sitio estático generado con Astro. Aquí va lo que pasó: la medición que contradijo la premisa, lo que se rompió al conmutar, lo que Google no veía y lo que puedes comprobar en la propia web.
LO ESENCIAL, EN CORTO
- Antes de cambiar de tecnología medimos el origen: WordPress servía la portada en 9,5 milisegundos. La lentitud que se le atribuía estaba aguas abajo. Se migró igual, por otras razones.
- Lo que más costó no fue Astro. Fueron las URL que vivían donde nadie miraba, una caché del CDN con caducidad heredada y nueve cifras de muestra a punto de publicarse como propias.
- Google no la veía: 2 impresiones y 0 clics en 180 días. Hoy tiene 43 URL en el sitemap y todas las páginas que venden abiertas al buscador. Los clics aún no han llegado, y no prometemos cuándo.
De dónde venía seonidas.com
seonidas.com es la web de consultoría de SEO técnico de la cooperativa, y hasta el 3 de septiembre de 2026 era un WordPress con tema propio: 26 plantillas PHP, cuatro plugins y un motor de SEO a medida que emitía título, descripción, canónica, robots y datos estructurados de cada pieza. Tenía 50 artículos entre publicados y programados, 23 páginas y cuatro herramientas interactivas. Sobre el papel, una web hecha.
Sobre el papel. A finales de agosto, quien la dirige la puntuó con un uno sobre diez, y tenía razón en lo visible: la portada medía 15.116 píxeles de alto porque una plantilla volcaba un documento entero que ya existía en otra página. Se recortó a 10.705 píxeles en una tarde. Lo grave no se veía.
Lo grave era que Google no podía mirarla. El 2 de septiembre, una medición sobre el HTML servido encontró que ninguna de sus páginas era indexable —portada, servicios y contacto incluidos— y que 36 de sus 50 artículos llevaban su propia etiqueta de noindex: de los 24 publicados, solo 13 estaban abiertos al buscador. No era una decisión. Era estado heredado de la construcción, un candado por pieza que nadie había abierto porque nadie lo había medido. Search Console lo confirmó después con la cifra más honesta de todo este artículo: 2 impresiones y 0 clics en 180 días, con una sola consulta, la de su propia marca.
Ese es el punto de partida real. No una web lenta que había que acelerar, sino una web invisible que había que abrir. Y, después de abrirla, decidir sobre qué tecnología se sostenía.
La medición que desmontó la premisa
La pregunta que llegó fue «¿la pasamos a Astro para que vaya más rápida?». Antes de contestar medimos, y la medición dijo que la premisa estaba mal. Desde el propio servidor, sin intermediarios, WordPress servía la portada en 9,5 milisegundos. Desde fuera, el tiempo hasta el primer byte rondaba los 384 milisegundos: seis tomas y la mediana, no una toma suelta. Entre medias había una sola pieza, el CDN del alojamiento, que en su propia cabecera de respuesta declaraba haber esperado al origen casi medio segundo.
Para comparar teníamos otra web del grupo, ya en Astro, en el mismo alojamiento y sin pasar por el CDN: 208 milisegundos. La ventaja coincidía exactamente con quién pasaba por el CDN, no con la tecnología. Migrar por rendimiento no iba a dar lo que se buscaba.
Una primera lectura nuestra decía que las dos webs de WordPress de ese servidor rendían muy distinto: 160 frente a 594 milisegundos. Con seis tomas y la mediana, la diferencia desapareció. Eran iguales. Una medición sin repetición no es una medición, y si nos hubiéramos quedado con la primera habríamos «arreglado» una web que no estaba rota.
Se migró igualmente, y conviene decir por qué, porque no fue por velocidad. Fue por control: un sitio estático entrega exactamente el HTML que se ha construido, sin plugins que inyecten código ni caché que sirva versiones viejas, y el escaparate de un servicio de SEO técnico tiene que poder enseñarse línea a línea. Y fue por el calendario: con 38 artículos programados hasta noviembre hacía falta un motor de estados (publicado, borrador, programado) que ya existía en la otra web del grupo y se podía replicar. Decisión tomada con el dato delante, no a pesar de él.
Hay una rectificación que también forma parte del caso. Aquella medición del 2 de septiembre nos llevó a recomendar desactivar el CDN. Dos días después, al repetirla, el servidor estaba con una carga de 57 y hasta la web sin CDN tardaba 2,6 segundos: no se podía concluir nada, y la primera toma tampoco separaba el CDN de la carga del nodo. La recomendación se retiró. Un CDN delante de un sitio estático es su mejor caso de uso, y el CDN se quedó.
Qué se llevó a Astro y qué hubo que reconstruir
Se migraron los 50 artículos y 26 páginas a ficheros Markdown, con los metadatos propios de cada pieza (título SEO, descripción, robots, canónica, tipo de schema, frase objetivo, nota editorial y el rastro de dónde venía cada texto) copiados uno a uno al frontmatter. El esquema de la colección los declara obligatorios: si uno desaparece del origen, la construcción falla en vez de perderlo en silencio. Ese es el primer cambio de mentalidad que trae un sitio estático. El error salta antes de publicar, no después.
El cuerpo de los artículos no se convirtió a Markdown. Ya era HTML limpio, y convertirlo habría perdido las anclas de los encabezados que el índice lateral necesita y la estructura de las tablas. Se llevó tal cual. El primer build generó 14 páginas en 10,45 segundos y una portada de 16 kilobytes que sirve las imágenes por ruta; incrustadas, la misma portada pesaba un megabyte.
Lo que WordPress hacía por su cuenta hubo que reponerlo a mano. Esta lista es la que conviene tener delante antes de migrar cualquier web a estático:
| En WordPress lo hacía | En Astro hubo que | Qué habría pasado sin hacerlo |
|---|---|---|
| El plugin de SEO: sitemap, robots.txt y RSS | Generarlos de la misma fuente que las rutas, excluyendo lo que va en noindex | Una web «de SEO técnico» sin sitemap el día uno |
| El planificador: publicar cada pieza a su hora | Un motor de estados y una tarea que construye y despliega cada mañana | Los 38 artículos programados no habrían salido nunca |
| El tema: las cuatro herramientas interactivas | Reescribirlas en JavaScript de cliente y probarlas en un navegador real | Cuatro páginas del laboratorio muertas |
| El formulario de contacto | Un PHP plano que guarda cada consulta antes de intentar el correo | Un formulario que se ve y no entrega |
| El escritorio: editar y pulsar «publicar» | Construir en local y subir por SSH, con más de diez comprobaciones automáticas en cada despliegue | Nada. Aquí es donde se gana el control |
Las URL vivían donde nadie miraba
Cada artículo guardaba un metadato que decía que su ruta era «/blog/» seguido del slug, y la primera auditoría de la migración se fió de él: «los artículos ya vivían en /blog/». Era falso. El WordPress vivo servía los 50 artículos en la raíz, y así los tenía Google en su sitemap; la ruta con «/blog/» hacía una redirección hacia la raíz, no al revés. Los «156 enlaces rotos» que esa auditoría había contado apuntaban a la dirección real. Sin darnos cuenta a tiempo, la conmutación habría mandado a un error 404 todo lo indexado.
La salida fue mantener «/blog/» como ruta nueva (ya estaba en las 156 referencias reescritas y en el sitemap) y escribir 50 redirecciones permanentes de la raíz a «/blog/» en cada construcción, con una comprobación que no deja subir el sitio si faltan. Hoy siguen vivas: puedes pedir cualquier slug antiguo y ver el 301.
El día del cambio: lo que falló
Se conmutó el 3 de septiembre a las 22:12 UTC. El guion preveía comprimir WordPress antes de retirarlo, y falló dos veces. El servidor compartido estaba con una carga de entre 50 y 70, y a esa carga mata los procesos largos: la compresión murió a los 64 megabytes de 229, y la exportación de la base de datos estuvo diez minutos sin escribir un byte, porque para hacerla arranca WordPress entero.
Lo que funcionó fue lo contrario de lo previsto: mover en vez de comprimir. Mover 229 megabytes dentro del mismo disco es instantáneo y los conserva íntegros, así que WordPress sigue ahí, fuera de la raíz pública, con un fichero que explica cómo volver atrás. La base de datos no se tocó, porque un sitio estático no la usa; su volcado, hecho después de retirar WordPress, tardó 25 segundos y ocupa 21 tablas.
Y entonces la portada no cambió. Todas las rutas servían ya el sitio nuevo salvo la primera, que el CDN siguió entregando desde su caché durante horas. La causa no era el CDN en sí: era la caducidad que WordPress le había dado a esa respuesta. El objeto guardado decía siete días —cortesía del plugin de caché de WordPress—, mientras el sitio nuevo declara 600 segundos. Se resolvió solo cuando esa entrada caducó, y ya no puede repetirse: la entrada nueva se guarda con los diez minutos de Astro.
LA NOCHE DEL CAMBIO
7 días
de caducidad en la portada que el CDN tenía guardada, heredada del plugin de caché de WordPress. Las cabeceras que veíamos describían ese objeto, no al servidor.
HOY
600 s
declarados por el sitio estático. Cualquiera puede leerlo pidiendo la cabecera de la portada: «Cache-Control: public, max-age=600».
La lección de esa noche cabe en una frase: las cabeceras que llegan a través de un CDN describen al objeto que el CDN guardó, no al servidor que responde ahora. Para saber qué hace el origen hay que preguntarle al origen, resolviendo el dominio contra su dirección IP y saltándose al intermediario. Probamos antes todas las formas de purgar esa entrada desde fuera, y ninguna funcionó; la única purga real vive en el panel del alojamiento.
Lo que la auditoría encontró al día siguiente
El 4 de septiembre se auditaron las 41 páginas construidas, 31 de ellas indexables, sobre la web viva y no sobre la copia local. Lo técnico estaba bien: tiempo hasta el primer byte entre 52 y 191 milisegundos, LCP entre 564 y 1.828 milisegundos, desplazamiento de diseño por debajo de 0,002, un solo H1 y un solo grafo de datos estructurados por página, cero títulos duplicados, cero imágenes sin texto alternativo y las 50 redirecciones vivas.
Lo editorial, no. La página «Sobre» no recibía ni un enlace interno: publicada e inalcanzable. Nueve de los diez servicios no enlazaban a ningún análisis del blog. Los servicios tenían 417 palabras de media frente a las 1.481 de los artículos, o sea que lo que vende era lo más flaco. Veintiuna páginas de las 31 no citaban una sola fuente externa. Y 65 piezas llevaban dentro la nota «revisión humana y autoría pendientes», doce de ellas publicadas, mientras la política editorial de la propia web decía que nada generado se publica sin esa revisión. Una web que se contradecía a sí misma.
Hubo algo peor, y lo contamos porque es el tipo de fallo que solo se caza mirando. La portada de la previa traía nueve cifras de resultados que venían del boceto de diseño («1.247 palabras posicionadas», «562 dominios de referencia», un gráfico de la posición 50 a la 1) y se estaban sirviendo como propias. Ninguna medida. En una web que se vende como consultoría de SEO técnico. La guía de diseño del proyecto lo prohibía por escrito, y la nota interna de la sesión anterior afirmaba que no se habían publicado. Se retiraron antes de conmutar y se sustituyeron por datos que la propia web cuenta al construirse: los análisis publicados, los enlaces comprados (cero) y las cookies antes del consentimiento (cero).
Todo lo demás se corrigió en la misma jornada, con el resultado medido antes y después por el mismo instrumento:
| Qué se midió | Antes | Después |
|---|---|---|
| Páginas huérfanas · con un solo enlace entrante | 1 · 8 | 0 · 0 |
| Frase objetivo en H1 / descripción / título (sobre 32 páginas) | 10 / 2 / 16 | 32 / 32 / 32 |
| Palabras de media en los servicios · el más corto | 420 · 373 | 939 · 902 |
| Servicios que enlazan a sus análisis | 1 de 10 | 11 de 11 |
| Tipos de datos estructurados | 5 | 7 (se añaden Service y FAQPage) |
| Imágenes sin srcset | 97 | 0 de 103 |
| Páginas sin un solo enlace saliente | 21 | 0 |
| Piezas con la nota de revisión pendiente | 65 | 0 |
| LCP en producción | 564 a 1.828 ms | 344 a 472 ms |
La nota interna del auditor pasó de 43,4 a 100 sobre 100, y conviene decir qué mide esa nota: el estado técnico y editorial de cada página, con una fórmula escrita por dimensión. No mide posiciones, tráfico ni autoridad. Un 100 ahí significa «no queda nada roto», no «ya posiciona». Sobre el FAQPage, un matiz que también hay que decir: Google dejó de mostrar el desplegable de preguntas en sus resultados el 7 de mayo de 2026, así que se mantiene por el valor semántico y para los sistemas de IA, sin prometer que se vea en la página de resultados.
Los umbrales oficiales de Core Web Vitals siguen siendo un LCP de 2,5 segundos, un INP de 200 milisegundos y un CLS de 0,1, medidos en el percentil 75 de las cargas de página. Fuente: web.dev, documentación de Google sobre Web Vitals (última actualización del 31 de octubre de 2024; comprobada el 6 de septiembre de 2026). seonidas.com mide hoy un LCP de 344 a 472 milisegundos en producción: por debajo del umbral con margen, aunque Google trata la experiencia de página como desempate, no como razón para posicionar.
Siete cosas que aprendimos
Ninguna de estas siete es nueva para quien haya migrado una web. Todas se nos olvidaron al menos una vez en este caso, y por eso van escritas.
- Mide el origen antes de culpar al gestor. Si el servidor sirve en milisegundos, el problema está aguas abajo: CDN, DNS, red. Cambiar de tecnología no arregla lo que no está en la tecnología.
- Un metadato no es una medición. El campo decía «/blog/» y la web servía en la raíz. Antes de afirmar dónde vive una URL se le pide al sitio vivo, y ahora lo hace el propio guion de conmutación como última comprobación.
- Las cabeceras detrás de un CDN hablan del objeto guardado. Veíamos «acierto de caché» y «siete días» y parecían del origen: venían dentro de la respuesta que el CDN guardó cuando el sitio todavía era WordPress.
- Una afirmación sobre el entregable no es una comprobación del entregable. «Las cifras del boceto no se han publicado» estaba escrito en una nota, y estaban en la previa. Se comprueba sobre el HTML construido con una búsqueda de esas cifras que no debe devolver nada, y esa búsqueda quedó en el guion.
- Una comprobación que nunca ha fallado no es una comprobación. Cada despliegue pasa más de diez puertas (cabecera, enlaces, consentimiento, redirecciones, formulario, accesibilidad, herramientas, grafo de datos, calendario, vigilancia y móvil), y cada una se probó inyectándole el defecto que debía cazar. Varias nacieron débiles: una aprobaba las herramientas con la lógica vacía y otra acusaba a un control accesible. Se arreglaron antes de fiarse de ellas.
- Una pieza no puede haberse modificado antes de existir. La migración escribió la fecha del día en las 50 piezas, y 39 se publican después de esa fecha. Solo dos eran visibles; las otras 37 habrían salido con la incoherencia dentro, una a una, hasta noviembre. Mientras nadie toque una pieza, su fecha de modificación es la de publicación, y una puerta del grafo lo comprueba.
- Con carga 70, un alojamiento compartido no va lento: mata procesos. Se mira la carga antes de cualquier operación larga, y si pasa de 20 se replantea para que no haga falta un proceso largo. Mover, no comprimir.
Lo que puedes comprobar tú mismo
Todo lo anterior son afirmaciones nuestras sobre nuestra propia web, así que aquí va la forma de comprobarlas sin fiarte de nosotros: qué decimos, cómo se verifica y lo que vimos el 6 de septiembre de 2026. Si algún día dejan de cumplirse, este artículo estará desactualizado y habrá que decirlo aquí.
| Afirmación | Cómo comprobarla | Lo que vimos |
|---|---|---|
| Ya no es WordPress | Ver el código fuente de la portada: no hay «wp-content» ni etiqueta de generador | HTML de 22,7 KB, con las hojas de estilo en «/_astro/» |
| El CDN sigue delante y con diez minutos de caché | Pedir las cabeceras de la portada | «Server: hcdn» y «Cache-Control: public, max-age=600» |
| Las URL antiguas redirigen | Pedir un slug de artículo sin «/blog/» | 301 hacia «/blog/…/»; «/wp-sitemap.xml» redirige a «/sitemap.xml» e «/index.html» a la portada |
| El sitemap existe y excluye lo que no se indexa | Abrir «/sitemap.xml» y contar | 43 URL, sin aviso legal, privacidad ni cookies |
| Hay una política de rastreadores de IA escrita | Abrir «/robots.txt» | OAI-SearchBot permitido, GPTBot bloqueado, y el motivo comentado dentro del fichero |
| Nada se mide antes del consentimiento | Abrir la portada y mirar las cookies antes de decidir | Consent Mode v2 con las cuatro señales de anuncios y analítica en «denied» por defecto |
| Seis cabeceras de seguridad | Pedir las cabeceras de cualquier ruta | HSTS a un año con subdominios, nosniff, X-Frame-Options, Referrer-Policy, Permissions-Policy y COOP |
Hay una página más que vale la pena abrir, «El grupo», porque explica lo que este artículo da por sabido: la cooperativa mantiene varias webs con marcas distintas y esa página dice qué resuelve cada una y a cuál escribir. Está escrita y enlazada desde el pie, no escondida. Es la forma honesta de tener cinco escaparates.
¿Astro o WordPress? Cuándo compensa cada uno
Ninguna de las dos es mejor en abstracto. Lo decide quién va a publicar, con qué frecuencia y cuánto control necesita sobre lo que sale. Después de esta migración, y de mantener los dos tipos de web en el grupo, así lo repartimos:
Astro compensa si…
- Publica un equipo técnico o una sola persona, y no le importa construir y desplegar en vez de pulsar «publicar»
- El HTML es el producto: quieres enseñar cada línea, sin plugins que inyecten nada
- La web no ejecuta nada en el navegador salvo lo imprescindible (aquí, el aviso de cookies y cuatro herramientas)
- Quieres que los errores salten antes de publicar: un campo que falta rompe la construcción, no la página
WordPress compensa si…
- Publican varias personas sin perfil técnico, desde el navegador y a cualquier hora
- Hay tienda, usuarios registrados, buscador interno o áreas privadas: lo dinámico es la web
- El cliente necesita cambiar textos sin pasar por nadie
- Un plugin bien elegido resuelve hoy lo que en estático habría que programar y mantener
Y lo que no cambia con la tecnología: redirecciones, sitemap, caché y enlazado interno se rompen igual en las dos si nadie los mide. Este caso lo demuestra, porque lo que más costó no fue Astro. Si vas a rediseñar sobre WordPress, el protocolo es el mismo y lo tenemos escrito en rediseñar la web sin hundir el posicionamiento. Si lo que necesitas es decidir tecnología para un proyecto nuevo, es una conversación de desarrollo web antes que de SEO. Y si la web ya existe y no aparece, empieza por saber si Google puede verla, que es lo primero que miramos en posicionamiento SEO.
El consenso del sector sitúa entre 3 y 6 meses el tiempo hasta ver resultados de un trabajo de SEO, según las 3.680 respuestas a una encuesta abierta de Ahrefs en LinkedIn y X. Fuente: Ahrefs, 2024. seonidas.com parte de 2 impresiones en 180 días: la línea base está tomada, la medición del efecto empieza ahora y no prometemos fecha.
Preguntas frecuentes
¿Astro o WordPress para mi web?
Lo decide quién publica y qué hace la web, no cuál está de moda. Si una o dos personas técnicas publican con calendario y quieres control total del HTML, un sitio estático con Astro es más simple de mantener y de auditar. Si publican varias personas sin perfil técnico, o hay tienda, usuarios o áreas privadas, WordPress sigue siendo la opción razonable. En el grupo mantenemos las dos por esa razón.
¿Migrar de WordPress a Astro hace perder posicionamiento?
No por la tecnología; sí por lo que la migración arrastra si no se mide. Lo que hunde posiciones es cambiar las URL sin redirigirlas, dejar el sitemap sin reponer o servir versiones viejas desde la caché. En este caso las tres cosas aparecieron, y las tres se cazaron antes de que Google las viera porque se comprobó sobre la web viva, no sobre lo que decían los metadatos.
¿Un sitio estático puede tener formulario de contacto y herramientas?
Sí, pero hay que construirlos aparte. Aquí el formulario es un PHP plano que guarda cada consulta antes de intentar enviar el correo, de modo que un fallo de correo no pierde el contacto, y las cuatro herramientas se reescribieron en JavaScript de cliente y se prueban en un navegador real en cada despliegue. Lo que en WordPress viene con un plugin, en estático se programa una vez y se verifica siempre.
¿Cuánto tarda Google en notar el cambio?
No lo sabemos todavía para esta web, y por eso no lo prometemos. La portada tardó unas horas en cambiar por la caché del CDN; el rastreo de las redirecciones y la indexación de las páginas nuevas van por tandas. La línea base está tomada (2 impresiones en 180 días) y el efecto se medirá contra ella a las ocho o doce semanas, que es el plazo mínimo antes de sacar conclusiones.
¿Tu web no aparece y no sabes si es la tecnología o algo más?
Antes de proponer un cambio, medimos: origen, CDN, indexación, redirecciones y caché. Con el dato delante te decimos si compensa migrar, rediseñar o solo abrir lo que está cerrado.
Sigue por aquí
- Rediseñar la web sin hundir el posicionamiento
- Web lenta: qué la frena de verdad y qué no vas a arreglar
- WordPress para empresas: cuándo conviene y cuándo no
Historial: 18 de septiembre de 2026 publicación original. Todas las cifras del caso proceden de mediciones propias fechadas entre el 30 de agosto y el 6 de septiembre de 2026, o de la web viva comprobada el 6 de septiembre de 2026; los datos externos son los umbrales de Core Web Vitals (web.dev, comprobado ese día) y la encuesta de plazos de Ahrefs (lista blanca del briefing). Próxima revisión prevista: a las doce semanas de la conmutación, con los datos de Search Console contra la línea base de 2 impresiones y 0 clics.

Marketing digital, SEO y desarrollo WordPress en Marketing España, Sociedad Microcooperativa, desde donde trabajo con pymes de toda España. Los artículos de este blog los escribo yo, en colaboración con el equipo.
