[PHP] Gerar URLs Amigáveis
Gerar URLs Amigáveis para os motores de pesquisa, pode melhorar imenso os resultados na pesquisa. Há uma grande diferença entre “/?p=771″ e “/php-gerar-links-amigaveis”.
Ter URLs amigáveis dá também ao utilizador uma ideia do que irá conter a página em que estão a clicar.
Utilizo uma função em PHP para gerar os URLs amigáveis nos projectos dos meus clientes. A ideia é bastante simples. Utilizo o título da página criada pelo utilizador e a partir daí crio o URL passando por alguns passos:
- Remover toda a pontuação
- Colocar todo o URL em minúsculas
- Remover espaços, e colocar um hífen
- Remover palavras duplicadas
- Remover palavras que não são úteis em SEO
O Código PHP
/* Obtém o input, e desfaz-se dos caracteres indesejados */
function gerar_link_seo($input,$substitui = '-',$remover_palavras = true,$array_palavras = array())
{
//Colocar em minúsculas, remover a pontuação
$resultado = trim(ereg_replace(' +',' ',preg_replace('/[^a-zA-Z0-9\s]/','',strtolower($input))));
//Remover as palavras que não ajudam no SEO
//Coloco as palavras por defeito no remover_palavras(), assim eu não esse array
if($remover_palavras) { $resultado = remover_palavras($resultado,$substitui,$array_palavras); }
//Converte os espaços para o que o utilizador quiser
//Normalmente um hífen ou um underscore
return str_replace(' ',$substitui,$resultado);
}
function remover_palavras($input,$substitui,$array_palavras = array(),$palavras_unicas = true)
{
//Separar todas as palavras baseadas em espaços
$array_entrada = explode(' ',$input);
//Criar o array de saída
$resultado = array();
//Faz-se um loop às palavras, remove-se as palavras indesejadas e mantém-se as que interessam
foreach($array_entrada as $palavra)
{
if(!in_array($palavra,$array_palavras) && ($palavras_unica ? !in_array($palavra,$resultado) : true))
{
$resultado[] = $palavra;
}
}
return implode($substitui,$resultado);
}
Explicação
A função aceita 4 variáveis:
1. $input – string – será o URL Amigável, no meu caso, o título da página
2. $substitui – string – o caractér a substituir, o separador, normalmente um hífen ou um underscore
3. $remover_palavras – boolean – remove palavras específicas, as que não fazem diferença em SEO
4. $array_palavras – array – um array de palavras que deve ser removido do URL porque não ajudam em SEO (exemplo: de, e, o, a, etc…)
Exemplo
$palavras_indesejadas = array('a','um','de','o','é','à','com','pode','da','porque','não');
echo gerar_link_seo('Outro dia a Programar com PHP','-',true,$palavras_indesejadas);
//Resultado :: outro-dia-programar-php
echo gerar_link_seo('MooTools outra vez? Porque não apenas jQuery?','-',true,$palavras_indesejadas);
//Resultado :: mootools-outra-vez-apenas-jquery
echo gerar_link_seo('Um euro poupado é um euro ganho','-',true,$palavras_indesejadas);
//Resultado :: euro-poupado-ganho
Faz um favor a ti mesmo, torna as tuas páginas dinâmicas mais apelativas a motores de pesquisa com URLs amigáveis.

Olá, o meu nome é Carlos Gonçalves, sou um Freelancer mas com bastante experiência em linguagens de programação, webdesign e multimédia.
Vocacionado para as novas tecnologias, aposto na qualidade dos serviços, atendimento rápido e sempre disponível para melhor satisfazer os meus clientes.
Bem vindos ao Meu Site!!


André
03 Fev 2010
Sobre a função que remove espaços e acentos, tenho uma pequena sugestão a dar:
Supõe a página com o título “coração partido”. Como o ‘ç’ e o ‘ã’ não estão no “intervalo” de a-z, vão ser excluídos, o que não é pretendido.
Uma solução que vejo muito comum é fazer uma lista de correspondência, por exemplo, de ‘ç’ para ‘c’, de ‘ã’ para ‘a’, com recurso a arrays. Outra solução muito boa, e melhor que esta anterior, é usar a função iconv do PHP, deixo aqui uns exemplos:
http://www.portugal-a-programar.org/forum/index.php/topic,42552.msg321473.html#msg321473
E fica a sugestão
Carlos Gonçalves
04 Fev 2010
@André: tens razão.
Obrigado pela sugestão, e já agora obrigado pelo link, desconhecia a função do iconv do PHP.