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

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.

Cómo instalar Magento

MagentoÚltimamente me había interesado por cómo crear un carrito de la compra con Paypal, para vender productos a través de Internet. Sin embargo, después de mucho buscar, el servicio técnico de Paypal, muy amablemente me ha comentado que:

  1. Paypal no puede restringir las compras según la ubicación geográfica. Así pues, si vendes usando los botones de compra de Paypal, tienes que vender forzosamente a todo el mundo, y no únicamente a una región o país concreto.
  2. Paypal no puede calcular los costes de envío según la dirección de destino del cliente. Así pues, con Paypal tienes que definir los gastos de envío para un paquete que irá a tu misma ciudad, o a la otra punta del mundo.

Sin embargo, el servicio técnico de Paypal me ha recomendado mirar «carritos de terceros» que se integran con Paypal, para realizar este tipo de configuraciones. Desde Paypal, recomiendan los siguientes:

Carros de código fuente abierto

Carros alojados

Me he decidido a probar Magento, básicamente porqué era el que más me sonaba (por no decir que era el único que me sonaba, a parte de osCommerce).

¿Cómo instalar Magento?

  • Primero tenemos que registrarnos en la web de Magento y descargar la última versión.
  • Después, en mi caso, he modificado el archivo robots.txt de mi servidor para denegar el acceso a la carpeta que contendrá el e-commerce (no me interesa que Google y el resto de buscadores indexen este tipo de contenido), tal y como sigue:

User-agent: Googlebot
Disallow: /magento/

User-agent: *
Disallow: /magento/

  • Una vez subida la nueva versión del archivo robots.txt, he subido el directorio magento (que contiene los más de 9000 ficheros que componen la aplicación) a la raíz de mi servidor.
Siguiendo los pasos descritos aquí, he conseguido instalar y configurar Magento. Por si las moscas, describo los pasos a continuación, ya que algún paso extra he tenido que hacer:
  • En mi hosting, he creado una nueva base de datos MySQL que usará Magento. Esto dependerá del hosting, pero la mayoría de hostings ponen muchas facilidades para hacer este tipo de tareas.
  • Posteriormente, he cambiado los atributos de los siguientes archivos y directorios, a 777 (tranquilos, esto también lo comenta la documentación oficial de instalación de Magento). Esto se puede hacer con el comando «chmod» o haciendo click derecho sobre el arhivo o carpeta desde tu cliente FTP favorito:
    • Archivo magento/var/.htaccess
    • Directorios magento/app/etc y magento/var
    • Todos los directorios dentro de magento/media (no incluido)
  • Además de esto (y con tal de solucionar un «ERROR 500 – Internal Server Error»), he tenido que modificar el archivo .htaccess de la raíz de mi servidor (no el archivo .htaccess de magento), para permitir la escritura del directorio magento, añadiéndo la siguiente línea:

RewriteBase /magento/

  • Una vez cambiados los permisos y el archivo .htaccess de mi servidor, he entrado por navegador a la dirección http://miweb.com/magento/install.php, el cual ha mostrado un asistente para la configuración de Magento, que ha consistido en:
    • Aceptar las condiciones de uso
    • Seleccionar las opciones de ubicación, zona horaria, y moneda.
    • Indicar el nombre del host, base de datos y credenciales para la base de datos MySQL creada anteriormente para Magento. En este punto, además, se me han presentado diversas opciones para modificar el acceso web a Magento, así como para almacenar las opciones de sesión. NOTA: Al aceptar este punto, se ha pasado a crear la base de datos de Magento, lo cual en mi caso, ha tardado varios minutos.
    • Indicar los diversos datos del que será el administrador de Magento, así como los datos de inicio de sesión.
  • Con esto he conseguido tener Magento instalado en mi servidor.
En breve (espero) un nuevo post sobre los primeros pasos con la configuración de una tienda con Magento.

SEO: Títulos y descripciones

Siguiendo con todo el tema posicionamiento web en buscadores (SEO), me he encontrado con este manual en castellano, hecho por Google, que da consejos básicos pero importantes para un buen posicionamiento.

Particularmente, creo que lo que más determina el posicionamiento, es el Page Rank los enlaces a tu site, seguido del contenido de tu sitio web, y su frecuencia de actualización, y ya en última instancia y con una importancia mucho menor, la limpieza del código, el tipo de programación, los meta-tags, el nombre de las páginas web, y un largo etcétera.

De este último grupo de múltiples acciones a realizar para obtener poco beneficio a cambio, quizá haya dos puntos que puedan ser más importantes que el resto:

  • El tag «title» que contiene el título de la web.
  • El meta-tag «description» que contiene la descripción de la web (Google comenta que este parámetro NO interviene a la hora de posicionar la web, y que su único uso real es el de permitir al usuario conocer lo necesario como para decidir si tu web es o no lo que andaba buscando. Fuente aquí).

Google nos recomienda (y por tanto nos vemos casi obligados a obedecer) tener un título y una descripción diferentes para cada una de las páginas que conforman nuestro sitio web, y además, nos comenta la importancia de generar buenos títulos y descripciones.

Herramientas para webmasters de Google

Para ello, en las Herramientas para webmasters de Google, se nos ofrecen herramientas de diagnóstico que nos validan la conveniencia o no de nuestros títulos y descripciones.

Sin embargo, es muy posible que Google nos comente que no se pueden extraer datos de nuestro sitio web, para generar las sugerencias HTML de las Herramientas para webmasters. En este caso, posiblemente debamos añadir nuestro dominio tanto con el prefijo www. como sin él, en las Herramientas para webmasters, con tal de evaluar ambos sitios.

En mi caso, me he encontrado que el sitio indexado por Google era el dominio sin www. , cuando el que yo había añadido a las Herramientas para webmasters era precisamente, el dominio con www.

Una vez añadidos los dos dominios, he podido obtener las sugerencias de Google respecto a los títulos y descripciones de mi página web.

Títulos y descripciones: conclusión

Volviendo al tema de los títulos y las descripciones, Google nos recomienda:

  • Crear descripciones sin contenido duplicado, donde se presente la información de forma clara y separada. Las buenas descripciones han de ser completamente comprensibles para los usuarios, ya que es a éstos a quien van dirigidas, y sobre todo, descriptivas.
  • Crear títulos que también describan cada web. Por ejemplo, no es bueno incluir únicamente el nombre de un producto en el título, sino que se recomienda incluir qué hace ese producto, o cuales son las principales funcionalidades del mismo, del estilo «Nombre del producto: palabras clave«. Todo, en un máximo de unos 60 caracteres. Google lo comenta aquí, destacando que un buen título:
    • Aprovecha al máximo el espacio dado al título.
    • Describe de forma precisa la página y el producto tanto a los motores de búsqueda como a los usuarios.
    • Incluye palabras que los usuarios usarían para encontrar el producto.