Urls Amigables con PHP

Hace una semana hice un cambio en Baluart, modifique la urls de nuestros artículos por unas mucho más amigables a los buscadores.

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).

Por todo esto, considero que una web que desee tener presencia en los principales buscadores debe utilizar urls amigables. Y para esto, tan sólo debes seguir estos 3 pasos:

1er Paso: Creando la función PHP: urls_amigables()

El objetivo de esta función es tomar el título de la noticia y transformarlo en una frase asequible a los buscadores.

El Proceso es como sigue:

La función php recibe la variable que contiene el título del artículo, inmediatamente transforma todo su contenido a minúsculas con la función strtolower(), luego  haciendo uso de la función str_replace() le quitamos las tildes a las vocales y cambiamos la ñ por n (no es necesario hacerlo con las mayúsculas porque previamente las transformamos a minúsculas). Ahora, reemplazamos algunos símbolos y espacios en blanco con guiones y finalizamos eliminando todo carácter extraño que se nos escape con la función preg_replace().

En otra palabras:

<?php
function urls_amigables($url) {

// Tranformamos todo a minusculas

$url = strtolower($url);

//Rememplazamos caracteres especiales latinos

$find = array('á', 'é', 'í', 'ó', 'ú', 'ñ');

$repl = array('a', 'e', 'i', 'o', 'u', 'n');

$url = str_replace ($find, $repl, $url);

// Añaadimos los guiones

$find = array(' ', '&', '\r\n', '\n', '+');
$url = str_replace ($find, '-', $url);

// Eliminamos y Reemplazamos demás caracteres especiales

$find = array('/[^a-z0-9\-<>]/', '/[\-]+/', '/<[^>]*>/');

$repl = array('', '-', '');

$url = preg_replace ($find, $repl, $url);

return $url;

}
?>

2do paso: Cambiando las urls con Mod Rewrite de Apache

Para esto, se necesita tener acceso al archivo .HTACCESS en el directorio raíz de tu sitio web. Si lo tiene, escriba el siguiente código:

RewriteEngine on

Rewriterule ^articulo/(.+)/(.+) articulo.php?id =$1&title=$2

Con estas dos líneas indica que se reescriba la siguiente regla: Cuando se solicite esta url: articulo/(.+)/(.+) se mostrará el contenido de la página: articulo.php?id =$1&title=$2. Es decir, la variable $1 vendrá en el primer paréntesis, mientras la variable $2 vendrá en el segundo paréntesis.

Por ejemplo, cuando uno se dirije a la página articulo/933/esta-es-una-url-amigable, el servidor lo procesa como si se estuvieran enviando las variables la página articulo.php?id=933&title= esta-es-una-url-amigable.

3er paso: Cambiando los enlaces dinámicamente

Lo único que resta es llamar a la función urls_amigables() cada vez que mostremos un enlace. El contenido del título lo aplicamos a la función:

// La variable del título de la noticia
$url = "Este es un título";

// mostramos el titulo editado
// echo urls_amigables($url);

// mostramos la url terminada
echo “http://tu.sitio.web/articulo/”.$id.”/”.urls_amigables($url).”/”;

Realmente rápido de programar, eficiente en su performance y eficaz en el posicionamiento. He buscado en la red, algún código que me evite hacer esta labor, pero no lo encontré. Me puse a programar y resultó esta función, que me parece muy flexible a la hora de reutilizarla en cualquier proyecto.

Así pues, con el código en sus manos... utilícenlo.

Saludos de nuevo, pe

Saludos de nuevo, pero ahora va mi pregunta, que pasa si quiero poner mas de una validacion en el htaccess algo como esto:RewriteEngine onRewriteRule ^europacategoria_(.+).htm europa_opc3serie.php?serie=$1RewriteRule ^europaproducto_(.+).htm europa_opc_folleto.php?codigo=$1RewriteRule ^europaproducto_(.+)_(.+).htm europa_opc_folleto.php?europa=$1&codigo=$2Los dos ultimos es porque europa_opc_folleto.php a veces le paso 2 variables y a veces solo una variable, esta bien asi.? o hay alguna forma de condicionar...?gracias por su tiempo.

Enviado por cesar (no verificado) el Vie, 05/04/2007 - 15:04.
A mi me ocurre igual

A mi me ocurre igual que a Omar, usando:RewriteRule ^archives/([0-9]+)$ archives?p=$1No me funciona. Pero si lo cambiao a:RewriteRule ^petete/([0-9]+)$ archives?p=$1 Me funciona pero no me carga las css ni imagenes, debe ser por lo que dice Cesar. He probado su solcui

Enviado por Juanjo (no verificado) el Mié, 05/23/2007 - 19:16.
Hola el articulo est

Hola el articulo esta muy bien de hecho lo utilice como fuente para un tutorial que hice pero ahora tengo un problema que creo que alguien mas ha tenido aqui pero no veo la respuesta.El tema esta que tengo algo muy simple en el .htaccess Options +FollowSymLinksRewriteEngine onRewriteRule ^(.+)/$ debug.php?servicioID=$1Si lo ejecuto en http://localhost/Aca-Lo-Que-Sea/  anda perfecto pero si eso mismo lo tengo en un alias tipohttp://localhost/sitiox/Aca-Lo-Que-Sea/  deja de funcionar dando el error Not Found The requested URL /apache/Aca-No-Anda/ was not found on this server.Que alguno me ilumine :) 

Enviado por Alejandro (no verificado) el Sáb, 07/28/2007 - 15:35.
Reci

Recién comienzo con todo esto. A pesar de esta excelente info y otras que hay en la red no logro hacer marchar algo tan simple como esto: pagina.php?link=auto Ej: RewriteRule ^([^/]*).html$ pagina.php?link=$1 [L] He usado los convertidores online le he dado mil vueltas y nada. El programa en cuesti

Enviado por charly (no verificado) el Mié, 08/08/2007 - 07:06.
Hola, probando y pro

Hola, probando y probando sin conseguir resultado alguno, mi consulta es la siguiente: necesito tener la url asi: http://www.dominio.com/algo donde algo seria "ver.php?id=nn", claro hasta ahi todo bien, pero el id es numerico yo lo que necesito es pasar tambien el titulo, existe alguna expresion para que utilice el ID, y muestre solamente el titulo por asi llamarlo???

Enviado por sonic22 (no verificado) el Mar, 08/14/2007 - 05:30.
hola gracias por est

hola gracias por este aportazo voy a implementarlo en esya pagina web y vamos a ver los resultados  gracias de antemano 

Enviado por Diego (no verificado) el Mar, 08/21/2007 - 13:23.
uaaaaaaaaaa viejooo

uaaaaaaaaaa viejooo ... meses buscando este pedazo de informaci

Enviado por Edilberto (no verificado) el Dom, 09/16/2007 - 13:57.
hola balu !mir

hola  balu !mira  eh visto que nuestras url son iguales :http://sexedur.info/click.php?id=35&desc=gorgeous_blondepero no se como colocar el codigo en donde coloco el php ? lo del httacces es facil pero como hago con el php ??

Enviado por sulivan (no verificado) el Dom, 09/30/2007 - 19:53.
Hola, solo comentart

Hola, solo comentarte que deber

Enviado por Martin (no verificado) el Mar, 11/20/2007 - 04:11.
Hola, siguiendo el t

Hola, siguiendo el tutorial ya me salio las urls amigables, este es mi codigo:<?$id=15;// La variable del t

Enviado por Freddy (no verificado) el Mié, 11/28/2007 - 00:27.
saben si yahoo deja

saben si yahoo deja subir el .htaccess? yo intento y no me deja o q tengo q modificar para q me deje subir dicho archivo, y si no se puede de q manera puedo hacer URLs amigables sin usar .htaccess

Enviado por danraf77 (no verificado) el Mié, 11/28/2007 - 11:38.
saben si yahoo deja

saben si yahoo deja subir el .htaccess? yo intento y no me deja o q tengo q modificar para q me deje subir dicho archivo, y si no se puede de q manera puedo hacer URLs amigables sin usar .htaccess

Enviado por danraf77 (no verificado) el Mié, 11/28/2007 - 11:53.
saben si yahoo deja

saben si yahoo deja subir el .htaccess? yo intento y no me deja o q tengo q modificar para q me deje subir dicho archivo, y si no se puede de q manera puedo hacer URLs amigables sin usar .htaccess

Enviado por danraf77 (no verificado) el Mié, 11/28/2007 - 12:30.
Hola, siguiendo el t

Hola, siguiendo el tutorial ya me salio las urls amigables, este es mi codigo:<?$id=15;// La variable del t

Enviado por Freddy (no verificado) el Lun, 12/03/2007 - 13:28.
Freddy ,El tras

Freddy ,El traspaso de las variables se realiza exactamente igual, lo

Enviado por sealbcn (no verificado) el Vie, 12/28/2007 - 10:21.
H

    Hay que recordar tener el modrewrite en on en la configuraci

Enviado por lanzarote (no verificado) el Vie, 01/04/2008 - 07:45.

Deja tu comentario

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato