Optimiza el rendimiento de tu web

A raíz de EventoSEO, he mirado de optimizar el rendimiento de alguna de mis webs. Agarráos que esta entrada será larga, porqué voy a explicar algunos pasos que he dado para optimizar mi sitio web:

  1. Instala (si no lo tienes ya) Firebug y Google PageSpeed para Firefox.
  2. Desde Firefox -> Herramientas -> Firebug, abre Firebug y sitúate sobre la pestaña «Page Speed».
  3. Abre una nueva pestaña y entra en la web que quieres analizar. Espera hasta que esté cargada completamente (verás el «Terminado» abajo a la izquierda en el navegador).
  4. Si no estás viendo la sección del Firebug, podrás verla pulsando sobre el icono de Firebug en la barra de tareas inferior de Firefox.
  5. Pulsa sobre la opción Analizar para obtener las recomendaciones a seguir para optimizar tu web, como por ejemplo, optimizar la compresión de las imágenes (Google Page Speed ya te ofrece las imagenes problemáticas listas para descargar en su versión optimizada), comprimir la web con Gzip o minimizar el código CSS o HTML inútil.
  6. Siguiendo las recomendaciones obtenidas, se puede llegar a optimizar el rendimiento de nuestra web consiguiendo así una mejor indexación en el índice de Google, además de una mejor experiencia para el usuario.

Además de la optimización de las imágenes, dejo aquí algunas alertas que he recibido, junto a su solución:

Minimize CSS

Esto es tan fácil como descargar el archivo css que propone Google, el cual elimina espacios y saltos de línea innecesarios, y reemplazárlo por el original.

Minimize HTML

Igual que en el caso anterior, bastará con descargar el archivo propuesto por Google, el cual elimina espacios y saltos de línea innecesarios. Pero atención, si eres de los que programa con tabulaciones, para dejar un código límpio y fácil de leer, esto te lo va a destrozar. Guárdate una copia en local.

Minimize Redirects

Con mensajes de error como los siguientes:

Remove the following redirect chain if possible:

Este problema venía dado por que a estas imágenes se les hacía referencia desde el código como 02.jpg, mientras que su nombre era 02.JPG. Símplemente cambiando la extensión .JPG por .jpg se ha solucionado.

Opciones de servidor

Finalmente, tambien he obtenido alertas bastante más difíciles de solucionar. Concretamente, alertas correspondientes a opciones a cambiar o a habilitar en mi servidor web, que resulta ser un hosting compartido sobre el que no tengo acceso directo.

A pesar de eso, he conseguido obtener detalles sobre mi servidor web subiendo un fichero llamado info.php con una única línea de código:

<? phpinfo() ?>

Consultando esta web desde el navegador (http://www.misitio.com/info.php) se obtienen los detalles del hosting. Con esto y con la creación (o modificación) de un fichero .htaccess en la raíz de mi sitio web (con los detalles correspondientes) se puede llegar a solucionar algunos problemas, como los siguientes:

Leverage Browser Caching

Bastará con añadir líneas que controlen la caché para algunos elementos de nuestra web, en nuestro archivo .htaccess

Para ello, podremos usar el siguiente código

####### LeverageBrowserCaching #####
# 1 WEEK
<FilesMatch «\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$»>
Header set Cache-Control «max-age=604800, public»
</FilesMatch>

# 2 DAYS
<FilesMatch «\.(xml|txt)$»>
Header set Cache-Control «max-age=172800, public, must-revalidate»
</FilesMatch>

# 2 HOURS
<FilesMatch «\.(html|htm)$»>
Header set Cache-Control «max-age=7200, must-revalidate»
</FilesMatch>

#######################

La fuente de información es esta.

Enable Compression

Podremos habilitar la compresión tanto para las hojas de estilo como para los archivos html. Sin embargo, esta opción necesita que el servidor tenga instalado el módulo para comprimir, como el mod_gzip.

En mi caso he tenido que pedirle a mi hosting su instalación. Aún estoy esperando respuesta, y de momento, continúo con esta advertencia en el Page Speed Score.

Serve static content from a cookieless domain

Aquí, PageSpeed me pide «Serve the following static resources from a domain that doesn’t set cookies:» indicándo algunas imágenes, así como la hoja de estilos.

Para ello, en un segundo dominio diferente al dominio original, he creado varios sub-dominios (esto en realidad no haría falta, pero por temas de optimización, he creado un sub-dominio cada 3 imágenes, para poderlas cargar en paralelo. Si no sabes de qué hablo mírate este post).

Por cierto, no sé por qué extraña razón, mi hosting tarda unas 3 horas en crear un sub-dominio.

En resumen, si PageSpeed nos comenta usar un dominio libre de cookies, es porqué detecta que el actual no lo es. Según leo aquí, para usar un dominio libre de cookies, deberás usar un dominio que siempre haya estado libre de cookies (nunca haya requerido ningún tipo de inicio de sesión, ni logueos, ni Google Analytics activado para este dominio).

Una vez hecho esto, he redireccionado todos los sub-dominios a un directorio en mi servidor, donde tengo todas las imágenes.

Posteriormente, en el código fuente, he llamado a las imágenes, pero en lugar de usar «imagenes/1.JPG» he usado «http://1.sub-dominio.segundodominio.com/1.JPG», para llamarlas usando los nuevos sub-dominios.

Otros detalles

Aún me quedan algunos detalles que pulir, como por ejemplo que cada página use su propio archivo de hojas de estilo, con los estilos que use esa página. El problema de usar una única hoja de estilos global, es que la mayoría de páginas no usarán ni la mitad de los estilos definidos en el css común.

Entiendo, que lo ideal sería crear una hoja de estilos con los estilos comunes en todas las páginas, y a partir de ahí, una hoja de estilos personalizada para cada página.

También me queda pendiente habilitar la compresión en el servidor (me temo que tendré que pelearme con mi hosting), y finalmente también pulir el CSS, que todo y que es totalmente válido (validado con el validador de w3cschools) se me queja de que no es todo lo eficiente que debería ser.

De todas maneras, ya estoy en 93 – 95 sobre 100, en cuanto a puntuación de Google Page Speed, y la verdad, se nota.

Cupones de descuento

Una funcionalidad interesante en Magento, es la posibilidad de usar «cupones de descuento» o «códigos promocionales» para ofrecer descuentos a ciertos clientes.

De esta forma, un cliente puede entrar en tu tienda, e introducir un código promocional para beneficiarse de un descuento préviamente definido.

Esto se puede hacer, desde el panel de administración de Magento, desde Promociones -> Reglas de precios del carrito de compras -> Añadir nueva regla. Desde aquí, se podrán definir cosas tan interesantes como:

  • Si el descuento se dará únicamente al introducir un código de cupón, o se dará siempre. En caso de requerir cupón, se podrá introducir un código de cupón manual, que posteriormente deberán introducir los clientes para obtener el descuento.
  • El número de usos que se podrá hacer del cupón (para controlar el número máximo de compras que se podrán hacer con este mismo cupón).
  • Fecha de inicio y fecha de fin de validez del cupón.
  • Tipo de descuento: porcentaje, fijo o ofertas tipo «compra 3 y paga 2».
  • Cantidad del descuento.
  • Posibilidad de envío gratuito.
  • Posibilidad de aplicar el cupón al total de la compra, en lugar de aplicarse al precio base del producto.

Un gran invento este de los cupones de descuento.

Error Magento y PayPal Express

MagentoHace unos días publiqué una entrada hablando sobre cómo integrar Magento (1.4.1.1) con PayPal Express. Todo parecía funcionar de fábula cuando se realizaban compras desde cuentas de PayPal. Sin embargo, si el comprador no tenía una cuenta de PayPal y únicamente quería efectuar un pago con tarjeta de crédito, la compra se realizaba de forma satisfactoria pero mostraba el siguiente mensaje al final del proceso de venta:

«El pago no se puede procesar mediante su cuenta de paypal en este momento»

¡Toma ya! La compra se realiza correctamente pero se le dice al comprador justo lo contrario. Feo, feo.

Después de mucho pelearme contacté con el soporte técnico de PayPal, quien ha estado ayudándome (y mucho) a solucionar la incidencia.

El problema es el siguiente:

Cuando se realiza el proceso de compra, se utiliza una función de PayPal llamada «DoExpressCheckoutPayment». En las compras que funcionan, el campo «successpageredirectrequested» está a «false», mientras que las compras que también funcionan pero a las que se les muestra el mensaje de error anterior, este campo está a «true».

En palabras del soporte ténico de PayPal:

De acuerdo con este enlace
https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_nvp_r_DoExpressCheckoutPayment

«Flag to indicate whether you need to redirect the customer to back to PayPal after completing the transaction. »

Es una opción para indicar si se necesitar redirigir al comprador de nuevo a PayPal tras completar la transacción, que no tiene mucho sentido ya que la transacción ya ha finalizado correctamente.

Finalmente, he aquí la conclusión por parte de PayPal:

SUCCESSPAGEREDIRECTREQUESTED se solía utilizar en versiones muy antiguas de PayPal, y tenía como propósito indicar que el comprador había pagado con tarjeta directamente, para que las integraciones que así lo tuvieran dispuesto, redirigieran al comprador de nuevo a la página de PayPal por si quería abrir una cuenta para usarla en un futuro (en vez de seguir pagando como invitado).

Parece que esto ya no está en vigor, por lo que una redirección final provocaría un error.

Es decir, Magento está usando un método obsoleto, y esto está devolviendo un mensaje de error falso, en el proceso de compra.

Siguiendo las indicaciones de este foro de discusión (y también los consejos del soporte de PayPal), he pasado a modificar el archivo app/code/core/Mage/Paypal/Controller/Express/Abstract.php

Concretamente, de la siguiente función, he comentado las líneas en negrita:

public function placeOrderAction()
{
try {
$this->_initCheckout();
$this->_checkout->place($this-

>_initToken());

// prepare session to success or cancellation page
$session = $this->_getCheckoutSession();
$session->clearHelperData();

// «last successful quote»
$quoteId = $this->_getQuote()->getId();
$session->setLastQuoteId($quoteId)->setLastSuccessQuoteId($quoteId);

// an order may be created
$order = $this->_checkout->getOrder();
if ($order) {
$session->setLastOrderId($order->getId())
->setLastRealOrderId($order->getIncrementId());
// as well a billing agreement can be created
$agreement = $this->_checkout->getBillingAgreement();
if ($agreement) {
$session->setLastBillingAgreementId($agreement->getId());
}
}

// recurring profiles may be created along with the order or without it
$profiles = $this->_checkout->getRecurringPaymentProfiles();
if ($profiles) {
$ids = array();
foreach($profiles as $profile) {
$ids[] = $profile->getId();
}
$session->setLastRecurringProfileIds($ids);
}

// redirect if PayPal specified some URL (for example, to Giropay bank)
$url = $this->_checkout->getRedirectUrl();
//if ($url) {
//$this->getResponse()->setRedirect($url);
// return;
//}

$this->_initToken(false); // no need in token anymore
$this->_redirect(‘checkout/onepage/success’);
return;
}
catch (Mage_Core_Exception $e) {
$this->_getSession()->addError($e->getMessage());
}
catch (Exception $e) {
$this->_getSession()->addError($this->__(‘Unable to place the order.’));
Mage::logException($e);
}
$this->_redirect(‘*/*/review’);
}

Con esto se evita la redirección por parte de Magento al recibir el parámetro obsoleto, y se consigue completar correctamente el proceso de compra, esta vez, sin mensajes de error.

ATENCIÓN: Se recomienda realizar todos los tests que se crean convenientes antes de adaptar esta solución a tu sitio web en producción.

PD: Sí, ya he contactado con Magento para avisarles de este error, que podéis ver explicado aquí (si tenéis cuenta en Magento).

Actualizar WordPress

MiedoLa verdad es que paso miedo cada vez que actualizo WordPress.

Me entran sudores fríos solo de pensar que algo puede salir mal, con lo que tendría que volver a cargar la versión anterior.

Ya me pasó una vez, hace ya bastante, que no recuerdo por qué razón, tuve que restaurar un blog, del que tenía copia de seguridad (tanto a mano con PHPMyAdmin como con alguno de los plugins de WordPress) pero no hubo manera de restaurarlo. Siempre daba un error durante la ejecución de la query con PHPMyAdmin. Algo de la estructura de la base de datos no cuadraba con las instrucciones de la query, es decir, había instalado una versión que no concordaba con la versión que tenía en el momento del último backup.

No conseguí de ninguna de las maneras encontrar por el backup la versión de WordPress que necesitaba, y después de muchos intentos, decidí que ese blog tampoco era tan importante… Ahora lo echo en falta.

En cualquier caso, nunca falla, siempre que tengo que actualizar, visito esta web donde explica en 4 sencillos pasos cómo hacerlo para asegurarnos de que no hay problemas, que paso a reproducir a continuación (copy & paste):

  1. Descarga la nueva versión y la descomprimes en tu ordenador
  2. Desactiva los plugins instalados en tu instalación actual (todos)
  3. Sube los ficheros de la nueva instalación a tu servidor pero no sobreescribas la carpeta wp-content. Por si acaso haz copia de esta carpeta en tu ordenador antes de actualizar y así salvaguardar tus plugins, temas y archivos subidos.
  4. Visita la página : http://tublog.com/wp-admin/upgrade.php para actualizar la base de datos.
  5. Y aquí un paso que añado yo:

  6. Activa de nuevo tus plugins, desactivados en el punto 2

Mira que es fácil, pero siempre lo paso mal.

Flickr! Foto por Arturo J. Paniagua

421 4.2.1 unable to connect

SPAMBajo este título tan descriptivo, se encuentra un problema con el que me he peleado esta mañana.

El servidor de correo MS Exchange 2007 de un cliente, no podía enviar correos de salida (los correos enviados dentro de su propia red sí funcionaban) y no dejaban de amontonarse en la cola de salida del servidor de mail.

El Exchange, mostraba el siguiente mensaje:

«451 4.4.0 Primary Target IP address responded 421 4.2.1 unable to connect. Attempted failover to alternate host, but that did not suceed. Either there are no aternate hosts or delivery failed to the all alternate host.»

Hemos estado mirando documentación al respecto, intentando detectar el problema:

Finalmente, hemos pensado que podía tratarse de un bloqueo que se realizaba una vez pasado el firewall, puesto que hemos visto que los correos parecían llegar a él. Hemos pasado a utilizar MXToolbox para comprobar la dirección IP de salida de correo, en la siguiente dirección:

http://mxtoolbox.com/SuperTool.aspx

Hemos introducido el siguiente texto en la casilla:

blacklist:IP_de_salida ,donde IP_de_salida corresponde con la IP pública de salida de correo

Ahí hemos visto que efectivamente, estábamos dentro de una blacklist, en la cual habíamos entrado un día antes de que empezaran los bloqueos. En la misma página de la blacklist, hemos podido comprobar las (pobres) razones del bloqueo hacia nuestra IP, y por tanto, encontrar la presumible causa del problema.

Finalmente, hemos cambiado la dirección IP de salida de correo (contábamos con varias ADSL de salida) y la incidencia se ha solucionado.

Esto nos ha hecho pensar en que seguramente exista la necesidad de implementar algún tipo de mecanismo de monitorización de correo de salida, de igual forma que las empresas tienen sistemas de antispam de entrada, puesto que las consecuencias del «spam» de salida pueden llegar a ser mucho peores que las molestias que provoca el spam de entrada.

Tendremos que buscar si existe una solución así.

Flickr! Foto por freezelight

Wake On LAN

Encendido del PCWake On LAN, como su nombre indica (o debería indicar) es un método para encender equipos remotamente que se encuentran dentro de nuestra misma red de área local.

Para poder encender equipos mediante Wake On LAN, es necesario que la tarjeta de red del equipo soporte Wake On LAN (verás que la tarjeta de red tiene una entrada con 3 pins donde podremos conectar un cable que irá a la placa base). Puedes consultar tu modelo de tarjeta de red para comprobarlo, aunque yo lo he hecho y en la página del fabricante (3com) no indica nada de WakeOnLAN.

Además de la tarjeta de red, se necesita que la placa base soporte WakeOnLAN (tendrá una entrada de 3 pins idéntica a la de la tarjeta de red con la indicación WOL).

Así pues, deberemos conectar la entrada de la tarjeta de red con la de la placa.

Finalmente, se necesitará configurar la BIOS para dejar el WakeOnLAN preparado para funcionar. Para ello, desde «Power Management Features» o «Power Management Setup» dependiendo de la BIOS, marcando la función «Wake Up On LAN/Ring» a «Enabled», dentro de la sección «Wake Up Events».

Fuente: http://www.adslzone.net/tutorial-20.21.html#1.2

Flickr! Foto por whyamiKeenan

Integrar Magento con PayPal

A día de hoy, la mejor integración que he encontrado para realizar pagos con PayPal a través de Magento es usar el método PayPal Express. Esto nos permite que los datos recogidos por el formulario de Magento se envíen al formulario de pago de PayPal, consiguiendo así que el usuario no tenga que introducir sus datos por duplicado (una vez en Magento y otra en PayPal).

Para conseguir esta integración, hemos de seguir estos pasos:

  1. Desde nuestra cuenta de Paypal, iremos a Mi cuenta -> Perfil -> Más opciones
  2. En la columna izquierda, iremos a Información de cuenta -> Acceso a API
  3. Desde aquí, seleccionaremos la segunda opción «Opción 2: Solicitar credenciales de API para crear su nombre de usuario y su contraseña propios de API.». Esta opción será la ideal para trabajar con nuestro Magento. Una vez creada la firma de API, deberemos guardar a buen recaudo esta información (siempre será accesible desde esta opción en PayPal).
  4. Posteriormente, desde la administración de Magento, nos dirigiremos a Sistema -> Configuración -> Ventas -> Paypal, desde donde activaremos el checkbox PayPal Express (yo recomendaría deshabilitar la casilla de PayPal normal, para no crear confusión al usuario).
  5. Desde «API/Integration Settings» podremos añadir el nombre de usuario, password y firma creados en el punto 3.
  6. Desde «Express Checkout Settings» podremos personalizar un poco el tipo de compra que se realizará. Así por ejemplo, podremos cambiar la «Acción de pago» por «Venta», así como permitir las compras de usuarios «Invitado» en Magento.

Actualización 1: En el segundo comentario se explica con detalle esta configuración.

Actualización 2: Se ha detectado un error con PayPal Express y Magento 1.4.1.1, explicado y solucionado en este otro post.

Cambiar el idioma en Magento

MagentoPodemos cambiar el idioma de Mangento al Español (o a cualquier otro lenguaje) siguiendo estos pasos:

  1. Descargar el paquete del idioma seleccionado en la página oficial de Magento, sección de traducciones.
  2. Una vez descargado, subir el directorio «app» que contiene el paquete de la traducción, a la raíz de la instalación de Magento en nuestro servidor. De esta manera, no subiríamos el directorio «es_ES» si no que en su lugar subiríamos directamente el directorio «app» que se encuentra dentro de «es_ES».
  3. Posteriormente, desde el panel de administración de Magento, nos dirigiremos a System -> Configuration -> General tab -> Locale options, y seleccionaremos el idioma del paquete que acabamos de subir. En el ejemplo «español (España)».
  4. Guardaremos los cambios.
  5. Finalmente, desde System -> Caché Management, seleccionaremos todas las opciones y pulsaremos sobre «Enviar» una vez seleccionada la opción «Refresh».
  6. Con esto tendremos Magento configurado al Español.

Fuentes:

Primeros pasos con Magento

¿Cómo empezar con Magento?

Una vez instalado Magento, he pasado a intentar configurarlo siguiendo los pasos descritos a continuación:
  • Entrar en el panel de control de Magento, desde http://myweb.com/magento/index.php/admin
  • Desde System -> Configuration -> General, configurar las opciones básicas sobre la tienda, además de delimitar las ventas para un determinado país (Paypal no nos lo permitía).
  • En mi caso he tenido que re-indexar algunas tablas de la base de datos al advertir un aviso en el menú superior de Magento, símplemente pinchando en el enlace que me ha proporcionado el mensaje de aviso, y seleccionando «reindexación».
  • También he tenido que aplicar el parche 1.4.1.1 (tenía otro aviso al respecto) descargándolo desde aquí y subiéndolo directamente al servidor, pero parece que no se da por enterado y continúa apareciéndome el mensaje.

Ahora, bien, ¿Cómo empezamos a montar nuestra tienda?

Productos y Categorías

  • Desde Catalog -> Manage Categories, podemos empezar por crear una nueva categoría que cuelgue de la categoría Default Category. Es importante no eliminar esta categoría por defecto, puesto que nuestra tienda por defecto (System -> Manage Stores -> Main Website Stores) tiene como «root category» esta categoría «Default Category».
  • Una vez creada la categoría, podremos crear nuestro primer producto desde Catalog -> Manage Products, donde deberemos indicar todo un seguido de detalles respecto a nuestro producto. Destaco lo siguiente:
    • Prices -> Price: El precio sin IVA ni gastos de envío ni manipulación.
    • Prices -> Cost: El coste real del producto (únicamente como información interna, y por lo tanto, no visible para el cliente final).
    • Prices -> Tax Class: Aquí seleccionaremos el tipo de impuestos que se le aplicará al producto. Se recomienda dejar la opción por defecto y posteriormente modificarla.
  • Posteriormente, y de nuevo desde Catalog -> Manage Categories, deberemos seleccionar la pestaña «Category Products» y marcar el producto que hemos creado, recordando guardar los cambios, para incluir el producto en la nueva categoría.
  • IMPORTANTE: Para que el producto sea visible en la web, deberemos desde Catalog -> Manage Products, editar el producto y desde la opción «Inventory», asegurarnos de tener como «Qty» (cantidad) un valor mayor que el indicado en «Qty for Item’s Status to become Out of Stock», que por defecto es cero. Así, podemos poner como «Qty» por ejemplo, que tenemos un stock de «50» unidades. Además, deberemos asegurarnos de cambiar el valor de «Stock Availability» de la misma sección, a «In Stock».

Impuestos

  • Desde Sales -> Tax -> Products Tax Clases, crearemos un nuevo impuesto para nuestros productos. Desde aquí únicamente crearemos el nombre del impuesto (por ejemplo, IVA).
  • Una vez creado el nuevo impuesto, desde Sales -> Tax -> Manage Tax Zones & Rates, podremos definir un nuevo valor para nuestro impuesto creado en el punto anterior. Por defecto, vienen dos reglas de impuestos para Estados Unidos. Para España, bastará con crear un nueva entrada seleccionando como país «España», como «Rate Percent» un «18» (por ciento), con el resto de opciones por defecto.
  • Finalmente, desde Sales -> Tax -> Manage Tax Rules, podremos crear el nuevo impuesto seleccionando el «Product Tax Class» y el «Tax Rate» creados en los dos pasos anteriores. Esta nueva «Tax Rule» será la que deberemos especificar en nuestros productos desde Catalog -> Manage Products -> Editamos el producto -> Prices -> Tax Class.
Gastos de envío

  • Los gastos de envío se pueden especificar desde System-> Configuration -> Sales -> Shipping Methods, donde en primer lugar deberemos desactivar el método de envío «Flat Rate» cambiando «Enabled» a «No».
  • Posteriormente, cambiaremos a «Table Rates» para habilitar esta opción, haciendo los cambios deseados, y a continuación guardaremos. Hay que tener en cuenta, que los campos «Title» y «Method Name» se mostrarán durante el proceso de compra del artículo, al cliente.
  • Una vez guardado, desde la opción «Current Configuration Scope» en la parte superior del menú izquierdo, seleccionaremos la opción «Main Website«. Desde aquí, podremos primero descargar un archivo csv que rellenaremos con los datos de los envíos, para posteriormente subir este mismo archivo, ya con los precios de los envíos. A continuación un ejemplo de hoja de envío, donde se ha introducido el código ESP para España, y las regiones de Barcelona y Baleares tal cual aparecen en el desplegable que muestra Magento al seleccionar las regiones de España durante una compra:
Country Region/State Zip/Postal Code Weight (and above) Shipping Price
ESP Barcelona * 10 15,7
ÊSP Baleares * 10 25,8
ESP * * 10 20,82
Enlaces
Y finalmente, enlaces útiles con más información sobre estas configuraciones:

Apuntes de EventoSEO

Hoy he tenido la fortuna de asistir a EventoSEO en Barcelona. No era nada planeado (en realidad me he apuntado una hora antes que empezara el evento) pero ha merecido la pena.

A modo de recordatorio, dejo aquí mis anotaciones:

PERFORMANCE

  • Hoy en día Google está valorando muy positivamente el «performance» o rendimiento de las páginas web, es decir, la velocidad de carga.
  • Google tiene a disposición de los usuarios Google Page Speed para evaluar el performance.
  • La media de carga de las páginas en España según Google es de 1,5 segundos, sin imágenes. Lo cual quiere decir que deberíamos llegar a este valor, y nunca sobrepasar los 2,5 segundos.
  • Para mejorar el performance, se puede optar por usar CSS Sprites, así como por eliminar las imágenes e iconos irrelevantes.
  • Sabiendo que los navegadores pueden descargar hasta 3 imágenes en paralelo por dominio o sub-dominio, se puede mejorar el performance incluyendo las 3 primeras imágenes de la web en el sub-dominio 1, las siguientes 3 en el sub-dominio 2, y así sucesivamente.
  • Algo que puede mejorar mucho el performance, es eliminar los espacios, puntos y coma innecesarios, intros, etc. de nuestras hojas de estilo, así como eliminar todas las clases e identificadores no usados, además de usar GZIP para los CSS.
  • Finalmente, pero no menos importante, es la conectividad del servidor que aloja la web. El servidor tiene que tener suficientes recursos y una buena conexión para obtener un buen performance, en otro caso, puede impactar muy negativamente en el tiempo de carga, y por tanto, en la indexación.

PENALIZACIONES

  • El contenido duplicado causará una de las dos penalizaciones más importantes de Google. Se puede prevenir el contenido duplicado con «No index» o con «Canonical» (calculado por página, nunca de forma global) pero nunca usando ambos a la vez.

GEOLOCALIZACIÓN

  • Para webs en múltiples idiomas, se recomienda usar dominios geolocalizados. De esta manera, tendremos un dominio .es para España, otro .it para Italia, etcétera.
  • La redirección de la home al dominio geolocalizado deberá hacerse con la redirección pertinente. No es lo mismo usar una redirección 301, que una 302 o una 307. Con algo de polémica entre los ponentes, se recomienda usar esta última, para prevenir generar contenido duplicado con la 302.

NOTAS

  • Algunas utilidades para la monitorización web del performance, son YSlow y Page Speed de Google, aunque si no se dispone de una línea suficientemente buena (9 MegaBytes) solo nos quedará usar las herramientas para webmasters de Google como analizador del performance.
  • Otra utilidad para el código es Firebug.
  • Se recomienda que el 75% del código sea contenido, por un 25% de código utilizado para la navegación (el propio código fuente para la maquetación). Para reducir el tanto por ciento de código utilizado para navegación, se puede usar ajax, por ejemplo para incluir el menú en javascript (que no cuenta como código indexable).
  • Se aconseja, programar con CSS que lo primero que se muestre sean los H1, seguidos de H2, contenido y finalmente el código de navegación, por tema indexación.

Sin duda, habrá que estar atento a este tipo de eventos.