Vamos a ver como optimizar Worpdress. El WPO son las abreviaturas de Web Performance Optimization; que en español sería: optimización del rendimiento web.
Que nuestras páginas web carguen rapido no solo es importante para que los usuarios que nos visitan pierdan la paciencia , si no que tambien influye en el tiempo que los buscadores dedican a indexar las páginas.
Si quieres optimizar el rendimiento de tu web: usa solo los plugins nececesarios. Yo uso pocos plugins y la mayoría son para la optimización. Hay muchos plugins en Worpdress de WPO, tambien hay otros plugins que no tienen por que esta activados y se pueden usar de manera periódica . Algunos son:
- P3 Profiler: Es un profiler, es decir una herramienta que rastrea tu web con una serie de tests y hace una estimación del tiempo de carga. Luego te dice qué porcentaje de ese tiempo de carga corresponde en particular a los plugins, de manera que puedes averiguar con un vistazo qué plugins te están consumiendo más recursos. También puedes profundizar en su análitica y descubrir cuál es el tiempo de carga que tiene tu plantilla, y otros muchos datos. Es recomendalbe utilizarlo siempre que pretendes instalar algún plugin nuevo, para ver como afecta a los tiempos de carga.
- Wp-Optimize: Se añade muchos datos inneceasrios a la base de datos:
Revisiones de entradas.
Comentarios no aprobados o spam.
Comentarios de la papelera.
Metadatos de Akismet para comentarios (son muchos, creeme).
Metadatos de los comentarios que son prescindibles.
Autoguardados en borradores.
Papelera de entradas.
Acciones predeterminadas de WordPress para optimizar las tablas de la base de datos.
Si quieres limpiarlas todas de golpe y ahorrarte varios megas de tamaño en tu base de datos de WordPress, pásales de vez en cuando este plugin.
- Lazy Load: Nos carga una imagen del servidor solo cuando el usuario llega a ella. Muy útil si tienes páginas muy largas y mucho contenido debajo. Evitarás tener que cargarlo todo de golpe.
Es importante elegir un theme o tema ligero. Si el tema consume muchos recursos, por mucho que optimices poco podras hacer. Con P3 Profiler podras saber qué porcentaje del tiempo total de carga corresponde de a la plantilla.
Tenemos dos tips de cache:
Cache a nivel de cliente
El Browser caching es un parámetro que se especifica en las cabeceras de los ficheros como tal (cualquier imagen, fichero CSS, JS y demás). Podemos hacerlo en las cabeceras perono es recomendable. Lo suyo es, a nivel servidor, decirle al cliente (el navegador web en cuestión) el tiempo de caducidad que va a tener ese tipo de fichero.
Por ejemplo, la imagen de un artículo en WordPress no es habitual que cambie, por lo que podemos decirle al navegador que en vez de 2 días de cacheo, le dedique 1 mes. De esta manera, si un usuario visita nuestro sitio web de forma recurrente, las imágenes no las descargará por un mes.
A continuación, os dejo el fichero .htaccess que utilizo yo, donde especifico por tipo de fichero la caducidad:
# Serve resources with far-future expires headers.
# IMPORTANT: If you don't control versioning with filename-based cache
# busting, consider lowering the cache times to something like one week.
ExpiresActive on
ExpiresDefault "access plus 1 month"
# CSS
ExpiresByType text/css "access plus 1 year"
# Data interchange
ExpiresByType application/json "access plus 0 seconds"
ExpiresByType application/ld+json "access plus 0 seconds"
ExpiresByType application/vnd.geo+json "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType text/xml "access plus 0 seconds"
# Favicon (cannot be renamed!) and cursor images
ExpiresByType image/x-icon "access plus 1 week"
# HTML components (HTCs)
ExpiresByType text/x-component "access plus 1 month"
# HTML
ExpiresByType text/html "access plus 0 seconds"
# JavaScript
ExpiresByType application/javascript "access plus 1 year"
# Manifest files
ExpiresByType application/manifest+json "access plus 1 year"
ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds"
ExpiresByType text/cache-manifest "access plus 0 seconds"
# Media
ExpiresByType audio/ogg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType video/mp4 "access plus 1 month"
ExpiresByType video/ogg "access plus 1 month"
ExpiresByType video/webm "access plus 1 month"
# Web feeds
ExpiresByType application/atom+xml "access plus 1 hour"
ExpiresByType application/rss+xml "access plus 1 hour"
# Web fonts
ExpiresByType application/font-woff "access plus 1 month"
ExpiresByType application/font-woff2 "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
ExpiresByType application/x-font-ttf "access plus 1 month"
ExpiresByType font/opentype "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
Cache a nivel de servidor
Un buen plugin de caché de servidor suele ser obligatorio. Depende de la web y los plugins que tengas unas veces te puede funcionar mejor un plugin de cache que otro:
- WP Super Cache: Es un plugin fácil de configurar, gestiona caché estática y dinámica, además de ser compatibles con CDNs.
- W3 Total Cache: Este plugin es complicado de configurar, muy potente, ideal para sitios de alto tráfico, compatible con CDNs.
Es recomendable que sigas alguna guia avanzada para configurarlos a fondo.
Además de todo esto, también deberíamos activar la cache interna de WordPress añadiendo una sola línea al archivo wp-config.php:
define( 'ENABLE_CACHE', true );
Es importante un CDN que nos permite Alojar y distribuir los contenidos estáticos fuera de tu servidor.
- Amazon CloudFront (AWS): servicio de entrega de contenido de Amazon, muy popular y potente; su configuración no es para cobardes pero ofrece muy buen rendimiento.
- CloudFlare: dispone de amplio servicio gratuito, suficiente para la mayoría de los sitios y plugin para WordPress; hay que crear registros DNS en tu hosting salvo que lo tengas alojado en SiteGround y otras empresas colaboradoras, donde no hay que configurar nada.
- Swarnify: especializado para imágenes y vídeo; el servicio de CDN para imágenes es gratuito hasta 10 Gb.
Compresión Gzip
Es una solución para ayudar que nuestros sitios o blogs aceleren la carga de nuestros ficheros o archivos. Esto ocurre cuando nuestros blogs, en WordPress por ejemplo, no están optimizados internamente, no tenemos una buena y organizada distribución del contenido o usamos tecnologías que aumentan el tiempo de carga de nuestros sitios
Incluir en .htaccess
# BEGIN GZIP
<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
</ifmodule>
# END GZIP
Puedes comprobarlo aqui
http://www.gidnetwork.com/tools/gzip-test.php
Optimización y compresión de imágenes
Las imágenes se solicitan y se cargan desde el servidor continuamente. Unos pocos bytes que puedas ahorrar significan megas y megas de transferencia al cabo de un mes o de un año, así que conviene comprimir las imágenes lo máximo posible.
Además de usar un compresor automatico instalado, ¿sabías que WordPress guarda automáticamente cuatro versiones de cada imagen que subes? La del tamaño original, y tres tamaños estándar predefinidos por defecto (tamaño grande, tamaño mediano, y miniatura). Si en tu web no usas alguno de esos tamaños, lo mejor será que le digas a WordPress que no los genere, si no quieres que el tamaño de tu base de datos (BD, en lo sucesivo) se multiplique. Y una base de datos grande ya imaginas lo que implica: más dificultad al manejarla, consultas más complejas y más costosas...
Así que para decirle a WordPress que solo genere los tamaños de imagen que realmente vayas a usar, vete a Ajustes -> Medios en tu panel de control, y allí encontraras las configuraciones para los tres tamaños predefinidos. Tan solo tienes que poner a cero aquellos que no vayas a usar.
Yo únicamente conservo las miniaturas, a tamaño 100×100, y el resto no me interesan. Uso siempre el tamaño original de la imagen, que ya me preocupo yo de que sea el justo y el necesario.
También puedes limpiar mucha basura de tu base de datos de WordPress deshaciéndote de los tamaños y versiones de imágenes que no estés usando. Para ello puedes emplear plugins como DNUI - Delete Not Used Images.
Hay varios plugins, unos dan mejor resultados que otros y algunos dependen de que cosas tenga instaladas en unos casos pueden funcionar mejor unos que otros, lo ideal es hacer pruebas.
Tenemos varios plugins que permiten minificar en WordPress.
Otras cosas a optimizar
- en la secciónRevisa los ficheros que se solicitan con más frecuencia en tu servidor. Con Cpanel es muy fácil verlo, en Awstats -páginas-URLs (top25). Esta información te puede ayduar a localizar ese plugin dudoso o a desactivar esa función sospechosa de tu plantilla que nunca supiste muy bien para qué servía.
- Desactiva los avatars de tus comentarios. Si uno de tus artículos alcanza los 200 comentarios, y cada uno aparece con una fotito pequeña al lado. ¿Sabes que cada vez que intentes cargar ese artículo tienes que solicitar y cargar a su vez los 200 cargas de imágenes? No aporta mucho y consumen tiempo y recursos.
- Programa la ejecución del archivo WP-Cron.php (Avanzado) y no dejes que lo haga WordPress. En el panel de control de tu servidor deberías poder programar un cron que ejecute este archivo cada cierto tiempo, pongamos cada 30 minutos por ejemplo. Si no haces nada, debes saber que WordPress lo ejecuta muchas veces por su cuenta al dia, más o menos las mismas veces que alguien intenta acceder a tu página. Si yo lo ejecuto cada media hora, el archivo se sirve exactamente 48 veces al día. Si dejo que lo ejecute WordPress por defecto... en mi caso cuando lo cambié iba por casi 1000 solicitudes diarias. No es un archivo muy grande, pero le estás ahorrando 900 peticiones a tu servidor todos los días simplemente poniendo una línea de código. Una burrada. Se trata de un funcionamiento bastante ineficiente de WordPress, aunque no tiene ninguna incidencia en webs de bajo tráfico. Asi que, si quieres saber cómo programar una tarea cron (Cron Job) en Cpanel, lee aquí. Es muy sencillo. El comando concreto para ejecutar el wp-cron.php con la frecuencia que tú quieras podría ser más o menos este: wget -q -O -t 1 http://comprarmicafetera.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
- Evitar 404: Si un fichero (imagen, CSS o JS) dejan de existir, el navegador puede quedarse atascado buscándolo. Intenta evitarlo comprobando que todos los ficheros están donde deben. Si no es así elimina su llamada.
Y tu, ¿has realizado o conoces algún tipo de optimización más?. Comentalo y ampliaremos la lista entre todos.