La caché almacena una copia del contenido generado para que pueda servirse más rápido en peticiones posteriores, sin tener que regenerarlo desde cero. Para WordPress, esto significa saltarse la ejecución de PHP y las consultas a la base de datos en vistas de página repetidas. Una página WordPress que tarda 800 ms en generarse desde cero puede servirse en menos de 50 ms cuando está cacheada. La caché es una de las optimizaciones de mayor impacto que puedes aplicar a cualquier sitio WordPress.
Los cinco tipos de caché en WordPress
La caché en WordPress no es una sola cosa. Hay cinco capas distintas, cada una trabajando en un punto diferente del ciclo de petición. Entender qué hace cada una te ayuda a elegir la estrategia de caché adecuada para tu sitio.
Caché del navegador
La caché del navegador es la primera capa y funciona enteramente en el dispositivo del visitante. Cuando un navegador descarga un archivo CSS, una imagen o un archivo JavaScript, almacena una copia local. En la siguiente carga de página, el navegador comprueba si la copia cacheada sigue siendo válida (basándose en las cabeceras Cache-Control, Expires y ETag) y se salta la descarga por completo si lo es. Esto elimina peticiones de red y hace que las visitas posteriores se sientan casi instantáneas para visitantes recurrentes.
Controlas la caché del navegador mediante cabeceras de respuesta HTTP. Las más importantes son:
Cache-Control: max-age=31536000: Indica al navegador que cachee el archivo durante un año (31.536.000 segundos). Se usa para activos estáticos versionados que reciben un nuevo nombre de archivo cuando cambian.Cache-Control: no-cache: El navegador debe verificar con el servidor antes de usar la copia cacheada. El servidor puede responder con "304 Not Modified" si el archivo no ha cambiado, ahorrando ancho de banda.Cache-Control: no-store: El navegador nunca debe cachear esta respuesta. Se usa para contenido sensible o muy dinámico.
Caché de página
La caché de página es la mayor mejora de rendimiento para la mayoría de los sitios WordPress. Este es el problema que resuelve: en cada petición de página, WordPress carga su núcleo, inicializa la conexión con la base de datos, ejecuta decenas de consultas a la base de datos, procesa los hooks de los plugins y renderiza las plantillas del theme. Este ciclo PHP/MySQL tarda entre 200 ms y varios segundos según tu servidor y la complejidad de tu sitio. Y produce el mismo HTML para cada visitante anónimo.
Una caché de página almacena ese HTML después de la primera petición. Cuando el siguiente visitante solicita la misma página, el archivo HTML cacheado se sirve directamente desde el servidor web (o incluso desde un proxy inverso delante de él), saltándose por completo WordPress, PHP y la base de datos. La diferencia es drástica. En lugar de ejecutar 50-200 consultas a la base de datos y miles de líneas de PHP, el servidor simplemente lee un archivo y lo envía.
Caché de objetos
La caché de objetos se sitúa entre WordPress y la base de datos. WordPress consulta frecuentemente los mismos datos repetidamente dentro de una sola carga de página y entre cargas: opciones, metadatos de usuario, datos de entradas, transients. La caché de objetos almacena estos resultados de consultas en memoria (usando Redis o Memcached) para que no impacten en la base de datos cada vez.
WordPress tiene una caché de objetos integrada, pero por defecto solo funciona dentro de una sola petición (no persiste entre peticiones). Para obtener caché de objetos persistente, necesitas un plugin drop-in que conecte WordPress con Redis o Memcached. Las opciones populares incluyen Redis Object Cache y Object Cache Pro.
La caché de objetos es particularmente valiosa para sitios que no pueden usar caché de página completa, como tiendas WooCommerce con contenido personalizado, sitios de membresía o foros donde el contenido cambia frecuentemente.
Caché de opcode (OPcache)
Cada vez que PHP procesa un script, primero compila el código PHP legible por humanos en bytecode (instrucciones legibles por máquina). Este paso de compilación se repite en cada petición salvo que la caché de opcode esté habilitada. La extensión OPcache integrada en PHP almacena el bytecode compilado en memoria compartida, eliminando el paso de compilación para peticiones posteriores.
OPcache es un ajuste a nivel de servidor, no algo que configures a través de WordPress. La mayoría de entornos de hosting modernos tienen OPcache habilitado por defecto. Puedes verificarlo comprobando tu configuración de PHP (phpinfo) o preguntando a tu proveedor de hosting. OPcache por sí solo puede mejorar la velocidad de ejecución de PHP entre un 30% y un 50%.
Caché de CDN
Una CDN (Content Delivery Network) cachea tus activos estáticos en servidores edge distribuidos por todo el mundo. Cuando un visitante en Tokio solicita una imagen de tu sitio WordPress alojado en Ámsterdam, la CDN la sirve desde un servidor edge cercano en lugar de enrutar la petición hasta Ámsterdam. Esto reduce significativamente la latencia para los activos estáticos. Algunos proveedores de CDN como Cloudflare también ofrecen caché de página completa para WordPress mediante su función APO. Para más detalles, consulta nuestro artículo sobre Content Delivery Networks.
Cómo funciona la caché de página paso a paso
Como la caché de página tiene el mayor impacto, aquí tienes una mirada más cercana a cómo funciona en la práctica:
- Un visitante solicita
tudominio.com/sobre-nosotros/por primera vez. - WordPress procesa la petición normalmente: PHP se ejecuta, se consulta la base de datos, se renderiza la plantilla del theme y se genera el HTML.
- El plugin de caché guarda una copia del HTML terminado en el sistema de archivos (normalmente en
wp-content/cache/) o en memoria. - Un segundo visitante solicita
tudominio.com/sobre-nosotros/. - El plugin de caché intercepta la petición antes de que WordPress se cargue. Encuentra el archivo HTML cacheado y lo sirve directamente. PHP apenas se ejecuta y la base de datos no se toca.
- Cuando el contenido de la página cambia (se actualiza una entrada, se aprueba un comentario), la caché de esa página específica se invalida y la siguiente petición genera una copia nueva.
Comparación de plugins populares de caché de WordPress
Hay muchos plugins de caché disponibles para WordPress. Estos son los más utilizados y cómo se comparan:
- WP Rocket: Un plugin premium (desde 59$/año) ampliamente considerado la solución de caché más fácil de usar. Habilita caché de página, caché del navegador, compresión GZIP y carga diferida sin apenas configuración. WP Rocket también gestiona la minificación de CSS/JS, la optimización de la base de datos y se integra con Cloudflare para purgar la caché de la CDN. Es la mejor opción para propietarios de sitios que quieren un gran rendimiento sin pasar horas configurando.
- W3 Total Cache: Un plugin gratuito con una enorme variedad de funciones. Soporta caché de página, caché de objetos (Redis, Memcached, APCu), caché del navegador, integración con CDN y minificación. La desventaja es la complejidad. W3 Total Cache tiene decenas de páginas de ajustes, y una mala configuración puede romper tu sitio. Es potente pero más adecuado para desarrolladores o usuarios avanzados.
- WP Super Cache: Un plugin gratuito desarrollado por Automattic (la empresa detrás de WordPress.com). Se centra en la caché de página y mantiene las cosas simples. WP Super Cache genera archivos HTML estáticos y puede servirlos usando reglas mod_rewrite, lo que es muy rápido. Carece de las funciones avanzadas de WP Rocket y W3 Total Cache, pero es fiable y fácil de configurar.
- LiteSpeed Cache: Un plugin gratuito que ofrece un rendimiento excepcional cuando se usa con servidores web LiteSpeed. Soporta caché de página, caché de objetos, optimización de imágenes, minificación de CSS/JS e integración con CDN. Si tu hosting usa LiteSpeed (muchos hostings compartidos lo hacen), este plugin aprovecha la caché a nivel de servidor, que es más rápida que la caché basada en PHP. También funciona en Apache y Nginx, pero con funcionalidad reducida.
Soluciones de caché a nivel de servidor
Más allá de los plugins de WordPress, la caché también puede ocurrir a nivel de servidor, que suele ser más rápida porque intercepta las peticiones antes incluso de que PHP entre en juego:
- Varnish: Una caché de proxy inverso que se sitúa delante de tu servidor web. Varnish almacena respuestas de página completas en memoria y las sirve directamente para peticiones cacheadas. Es extremadamente rápido (tiempos de respuesta inferiores al milisegundo) y lo usan sitios WordPress de alto tráfico. La configuración requiere VCL (Varnish Configuration Language), que tiene una curva de aprendizaje.
- Nginx FastCGI Cache: Si tu servidor usa Nginx (como muchos hostings modernos de WordPress), la caché FastCGI almacena la salida completa de PHP y la sirve directamente desde Nginx para peticiones posteriores. Esto es más rápido que cualquier plugin de caché basado en PHP porque Nginx maneja la petición por completo sin invocar PHP. Muchos hostings WordPress gestionados (Kinsta, GridPane, SpinupWP) usan este enfoque.
- Caché de página completa con Redis: Algunas configuraciones usan Redis no solo para caché de objetos sino también para caché de página completa. El HTML cacheado se almacena en la memoria de Redis, y un pequeño script PHP o módulo Nginx lo sirve directamente. Esto combina la velocidad del almacenamiento en memoria con la flexibilidad de la invalidación de caché basada en claves.
Caché de objetos con Redis y Memcached
Para sitios WordPress que manejan cargas pesadas de base de datos, la caché de objetos persistente puede ser transformadora. Así se comparan las dos opciones principales:
- Redis: La opción más popular para WordPress. Redis almacena datos en memoria y soporta tipos de datos complejos (cadenas, hashes, listas, sets). Puede persistir datos en disco, soporta replicación y puede usarse tanto para caché de objetos como para almacenamiento de sesiones. El plugin Redis Object Cache es la forma más común de conectar WordPress con Redis.
- Memcached: Un sistema de caché en memoria más antiguo y simple. Memcached es rápido y ligero, pero carece de la persistencia de datos y funciones avanzadas de Redis. Aún se usa en algunos entornos de hosting, particularmente en los más antiguos.
La caché de objetos persistente marca la mayor diferencia en sitios con consultas complejas: tiendas WooCommerce con miles de productos, comunidades BuddyPress, redes multisitio, o cualquier sitio donde el panel de administración de WordPress se sienta lento.
Cuando la caché causa problemas
La caché no siempre es directa. Hay situaciones en las que una caché agresiva crea problemas:
- Usuarios con sesión iniciada: La caché de página no debe servir páginas cacheadas a usuarios con sesión iniciada, porque cada usuario ve contenido diferente (su nombre en la cabecera, la barra de administración, su panel personal). Todos los plugins de caché principales manejan esto correctamente por defecto, pero las implementaciones personalizadas a veces lo hacen mal.
- WooCommerce y comercio electrónico: Los carritos, las páginas de pago y las páginas "mi cuenta" son dinámicas y específicas del usuario. Deben excluirse de la caché de página. WP Rocket y LiteSpeed Cache excluyen automáticamente las páginas de WooCommerce. Con otros plugins, puede que necesites configurar las exclusiones manualmente.
- Contenido dinámico y AJAX: Si tu sitio depende mucho de contenido cargado por AJAX, datos en tiempo real o elementos personalizados (productos vistos recientemente, recomendaciones específicas del usuario), la caché de página completa puede servir contenido obsoleto. Las soluciones incluyen caché de fragmentos (cachear todo excepto las partes dinámicas) o cargar el contenido dinámico mediante JavaScript después de que se cargue la página cacheada.
- Sitios de membresía: Los sitios con varios niveles de membresía muestran contenido diferente a distintos grupos de usuarios. La caché de página debe tener en cuenta estas variaciones, ya sea saltándose la caché para usuarios con sesión iniciada o manteniendo versiones cacheadas separadas por rol de usuario (lo que la mayoría de los plugins no soportan).
- Formularios y nonces: WordPress usa nonces (tokens de un solo uso) para seguridad en los formularios. Si una página con un formulario se cachea, todos los visitantes obtienen el mismo nonce, que puede caducar y provocar errores al enviar el formulario. Los plugins de caché normalmente manejan esto, pero es una fuente común de problemas con formularios personalizados.
Invalidación de caché: la parte difícil
Hay un dicho famoso en informática: "Solo hay dos cosas difíciles en informática: la invalidación de caché y nombrar cosas". La invalidación de caché es el proceso de borrar o actualizar el contenido cacheado cuando los datos subyacentes cambian. En WordPress, esto significa:
- Cuando publicas o actualizas una entrada, la caché de esa entrada, sus archivos de categoría, archivos de etiquetas, la página de inicio y cualquier página que muestre entradas recientes debería borrarse.
- Cuando cambias los ajustes del theme, toda la caché de página debería borrarse porque cada página podría verse diferente.
- Cuando se aprueba un nuevo comentario, la versión cacheada de esa entrada debería actualizarse para mostrar el nuevo comentario.
Los buenos plugins de caché manejan la mayoría de estos escenarios automáticamente mediante hooks de WordPress. Escuchan eventos como save_post, switch_theme y wp_update_comment_count y borran las entradas de caché relevantes. Sin embargo, si tienes código personalizado que cambia contenido sin pasar por las funciones estándar de WordPress, la caché puede no invalidarse correctamente.
En caso de duda, la mayoría de los plugins de caché ofrecen un botón "Vaciar toda la caché" en la barra de administración de WordPress. Úsalo después de hacer cambios significativos si las páginas cacheadas no reflejan tus actualizaciones.
Qué comprueba InspectWP
InspectWP detecta si hay un plugin de caché de WordPress activo buscando comentarios HTML relacionados con caché (muchos plugins insertan un comentario como <!-- Cached by WP Rocket --> al final de la página), cabeceras de respuesta (como X-Cache, X-Cache-Enabled o X-LiteSpeed-Cache) y firmas conocidas de plugins en el código fuente de la página. El informe identifica qué plugin de caché se está usando, para que puedas verificar que tu configuración de caché funciona correctamente. Si no se detecta caché, InspectWP marca esto como una oportunidad de mejora de rendimiento, ya que la caché es una de las formas más eficaces de acelerar cualquier sitio WordPress.