Se tem um site mais ou menos dinâmico, onde cria e elimina conteúdo (como produtos que já não estão em stock, ou páginas de destino temporárias para campanhas específicas) seguramente estará familiarizado com a importância de fazer redirecionamentos para essas URLs que já não existem.
Ninguém gosta que os visitantes que acedem a essas URLs se deparem com um erro 404: acumular erros 404 não só oferece uma má experiência de utilizador, como também pode prejudicar o seu posicionamento seo.
Quando nos deparamos com o problema de uma URL eliminada, a lógica diz-nos que temos de redirecionar esse erro para outra página relacionada.
Mas o que acontece se precisar de eliminar conteúdo obsoleto, que sabe que não voltará a estar online, mas não quer estar a fazer redirecionamentos o tempo todo?
Neste artigo, mostrar-lhe-ei uma solução limpa e profissional que:
- Redireciona automaticamente um tipo de publicação personalizado eliminado para uma página personalizada
- Não afeta em absoluto os restantes tipos de publicação que continuam ativos
- A página 404 normal continua a funcionar, mas não para o nosso tipo de publicação personalizado
- Oferecemos melhor contexto ao utilizador que se depara com esse erro
- Não temos de fazer um redirecionamento por cada tipo de publicação personalizado que eliminamos
Problema: quando não quer fazer redirecionamentos constantemente, mas um erro 404 não é amigável para o utilizador
Para este cenário, não queremos ter de fazer redirecionamentos individuais cada vez que um artigo do grupo é eliminado.
Também não podemos fazer um redirecionamento em massa que capture todas as URLs que contenham o slug que usa o tipo de conteúdo que queremos redirecionar, porque redirecionaria também os artigos ativos, fazendo com que nenhum visitante pudesse aceder a eles. Isto é um erro crítico que devemos evitar a todo o custo.
A chave está em criar um redirecionamento condicional, que só se ative quando o WordPress já tiver determinado que a URL para o tipo de publicação não existe (erro 404).
A solução: uma página de destino diferenciada e um snippet PHP personalizado
A forma mais elegante e precisa de resolver este problema é através de um pequeno fragmento de código PHP que adicionaremos ao nosso tema. Este código atua depois de o WordPress processar o pedido e detetar que a página não existe.
Exemplo: aplicando esta lógica a um sistema de cupões de desconto
Imagine que tem um tipo de publicação na sua instalação de WordPress para publicar cupões de desconto ou promoções de curta duração, cada uma com a sua URL específica. Este desconto ou promoção estará online alguns dias e depois será eliminado.
Como o número de promoções de entrada e saída é elevado, não quer estar a realizar redirecionamentos o tempo todo cada vez que elimina uma promoção, então opta pelo seguinte:
- Criamos uma página de destino tipo “Esta promoção já não está disponível” para onde chegarão todos aqueles utilizadores que visitam URLs de promoções obsoletas e que tenhamos eliminado do nosso site
- Um snippet PHP analisa cada erro 404 do site, e se a página contiver o slug do nosso tipo de publicação, redireciona-o para essa página de destino
Vantagens
As vantagens deste sistema são várias:
- Melhor fluxo de trabalho: não temos de redirecionar manualmente cada promoção que eliminamos
- Melhor experiência de utilizador: o utilizador aterra numa página informando-o que a promoção que procura não existe, mas que pode procurar outras
A colocá-lo em prática
Supondo que tenha criado a sua página de destino para promoções eliminadas, por exemplo esta:
https://example.com/esta-promocion-ya-no-existe/Agora criaremos o snippet PHP que redirecionará o utilizador para essa página.
Este é o código de que precisa:
add_action( 'template_redirect', 'redirect_404_to_custom_page' );
function redirect_404_to_custom_page() {
if ( ! is_404() ) {
return;
}
$url_solicitada = $_SERVER['REQUEST_URI'];
if ( preg_match( '#^/promocion/[^/]+/?$#', $url_solicitada ) ) {
wp_redirect( 'https://example.com/esta-promocion-ya-no-existe/', 301 );
exit;
}
}
Como funciona este código?
- Deteção do 404: O snippet primeiro verifica se estamos perante um erro 404, não perante uma página que existe e que está em código 200.
- Verificação do padrão: Utiliza uma expressão regular para se assegurar de que a URL solicitada coincide com a estrutura de URLs do seu sistema de promoções, ou seja, que contém o slug /promocao/ nela
- Os slugs do tipo de publicação para as promoções no nosso são sempre os mesmos:
- https://example.com/promocion/slug-promocion-1/
- https://example.com/promocion/slug-promocion-2/
- https://example.com/promocion/slug-promocion-3/
- …
- Os slugs do tipo de publicação para as promoções no nosso são sempre os mesmos:
- Redirecionamento seletivo: Só se ambas as condições forem cumpridas, redireciona o utilizador para a página personalizada que tenhamos criado, no nosso exemplo, esta:
https://example.com/esta-promocion-ya-no-existe/Como implementar isto no seu site?
A página de destino é apenas uma questão de a criar, não tem mais segredo. Recomendo publicá-la em no index, mas permitindo que os links possam ser visitados, com estas duas metaetiquetas:
noindex, followQualquer um dos plugins seo para WordPress que existem no mercado permite-lhe fazer isso facilmente.
Quanto ao snippet PHP que fará o trabalho, tem duas opções para adicionar este código ao seu WordPress:
- Functions.php do tema: Pode adicioná-lo diretamente ao ficheiro
functions.phpdo seu tema ativo. No entanto, lembre-se de que se atualizar o tema, perderá o código. Para evitar isso, deve usar um tema filho. Se não tem um tema filho ou não sabe o que é, passe para o ponto 2. - Plugin de snippets: Instale um plugin como “Code Snippets” ou “WP Code“, que lhe permitem adicionar código PHP de forma segura e organizada, sem necessidade de tocar nos ficheiros do tema.
Importante: Substitua /promocion/ pelo slug que usa para o seu tipo de publicação e modifique também a URL da página personalizada que tenha criado.
Seja claro na sua página de destino
A página para a qual redireciona os seus visitantes quando uma promoção já não existe deve oferecer uma boa experiência. Recomendo incluir:
- Uma mensagem clara: explique que a promoção que o utilizador está a procurar já não está disponível, mas faça-o de forma amável.
- Adicione links úteis: direcione os utilizadores para a sua página de promoções atuais ou para a página inicial.
- Pesquisa: Inclui um motor de busca para que possam encontrar promoções semelhantes.
Vantagens desta solução
- Precisa: só redireciona artigos eliminados, nunca afeta os ativos.
- Automática: não precisa de criar redirecionamentos um por um para cada promoção eliminada.
- Respeitosa com o seo: O redirecionamento 301 indica aos motores de busca que o conteúdo foi movido de forma permanente e já não está disponível, e não se trata de um erro 404 clássico
- Personalizável: pode adaptar a expressão regular a qualquer estrutura de URLs ou tipo de publicação que tenha (promoções, descontos, eventos caducados…)
Conclusões
Como vê, gerir conteúdo eliminado no WordPress não tem de ser uma dor de cabeça. Com este simples snippet PHP, pode oferecer uma experiência de utilizador coerente e profissional, mantendo o seu seo intacto e sem complicar a vida com redirecionamentos manuais.
Da próxima vez que eliminar um evento antigo, lembre-se de que os seus visitantes não se encontrarão com um erro 404 genérico, mas sim com uma página concebida especificamente para os guiar para outros conteúdos do seu site.
Já experimentou esta solução?
Tem alguma outra estratégia para gerir conteúdos eliminados?
Partilhe a sua experiência nos comentários

