De 50 a 100 en PageSpeed: Cómo optimizar WordPress
Optimiza WordPress de 50 a 100 en PageSpeed con técnicas reales de caché, imágenes y plugins para acelerar tu web sin complicaciones.
Empecé con un WordPress que cargaba en 4 segundos y sacaba un 50 en PageSpeed Insights. Después de tocar varias tuercas y medir cada cambio, conseguí estabilizar la nota en 95-100. Aquí van los cuatro ajustes que realmente marcaron la diferencia.
Hosting y PHP: la base que nadie mira
No sirve de nada optimizar si el servidor va justo. Lo primero: asegúrate de tener PHP 8.1 o superior y activar la caché de opcode.
# Ver versión PHP desde terminal
php -v
# En cPanel o similar, activa OPcache desde el selector de PHP
# memory_consumption=256
# revalidate_freq=2
Si usas Apache, activa mod_deflate y mod_expires desde el .htaccess:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
</IfModule>
Imágenes: el cuello de botella silencioso
Las imágenes sin optimizar son la causa número 1 de puntuaciones bajas. Olvida los plugins pesados: usa WebP con fallback y lazy loading nativo.
Añade esto a tu functions.php:
add_filter('wp_get_attachment_image_attributes', function($attr) {
$attr['loading'] = 'lazy';
return $attr;
});
Y en el .htaccess, sirve WebP si el navegador lo soporta:
<IfModule mod_rewrite.c>
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{REQUEST_URI} \.(jpg|jpeg|png)$
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
RewriteRule ^(.*)\.(jpg|jpeg|png)$ $1.webp [T=image/webp]
</IfModule>
Para convertir en lote, usa la terminal:
# Instala webp si no lo tienes
sudo apt install webp
# Convierte todas las JPG
for img in *.jpg; do cwebp -q 80 "$img" -o "${img%.jpg}.webp"; done
CSS y JavaScript: carga crítica y diferida
El mayor enemigo es el CSS que bloquea el renderizado. Extrae el CSS crítico y carga el resto de forma asíncrona.
En el header.php, justo antes de </head>:
<style>
/* Aquí va el CSS crítico: lo que ves en el primer pantallazo */
body { font-family: sans-serif; margin: 0; }
.header { background: #fff; padding: 1rem; }
</style>
Y carga el CSS completo con preload:
<link rel="preload" href="/wp-content/themes/tuyo/style.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="/wp-content/themes/tuyo/style.css"></noscript>
Para JavaScript, añade defer a todos los scripts que no sean críticos. En functions.php:
function defer_parsing_js($url) {
if (is_admin()) return $url;
if (strpos($url, 'jquery.js') !== false) return $url;
return str_replace(' src', ' defer src', $url);
}
add_filter('script_loader_tag', 'defer_parsing_js', 10);
Caché y CDN: el empujón final
Sin caché de página, todo lo anterior sirve de poco. Usa un plugin ligero como Flying Press o Cache Enabler. Configúralo así:
- Caché de página: activada
- Minificar HTML: sí
- Combinar CSS/JS: no (suele romper cosas)
- Caché del navegador: 1 semana para estáticos
Luego, pon Cloudflare delante. En el panel de Cloudflare, activa:
- Auto Minify (HTML, CSS, JS)
- Brotli compression
- Rocket Loader (modo manual si da problemas)
- Always Online (por si cae el servidor)
Conclusión
Pasar de 50 a 100 no es magia, es método. Revisa hosting, optimiza imágenes, carga lo crítico primero y pon una buena capa de caché. Con estos cuatro pasos, mi WordPress pasó de 52 a 98 en escritorio y 96 en móvil. Pruébalo y mide el antes y después.