100 puntos en PageSpeed: qué cambiamos para conseguirlo

El tiempo de carga es un factor de posicionamiento, pero los consejos habituales rara vez ayudan. Este artículo describe qué cambiamos de verdad en nuestra propia página, cuánto aportó cada medida y dónde nos equivocamos de camino.

Una forma luminosa acelera hacia la derecha mientras detrás se disuelven bloques oscuros

Lo esencial

  • La mayor ganancia individual no vino de reducir archivos sino de sustituir una biblioteca de 458 KB por 6 KB de código propio.
  • La segunda causa mayor fue una compresión configurada a medias: el servidor comprimía solo HTML, no CSS ni JavaScript.
  • Un salto de maquetación de valor 1 costó 24 puntos, provocado por un CSS cargado después que solo surtía efecto tras el primer renderizado.
  • Lo que menos aportó: los formatos de imagen. Lo que más aportó: quitar cosas.

El valor de partida era 58 sobre 100 en móvil. No es un valor malo para una web con efecto 3D en la cabecera, pero sí uno que Google penaliza de forma perceptible en la búsqueda móvil. Al final quedaron 100 puntos en escritorio y 98 en móvil, con 100 también en accesibilidad.

Lo que sigue no es una lista de comprobación general, sino el recorrido real, incluidos los puntos en los que nos equivocamos.

Una forma luminosa acelera hacia la derecha mientras detrás se disuelven bloques oscuros
Una página no se vuelve rápida optimizando, sino quitando.

La situación de partida

Medición (móvil)antesdespués
Rendimiento5898
Accesibilidad95100
Primer renderizado6,1 s1,4 s
Elemento mayor visible11,1 s2,1 s
Transferido en total298 KB184 KB
de ello JavaScript121 KB5 KB

Las cinco intervenciones que de verdad contaron

1. Sustituir la biblioteca, no optimizarla

La cabecera muestra una nube de partículas en 3D. Para ello funcionaba una biblioteca gráfica conocida: 458 KB tras la minificación. La medición señalaba que 51 KB de ellos no se ejecutaban nunca.

La mirada decisiva fue la pregunta de cuánto necesitábamos realmente. Eran once piezas: renderizador, escena, cámara, geometría, material y algunas clases auxiliares. Todo eso se puede programar directamente contra la interfaz gráfica del navegador.

Resultado: 458 KB se convirtieron en 6 KB. La representación es idéntica: mantuvimos los mismos sombreadores.

Atención Hay dos detalles que hay que reproducir, o el resultado se ve mal: la biblioteca convierte los colores del formato hexadecimal a luz lineal, y mezcla de forma aditiva con alfa premultiplicado. Sin ambas cosas, nuestra nube de partículas resultaba bastante más chillona que antes.

2. La compresión estaba solo a medias

En la configuración del servidor la compresión estaba en «activada», pero la línea que indica qué tipos de archivo deben comprimirse estaba comentada. Esa es la configuración por defecto de muchas distribuciones. Resultado: solo se comprimía HTML.

La biblioteca gráfica iba, por tanto, sin comprimir por la línea. Tras activarla: 1243 KB se convirtieron en 251 KB. Además, ahora dejamos al lado las versiones comprimidas precalculadas, para que el servidor no vuelva a calcular en cada petición.

Esfuerzo: dos líneas de configuración. Efecto: casi un megabyte por primera visita.

3. Eliminar del todo la biblioteca de animación

Para las apariciones al desplazarse funcionaba otra biblioteca, 114 KB. La medición la señalaba además como causante de recálculos forzados de maquetación: consultaba la geometría durante el desplazamiento y obligaba al navegador a recalcular la maquetación en plena marcha.

Sustituida por un IntersectionObserver que se limita a poner una clase. El movimiento en sí lo hace el CSS. 114 KB menos, sin recálculos, unas 40 líneas de código propio.

4. El favicon pesaba 205 KB

Una nimiedad con un efecto asombroso, porque se carga muy pronto. Sustituido por un archivo SVG de 6 KB, generado a partir del logotipo existente.

¿Sabías que…?

Para mostrarse en los resultados de búsqueda de Google, un favicon SVG no sirve: allí Google solo acepta formatos de mapa de bits, y la imagen debe ser cuadrada con un lado que sea múltiplo de 48 píxeles.

Quien deposite solo un SVG obtiene en el resultado de búsqueda el marcador de posición gris en lugar de su logotipo. Indicar ambos, uno junto a otro, es el camino correcto.

5. Consultar la geometría en el fotograma de animación

Un script leía en cada evento de desplazamiento la altura total del documento. Esa propiedad el navegador no la puede responder de memoria: para ello tiene que recalcular la maquetación de toda la página, en pleno desplazamiento.

La regla que se deriva y que vale en todas partes: leer en el evento, escribir en el fotograma siguiente. Nunca al revés. Desde entonces, la altura de la página se mide una vez y se recuerda en lugar de consultarse sesenta veces por segundo.

El error que costó 24 puntos

A la izquierda una pila densa de bloques grises; hacia la derecha solo quedan unos pocos luminosos
Lo que queda decide el tiempo de carga, no lo bien comprimido que esté lo restante.
Desde la práctica

Para eliminar la última petición bloqueante habíamos dividido la hoja de estilos: la parte necesaria para la zona visible iba directa al documento y el resto se cargaba después. Un procedimiento habitual.

El corte estaba en una marca del archivo fuente detrás de la cual habíamos supuesto que empezaba lo no visible. En realidad, detrás estaban las reglas del logotipo de la cabecera, de los márgenes inferiores y de las apariciones. La página se construía, pues, sin ellas y se recolocaba un segundo después.

El resultado: un Cumulative Layout Shift de 1,0 y, con él, 76 puntos en lugar de 100 en escritorio. Especialmente incómodo: en local, con la conexión limitada, el valor era 0, porque allí la hoja de estilos llegaba a tiempo. El error solo se veía con conexión rápida.

La lección: o toda la hoja de estilos en el documento o ninguna. Una incorporación parcial presupone saber con exactitud qué regla hace falta en la zona visible, y eso en una página que crece nunca se sabe de forma duradera.

Consejo Ante la sospecha de saltos de maquetación, medid sin limitar la conexión. Una herramienta de prueba con conexión móvil simulada entrega el archivo a tiempo y no muestra el salto. Quien mide solo así da el problema por resuelto.

Lo que aportó poco

Para ser completos, las medidas que aparecen en cualquier guía y que en nuestro caso apenas fueron medibles:

Formatos de imagen. Nuestra página de inicio apenas tiene imágenes: el logotipo es un archivo SVG. Donde hay imágenes, la conversión compensa, claro; como palanca principal solo sirve en páginas con mucha imagen.

Reducir más las tipografías. Alojamos dos familias tipográficas nosotros mismos y precargamos las necesarias en la zona visible. Una optimización adicional sería posible, pero no mueve el valor.

Ubicación del servidor. Muy recomendada, en nuestro caso irrelevante: el tiempo hasta el primer byte ya estaba en 20 milisegundos. Quien ya anda bien ahí no gana nada con una red de distribución.

El procedimiento para repetirlo

  1. Medir antes de cambiar nada. Móvil y escritorio por separado, anotando los valores.
  2. Buscar el archivo transferido más grande. Casi siempre es JavaScript. La pregunta no es cómo reducirlo, sino si hace falta.
  3. Revisar la compresión. No si está activada, sino para qué tipos de archivo.
  4. Contar las peticiones bloqueantes. Cada hoja de estilos en la cabecera retiene el primer renderizado.
  5. Comprobar los saltos de maquetación sin limitar la conexión. La única prueba que nos faltó.
  6. Volver a medir tras cada cambio. Si no, al final no se sabe qué ha surtido efecto.
Prompt
Ayúdame a traducir el informe de PageSpeed de mi página en un
orden de actuación. Sé estricto; no elogies nada.

Mis mediciones:
- Móvil: [puntuación], escritorio: [puntuación]
- LCP, TBT, CLS por dispositivo: [valores]
- Archivos transferidos mayores con su tamaño: [lista]
- Peticiones que bloquean el renderizado: [lista]
- Avisos del informe: [insertar texto]

Sobre la página:
- Cómo está construida: [CMS / estática / constructor]
- ¿Hace falta JavaScript para el contenido visible? [sí/no]
- ¿Cómo se entrega el CSS? [externo / por adelantado /
  parcialmente por adelantado]

Tareas:
1. Asigna cada aviso a una causa y di a qué métrica afecta:
   LCP, TBT o CLS.
2. Ordena las medidas por efecto por unidad de esfuerzo. Di en
   cada una cuántos puntos mueve de forma realista y por qué.
3. Nombra las medidas del informe que con mi tipo de
   construcción no aportan prácticamente nada, y justifícalo en
   lugar de omitirlas sin más.
4. Con cada archivo grande de JavaScript, pregunta primero si
   hace falta antes de proponer reducirlo.
5. Advierte si el CSS solo se entrega en parte por adelantado, y
   explica por qué eso puede ser peor para el CLS que no hacerlo.
6. Nombra qué debería volver a medir tras cada cambio.

No inventes mediciones.

Conclusión

La puntuación en sí no es el objetivo: es una medición, no un resultado de negocio. Lo que cuenta es la experiencia que hay detrás: una página legible a los 1,4 segundos la lee más gente que una que tarda seis segundos. En visitantes móviles con datos, la diferencia es mayor que cualquier optimización de texto.

El camino hasta ahí pasó en nuestro caso por una única pregunta recurrente: ¿necesitamos esto? Cinco de seis intervenciones consistieron en quitar algo, no en añadirlo.

Preguntas frecuentes

¿Cómo se llega a 100 puntos en PageSpeed Insights?

En la mayoría de las webs, mediante tres pasos: eliminar o sustituir el archivo de JavaScript más grande, activar de verdad la compresión para CSS y JavaScript, y eliminar los saltos de maquetación. Los formatos de imagen y la ubicación del servidor rara vez son el cuello de botella.

¿Cuánto importa el tiempo de carga para el posicionamiento en Google?

Es un factor confirmado, pero no fuerte: el contenido y la relevancia pesan más. El efecto mayor es indirecto: las páginas lentas se abandonan más a menudo, y ese comportamiento entra en la valoración.

¿Qué es el Cumulative Layout Shift y cómo se corrige?

La medida de los elementos que cambian de posición tras el primer renderizado. Causas más frecuentes: imágenes sin medidas fijas, hojas de estilo cargadas después y tipografías con métricas muy distintas. Se corrige haciendo que el espacio esté fijado de antemano, mediante indicaciones de ancho y alto o una proporción fija.

¿Conviene incorporar el CSS al HTML?

Con hojas de estilo pequeñas sí, pero entonces completas. Una incorporación parcial con el resto cargado después ahorra una petición y se gana a cambio saltos de maquetación en cuanto falta una regla de la zona visible. En nuestro caso eran 7 KB comprimidos: para eso compensa la incorporación completa.

¿Cuánto aporta renunciar a bibliotecas?

En nuestro caso, la partida individual mayor: 458 KB de biblioteca gráfica se convirtieron en 6 KB de código propio, más 114 KB de biblioteca de animación a cero. Que compense depende de cuánto de la biblioteca se use realmente; la medición señala el JavaScript no utilizado.

Marketing que se configura solo

La beta del Studio Engine está abierta. Reserva tu plaza y participa desde el principio.

Unirse a la beta →
← Volver al listado