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.

bueno manes..en verd

bueno manes..en verdad por mas k probe no me salio ... tmr ... toy ttriston .. ojala y alguien me pueda explicar la ultima parte el de cambiar los enlaces dinamicamente... o k me agregue al msn pues... gracias

Enviado por j0s (no verificado) el Lun, 09/04/2006 - 00:30.
bueno... ya pude hac

bueno... ya pude hacer los enlaces... y esto me lleva asi http://localhost/foro/viewforum/1  era asi viewforum.php?id=1 hasta ahi todo.. bien .. pero no se si esta bien mi .htacces asi lo cambie.RewriteEngine on  Rewriterule ^viewforum/(.+)viewforum.php?id=$1plzzz ayudenme

Enviado por j0s (no verificado) el Lun, 09/04/2006 - 16:29.
as

as

Enviado por Bal (no verificado) el Mar, 09/05/2006 - 12:28.
bueno... pero no me

bueno... pero no me sale... me e leido un monton de manuales de url amigables :S y naaa... estoy probando esto en mi pc.. osea con localhost... porque estoy programando un foro.... alguien k me ayude... plzzzz

Enviado por j0s (no verificado) el Mar, 09/05/2006 - 23:12.
Felicidades por el a

Felicidades por el art

Enviado por Javier Seixas (no verificado) el Mié, 09/06/2006 - 04:45.
hola. tengo un probl

hola. tengo un problema con el mode rewrite.en mi web tengo esto.RewriteEngine onRewriterule ^(.*)-(.*).html$ index.php?ide=$2la url me queda asi  nombre_programa-23.htmlhasta ahi eso solo va perfecto.pero aparte tengo esta otra url para mostrar perfiles de usuarios.index.php?per=nombreusuariocomo ven utilizo la misma pagina index.php pero diferentes variables para los programas y para los perfiles.quiero una url asi para los perfiles. nombre_usuario.htmlcomo tendria que adaptar el mode rewrite para utilizarlo con los perfiles y no me afecte el de los programasgracias y saludos.

Enviado por juanse (no verificado) el Mié, 09/13/2006 - 01:52.
RewriteEngine on Re

RewriteEngine on Rewriterule ^articulo/(.+)/(.+) articulo.php?id =$1&title=$2 cuando ingreso la segunda linea e da error, como hago para saber si tengo permisos y eso??   saludos  PD: muy buen articulo 

Enviado por Rodrigo (no verificado) el Jue, 09/14/2006 - 16:30.
hola alguien me podr

hola alguien me podria ayudar en como aplicar este script, soy principiante entiendo varias cosas y ya las intente pero no funciona, ni siquiera encuentro el htacces en mi web, la busque mediante ftp y no la tiene, la intente crear y no me sube el archivo, es sobre windows y es un proveedor de hosting no monte yo el server, espero que alguien me pueda orientar

Enviado por oxioso (no verificado) el Lun, 10/16/2006 - 17:03.
Hola Oxioso, el .hta

Hola Oxioso, el .htacces va sobre linux. Si tu server esta sobre windows sigue los pasos del comentario #10.Saludos. 

Enviado por Bal (no verificado) el Lun, 10/16/2006 - 19:20.
Ya lo probe en un bl

Ya lo probe en un blog que estoy armando y funciona muy bien. Es de mucha ayuda articulos como este. Saludos. 

Enviado por pedro (no verificado) el Mié, 11/22/2006 - 12:39.
Que bien que te sea

Que bien que te sea

Enviado por Bal (no verificado) el Mié, 11/22/2006 - 19:09.
Hola Balu, tengo una

Hola Balu, tengo una duda que creo tu puedes responderme, estoy actualmente desarrallondo un directorio y como todos estoy haciendola con urls amigables, mi problema esta en que con algunos enlaces se confunde el mod_rewrite al momento de ejecutarlos, cual podria ser la causa ya que en otros si funciona bien.La url del directorio es esta www.encontrado.es, y la parte donde se confunde el mod a la hora de resolver es en "Empresa por actividad".Ahi podras revisar al hacer clik en las diferentes categorias que en algunas se confunde.Bueno espero puedas ayudarme con este problema que no logro obtener la rpta al porque de eso. Gracias

Enviado por Enmanuel (no verificado) el Mar, 12/05/2006 - 15:34.
HOla Enmanuel, acabo

HOla Enmanuel, acabo de entrar a tu web, a empresa por actividad y funciona correctamente. Supongo que ya lo solucionaste. Un saludo.

Enviado por Bal (no verificado) el Mié, 12/06/2006 - 12:21.
gracias por la ayuda

gracias por la ayuda.

Enviado por piojo (no verificado) el Sáb, 12/23/2006 - 15:30.
P

    Primero que todo muy buen articulo, es muy bueno pero tengo un proglema y es que al tranformar la url (http://localhost/pagina/1/este-es-un-titulo/) me arroga un error apache:Not Found The requested URL /dreanwolf/1/este-es-un-titulo/ was not found on this server. Apache/1.3.34 Server at localhost Port 80 Modifique asi mi archivo php:$op=1;$url_a ='http://localhost/dreanwolf/'.$op.'/'.url_amigables($url).'/';echo '<a href='.$url_a.'>Cosa</a>';Tambien modifique el .htaccess en ves de id puse op y cambie tambien el articulo.php por index.php, tengos windows pero la funcion Rewrite esta activida, es mas la probe con joomla y cero problema. Gracias.

Enviado por Luis (no verificado) el Lun, 01/01/2007 - 11:24.
"Pasamos de ten

"Pasamos de tener unas 5,000 p

Enviado por cannabico (no verificado) el Mié, 01/24/2007 - 00:47.
Y suponiendo que mis

Y suponiendo que mis urls son as

Enviado por Carmen (no verificado) el Vie, 02/09/2007 - 13:35.
Y suponiendo que mis

Y suponiendo que mis urls son as

Enviado por Carmen (no verificado) el Vie, 02/09/2007 - 13:41.
Hola Carmen, efectiv

Hola Carmen, efectivamente usamos distintos sistemas de urls. Lo primero y esencial que debes hacer es limpiar las urls. Del art

Enviado por Bal (no verificado) el Lun, 02/12/2007 - 20:54.
+1 Its very interes

+1 Its very interesting

Enviado por Harry271 (no verificado) el Mar, 03/13/2007 - 02:36.
Muchisimas gracias p

Muchisimas gracias por este articulo me fue de gran utilidad!!!Saludos!!! 

Enviado por vITT (no verificado) el Dom, 04/15/2007 - 18:06.
Hola, muy bien tu ar

Hola, muy bien tu art

Enviado por OMar (no verificado) el Mar, 04/17/2007 - 21:24.
Omar, la funcion php

Omar, la funcion php va en un archivo aparte, luego la incluyes con un require_once en los archivos que desees usarla. Para mostrar los enlaces debes poner el c

Enviado por Bal (no verificado) el Mié, 04/18/2007 - 01:53.
Hola, muy bien tu ar

Hola, muy bien tu art

Enviado por OMar (no verificado) el Mié, 04/18/2007 - 12:40.
Gracias por la respu

Gracias por la respuesta, pero pasa algo ...tenogo 2 archivos .php uno es el index.php al que llama inmediantamente con una liga como esta : www.mipage.compero tengo otro que recibe el nombre de un usuario y lo procesa, ya consegu

Enviado por Omar (no verificado) el Mié, 04/18/2007 - 12:44.
PAra el comentario a

PAra el comentario anterior, se me olvid

Enviado por OMar (no verificado) el Mié, 04/18/2007 - 12:54.
Gran aporte y de mu

Gran aporte y de mucha utilidad Bye!

Enviado por bAxTEr (no verificado) el Jue, 04/19/2007 - 22:53.
Hola balu una pregun

Hola balu una pregunta como seria el .htaccess para usar las url cuando estas paginadoasi http://www.baluart.net/pagina2gracias espero tus comentariossaludos

Enviado por gerardo (no verificado) el Vie, 04/20/2007 - 08:10.
Saludos a todos.Omar

Saludos a todos.Omar yo tuve el msimo problema y es por el / que utilizamos para separar las variables, es que al parecer al generar el codigo html lo considera como si estuvieras en una carpeta mas adentro, es por eso que todos los links se malogran, yo lo resolvi utilizando _ para la separacion, eso si hay que tener cuidado con el redireccionamiento ciclico, creo que solo es cuestion de utilizar nombres largos y algo complejos para diferenciar bien la url amigable de la verdadera.Espero te sea de utilidad.

Enviado por cesar (no verificado) el Vie, 05/04/2007 - 12:24.
Saludos a todos.Omar

Saludos a todos.Omar yo tuve el msimo problema y es por el / que utilizamos para separar las variables, es que al parecer al generar el codigo html lo considera como si estuvieras en una carpeta mas adentro, es por eso que todos los links se malogran, yo lo resolvi utilizando _ para la separacion, eso si hay que tener cuidado con el redireccionamiento ciclico, creo que solo es cuestion de utilizar nombres largos y algo complejos para diferenciar bien la url amigable de la verdadera.Espero te sea de utilidad.

Enviado por cesar (no verificado) el Vie, 05/04/2007 - 14:13.

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