Convertir texto en URL SEO

  • 17/11/2008
  • 10:05 pm
  • unijimpe

Una de las tareas más comunes en el desarrollo de Web optimizada para los buscadores es el generar los URL en formato SEO, es decir que contengan el titulo, pero que no contengan tildes, comas, espacios en blanco. Esta vez les presentamos la forma de convertir los títulos en URLs optimizadas para los buscadores.

Implementando la text2url
A la función encargada de convertir un texto normal en formato URL la llamaremos text2url, implementaremos esta función en PHP. El primer paso es eliminar los espacios al inicio y al lcon la función trim, luego convertimos todo a minúsculas, luego limitamos los caracteres a números y letras y convertimos los demás caracteres en guiones. Adicionalmente eliminamos los saltos de línea, tabuladores y finalmente reemplazamos los espacios en blanco por un separador que en nuestro caso hemos asignado al guion (-).

  1. function text2url($string) {
  2.    $spacer = "-";
  3.    $string = trim($string);
  4.    $string = strtolower($string);
  5.    $string = trim(ereg_replace("[^ A-Za-z0-9_]", " ", $string))
  6.  
  7.    $string = ereg_replace("[ \t\n\r]+", "-", $string);
  8.    $string = str_replace(" ", $spacer, $string);
  9.    $string = ereg_replace("[ -]+", "-", $string);
  10.    return $string
  11. }

Para hacer uso de esta función simplemente le pasamos como parámetro el texto que deseamos convertir a URL. Podemos ver un ejemplo de uso en el siguiente código.

  1. $title = "MoFuse Versión movil de tu Web en Español";
  2. echo $title;
  3. // MoFuse Versión movil de tu Web en Español
  4. echo text2url($title);
  5. // mofuse-versi-n-movil-de-tu-web-en-espa-ol

Un ejemplo practico de de uso de esta función es el momento de guardar información en nuestra base de datos, por ejemplo si tenemos un tabla donde guardamos los datos de nuestros productos, la forma de insertar esta información incluyendo el URL sería de la forma:

  1. $name = $_POST['name'];
  2. $content = $_POST['content'];
  3. $url = text2url($_POST['name']);
  4.  
  5. $sql = "INSERT INTO products (name, content, url)
  6.         VALUES ('".$name."', '".$content."', '".$url."')";
  7. mysql_query($insertSQL, $conn) or die(mysql_error());

Obviamente esta es una función básica que aunque cumple con los requisitos de crear URL amigables, se podría mejorar con la posibilidad de convertir la vocales tildadas o con diéresis en vocales normales, la cual con un poco de trabajo se puede implementar.

Posts Relacionados

Total de Comentarios: 5

Publicidad
17/11/2008
11:36 pm

Pues está bien saberlo… pues nunca he jugado muy bien con la función ereg_replace por eso de la sintaxis de las expresiones regulares, que nunca he acabado de pillar.

Yo vengo utilizando esta otra serie de transformaciones un poco más pesadas y más exhaustivas pero que creo que a nivel SEO tienen más valor porque traducen las vocales acentuadas a vocales no acentuadas, por ejemplo:

$txt = strtolower_utf8($txt);
$txt = str_replace(”á”,”a”,$txt); $txt = str_replace(”à”,”a”,$txt); $txt = str_replace(”ä”,”a”,$txt);
$txt = str_replace(”é”,”e”,$txt); $txt = str_replace(”è”,”e”,$txt); $txt = str_replace(”ë”,”e”,$txt);
$txt = str_replace(”í”,”i”,$txt); $txt = str_replace(”ì”,”i”,$txt); $txt = str_replace(”ï”,”i”,$txt);
$txt = str_replace(”ó”,”o”,$txt); $txt = str_replace(”ò”,”o”,$txt); $txt = str_replace(”ö”,”o”,$txt);
$txt = str_replace(”ú”,”u”,$txt); $txt = str_replace(”ù”,”u”,$txt); $txt = str_replace(”ü”,”u”,$txt);
$txt = str_replace(” “,”-”,$txt);
$txt = str_replace(”¿”,”",$txt); $txt = str_replace(”?”,”",$txt);
$txt = str_replace(”(”,”",$txt); $txt = str_replace(”)”,”",$txt);
$txt = str_replace(”[","",$txt); $txt = str_replace("]“,”",$txt);
$txt = str_replace(”%”,”",$txt);
$txt = str_replace(”ñ”,”n”,$txt);
$txt = str_replace(”ç”,”s”,$txt);
$txt = str_replace(”@”,”-”,$txt);
$txt = str_replace(”#”,”-”,$txt);
$txt = str_replace(”&”,”-”,$txt);
$txt = str_replace(”ç”,”c”,$txt);
$txt = str_replace(”;”,”-”,$txt);
$txt = str_replace(”,”,”-”,$txt);
$txt = str_replace(”:”,”-”,$txt);
$txt = str_replace(”{”,”-”,$txt);
$txt = str_replace(”}”,”-”,$txt);
$txt = str_replace(”.”,”-”,$txt);
$txt = str_replace(”¡”,”-”,$txt);
$txt = str_replace(”!”,”-”,$txt);
$txt = str_replace(”|”,”-”,$txt);
$txt = str_replace(”/”,”-”,$txt);
$txt = str_replace(”=”,”-”,$txt);
$txt = str_replace(”",”-”,$txt);
$txt = str_replace(”+”,”-”,$txt);
$txt = str_replace(”‘”,”-”,$txt);
$txt = str_replace(”*”,”-”,$txt);
$txt = str_replace(”$”,”-”,$txt);

Además, has olvidad decir, que este tipo de transformaciones son también muy recomendables para construir nombres de archivo ;)

Por cierto, la primera transformación que aplico es para evitar problemas de juegos de caracteres (no me preguntes de dónde la saque, per funciona, jejeje):

function strtolower_utf8($inputString) {
$outputString = utf8_decode($inputString);
$outputString = strtolower($outputString);
$outputString = utf8_encode($outputString);
return $outputString;
}

Un saludo!
Sigo tu blog ;)
Pocos artículos pero buenos.
SERGI

18/11/2008
8:07 pm

Esta bueno, pero convierte los caracteres especiales (ñ,acentos, etc) en guiones! y la idea es que sea una palabra, si me cortas palabras como versi-on me estas cortando las piernas! Deberías arreglar la expresion regular.
Excelente blog! Tmb te voy a seguir ;)

18/11/2008
8:45 pm

Hola, antes que nada unas correcciones, yo también sigo tu blog, pero no son pocos artículos, son muy pocos y muy buenos.
caos30: Para evitar tanto código hay una forma (no la se pero se encuentra en google seguramente) para poner un solo str_replace y poner arreglos, asi no creo que evites el procesamiento pero al menos evitas tantas líneas de codigo.

Esa funcion está demasiado incompleta, tal vez se pueda extraer la funcion de wordpress, que lo hace bastante bien según parece.

Un saludo

Luciano

PD: sigue adelante (unijimpe?) que haces un trabajo muy bueno.

19/11/2008
10:35 am

Esta es la funcion que yo utilizo:

function urlAmigable($variable_sin_codificar)
{
$url =htmlentities(strtolower($variable_sin_codificar));
$b=array(”á”,”é”,”í”,”ó”,”ú”,”ñ”,”Ñ”,”Á”,”É”,”Í”,”Ó”,”Ú”,”à”,”è”,”ì”,”ò”,”ù”,”À”,”È”,”Ì”,”Ò”,”Ù”,”¡”);
$c=array(”a”,”e”,”i”,”o”,”u”,”n”,”n”,”a”,”e”,”i”,”o”,”u”,”a”,”e”,”i”,”o”,”u”,”a”,”e”,”i”,”o”,”u”,”");
$url =str_replace($b,$c,$url);
$find = array(’ ‘,’&’,'\r\n’,'\n’,'+’,'_’);
$url = str_replace ($find, ‘-’, $url);
$find = array(’/[^a-z0-9\-]/’,'/[\-]+/’,'/]*>/’);
$repl = array(”,’-',”);
$url = preg_replace ($find, $repl, $url);
return $url;
}

20/06/2009
12:44 am

hola que tal unijimpe muy bien eh como siempre tu apoyando, pero bueno yo recien chekeo ese post, je, ahm jose luis bueno me gusto esa funcion pero no convierte las vocales acentuadas o sera por algo mas, es q tambien la codificacion que colocaste ahm esta algo diferente osea parece q afecto el estilo de la web por q no aparece bien. espero aydua tambien gracias de antemano.

Enviar Comentario

(*)

(*)