Redirecionamento 301 para mudança de URL de categoria no WordPress

Redirecionamento 301 para mudança de URL de categoria no WordPress

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:

  1. $old_cat_slug: troque 'filmes' para o slug da categoria que pretende alteral.
  2. $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!

Categoria: TutoriaisTags:
Autor

Gabriel Manussakis

Designer e desenvolvedor front-end. Entusiasta por JavaScript. Atualmente desenvolvendo em Angular e RxJS.