Categorias amigáveis no WordPress – É bom para SEO!

Uma das questões que sempre vem envolvendo SEO e WordPress é o slug das categorias, tirar ou não tirar? Eis a questão…

Independentemente de qual for a sua posição, hoje irei lhe mostrar (ou ensinar) como ajustar o slug das categorias no WordPress, para se encaixar a sua necessidade. Vejamos as opções que você pode tomar:

Opção 1 – Não remover o slug base das categorias, apenas traduzir o mesmo

O maior ponto defendido por esta opção, é que com ela, o usuário será mais amigável com a categoria, porque vai estar escrito na url “categoria”… bom você entendeu!

Há também a questão que, se a categoria ter o mesmo nome – slug – de uma página o outro método (que vou falar mais abaixo), fica em desvantagem porque terá problemas no rewrite do WordPress pra identificar quem é quem… Eu já mato essa “questão” aqui de primeira: Você terá uma categoria no WordPress com o nome de “contato”? O problema aqui é planejamento… mas cada caso é um caso né :).

Para fazer a tradução é bem simples. No admin, vá para Configurações > Links Permanentes. Encontre o campo Base da categoria e digite o slug desejado – “categoria”. Pronto!

Vamos para a segunda posição – a que mais me agrada.

Opção 2 – Remover o slug base das categorias

A vantagem em remover o slug base das categorias é que, para SEO, é mais vantajoso porque:

  1. Irá encurtar a URL, removendo informação “desnecessária”.
  2. “Ajuda” na hierarquia da URL dos posts.
  3. Será mais fácil de memorizar e digitar – quem irá sentir é o usuário.

Enfim a URL irá ficar mais amigável para SEO. Para remover o slug base das categorias, segue o código abaixo. Assim você não irá precisar de plugins para fazer o serviço sujo. Em seu template, abra o arquivo functions.php e insira o seguinte código:


/**
 * Remove o slug base das categorias
 */
function remove_slug_categoria_wordpress() {
	global $wp_rewrite;

	/**
	 * Remove base das categorias
	 */
	$wp_rewrite->extra_permastructs['category']['0'] = '%category%'; //Força diretamente
	$wp_rewrite->flush_rules();
}
add_filter('init', 'remove_slug_categoria_wordpress');

/**
 * Refaz as regras para as categorias, previnindo incompatibilidade
 * @param array $category_rewrite
 */
function fixa_categorias_rewrite_rules($category_rewrite) {
	global $wp_rewrite;

	/**
	 * Checa se tem a base para paginação
	 * @since WP 3.1.0
	 */
	if(!isset($wp_rewrite->pagination_base)) $wp_rewrite->pagination_base = 'page';

	$category_rewrite = array(); //Reseta o rewrite
	$categorias = get_categories(array('hide_empty' => FALSE));

	/**
	 * Processa cada categoria
	 */
	foreach($categorias as $categoria){

		$category_nicename = $categoria->slug;

		/**
		 * Checa se tem parente para a categoria
		 */
		if($categoria->parent != 0 ) $category_nicename = get_category_parents($categoria->parent, FALSE, '/', TRUE). $category_nicename;

		$category_rewrite['('.$category_nicename.')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
		$category_rewrite['('.$category_nicename.')/'. $wp_rewrite->pagination_base. '/?([0-9]{1,})/?$'] = 'index.php?category_name=$matches[1]&paged=$matches[2]';
		$category_rewrite['('.$category_nicename.')/?$'] = 'index.php?category_name=$matches[1]';
	}

	return $category_rewrite;
}
add_filter('category_rewrite_rules', 'fixa_categorias_rewrite_rules');

/**
 * Redireciona as url de categorias antigas do WordPress
 */
function fixa_urls_categorias_antigas(){

	if(preg_match('//(category/)(.+)/', $_SERVER['REQUEST_URI'], $matches)){

		$url = get_bloginfo('url') . '/' . $matches['2'];

		header('Location: '. $url, 301);
		exit();
	}
}
add_action('init', 'fixa_urls_categorias_antigas', 1);

A primeira função, faz a alteração do slug categorias de forma bem simples… Depois é “reiniciado” as regras de rewrite do WordPress, através da função flush_rules().

Logo após, na segunda função, é refeito o rewrite das categorias. É necessário refazer as regras de categorias, para que não haja confusão entre páginas e categorias no WordPress.

A terceira e última função, cuida do redirecionamento 301 para URLs antigas. Não há o que discutir…

Se preferir por um plugin use o WP No Category Base.

Opção 3 – Não fazer nada

Se você está fazendo um website “pros grigos”, eu até concordo :).

Concluindo…

Caso você não tenha nenhuma posição quanto ao que fazer com suas categorias, ai está as mais discutidas e você pode optar por uma delas. Espero que tenham gostado e que eu tenha ajudado algúem também!

Estou ficando um pouco afastado do blog, por não ter tempo o suficiente para os posts, mas no twitter estou mandando bala com vários artigos interessantes que vou encontrando, se quiser acompanhar é so me seguir no twitter.

Até a próxima.

1 Comentário

  1. André disse:
    18 de dezembro de 2015 às 17:02

    Olá!
    Segui das dicas do seu post, o qual achei muito interessante e últil, porém, está me mostrando um erro:
    Warning: preg_match(): Unknown modifier ‘(‘ in C:\xampp\htdocs\manancial\wp-content\themes\travelify-child\library\functions\functions.php on line 546

    Grato!

Faça um Comentário