Cómo mejorar la velocidad de carga de un sitio Web

Caso: ¿Cómo hicimos portent.com realmente rápido?

Nota: No soy un experto. Lo que leerán a continuación son cosas que adiviné sobre la marcha. Tengan cuidado, a menos que quieran que su equipo de informáticos les haga una visita echando humo por las orejas.

Algún día seré tan rápido como portent.com

No quiero impresionar a nadie, pero soy un poco obsesivo y competitivo. De verdad, aunque sé que lo escondo muy bien.

Siempre he estado obsesionado con el desempeño del sitio. Las páginas más rápidas son las que tienen más conversiones , pueden rankear mejor y disminuyen el bounce rate, lo que puede ayudar al desempeño del PPC. Una buena experiencia de usuario es lo que separa a los buenos sitios de los dios-mio-este-sitio-es-genial.

Así que me propuse como objetivo hacer que la página principal de portent descargase en un segundo o menos. Y aunque no estamos justamente ahí, casi lo logramos. Este es un reporte de pingdom, usando todas las locaciones (incluyendo Europa):

Biiiieeeen. Incluso en el más lento, estamos debajo de los 2 segundos. Eso me hace sonreír.

Esto es lo que mi equipo hizo (conmigo haciendo una mini administración y volviéndolos prácticamente locos):

Lo básico: Imágenes, compresión y optimización del código.

El desempeño de un sitio es como el ciclismo, si tienes los mejores aparatos y afeitaste tus piernas, pero estas en una mala condición física, sigues pedaleando como, bueno, yo. Si pones tu sitio en un servidor potente y rápido pero tus imágenes están perdidas en el código seguirás siendo malo. Así que, aquí está lo que hicimos primero.

  1. Pusimos los scripst y hojas de estilo en el orden ideal (tanto como se puede). El código externo CSS va primero. Después se incluye el javascript externo. Así muchos servidores descargarán en paralelo, lo que permite ahorrar un poco de tiempo.
  2. Comprimimos las imágenes. Casi suelto un juramento cuando vi que teníamos 3 imágenes a todo color en formato JPG. Pero me calmé y reducimos el porcentaje de bytes de transferencia en 20%.
  3. Actualizamos el análisis del javascript. Esto nos causó bastantes dolores de cabeza, así que lo dejamos de lado.
  4. Minimizamos el CSS, HTML y javascript. Minimizar es una bonita y sin sentido palabra que significa remover todos los espacios y enter. Lo que nos ahorró 2-3 kb por archivo, un total de 6-8 kb. Muy poco, pero ayuda.
  5. Especificamos las dimensiones para todas las imágenes. Esto hace que el tiempo de descarga percibido sea menor pues el explorador no intenta adivinar de qué tamaño son las imágenes.
  6. Prendimos la compresión del servidor. Los servidores web más populares (Apache y ISS, por ejemplo) pueden comprimir automáticamente HTML, CSS, Jvascript y otros archivos usando un algoritmo de compresión GZIP. Que es una manera elegante de decir, agregando una línea al archivo de configuración de nuestro servidor, cortamos el tamaño de transferencia para nuestra página en la mitad. No está mal.

Un secreto: Usé Google Page Speed  para todos los consejos arriba descritos. Deberían usarlo también.

Con lo anterior disminuimos el tiempo de descarga de la página de 3 a 4 segundos. ¿Satisfecho?, claro que NO.

Dándonos más lujos: Cabeceras que expiran

Obtener de 6 a 4 segundos fue lo máximo que pudimos exprimir de lo básico. Es tiempo de ponernos lujosos:

Activamos las cabeceras que expiran para archivos de un año a la fecha. Cuando visitas un sitio web, tu explorador almacena el cache en tu disco duro: hojas de estilo, imágenes, scripts, etc. Esto influye en la velocidad en la que carga una página la próxima vez que la visitas. El servidor envía esos archivos a tu explorador con cabecera de expiración, que le dice al explorador cuando debe re-cargarlos. Nuestro servidor marcó como default 24 horas para la mayoría de los archivos.

No es bueno. Ingenuo, de hecho. ¿Qué tanto cambiamos el logo del sitio? O ¿Nuestro fondo de pantalla?… una vez cada 3 años.

Configuramos nuestro servidor para que marcara con un año de expiración las páginas que se mantienen más estáticas.

Así, disminuimos otros .5 segundos del tiempo que tarda en cargar nuestra página. Pensamos: “Estamos haciendo muchos cambios de una sola vez”, así que es difícil de decir, pero, definitivamente ayudó.

Habilitar Keep-alives

No, esto no es sobre matar a la gente que visita nuestro sitio. Es sobre cómo nuestro servidor se conecta a tu explorador.

En no-geek, las características “Keep-Alive” comienzan diciéndole al servidor que mantengan la conexión mientras exploras el sitio. Eso reduce el número de veces que el servidor debe abrir nuevas conexiones, lo que salva procesador, memoria y sobre carga en la red.

¿Tiempo salvado? .2 segundos. Tus resultados pueden variar.

Cuando prendí esto por primera vez escribí en el archivo de configuración “Conneption:  Keep Alive”. Apache comenzó a reírse como histérico de mis habilidades tecleo y se bloqueo. Lección: Las computadoras son literales, pero tienen sentido del humor. Revisa los archivos de configuración cuidadosamente.

Deshazte de scripts molestos

Usamos WordPress. Que es genial el 90% del tiempo. Pero hay scripts molestos como cron.php, que se disparan cada vez que se carga una página.

Lanzar wp-cron cada vez que descargas una página es cómo darle a cada pasajero las instrucciones de qué hacer en caso de una emergencia en su camino a subir al avión en vez de dárselos a todos al mismo tiempo. Ineficiente y tonto así que lo cambiamos.

Aún mejor, de alguna manera Googlebot encontró admin-ajax.php y lo rastreaba cada 30 segundos. Lo que le dio un gran dolor de cabeza a nuestro servidor. Así que agregamos a nuestro robots.txt la indicación para que dejara de arañarlo y la vida volvió a ser buena.

Crear un CDN

Aún vemos lentitud debido a que las imágenes y otros archivos se transfieren lentamente para nosotros, o más lento para la gente alrededor del mundo. La respuesta: Hacer que nuestro sitio utilice una red de distribución de contenido o CDN.

Un CDN riega tus archivos en el internet en servidores especiales. Cuando la gente visita tu sitio acceden a estos archivos de servidores, locaciones y redes optimizadas para entregarlas de la mejor manera. El resultado es:

  1. Los archivos se transfieren rápido, porque están (Algunas veces) cercanos a ellos.
  2. El tamaño de la transferencia se reduce, porque el contenido entregado vía CDN captura cookies. Así que no hay información extra adjunta. Sólo los bits.

Tratamos algunas redes. Y, después de que casi lanzo mi escritorio a Nueva Jersey en un ataque de ira gracias al “servicio” a clientes, nos cambiamos a MaxCDN. Han sido fantásticos con nosotros desde ese momento.

Ahora nuestro sitio se estaba volviendo más veloz. El tiempo promedio ha disminuido a 2 segundos. El equipo, probablemente, pensó que había terminado y que podrían volver al trabajo real pero noooo, tenía más.

Latencia y APC

Nuestro sitio usa PHP y constante vemos alta latencia. La conversación ideal entre servidor y explorador debe ser esta:

Explorador: Hola Servidor

Servidor: ¡Hola!, ¿Qué hay?

Explorador: ¿Puedo obtener el sitio para portent.com?

Servidor: Claro, sin problemas.

La alta latencia hacen que sea más como esto:

Explorador: Hola Servidor

Servidor: ZZzzz

Explorador: ¡¿Servidor?!

Servidor: ZZZzzz (Ronquido) hey, disculpa. ¿Qué puedo hacer por ti?

Explorador: ¿Puedo obtener el sitio para portent.com?

Servidor: Claro, sólo un segundo, creo que lo tengo por aquí…

Explorador: …

Servidor: Ok, aquí esta.

 

Muchas cosas causan latencia. En nuestro caso, el gran cuello de botella era el PHP. Cada explorador requeria que el servidor ejecutara una gran cantidad de scripts php. Lo que era tonto, ya que la mayoría de esos scripts hacían la misma cosa 9 de cada 10 veces.

Así que activamos algo llamado PHP Cache Alternativo, o APC. APC le da al servidor los resultados de ejecutar el PHP.

Dejé que un desarrollador real se hiciera cargo de la actualización ACP para evitar arruinar el servidor. El resultado fue que la página disminuyó su tiempo de descarga entre .8 – 1.5 segundos. Hice el baile de la felicidad.

¿Qué sigue?

Estoy en una búsqueda, dura, y aún no estamos ahí. Quiero que el 80% de las páginas en Portent.com descarguen en 2 segundos o menos y casi estamos cerca:

Por cierto, el reporte es de Google Analytics.

Pasos siguientes:

Trata de optimizar la congestión inicial. Impulsándola, podemos incrementar la cantidad de datos entregados a exploradores cuando se conectan por primera vez al sitio.

Encuentra una mejor manera de entregar los fonts. Los fonts de la web son grandes, por ejemplo, nuestro CDN causa muchos problemas de ese tipo. Hay CDNs específicos para entregar fonts, los tratamos, pero disminuyeron nuestra velocidad. Aun así se los recomendamos.

Realizar arreglos en 100+ blog post y re optimizar imágenes. ¿Algún voluntario?…

Espero que esto también les ayude a aumentar la velocidad de sus sitios. Si ven alguna idea que se me olvidara, díganmelo.

 

 

Optimización de Blog Post

Una de las cosas que he aprendido de ser un blogger es, que un blog post (entrada o publicación hecha en un blog) puede tener dos vidas distintas. Al presionar el botón de publicar un blog post vive bajo los brillantes reflectores sociales. Pero pronto las luces se apagan y la multitud va a casa. Es tiempo de que ese blog post empiece a trabajar de 9 a 5, trayendo tráfico a tu sitio cada semana.

Optimizacion de Blog Post

Optimizar tus posts para ambos tipos de vida es importante pero necesita hacerse con algo de precaución. Aquí te muestro cómo hacerlo.

La Vida Social

La vida social de un blog post es corta, durando entre 48 horas y 2 semanas sí tienes suerte. Tu meta es generarle vida social a éste post. Quieres que ese post sea el alma de la fiesta, del que la gente está hablando, compartiendo y discutiendo.

Una de las mejores formas de lograr esto es optimizar tu parte social con un título conciso. Esto no significa que en el título no poduedas utilizar términos largos, pero debe ser aquel que pienses que va a atraer atención en tu industria.

Para mi post “¿Qué es SEO?” En un principio “¿Eres un Chef del SEO o un cocinero SEO?” De hecho, ésta es una versión modificada que adapté rápidamente después de ver un Tweet de Cyrus Shepard. (Gracias Cyrus)

Claramente no estoy tratando de posicionarme para el termino Chef SEO! En el fondo quiero posicionar para “¿Qué es SEO?” Pero había tejido el concepto en el post y el título parecía lo suficientemente provocativo para generar ruido añadido.

Así que ¿cómo hice para generarle vida social a éste post?Prueba Social

Nada mal. Estaba esperando más pero realmente no me puedo quejar de estos números.

La Vida de 9 a 5

El rápido re-envío de 10 días y la vida social de este post, esencialmente, había tomado su curso. Era tiempo de ponerse serio y ver si podía posicionar bien para el término “¿Qué es SEO?” Antes de cambiar el título del post, revisé en qué posición estaba para el término.

Que es SEO

28 no estaba tan mal

Cambié el titulo del post para que estuviera apropiadamente dirigido para “¿Qué es SEO?” y luego usé Google Webmaster Tools para pedir que Google rastreara la pagina de nuevo.

Cuatro días después vi que Google había reconocido el cambio y el post ahora estaba posicionado diferente para el término “¿Qué es SEO?”Que es SEO

 

Así que sin hacer más que cambiar el título del post fui capaz de subir 16 lugares para un término bastante competitivo. Sí no estas poniendo atención, permíteme ponerlo de otra forma, el poder de la etiqueta en el título no debe ser subestimado.

Hubiese sido bueno si este hubiera aterrizado a la primera página pero algunas veces las cosas no resultan exactamente como se planean. Y he caído hasta el puesto 15 para éste término, pues no he hecho construcción de links, ni internos ni externos, para ayudar a que alcance la primera página. (Si deseas ayudar, por favor adelante!)

Sinergia de Vida

Suena como alguna especie de culto new-age pero creo firmemente que parte de la razón por la que el post se posicionó tan bien como lo hizo, es por la vida social tan exitosa de éste post. Existe una sinergia entre la vida social y la vida de 9 a 5. Entre mejor vida social tengas, mejores oportunidades de que post tenga una productiva vida de 9 a 5.

Esto no es siquiera acerca de si las señales sociales están siendo usadas en el algoritmo. La prueba social crea un eco social que se traduce en links.

No se trata de que los links en Twitter o cualquier otra plataforma cuenten. Se trata de los links que obtienes de esa exposición adicional. Se trata de la persona que ve tu post compartido en Google+ y decide hacer un link a este, desde uno de sus blog post.

Mecánicas de Título

Encuentro que existe confusión acerca de lo que se puede y lo que debe ser cambiado, así que voy a revisar las mecánicas actuales acerca de este tipo de optimización de blog post.

Asegúrate de que tu dirección URL esté dirigida para el trabajo de 9 a 5.

Que es SEO URL

No quieres cambiar esto, así que hazlo bien desde el principio.

El título del blog post coincide con la dirección URL en éste caso. No tiene que hacerlo. Puedo cambiarlo a “La definición de SEO” y mantener la misma dirección URL. WordPress intentará hacer coincidir estos dos pero tú tienes el control. Da clic a editar y optimiza tu URL.

El título del blog post es diferente a la etiqueta del título para el post. Como les he mostrado, la etiqueta del título es muy importante.Optimiza el titulo de tu Post

 

Esto es lo que se utilizará en sus fragmentos sociales y se mostrará como el gran link azul en los resultados de las búsquedas en Google. Yo utilizo All in One SEO pero puedes hacer el mismo tipo de optimización usando el Plugin SEO de Yoast o SEO Ultimate. ¡El punto es realmente hacerlo!

Este tipo de optimización de blog trabaja mejor cuando lo has planeado con antelación. Si no lo has hecho, aún puedes regresar y usar SEO Judo para redirigir tus entradas mas antiguas.

La vida social de un blog post puede tener un impacto profundo en su habilidad para posicionarse bien y atraer tráfico. Usa la etiqueta de título para generar vida social y luego cámbiala para hacerla coincidir y posicionarse para tus palabras clave objetivo a largo plazo.