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.
Excelente artículo, lo pude implementar a la perfecciónn Sos un grande!!
Excelente artículo, muchas gracias por la información.
Hola, de favor puedes despejarme la siguiente duda.
Tengo una pagina donde muestro todos mis articulos llamada articulos.php
Tengo otra para mostrar la información del articulo seleccionado llamada informacion.php
Solo quiero pasa una variable que es el ID del articulo por lo tanto quiero que se muestre algo asi:
http://mipagina/informacion/34/
¿Que paso tengo que colocar en cada archivo, y como pongo la URL en el href de mi pagina articulos?
Esperando contar con tu apoyo, recibe un coordial saludo!
En el htaccess
RewriteEngine on
Rewriterule ^informacion/(.+) informacion.php?id =$1
En información.php recuperas la ID del artículo con:
$id_articulo = $_GET["id"]
Los enlaces debe ser http://mipagina/informacion/34/
Saludos,
tienes toda la razón!! -_- ese es un pendex, lo hizo a proposito para hacernozla mas dificil... pero ya lo solucione gracias a tu comentario D:
Hey Baluart, muchas gracias por este excelente tutorial... ya está implementado en mi blog, incluso siguiendo sugerencias de los comentarios en esta entrada... http://www.oswosmedia.com/blog/43_febrero-uno-speach-stand-by-soul
Echo de todo y nada siempre me lanza
"pagina no encontrada"
estas url amigables no son nada amigables..xD
Perfecto, voy a utilizarlo a medias, ya que no puedo utilizar el mod_rewrite, probaré a ver si solo poniendo la url aunque no la tome para nada, la toma incluso por el sitemap!
Un saludo
Dkreativo.es
Lo tengo y me funciona bien pero con Internet Explorer 6 se me cuelga en cuanto le paso mas de un parámetro.
Ej
www.misitio.com/parametro1 //funciona OK
www.misitio.com/parametro1/parametro2 //se cuenga el IE6
Alguien sabe como solucionarlo?
Me es imprescindible el segundo parametro.
Por desgracia me insisten en que "por huevos" debe de ser compatible con IE6.
Saludos
Gracias tu articulo me fue de gran ayuda
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:
A que te refieres exactamente con: "cada vez que mostremos un enlace"
El mejor articulo que visto de similares. Me ha servido de mucho, gracias
No explicas la parte de implementacion, vaya, yo ya implemente el codigo para pasar de URL a url_amigable(), tambien establece algunas reglas en el .htaccess, el problema es que la pagina se muestra SIN LOS ESTILOS e IMAGENES DE FONDO.
Ya agregue la URL directa completa a los estilos CSS e imagenes, pero aun asi persiste el problema !
Que puedo hacer ?
Error PASO 1.No me reemplaza correctamente los caracteres acentuados, directamente no salen. Debo de utilizar utf8_decoder()
Gracias.
espectacular articulo, me ha servido de mucho. Por favor sigue asi, gracias!!
un saludo
Primero que nada muchas grax por tu articulo, una duda cual seria la expresion para
directorios principales digamos
http://www.domiono.com/empleos/index.php
que quedara la siguiente forma
http://www.domiono.com/empleos/
o
http://www.domiono.com/empleos/index
Estimado.
Muy buena opción, casualmente estaba por crear una clase para generar las url a partir de títulos de artículos y tu función me sirvió.
Solamente le hice la siguiente modificación, ya que tenía problemas de codificación a la hora de pasar el string a minúsculas con strtolower(), por lo que lo reemplace con mb_strtolower() que sí permite especificar la codificación de los caracteres y evitar errores.
Si a alguien le sirve:
Esta línea yo la tuve que reemplazar:
$url = strtolower($url);
$url = mb_strtolower($url, 'UTF-8');
Ahora funciona perfecto!
Gracias!
Gracias por el añadido Raúl! Un saludo.
Saludos. Soy nuevo en PHP y MySQL. Recibí este sitio ya hecho, y no he podido corregir la generación de URLs. Cuando se generan elimina los acentos y la ñ pero sin poner nada en su lugar (solución=solucin, España=espaa, etc).
Ejemplo: http://cecglob.com/298/contenido/egipto+nuestra+nacin+est+incendindose Y el título de la página es "egipto nuestra nacin est incendindose"
Rewriterule ^([a-zA-Z0-9-]*)\/([a-zA-Z0-9-]*)\/([a-zA-Z0-9-+]*)$ index.php?id=$1&title=$2&otro=$3
¿Alguna idea?
Buenas.
Tengo un problema con las URL amigables. No tengo ningún problema al traducir www_prueba_com/noticias/22/prueba a www_prueba_com/noticias.php?id_noticia=22. La cuestión es que ahora las rutas originales de scripts o imágenes han pasado de ./imagen.jpg a ./noticias/22/imagen.jpg con el problema de que no las encuentra.
Muchas gracias de antemano.
Muchas gracias por la información.
He estado viendo muchos tutorials, articulos, videos.... y ninguno como este!!!!!!!!!
Hola:
Dónde pongo lo que empieza con
<?php
function urls_amigables($url) {
// Tranformamos todo a minusculas
$url = strtolower($url);
en el htacces ?
en alguna página?
por favor,si podés explicarme dónde pongo cada cosa, disculpá mi pobre conocimiento.
Espero tu sabio comentario,Saludos.-
Buenas Balú. Tu tutorial me ha resultado muy útil, sin embargo me surge una duda que ya he visto en otros comentarios. Mi pregunta es referente al uso de la función urls_amigables($url). ¿Deberíamos colocarla, por ejemplo, al inicio de nuestras páginas y redireccionar con header( “http://tu.sitio.web/articulo/”.$id.”/”.urls_amigables($url).”/”)? ¿O en donde? Sé que se trata de una pregunta muy básica, pero todo viene perfectamente explicado hasta el paso 3 y allí hago agua. Gracias desde ya. Saludos desde Argentina.
Páginas