Urls amigables

Por el 17 de agosto de 2006

en: Negocio|Programacion

De todos es conocido que los sitios dinámicos son los más populares hoy en día, desafortunadamente la manera más sencilla de pasar información de una página a otra es a través de cadenas en la URL.

Problema de URLs largas

El problema está en que la mayoría de los buscadores (pocas excepciones como Google) no indexa cualquier página que tenga símbolos raros (?,=,&) en la url. Por eso muchas webs dinámicas no son correctamente indexadas, y obviamente no es bueno que no te indexen…

Solución: URLs amigables

La solución está en las URLs amigables, en pocas palabras dejar de ser invisible para muchos buscadores, estas URLS basicamente sustituyen los carácteres & ? y =.

Ejemplo:URL larga

http://www.tusitio.com/secciones.php?id=21&texto=Noticia

Ejemplo:URL amigable

http://www.tusitio.com/secciones/id/21/texto/Noticia

Efecto del cambio

El efecto que esto provocó en Google fue enorme, el buscador empezó a pasearse como Pedro en su casa por el Weblog e indexó casi todo su contenido. Pasamos de tener unas 5,000 páginas indexadas a más de 12,000… no me pregunten ¿por qué?, pero fue a consecuencia del cambio (de esto no hay duda).

Otro efecto positivo (si el afán es el posicionamiento en buscadores), fue la mayor atracción de visitantes pasajeros (no es mi intención hablar de estadísticas, pero aproximadamente hubo un incremento del 10% al 20% de tráfico por Google).

Baluart.net

Por todo esto, considero que una web que desee tener presencia en los principales buscadores debe utilizar urls amigables.

Hacer URLs amigables

Voy a explicar dos técnicas para llevar a cabo esta mejora en nuestras páginas, ambas funcionan con PHP-Apache.

Método 1: PATH_INFO

Si echas un ojo a la barra de direcciones de webs cómo Sitepoint veras una URL como esta:

http://www.sitepoint.com/article/flex-2-internet-applications

Sitepoint utiliza este método para hacer sus URLs amigables.

Esta solución es la menos avanzada tecnologicamente pero la que requiere de menos recursos, va para aquellos que tienen una cuenta de hosting compartido o un servidor gratuito, habrá que colocar este script en la cabecera de todas nuestras páginas (recomendable el uso de include).

$var_array = explode(“/”,$PATH_INFO);
$num_param = count($var_array );

if($num_param % 2 == 0) {

$var_array [] = ”;
$num_param++;
}

for($i=1; $i<$num_param; $i+=2) {

$$var_array [$i] = $var_array [$i+1];
$total=$total + $$var_array [$i];
}

La clave de su funcionamiento está en que toma los números pares como variables y los impares cómo los valores.

Tomemos cómo ejemplo esta url:
“http://www.tusitio.com/articulo.php/id/333/noticia/21″

Primeto separamos las diferentes partes en variables, usando la funcion explode de php.

Una vez realizado esto, obtendremos el siguiente resultado:

$var_array[0] = “articulo.php”

$var_array[1] = id

$var_array[2] = 333

$var_array[3] = noticia

$var_array[4] = 21

Podríamos renombrar los $var_array[1] por nombres más descriptivos como $id o $noticia y hacer una consulta a la base de datos con está información.

Si vas a utilizar este método asegurate de tener controlado el log de tu servidor para evitar las molestas “arañas”.

Método 2 .HTACCESS

Este método implica el uso del archivo .htaccess, si eres nuevo en esto, te puedo decir que es un archivo que se utiliza para administrar las opciones de acceso en el directorio en el que se encuentra alojado.

En primer lugar asegurate de tener activado el mod_rewrite esencial para el uso de este método, edita un fichero y pega este código:

phpinfo();
?>

Una vez comprobado que el mod_write está activado podemos pasar a configurar nuestro .htaccess:

Options +FollowSymLinks
RewriteEngine on
Rewriterule ^(.*)/(.*),(.*)/(.*),(.*)/$ $1.php?$2=$3&$4=$5
Rewriterule ^(.*)/(.*),(.*)/$ $1.php?$2=$3

En las dos primeras líneas comprobamos el correcto funcionamiento del mod_rewrite en el Apache (si esto no funciona vuelve al paso anterior y compruébalo).

En las líneas siguientes se establecen una serie de reglas que nos permitirán transformar nuestras URLs.

Analizemos la regla: Rewriterule ^(.*)/(.*),(.*)/(.*),(.*)/$ $1.php?$2=$3&$4=$5

Los valores precedidos por el símbolo dólar ($) reemplazan a los (.*) de las URL amigables.

Rewriterule ^(.*)/(.*),(.*)/(.*),(.*)/$ $1.php?$2=$3&$4=$5

Supongamos que tenemos esta url:

./index.php?seccion=coches&id=12345

obtendremos…

./index/seccion,coches/id,12345/

Por lo tanto nos quedamos con el nombre del script libre de extensión, y transformamos los valores en subcarpetas.

Sube el .htaccess y comprueba que todo funciona correctamente, una vez hecho esto edita todas las reglas que necesites.

Por último falta revisar nuestro antiguo código, tomando como comienzo que el resultado de la consulta a la base de datos esta en $rs nuestro código viejo sería:

while($row = @ mysql_fetch_array($rs)){
$category = $row["category"];
$category = URLencode(htmlentities($category,ENT_QUOTES));
$subject= $row["subject"];
$subject = URLencode(htmlentities($subject,ENT_QUOTES));
/*format for following HTML result
www.mysite.com/main.php?category=books&subject=biography
*/
echo "<'a href=\"http://www.mysite.com/main.php?
category=$category&subject=$subject\">“;
echo “$row[description]
\n”;
}
?>

Y nuestro código para URLs amigables quedaría:

while($row = @ mysql_fetch_array($rs){
$category = $row["category"];
$category = URLencode(htmlentities($category,ENT_QUOTES));
$subject= $row["subject"];
$subject = URLencode(htmlentities($subject,ENT_QUOTES));
/*format for the URL rewrite is as follows
www.mysite.com/type$category-$subject.htm
*/
echo "<'a href=\"http:/www.mysite.com/type$
category-$subject.htm\">“;
echo “$row[description]
\n”;
}
?>

Enlaces interesantes

Cómo consejo final conviene antes de comenzar conocer más sobre el uso del mod_rewrite en Apache.

SitePoint: Search-Engine Firendly Urls
Baluart.net
Devarticles: Make Dynamic URLs
Foro: Uso de URLs amigables

Dejar un comentario