Actualizado el 18 de agosto de 2026 · Escrito y verificado por Josué Pérez Suay, CEO de OrbitaClick
Una web en WordPress no «se satura» por tener muchas visitas. Se satura porque agota un recurso concreto, y casi siempre es el mismo: los procesos PHP simultáneos que tu hosting te permite ejecutar.
La ecuación que lo explica todo: capacidad ≈ procesos PHP disponibles ÷ tiempo de respuesta. Con 10 procesos y 400 ms de TTFB soportas unas 25 peticiones/segundo. Con los mismos 10 procesos y 2 s de TTFB, solo 5. El hosting no ha cambiado: tu web es cinco veces más pesada.
Por eso el orden correcto es: 1) caché de página que evite que la petición llegue a PHP · 2) matar lo que consume PHP sin aportar nada (wp-cron en cada carga, bots, Heartbeat, ataques a wp-login) · 3) limpiar lo que ejecuta PHP más lento (opciones autoload, consultas sin índice, plugins pesados) · 4) y solo entonces, ampliar el hosting.
Cambiar de hosting antes de hacer los tres primeros pasos es pagar más por el mismo problema.
«Se nos satura la web» es una de las frases que más escuchamos, y casi nunca significa lo que el cliente cree. En la mayoría de los casos no hay un pico de tráfico: hay una web que consume diez veces más recursos de los que debería por cada visita, y un servidor que aguanta hasta que llega un martes cualquiera con cincuenta usuarios a la vez.
Este artículo va de lo segundo. Qué se agota exactamente, cómo comprobarlo con datos en menos de veinte minutos y en qué orden arreglarlo para no gastar dinero en el sitio equivocado.
Qué significa realmente que una web «se satura»
«Saturación» no es un estado técnico: es un síntoma. Y cada síntoma apunta a un recurso distinto agotado. Empieza siempre por identificar cuál, porque el arreglo cambia por completo.
| Lo que ve el usuario | Qué se ha agotado | Dónde mirar |
|---|---|---|
| Error 503 «Service Unavailable» | No queda ningún proceso PHP libre para atender la petición | Métricas de recursos del panel de hosting (procesos, entry processes, workers) |
| Error 508 «Resource Limit Is Reached» | Has tocado el techo del plan: CPU, memoria o procesos simultáneos | Uso de recursos en cPanel / panel del hosting, por horas |
| «Error al establecer una conexión con la base de datos» | Conexiones MySQL agotadas o el servicio de base de datos caído | Registros de MySQL, límite de conexiones del plan |
| La web carga, pero tarda 6-10 s | Nada agotado todavía: PHP tarda demasiado por petición. Es el aviso previo | TTFB en el panel de red del navegador, Query Monitor |
| Error 500 intermitente | Memoria PHP agotada o un fatal error en un plugin | error_log del hosting y debug.log |
| Timeout en el escritorio, la portada bien | admin-ajax.php o wp-cron.php comiéndose los procesos |
Logs de acceso, filtrando por esos dos archivos |
La causa raíz que casi nadie mira: los procesos PHP
Aquí está el 80 % de las «saturaciones» de WordPress, y es puramente aritmético.
Cada visita que no se sirve desde caché ocupa un proceso PHP durante todo el tiempo que tarda en generarse la página. Tu plan de hosting te da un número limitado de esos procesos. Cuando se ocupan todos, la petición número 11 se queda esperando y el usuario ve un 503.
Escenario A — web optimizada
10 procesos PHP disponibles · TTFB de 400 ms por página generada
Capacidad ≈ 10 ÷ 0,4 s = 25 peticiones dinámicas por segundo (unas 1.500 por minuto)
Escenario B — misma web, sin optimizar
10 procesos PHP disponibles · TTFB de 2 s por página generada
Capacidad ≈ 10 ÷ 2 s = 5 peticiones dinámicas por segundo (unas 300 por minuto)
📉 Mismo hosting, mismo precio: 5 veces menos capacidad. El cuello de botella no era el plan.
Y ahora la parte que multiplica: si además tienes una caché de página funcionando bien, la mayoría de las visitas no llegan nunca a PHP. Se sirven como HTML estático, en milisegundos, sin ocupar ningún proceso. Con un 90 % de aciertos de caché, solo una de cada diez visitas compite por esos 10 procesos.
🎯 La conclusión operativa: antes de ampliar el plan, mide tu TTFB y tu tasa de acierto de caché. Casi siempre hay un factor 5-10 de mejora gratis ahí dentro. Después, si sigue haciendo falta, amplías. Ese orden ahorra dinero todos los meses.
Las 8 causas reales, ordenadas por frecuencia
Este es el orden en el que las encontramos auditando WordPress de clientes, no el orden en el que aparecen en los artículos genéricos.
1. Caché de página inexistente o esquivada sin darte cuenta
Tener WP Rocket instalado no significa tener caché funcionando. Hay rutas que por diseño nunca se cachean y que, si reciben tráfico, van directas a PHP:
- Búsquedas internas (
?s=…): cada consulta distinta es una página única, imposible de cachear. Un bot que rastrea el buscador te genera miles de peticiones dinámicas. - URLs con parámetros de campañas o filtros (
?utm_…,?orderby=…,?filter_…): si no están normalizadas, cada variante es una entrada de caché nueva o un fallo de caché. - Carrito y checkout de WooCommerce: no se pueden cachear. Con una tienda activa, ese tráfico es 100 % dinámico.
- Usuarios logueados: por defecto se les sirve la página generada. En un sitio con área privada o con muchos administradores, es carga real.
2. wp-cron.php ejecutándose en cada carga de página
WordPress no tiene un cron de verdad: simula las tareas programadas comprobándolas en cada visita. En un sitio con poco tráfico da igual; en un sitio con tráfico, o con muchas tareas encoladas, se convierte en una sobrecarga constante y aleatoria.
La solución que recomienda la propia documentación de WordPress es desactivar el cron por visita y engancharlo al planificador de tareas del sistema:
# En wp-config.php
define( 'DISABLE_WP_CRON', true );
# Y en el cron del servidor, cada 5 minutos:
*/5 * * * * wget -q -O - https://tudominio.com/wp-cron.php?doing_wp_cron
3. admin-ajax.php y la API Heartbeat
Cada pestaña abierta del escritorio de WordPress lanza peticiones periódicas a admin-ajax.php. Cada una es un proceso PHP. Con cinco personas del equipo trabajando a la vez y varios plugins que también usan AJAX, es carga permanente que no genera ni una visita.
4. Bots, crawlers y rastreadores de IA
El tráfico de bots ya no es marginal. A los buscadores clásicos se han sumado los rastreadores de los modelos de lenguaje, y algunos rastrean con mucha más agresividad que Google. Si además caen en el buscador interno o en URLs con parámetros, cada petición es dinámica.
Esto no significa bloquearlos a todos: los rastreadores de IA son justamente los que te citan. Significa controlarlos: robots.txt explícito, bloqueo de las rutas que no aportan nada (buscador interno, filtros infinitos, calendarios) y cortar en el firewall solo los que no aportan tráfico ni citas.
5. Ataques de fuerza bruta a wp-login.php y xmlrpc.php
No hace falta que el ataque tenga éxito para tirarte la web. Cada intento de login es una petición que arranca WordPress completo y consulta la base de datos. Unos cientos por minuto agotan los procesos de cualquier plan compartido.
xmlrpc.php es peor: permite agrupar cientos de intentos en una sola petición. Si no usas la app de WordPress ni Jetpack, desactívalo.
6. Opciones autoload infladas
WordPress carga en memoria, en cada petición, todas las opciones marcadas como autoload. Plugins mal programados dejan ahí cachés, logs y arrays gigantes. Hemos visto tablas wp_options con varios megas de autoload: eso son varios megas leídos y deserializados en cada carga de página.
Desde WordPress 6.6 el core ya no autocarga por defecto las opciones que superan los 150 KB, y añadió un aviso en Salud del sitio. Pero las opciones creadas antes siguen marcadas como estaban, así que hay que limpiarlas a mano.
⚠️ Ojo con las consultas antiguas: WordPress 6.6 cambió los valores de la columna autoload. Ya no es solo yes/no: ahora también existen on, off, auto, auto-on y auto-off. Cualquier SQL que solo filtre por autoload = 'yes' te va a dar una foto incompleta.
7. Consultas lentas y tablas sin mantenimiento
Revisiones de entradas acumuladas durante años, transients caducados que nadie borra, wp_postmeta con cientos de miles de filas huérfanas de plugins desinstalados, tablas de logs que crecen sin límite. Ninguna de esas cosas tira la web por sí sola; todas juntas suben el TTFB, y el TTFB es el divisor de la ecuación de capacidad.
8. Plugins que ejecutan en cada petición
Constructores visuales pesados, sliders, «entradas relacionadas» que hacen una consulta sin índice, plugins de estadísticas que escriben en la base de datos en cada visita, contadores de visitas. El patrón siempre es el mismo: trabajo hecho en tiempo de petición que debería estar precalculado o directamente no hacerse.
Diagnóstico en 20 minutos
Sin datos no hay diagnóstico. Este es el recorrido mínimo, en orden:
- Mira el uso de recursos por horas en tu panel de hosting. Busca si los picos coinciden con tráfico real, con la hora de los backups o con nada en absoluto. Si es «con nada», el culpable es un bot o una tarea programada.
- Mide tu TTFB con caché y sin caché. Abre la web en el navegador, mira el tiempo de la primera petición del documento en el panel de red y compáralo con una recarga forzada y con una URL con un parámetro aleatorio (que esquiva la caché). La diferencia entre ambos es lo que te está costando cada fallo de caché.
- Analiza el log de acceso. Es el paso que más gente se salta y el que más rápido da la respuesta:
# Top 20 IPs que más peticiones hacen awk '{print $1}' access_log | sort | uniq -c | sort -rn | head -20 # Top 20 user agents (aquí salen los bots) awk -F'"' '{print $6}' access_log | sort | uniq -c | sort -rn | head -20 # Cuánto te están golpeando en login y XML-RPC grep -c "wp-login.php" access_log grep -c "xmlrpc.php" access_log # Peticiones al buscador interno (nunca se cachean) grep -c "/?s=" access_log - Comprueba el peso de las opciones autoload:
SELECT ROUND(SUM(LENGTH(option_value))/1024/1024, 2) AS mb, COUNT(*) AS num FROM wp_options WHERE autoload IN ('yes','on','auto','auto-on'); SELECT option_name, ROUND(LENGTH(option_value)/1024, 1) AS kb FROM wp_options WHERE autoload IN ('yes','on','auto','auto-on') ORDER BY LENGTH(option_value) DESC LIMIT 20;Como referencia práctica: por debajo de 1 MB no suele ser tu problema; por encima de 3-4 MB es una de las primeras cosas que arreglar.
- Instala Query Monitor (solo mientras diagnosticas) y carga la página más lenta. Te dice cuántas consultas hay, cuáles son las lentas y qué plugin las lanza. Es la herramienta que convierte «va lento» en «este plugin hace 340 consultas en la portada».
- Revisa la cola de tareas programadas. Con WP-CLI,
wp cron event listte muestra si hay tareas atascadas o duplicadas. Ywp transient delete --expiredlimpia lo caducado. - Contrasta con las estadísticas de rastreo de Search Console. Si Google reporta picos de tiempo de respuesta o errores de servidor en las mismas fechas, tienes la confirmación externa y además sabes que te está costando indexación.
Plan de contención cuando la web ya está caída
Si estás en el incidente ahora mismo, el orden es contener primero y diagnosticar después:
- Confirma que es saturación y no malware ni un fatal error. Mira el
error_log. Un 500 repetido con la misma traza es un plugin, no un pico de tráfico. - Activa el nivel de caché más agresivo que tengas disponible y purga. Si tu hosting tiene caché a nivel de servidor (LiteSpeed, Varnish, NGINX FastCGI), asegúrate de que está sirviendo, no solo activado.
- Corta el sangrado obvio: bloquea las IPs y user agents que dominan el log, desactiva
xmlrpc.phpy protegewp-login.phpcon limitación de intentos. - Desactiva temporalmente los plugins no críticos, empezando por los de estadísticas, sliders y «relacionados». Uno a uno, midiendo, no todos a la vez.
- Sube el límite de recursos de forma temporal si tu hosting lo permite, para recuperar el servicio mientras arreglas la causa. Temporal significa temporal.
- Solo cuando la web está estable, haz el diagnóstico completo del apartado anterior y arregla la causa. Si te quedas en el paso 5, esto vuelve a pasar el mes que viene.
⚠️ Antes de tocar nada en producción, backup. No «el hosting hace backups»: un backup que puedas restaurar tú, verificado, de antes de tus cambios. Sin punto de retorno claro, cualquier intervención de urgencia puede empeorar el incidente.
La mayoría de estas causas no aparecen de golpe: se acumulan porque nadie revisa la web con método. Si prefieres que esto lo vigile alguien de forma continua, es justo lo que cubre nuestro mantenimiento web WordPress. Y si lo que necesitas es una intervención puntual para desatascar algo concreto, tienes el soporte web por horas.
Cuándo el hosting sí es el problema
Hay casos en los que ampliar es lo correcto. La forma de saberlo es esta: si tu TTFB con caché es bueno, tu tasa de acierto es alta, no hay bots descontrolados y aun así tocas el techo de recursos, entonces el plan te queda pequeño. Ahí sí toca mover.
| Situación | Qué necesitas | Señal para dar el salto |
|---|---|---|
| Web corporativa, tráfico estable, sin tienda | Compartido de calidad con caché a nivel de servidor | Si nunca tocas el límite, no cambies nada |
| Tienda online con pedidos diarios | Plan con más procesos PHP y caché de objetos (Redis o Memcached) | Checkout lento en horas punta, aunque la portada vaya bien |
| Picos previsibles (campañas, rebajas, prensa) | Recursos elásticos o CDN con caché completa de página | Cada campaña de Ads te tira la web |
| Web con área privada o muchos usuarios logueados | Caché de objetos persistente. La caché de página no te sirve | El escritorio va lento con varias personas dentro |
| Multisite o varios proyectos en la misma cuenta | Aislamiento por sitio. Un vecino ruidoso te afecta | Caídas que no correlacionan con tu propio tráfico |
🔧 Nuestro criterio técnico, por si te sirve de referencia: objetivo de LCP por debajo de 2,5 s y carga total por debajo de 2 s en móvil 4G. Si esos números se cumplen, la saturación deja de ser un tema recurrente. Lo desarrollamos en nuestra guía de Core Web Vitals reales.
Qué NO es saturación (aunque se parezca)
| Síntoma | Diagnóstico probable | Qué hacer |
|---|---|---|
| Picos de CPU sin tráfico, ficheros raros, redirecciones extrañas | Malware. Un WordPress infectado suele consumir recursos enviando spam o minando | Desinfección y recuperación, no ampliar el plan |
| Caída total justo después de actualizar | Incompatibilidad de plugin o tema | Restaurar backup y actualizar en staging |
| La web no resuelve en ningún sitio, sin errores en el log | DNS o dominio caducado | Comprobar registrador y zona DNS |
| Lenta solo para ti, rápida para el resto | Problema de red o caché local | Probar desde otra red y en incógnito |
| Pico exacto todos los días a la misma hora | Backup del hosting o tarea programada pesada | Mover la ventana de backup a horario valle |
Errores que vemos una y otra vez
| Error | Por qué duele | Arreglo |
|---|---|---|
| Ampliar el hosting como primera medida | Pagas más cada mes y el consumo por visita sigue igual | Caché y TTFB primero. Ampliar solo con datos |
| Instalar tres plugins de caché a la vez | Se pisan entre ellos y provocan errores intermitentes difíciles de diagnosticar | Uno solo, bien configurado |
Bloquear todos los bots en robots.txt |
Cortas también a los rastreadores que te citan en IA y a Google | Bloquear rutas inútiles, no rastreadores útiles |
| Dejar Query Monitor activo en producción | Es una herramienta de diagnóstico: añade carga en cada petición | Activarlo, medir, desactivarlo |
| No tener monitorización de caídas | Te enteras cuando un cliente te llama, con horas de pérdida | Monitor externo con aviso inmediato |
| Backups que nunca se han restaurado | Un backup sin probar no es un backup, es un fichero | Prueba de restauración periódica en staging |
Preguntas frecuentes
¿Cuántas visitas hacen falta para saturar un WordPress?
No hay una cifra: depende de cuántas de esas visitas llegan a PHP y de cuánto tarda tu web en generar una página. Una web optimizada con buena caché aguanta órdenes de magnitud más tráfico que la misma web sin caché, en el mismo hosting. La pregunta útil no es «cuántas visitas aguanto» sino «cuántas peticiones dinámicas por segundo puedo servir», y eso se calcula dividiendo tus procesos PHP entre tu TTFB.
¿Cambiar de hosting compartido a VPS soluciona la saturación?
Solo si el cuello de botella era realmente el plan. Si tu web consume 2 segundos de PHP por página, en un VPS consumirá los mismos 2 segundos: habrás multiplicado la capacidad por dos o por tres pagando bastante más, en lugar de multiplicarla por diez optimizando. Mide primero TTFB, tasa de acierto de caché y tráfico de bots. Si esos tres están bien y sigues tocando techo, entonces sí, amplía.
¿Es normal que la web vaya lenta solo en el escritorio de WordPress?
Es muy habitual y es un síntoma claro. El escritorio no se cachea nunca, así que cada clic es una petición dinámica completa. Si va lento ahí y bien en la parte pública, tu problema es el rendimiento real de PHP y de la base de datos, no la caché. Mira las peticiones a admin-ajax.php, la cola de tareas programadas y el peso de las opciones autoload.
¿Desactivar wp-cron.php rompe algo?
No, si lo sustituyes por un cron real del servidor. Lo que se desactiva con DISABLE_WP_CRON es la comprobación en cada visita, no las tareas: estas siguen ejecutándose cuando el cron del sistema llama al fichero. Lo que sí rompe cosas es desactivarlo y no configurar el cron: entonces dejan de ejecutarse publicaciones programadas, copias de seguridad y actualizaciones automáticas.
¿Cómo sé si es saturación o si me han hackeado?
Tres señales apuntan a malware más que a saturación: consumo alto de CPU sin tráfico que lo justifique, ficheros modificados o nuevos en wp-content con fechas que no corresponden a ninguna actualización, y peticiones de salida a dominios que no reconoces. Revisa el error_log y compara los ficheros del core con los originales. Si hay indicios, el arreglo no es ampliar recursos: es limpiar la infección.
¿Qué caché necesito: de página o de objetos?
Las dos hacen cosas distintas y no se sustituyen. La caché de página guarda el HTML final y evita que la petición llegue a PHP: es la que da el salto grande y sirve para tráfico anónimo. La caché de objetos (Redis o Memcached) guarda resultados de consultas a la base de datos y acelera lo que sí tiene que pasar por PHP: escritorio, carrito, usuarios logueados. Si tienes tienda o área privada, necesitas ambas.
¿Cada cuánto hay que revisar esto?
Una revisión trimestral es suficiente en una web estable: peso de la base de datos, opciones autoload, tareas programadas, tasa de acierto de caché y Core Web Vitals de campo. Y siempre antes de una campaña que vaya a traer tráfico de golpe: no hay peor momento para descubrir el techo de tu hosting que el día que empiezas a pagar por visitas.
📚 Fuentes consultadas
- Make WordPress Core — Options API: desactivación de autoload para opciones grandes (umbral de 150 KB en WordPress 6.6 y nuevos valores de la columna
autoload) - WordPress Developer Resources — Enganchar WP-Cron al planificador del sistema
- WordPress Developer Resources — Heartbeat API
- web.dev — Core Web Vitals (umbrales de LCP, INP y CLS)
- Query Monitor (herramienta de diagnóstico de consultas y hooks)
¿Tu WordPress se satura de verdad o solo va lento?
Hacemos el diagnóstico completo: log de acceso, TTFB, caché, autoload, consultas y bots. Te decimos qué recurso se está agotando y en qué orden arreglarlo, con el impacto de cada paso. Soporte técnico a 50 €/hora + IVA, planes de mantenimiento con revisiones periódicas y, si resulta ser malware, desinfección y recuperación de WordPress en 4-24 horas sin permanencia.

Josué Pérez Suay, CEO y fundador de OrbitaClick, agencia de marketing digital en Alicante desde 2018. Citado en 25 artículos de Computer Hoy como fuente experta.


