Cómo configurar W3 Total Cache [TUTORIAL WORDPRESS]

Guía o tutorial básico para poder configurar el plugin de WordPress W3 Total Cache, con el cual podremos optmizar nuestro blog, para que aumente su velocidad.

Pestaña General Settings

Page Cache

  1. En Page Cache marcamos la casilla “Enable” para habilitarlo
  2. En Page cache method dejamos la opción “Disk:Enhanced”

Minify

Yo el apartado Minify lo dejaría deshabilitado, ya que a veces da errores con algunos Temas de WordPress. Para minificar los archivos CSS y javascript, usaremos otro método más efectivo descrito en el artículo Mejorar y optimizar velocidad de WordPress en 10 pasos

Pero si quisieras probar y habilitarlo, pues solamente tendrías que marcar la casilla “Enable” y las demás opciones que trae, dejarlas como viene por defecto.

Database Cache

  1. En Database Cache marcamos la casilla “Enable” para habilitarlo.
  2. En Database Cache Method lo dejamos como viene por defecto en “Disk

Object Cache

  1. En Object Cache marcamos la casilla “Enable” para habilitarlo.
  2. En Object Cache Method lo dejamos como viene por defecto en “Disk

Browser Cache

  1. En Browser Cache marcamos la casilla “Enable” para habilitarlo.

CDN

Este apartado CDN o Red de Distribución de Contenidos (Content Delivery Network), yo lo dejaría como viene, es decir, deshabilitado.

A no ser que contrates un plan CDN como MaxCDN, Akamai, Amazon,…

Reverse Proxy

Este apartado lo dejamos como viene por defecto, deshabilitado.

Monitoring

Este apartado también lo dejamos como viene por defecto, deshabilitado.

Pestaña  Page Cache

General

Activamos las opciones: Cache front page, Cache feeds, Cache 404 pagesDon’t cache pages for logged in users.

La opción Cache SSL solo la activaremos si tenemos SSL en nuestro dominio.

Cache Preload

  1. Activamos el Cache Preload en Automatically prime the page cache.
  2. En Update Interval le ponemos unos 600 o 500 segundos.
  3. Le ponemos en Pages per interval un intervalo de unas 15 páginas.
  4. En Sitemap URL ponemos el enlace donde tengamos nuestro sitemap.
  5. Activamos la opción Preload the post cache upon publish events.

Purge Policy: Page Cache

Lo dejamos como viene configurado por defecto.

Advanced

El apartado Advanced de la pestaña Page Cache, lo podemos dejar como viene por defecto.

Pero si alguna vez añadimos a nuestro blog alguna página en php nueva o que pertenezca a algún nuevo plugin o theme, y queremos o no queremos que sea cacheada, tendríamos que hacerlo en las opciones:

  • Never cache the following pages: aquí añadimos el nombre entero de la página que no queramos que tenga cache. O mediante alguna expresión regular.
  • Cache exception list: aquí añadimos el nombre entero de la página que  queramos que tenga cache. O mediante alguna expresión regular.

En el caso de que tengamos el plugin Woocommerce para nuestra tienda online, tendríamos que añadirle que nunca se haga cache a las siguientes páginas que crea por defecto el plugin (o si las has cambiado de nombre, como las tengas nombradas):

  • /carro/
  • /mi-cuenta/
  • /finalizar-comprar/

Pestaña Minify

La pestaña Minify, la dejamos sin configurar, ya que como dijimos en la sección Minify de la pestaña General Settings la dejaríamos deshabilitada, y lo haríamos mejor mediante lo descrito en el artículo Mejorar y optimizar velocidad de WordPress en 10 pasos

Pestaña Database Cache

En la pestaña Database Cache, lo único que vamos a configurar es en el apartado Advanced las siguientes opciones:

  • Maximum lifetime of cache objects: que lo podemos dejar como viene por defecto con los 180 segundos (3 minutos) que es un valor normal para casos en los que seamos un bloguero activo, y actualicemos muy continuamente nuestro blog. Si por el contrario, no solemos actualizarlo mucho o no creamos muchas entradas a diario y en definitiva nuestro blog no cambia con frecuencia, podemos subirle el valor a 1800 (30 minutos) o 3600 segundos (1 hora), o más, según veamos.
  • Ignored query stems: aquí tenemos que añadir las “queries” para que no sean cacheados determinados funcionamientos de algunos plugins que requieren de hacer peticiones a la base de datos de manera continua o con AJAX. A parte de las que vienen ya puestas por defecto, pongo aquí otras típicas que habría que añadirle si estuviéramos usando estos plugins:
    • Woocommerce: le añadiríamos _wc_session_ para que nuestro carrito se actualice perfectamente.
    • WP-PostRatings: le tendríamos que añadir ratings

Aún así, si véis que tenéis algún plugin que no os funcionara correctamente debido a esta pestaña, dejarla mejor deshabilitada en General Settings.

Pestaña Object Cache

Lo dejamos como viene configurado por defecto.

Pestaña Browser Cache

General

En el apartado General, lo que vamos a habilitar son las opciones:

  • Set Last-Modified header
  • Set expires header
  • Set cache control header
  • Set entity tag (eTag)
  • Set W3 Total Cache header
  • Enable HTTP (gzip) compression

Todo lo demás lo dejamos como viene por defecto.

CSS & JS / HTML & XML / Media & Other Files

En los apartados CSS & JS, HTML & XML y Media & Other Files, lo único que vamos a dejar habilitado son las opciones:

  • Set Last-Modified header
  • Set expires header poniéndole en Expires header lifetime a 31536000 segundos
  • Set cache control header
  • Set entity tag (eTag)
  • Enable HTTP (gzip) compression

Las opciones Prevent caching of objects after settings change y Disable cookies for static files, las dejamos deshabilitadas.

Pestaña User Agent Groups

Esta pestaña ni la tocamos y la dejamos deshabilitada, a no ser que queramos crear algún grupo de user-agents para crear un caché distinto según el dispositivo que se use, como por ejemplo los dispositivos móviles o los dispositivos de escritorio.

Pestaña Referrer Groups

Esta pestaña es idéntica a la anterior de los User Agents, y por tanto la dejaremos también deshabilitada, a no ser que queramos crear algún grupo de referrers para crear un caché distinto según de qué dominio venga.

Pestaña CDN

La pestaña CDN, la dejamos sin configurar, si no hemos contratado ninguna.

Pestaña Monitoring

Esta pestaña la dejaremos también sin configurar como dijimos en la sección Monitoring de la pestaña General Settings

¿TE HA GUSTADO ESTE TUTORIAL?
[ Valoración: 4.3 - Votos: ‎9 ]
  • Jose

    Muy buen tutorial. Sencillo y paso a paso.

    Gracias, me sirvió.

    • Javier Crego

      Me alegro que te haya gustado.

      Un saludo,

      Javier Crego.

  • Antonio

    Hola, lo primero gracias por el tutorial, además quisiera hacerte una consulta en relación a este plugin: tengo un sitio web (blog) en wordpress donde he venido usando el plugin Sidebar login para registro y entrada de usuarios, nunca me ha dado problema. El caso es que desde que instalé W3 Total cache he observado algún tipo de incompatibilidad, ya que para que funcione el logueo y el formulario de Sidebar login recoja los datos de entrada hay que refrescar la página. No sé cómo configurar el cacheo para solucionar esto, y tampoco quiero desactivar W3 total cache ya que me da buenos resultados, pero por otro lado al afectar al login incomoda bastante a los usuarios registrados. ¿Sabrías decirme cómo solucionar esto?

    • Javier Crego

      Hola Antonio.

      Comprueba que tengas marcada esta opción en la configuración:

      W3 Total Cache / Page Cache / General:
      [X] Don’t cache pages for logged in users

      Y si sigue sin funcionar, prueba a desactivar el apartado de Database Cache, a ver si así te funciona.
      Si siguiera sin irte, habría que averiguar bien cómo funciona ese plugin, ya que como supongo que lo hace mediante ajax, eso suele dar bastantes conflictos con W3TC.
      En cualquier caso, tendrías que ir descativando módulos uno a uno del W3TC, e ir probando a ver si te funciona y con cuáles. Y a veces es complicado evitar que un plugin concreto sea compatible con W3TC, ya que depende de los que lo desarrollan.

      Lo que sea me cuentas.

      Un saludo.

      • Antonio

        Hola, muchas gracias por tu respuesta, ya había probado las opciones que mencionas sin obtener resultados, también he repasado los módulos pero el único cambio que he conseguido es hacer que no funcione el logueo. Así que ya me planteo seriamente desinstalar el Sidebar login y utilizar algún otro plugin de similares características si es posible que no funcione mediante Ajax (este efectivamente si lo hace tal y como comentas). ¿Conoces algún plugin así que recomiendes?
        Gracias y un saludo

        • Javier Crego

          Oks, pues si decides usar un plugin de caché, va a ser lo mejor que uses un plugin de login sin ajax, ya que las 2 cosas a la vez, te van a acabar dando problemas a larga.

          Existen varios plugins de login sin ajax, que te ofrecen un widget para poder loguear, o incluso se puede crear manualmente un widget con el código del formulario típico para entrar a WordPress. Yo a veces he usado este plugin:

          https://wordpress.org/plugins/theme-my-login/

          Hace su función perfectamente, y tiene su widget para loguear.

          • Antonio

            Hola Javier, he probado Theme my login y va bastante bien. La única pega es que no está traducido al español, me voy a poner con ello a ver si consigo traducir al menos el panel que aparece en el sidebar.
            Gracias y un saludo

          • Antonio

            Hola de nuevo, Javier, quisiera aprovechar tus conocimientos para plantearte un problema respecto a la configuración de Theme my login: lo tengo ya traducido y operativo, la verdad es que es un plugin muy útil y funcional. El caso es que, habiendo habilitado las opciones pertinentes de envío de emails, la función de registro de nuevo usuario se realiza sin problemas, el sistema envía el correo pertinente de alta al nuevo usuario incluso dejando el plugin en sus opciones por defecto. Sin embargo, cuando se trata de la opción “recuperar clave perdida”, el sistema no envía el correo con el enlace de recuperación de clave y redirecciona a una página en blanco. ¿Sabes a qué puede ser esto debido?

          • Javier Crego

            ¿Tienes activado el módulo de email en el TML y no te sale el mensaje de “Check your e-mail for the confirmation link” después de recuperar el password?

            Según dices te redirecciona a una página en blanco, por lo que entiendo que no te sale ningún mensajito ni nada. ¿Podrías detallarme más datos sobre esta página en blanco?, tiene algún nombre arriba en la url?, ¿sale alguna pista más en esa página en blanco?

            A mí sí me funciona la recuperación de contraseñas, por lo que tiene que ser algún problema causado con tu servidor, el email de registro o algo. ¿Te ocurre con cualquier email registrado?. ¿Has probado a vaciar el caché del W3TC?

          • Antonio

            Así es, con el módulo e-mail TML activado para casos de registro, recuperación y reseteo de password y no sale el mensaje de chequear, y debería de enviar un email automáticamente al administrador y otro al usuario pero no hace estos envíos. Redirecciona a una página completamente en blanco cuya dirección es http:\\www.ejemplocodigo.com\lostpassword (uso el nombre de tu sitio, lo que importa es lo que le sigue). No tengo más información, sin embargo el registro de nuevo usuario funciona perfectamente con envío automático de emails correspondientes, es por esto que creo que puedo descartar fallo del servidor o incluso incompatibilidad del tema que utilizo para el sitio. He probado a registrarme con distintos emails y he desactivado el W3 total cache por si acaso, el resultado siempre es el mismo, y el caso es que todo funciona a la pefección excepto el aspecto que te comento de “Lost password”.

          • Javier Crego

            ¿Has cambiado alguna opción en la configuración del plugin, que sea diferente a como viene por defecto?

            A mí me funciona perfectamente, sin cambiar nada. Es decir, dejándolo como viene al activar el plugin:

            Stylesheet Enable “theme-my-login.css”
            Login Type Username or E-mail
            Modules Todos sin activar

            También intenta probarlo con diferentes navegadores, o borra el caché y cookies del navegador que uses.
            Y la última prueba ya sería con otro theme distinto, para ver si está dando algún conflicto.

      • Antonio

        Bueno, yo tengo activado el módulo “Custom redirection” (para dirigir a los usuarios a las páginas inicio y desconexión, ya que por defecto me los mandaba a la de perfil), el módulo “Custom User links” (para evitar que se muestre el vínculo Dashboard) y ahora estoy trasteando el módulo “Custom e-mail” por si se pudiera configurar adecuadamente desde ahí. Si entras a la configuración específica de este módulo verás que hay una nota donde dice “incluir la variable %reseturl%, de lo contrario el usuario no podrá recuperar su contraseña”. No sé dónde encajar dicha variable, ahí puede estar el problema aunque me dices que sin habilitar el módulo te funciona bien. Aún así he probado a deshabilitar todos los módulos y sigo teniendo el mismo problema. No influye el navegador, y aunque utilizo un tema particular dudo que sea incompatibilidad ya que el resto de opciones del plugin funcionan bien…aunque si fuera este el problema lógicamente tendría que prescindir del plugin.

        • Javier Crego

          Vale a ver, he estado haciendo pruebas, y a mí me funciona porque yo no dependo de la función mail() que trae php para enviar los correos, la cual es muy cutre y depende mucho de la versión de php que tengamos en nuestro servidor para que funcione bien o mal. Seguramente, el plugin Theme My Login sí que use esa función para el tema de recuperación de contraseñas, pero para registro de usuarios, sí te funciona porque usará el sistema de registro de usuarios de WordPress (no vía el plugin), el cual no usa la función mail() sino una clase específica más avanzada como la phpmailer. Por ese tipo de problemas, yo cualquier salida smtp de correo la hago con el plugin Postman Smtp.

          Probando a desactivarlo, claramente no me llega ningún correo de recuperación de contraseñas, lo cual ya me indica lo que te comento antes, que está usando la función mail() de php para enviarlo.

          Aunque lo que no me queda muy claro es el motivo de por qué no te redirecciona cuando le das al botón de recuperar, a esta dirección:

          http:\\tunombrededominio.com/login/?checkemail=confirm

          Ya que a mí en cualquier caso me redirecciona a ese link. Posiblemente también tengas algún problema con el redireccionamiento al no usar como página de login esta:

          http:\\tunombrededominio.com/login/

          ¿Qué nombre de página de login estás usando?. A lo mejor te está ocurriendo algún conflicto con la traducción.
          ¿Cómo has traducido el plugin?. Te recomiendo que uses el plugin Loco Translate, que lo hace perfectamente.

          Lo de la variable %reseturl% es simplemente para si quieres personalizar el mensaje que llega por email a los usuarios, y poner algo asi como:

          Para activar la contraseña, tienes que hacerlo con el siguiente link: %reseturl%

          El aviso ese que te pone que si no pones la variable no te funciona, es porque si personalizas un mensaje, y no pones la variable, el correo se enviará sin el link para recuperar.
          Pero como pone bien claro, si dejas ese cuadro de texto vacío, se enviará con un mensaje por defecto. Y funciona igualmente.

          Resumiendo…

          1. Prueba a instalarte un plugin de smtp (para no depender de la función mail de php), como por ejemplo estos:

          https://wordpress.org/plugins/postman-smtp/
          https://es.wordpress.org/plugins/easy-wp-smtp/

          2. Si te sigue sin funcionar, tendrás que mirar bien lo de la página de login, porque me da que es por ahí el problema.

      • Antonio

        Bueno, probaré los plugin que me dices. Respecto a la traducción, la he hecho con Poedit, pero no afecta pues estoy haciendo las pruebas con el plugin original en inglés. El servidor de correo del sitio lo tengo de siempre en SMTP y me ha ido perfectamente hasta ahora. He probado a cambiar WP a PHP puntualmente a ver si afectaba al TML pero funciona igual. En lo de la página de login si que hay tela, porque aunque tengo creada la página http://www.ejemplo.com/login que el mismo TML genera ésta no tiene uso, tengo el formulario de login instalado en el sidebar en la página principal, desde ahí cuando uno se loguea se le redirecciona directamente a la misma página principal (www.ejemplo.com) que carga con el usuario ya logueado, aunque también he probado a redireccionar después del logueo al perfil del usuario y va bien también (www.ejemplo.com/profile)
        El hecho es que las páginas que TML ha generado de login, logout, register, reset, lost password y profile aparecen perfectamente integradas en el tema. La clave es la redirección a Lost password, que está rota por algún motivo. Y respecto a la dirección que mencionas
        http://tunombrededominio.com/login/?checkemail=confirm, la tengo operativa pero no me redirecciona ahí en ningún caso.

      • Antonio

        Tienes razón, todas son necesarias, me refiero a que no la tengo establecida para el logueo, lo cierto es que todas las páginas que mencionas me funcionan perfectamente si introduzco la dirección en el navegador, y todos los mensajes de error pertinentes aparecen como es debido. Si introduzco la dirección http://www.ejemplo.com/lostpassword me aparece la página generada por TML e integrada en mi tema, con el mensaje de
        “Please enter your username or email address. You will receive a link to create a new password via email.”
        Debajo el campo a rellenar de usuario o email y luego el botón “Get new password”.
        Al pulsar este botón es cuando se rompe el redireccionamiento, se recarga la página pero ya aparece en blanco total.
        Voy a probar una reinstalación limpia del TML a partir de cero con alguno de los plugin de correo que me has dicho, y de paso chequeo el Loco translate que me parece una aportación interesante, después te comentaré los resultados.
        Muchas gracias Javier por la paciencia.

        • Javier Crego

          No me queda muy claro si te sale el mensaje de “ERROR: Enter a username or e-mail address.” si pulsas el botón de Get new password sin meter ningún email o usuario.
          O si al meter un email falso (o uno que no esté asociado a ningún usuario registrado), te sale mensaje “ERROR: There is no user registered with that email address.

          Por cierto, supongo que ¿tendrás activada la opción en Ajustes->Enlaces Permanentes->Nombre de la entrada ?.

      • Antonio

        Sí, como te digo todos los mensajes de error salen cuando corresponde, y esos en particular aparecen correctamente, y efectivamente tengo activada la opción Nombre de la entrada en Ajustes.

      • Antonio

        Hola Javier, como te dije hice una reinstalación limpia y el resultado ha sido que el plugin TML me reproduce el mismo error en el direccionamiento a la página Lost password.
        Antes de probar con un nuevo plugin de correo SMTP, decidí utilizar la función debug de WP a ver si me daba alguna pista. El resultado es que el debuging me advierte el siguiente error:

        Fatal error: Call to undefined function get_password_reset_key() in
        /home/basedatos/public_html/wp-content/plugins/theme-my-login/includes/class-theme-my-login.php on line 1160

        Editando el archivo que menciona, observo que la línea 1160 expresa:

        $key = get_password_reset_key( $user_data );

        Pero no sé porqué dicho proceso no funciona. ¿Alguna idea?

        • Javier Crego

          Hola de nuevo Antonio.

          Pues no sé por qué me da que puede que sea debido a algún conflicto que esté teniendo tu versión de WordPress con ese plugin. Esa función get_password_reset_key fue introducida en la versión de WordPress 4.4.0
          Si no tienes actualizado WordPress a mínimo esa versión, entonces el plugin te va a dar conflicto ya que como te dice en el error, está indefinida esa función, es decir no la encuentra.

          Confírmame qué versión de WordPress estás usando para descartarlo.

      • Antonio

        ¡Solucionado! Diste en el clavo, yo seguía con la versión 4.3 de WordPress, al actualizar a 4.6 se ha corregido automáticamente el error. Ahora el plugin TML es perfectamente funcional.
        Respecto a los plugin que me has recomendado, después de como hemos “destripado” el Theme my login a lo largo de estos mensajes, puedo decir que es un excelente plugin de logueo para WP, adaptable, de manejo sencillo y con buena operatividad. Por cierto, lo he traducido al español satisfactoriamente con el otro plugin que me dijiste, Loco Translate. Acerca de este y después de probarlo con una traducción completa y alguna corrección parcial de otros plugin, también puedo decir que es muy útil y recomendable. Mejora a Poedit en el sentido de que opera directamente en el sitio WP.
        Los plugin de correo SMTP que me comentaste no he llegado a probarlos.
        Ahora me dispongo a testar el W3 Total Cache en todas sus funciones, seguiré el tutorial que propones y trataré de exprimirlo al máximo.
        Gracias, Javier, y un cordial saludo.

        • Javier Crego

          Me alegro que se te haya solucionado por fín jeje!.

          Un saludo.

          PD: Recuerda actualizar tu WordPress de vez en cuando (aunque no recién sale una nueva actualización, hasta que pase un tiempo y solucionen los nuevos bugs y compatibilidades con plugins).

  • http://damiansilva.info/ Damian Silva

    Excelente Post me ha gustado mucho. Acabo de realizar los cambios que has recomendado y funciona de maravilla. Quiero agradecerte y que sigas asi, te ganaste un seguidor.

  • Alejandro sp

    Enhorabuena! un post genial…… he hecho los cambios y ha mejorado una barbaridad!
    Muchas Gracias!

  • gonzalo soto

    Gracias por el articulo! estoy atorado en un paso…que hago si tengo mas de una direcccion XML?

    • Javier Crego

      Hola Gonzalo!

      ¿A qué paso te estás refiriendo con lo de XML?

      • gonzalo soto

        Hola! me refiero al paso del mapa del sitio tengo varios y solo debo ingresar uno

        • Javier Crego

          Oks, en ese paso debes de poner el sitemap.xml que contenga el índice de los demás sitemaps.
          Si usas el sitemap que por ejemplo genera el plugin Yoast, sería este:

          sitemap_index.xml

          Si usas algún plugin específico para generarlo, como por ejemplo el famoso Google XML Sitemaps, pues el índex sería simplemente:

          sitemap.xml

          • gonzalo soto

            Con Yoast SEO me salen 5 diferentes
            post-sitemap.xml
            page-sitemap.xml
            attachment-sitemap.xml
            category-sitemap.xml
            post_tag-sitemap.xml
            Cual crees que deba poner? yo pienso que el primero pero no se

          • Javier Crego

            Si usas Yoast SEO, como te dije, el ínidice de todos los sitemaps, es:

            tudominio.com/sitemap_index.xml

            pero si cargas la siguiente página:

            tudominio.com/sitemap.xml

            también te redirecciona al índice sitemap_index.xml

            Por tanto, puedes ponerle cualquiera de estas 2 urls:

            http://tudominio.com/sitemap.xml
            http://tudominio.com/sitemap_index.xml

            ya que en ellas te aparece el índice de sitemaps, y todos los sitemaps que hay son necesarios.

          • gonzalo soto

            Ya entendi, tengo que poner la url donde se encuentran todos los archivos .xml (que en mi caso son 5 archivos) muchas gracias!

  • Roger

    Gracias, muy buen tutorial.

    Saludos