optimizacion web
7

Escrito por

NOTA: Se puede necesitar cierto conocimiento del uso de la herramienta ModRewrite para comprender este artículo.

Hace relativamente poco tiempo, Google ha comenzado a dar más importancia a las URLs como contenido duplicado (o al menos, ha comenzado a hacerlo de forma pública, a través de webmaster tools) de modo que una URL es ahora sensitiva a mayúsculas y minúsculas.

google webmaster tools

Esto quiere decir, que a ojos de Google, las siguientes URL no son la misma (y por lo tanto, la considera contenido duplicado porque encuentra dos páginas diferentes con la misma META descripción):

http://www.pagina.com/articulos/articulo-numero-uno
http://www.pagina.com/articulos/Articulo-Numero-Uno

El «problema» es muy sencillo de solucionar por medio de -la siempre inestimable ayuda de- ModRewrite.

Los que no lo conozcan, ModRewrite es un módulo para el servidor web Apache, que se encarga de traducir, redireccionar y modificar direcciones URL para hacerlas más «amigables». Prácticamente, hoy en día, y sobretodo de cara al posicionamiento, es una herramienta indispensable.

Un ejemplo sencillo de esta herramienta sería la siguiente:

RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} ^.*Googlebot.*$
RewriteRule ^/robots.txt$ /robots.php?ua=google [L]

Donde:

  • Con RewriteEngine activamos el motor de ModRewrite.
  • Con RewriteCond establecemos una precondición en la que se activará si el User-agent (identificación del navegador) contiene la palabra Googlebot (haciendo uso de expresiones regulares).
  • Si la precondición anterior se cumple, con RewriteRule haremos una redirección de modo que si se pide el archivo robots.txt, en realidad haremos la petición robots.php?ua=google.
  • Con [L] le decimos a ModRewrite que no realice más redirecciones.

Podemos ver, sin lugar a dudas, que con muy pocas lineas podemos conseguir resultados muy potentes. Generalmente se utilizan para conseguir que las direcciones visibles sean sencillas de recordar y evitar las incomodas direcciones con variables o también llamadas UGLY URLs.

Sin embargo, volviendo al objetivo del artículo, pasar a minúsculas o mayúsculas (funciones habitualmente llamadas lowercase o uppercase en programación) no es una tarea intuitiva en ModRewrite, pero si bastante sencilla, y con ella solucionariamos este problema.

Lowercase y Uppercase en Modrewrite


Necesitaremos utilizar la directiva RewriteMap de ModRewrite. Esta directiva no permite utilizarse en los tan útiles .htaccess, por lo que necesitaremos editar el fichero de configuración de nuestro apache (usualmente httpd.conf o apache2.conf).

Editamos este fichero, y al final de todo, escribimos lo siguiente:

RewriteMap lowercase int:tolower

Con ello estaremos creando una «función» llamada lowercase que realizará la operación interna tolower (pasar el texto a minúsculas). Existen 3 más: toupper (la inversa, pasar a mayúsculas), escape y unescape (codificación hexadecimal) que pueden ser bastante útiles para otras tareas.

Una vez hecho este cambio, guardamos la configuración y reiniciamos el servidor web: /etc/init.d/apache2 restart. Sólo queda configurar los ficheros .htaccess donde hacemos la traducción de URLs:

RewriteRule ^/([A-Za-z0-9-]+)$ http://www.pagina.com/articulos/$1 [L]

Este otro pequeño ejemplo utiliza una técnica llamada agrupación. Consiste en, mediante expresiones regulares, detectar que página se ha pedido y capturarla (en nuestro ejemplo cualquier cadena que contengan letras mayúsculas).

Dicha captura se realiza en la primera parte del RewriteRule (contenido entre paréntesis) y se guarda en la variable $1, de modo que si hubiese otro paréntesis posterior al primero, se guardaría en la variable $2.

Veamos ahora, el mismo ejemplo, aplicando la función que creamos antes:

RewriteRule ^/([A-Za-z0-9-]+)$ http://www.pagina.com/articulos/${lowercase:$1} [L]

La única variación consiste en que hemos utilizado lowercase para pasar a minúsculas la cadena capturada. Esto nos garantizará tener la misma dirección y evitar el contenido duplicado de URLs.

RELACIONADOS Emezeta Card ModRewrite Cheat Sheet (v0.1) RELACIONADOS Guía de consejos de posicionamiento en Google RELACIONADOS Guía de consejos de posicionamiento en Google
x Emezeta Card ModRewrite Cheat Sheet (v0.1)
Manz

7 comentarios

Angel
1

Hombre! este artículo me viene como anillo al dedo Manz, precisamente te iba a preguntar por esto! Ando en todo lo relacionado a robots.txt, urllist.txt, sitemaps, google and shit y pues ahuevo andaba en eso de getting rid of all the unnecessary crap! La última vez mencionaste algo al respecto relacionado con lo de Disallow de robots y me fue muy útil reescribir el htaccess.. ahora mi blog tiene UN solo nivel de profundidad, thx! Tienes algún ejemplo funcional para el caso este que mencionas? Osea ver de escribir en la barra de dirección 2 urls y obtener el resultado deseado....

Pablo
3

Excelente, voy a mirarlo bien en detalle lo del RewriteMap, ya que la semana pasada tuve que hacer una redireccion de espacios por guiones medios y lo termine haciendo desde php porque no encontre la forma de hacerlo desde el htaccess, me parece que por aca puede venir el asunto. Como siempre, muy util la entrada. Gracias!!!!

Manz
5

@manelgarcia: Las ventajas del ModRewrite es que se ejecutan en una capa anterior al lenguaje de servidor, por lo tanto no tiene que cargar los recursos necesarios para PHP, Perl o similares. En el caso de no tener acceso a httpd.conf o apache2.conf, la solución pasa a tener que utilizar sin remedio un lenguaje del lado del servidor, Header puede solucionar en cierta medida.

robert
7

manz espero que me respondas, pero ando perdido, como accedo al httpd.config?? tengo un vps administrado pero no encuentro el archivo este!! Dime como accedo al httpd.config porfa Saludos

Publica tu opinión