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, 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.
- responder
Enviado por cesar (no verificado) el Vie, 05/04/2007 - 15:04.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
- responder
Enviado por Juanjo (no verificado) el Mié, 05/23/2007 - 19:16.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 :)
- responder
Enviado por Alejandro (no verificado) el Sáb, 07/28/2007 - 15:35.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
- responder
Enviado por charly (no verificado) el Mié, 08/08/2007 - 07:06.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???
- responder
Enviado por sonic22 (no verificado) el Mar, 08/14/2007 - 05:30.hola gracias por este aportazo voy a implementarlo en esya pagina web y vamos a ver los resultados gracias de antemano
- responder
Enviado por Diego (no verificado) el Mar, 08/21/2007 - 13:23.uaaaaaaaaaa viejooo ... meses buscando este pedazo de informaci
- responder
Enviado por Edilberto (no verificado) el Dom, 09/16/2007 - 13:57.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 ??
- responder
Enviado por sulivan (no verificado) el Dom, 09/30/2007 - 19:53.Hola, solo comentarte que deber
- responder
Enviado por Martin (no verificado) el Mar, 11/20/2007 - 04:11.Hola, siguiendo el tutorial ya me salio las urls amigables, este es mi codigo:<?$id=15;// La variable del t
- responder
Enviado por Freddy (no verificado) el Mié, 11/28/2007 - 00:27.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
- responder
Enviado por danraf77 (no verificado) el Mié, 11/28/2007 - 11:38.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
- responder
Enviado por danraf77 (no verificado) el Mié, 11/28/2007 - 11:53.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
- responder
Enviado por danraf77 (no verificado) el Mié, 11/28/2007 - 12:30.Hola, siguiendo el tutorial ya me salio las urls amigables, este es mi codigo:<?$id=15;// La variable del t
- responder
Enviado por Freddy (no verificado) el Lun, 12/03/2007 - 13:28.Freddy ,El traspaso de las variables se realiza exactamente igual, lo
- responder
Enviado por sealbcn (no verificado) el Vie, 12/28/2007 - 10:21.Hay que recordar tener el modrewrite en on en la configuraci
- responder
Enviado por lanzarote (no verificado) el Vie, 01/04/2008 - 07:45.Deja tu comentario