O redirecionamento 301 é muito importante para preservar a relevância de uma página já indexada nos mecanismos de busca quando ocorre a mudança de sua URL. No caso de uma categoria, quando a criamos no WordPress, ela adquire um link permanente, através dele, é possível acessar a listagem de posts que foram publicados dentro dela.
Pode ser que em algum momento surja a necessidade de alterar o nome da categoria para utilizar uma nova palavra-chave mais relevante para seu conteúdo. Neste caso será necessário também alterar o slug na URL, com o objetivo de fazer constar também nela a palavra-chave, por exemplo:
Você possui um blog ativo e bem indexado na web. Seu blog trata sobre entretenimento e possui uma categoria chamada filmes, a listagem de posts dentro desta categoria é acessada através da seguinte URL:
http://exemplo.com/category/filmes
Você então decide mudar o nome da categoria para cinema, e faz também a alteração na URL, agora, a mesma listagem de posts é acessada por uma novo endereço:
http://exemplo.com/category/cinema
Aí começa o problema
Se você fizer esta mudança sem fazer o redirecionamento 301 da URL antiga para a nova, toda a reputação e relevância de sua página irá se perder para os mecanismos de busca, pois daqui para frente o endereço antigo irá cair numa página de erro.
Aqui começa a solução
Com o redirecionamento permanente 301 fazemos com que o usuário seja levado à página mesmo acessando o endereço antigo. É possível fazê-lo através do arquivo de configuração de servidor .htaccess
, mas neste artigo, vou explicar o método de fazê-lo através da função nativa do WordPress: wp_redirect
.
Dentro do seu arquivo functions.php
coloque o código abaixo, cada parte da função está comentada detalhadamente, e você pode remover os comentários se preferir.
// Verificamos se a função já não existe no projeto.
if ( !function_exists('ofcode_redirect_category') ) {
// Se a função não existe, criamos.
function ofcode_redirect_category()
{
// Armazena a URL atual.
$current_url = $_SERVER['REQUEST_URI'];
// Adicionamos a barra ao final caso não exista.
if ( substr($current_url, -1) !== '/' ) $current_url = $current_url . '/';
// Armazenamos a base de categoria, por padrão o WordPress
// usa category como base, porém é possível alterar no admin
// em Configurações > Links permanentes, para nosso exemplo,
// vamos assumir o uso do termo padrão.
$cat_base = ( get_option('category_base') === '' ? 'category' : get_option('category_base') );
// Você deve substituir filmes pelo antigo slug de sua categoria.
$old_cat_slug = 'filmes';
// Parte da URL referente à antiga categoria.
// Em nosso exemplo: category/filmes/
$old_url_part = $cat_base . '/' . $old_cat_slug . '/';
// Verifica se category/filmes/ está na URL atual, se não estiver
// podemos encerrar a função, pois não há necessidade
// de redirecionamento.
if( strpos( $current_url, $old_url_part) === false ) return;
// Já que encontramos category/filmes/ na URL então
// devemos substituir por category/cinema/.
// Troque cinema pelo novo slug de sua categoria.
$new_cat_slug = 'cinema';
// Montamos a parte da URL referente à nova categoria,
// em nosso exemplo: category/cinema/.
$new_url_part = $cat_base . '/' . $new_cat_slug . '/';
// Montamos a nova URL fazendo a substituição
$new_url = str_replace( $old_url_part, $new_url_part, $current_url);
// Fazemos o redirecionamento.
wp_redirect( $new_url , 301 );
// Encerramos.
exit();
}
// Adicionamos a função
add_action('template_redirect', 'ofcode_redirect_category');
}
Como usar este código
Você deve substituir o valor de duas variáveis:
$old_cat_slug
: troque'filmes'
para o slug da categoria que pretende alteral.$new_cat_slug
: troque'cinema'
para o slug da nova categoria.
Caso deseje alterar uma sub-categoria, o slug da categoria pai deve constar no valor das variáveis, por exemplo:
$old_cat_slug = 'filmes/acao';
$new_cat_slug = 'filmes/aventura';
Neste caso trocamos o slug da sub-categoria Ação para Aventura.
Importante considerar
Se seu projeto utiliza algum plugin ou função que remove da url a base de categoria, então seus links permanentes podem apresentar ambiguidade, neste caso, este código pode não ser o suficiente para o perfeito redirecionamento, para um caso mais pontual com este é necessário criar funções específicas.
Código em uso
Testou este código? Encontrou algum bug ou tem uma sugestão para melhorá-lo? Te convido então a participar nos comentários, assim a gente vai aprendendo e melhorando juntos.
Nos vemos no próximo post, Abraço!