Artigos & Ideias

[PHP] Gerar URLs Amigáveis

Escrito por:

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:

  1. Remover toda a pontuação
  2. Colocar todo o URL em minúsculas
  3. Remover espaços, e colocar um hífen
  4. Remover palavras duplicadas
  5. 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.

8


Sobre o Autor

Carlos Gonçalves é um Freelancer com bastante experiência em linguagens de programação e webdesign. Vocacionado para as novas tecnologias, aposta na qualidade dos serviços, atendimento rápido e sempre disponível para melhor satisfazer os seus clientes. Autor do site cgoncalves.com

Comentários

  1. André  3 Fevereiro 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 :D

    (responder)
  2. Carlos Gonçalves  4 Fevereiro 2010

    @André: tens razão.
    Obrigado pela sugestão, e já agora obrigado pelo link, desconhecia a função do iconv do PHP.

    (responder)
  3. Bruno  16 Março 2010

    Olá amigo, sou iniciante em php e gostaria que me tirasse uma dúvida

    nesse script vc gerou a url amigável…
    mas e agora ? e para fazê-la entrar em vigor ?

    desde já, agradeço

    (responder)
  4. Carlos Gonçalves  16 Março 2010

    @Bruno: agora basta usares .htaccess para os redireccionamentos.

    Exemplo: index.php?s=urls&p=1

    RewriteRule ^(.+)/?([0-9]*)/?$ /index.php?s=$1&p=$2

    As expressões ‘$1′ e ‘$2′ significam o primeiro e o segundo conjunto de caracteres agrupados por parêntesis na expressão da esquerda. Ou seja, é guardada uma referência para esses grupos de caracteres para que possas usá-los.

    (responder)
  5. Bruno  20 Março 2010

    Obrigado pela ajuda

    Eu tenho um certo conhecimento nas expressões regulares, mas esse RewriteRule simplesmente não entra na minha cabeça.

    Um abraço e continue com o conteúdo de qualidade.

    (responder)
  6. sompelehott  7 Agosto 2010

    very interesting, thanks

    (responder)

Comentar

Nota: A moderação de comentários está activada e pode atrasar o teu comentário. Não há necessidade de reenviares o teu comentário.

  1. Carlos Gonçalves  Fevereiro 2, 2010
  2. Pedro Silva  Fevereiro 3, 2010
More in Outros (1 of 12 articles)

# #