Como fazer redirecionamentos no servidor

Aprenda a fazer redirecionamentos 301 no servidor, sem precisar de plugins no WordPress.

São diversas as situações que podem forçar um site a fazer redirecionamentos — normalmente 301 ou 302 — de uma URL para outra. A mais comum é que um conteúdo que tem links externos para si em sites de terceiros tenha tido seu URL modificado, e seja impossível revisar todas as referências para solicitar uma mudança, mas também pode ser que algum mecanismo de busca indexe o URL errado (ou “errado”) de uma página, exigindo que se façam remendos como possível.

Plugins para redirecionar URLs

Em se tratando da plataforma WordPress há diversos plugins que fazem o trabalho de interceptar URLs inválidos e redirecioná-los para o lugar certo. Basicamente todo plugin de SEO faz isso, bem como existem alguns especializados nesta tarefa, como o Redirection (vamos voltar a falar dele daqui a pouco).

A regra geral indica que não tem problema nenhum em fazer os redirecionamentos usando plugins, principalmente porque eles implicam mais portabilidade para aqueles que costumam trocar de provedor de hospedagem com uma certa frequência.

A situação começa a levantar preocupações, entretanto, quando o volume de redirecionamentos gerenciados pelo plugin atinge uma determinada proporção — que varia conforme a capacidade do servidor e dos demais sites e plugins instalados nele — a ponto de prejudicar o desempenho do domínio.

Diferença entre redirecionar por plugin ou direto no servidor

Para entender por que qualquer coisa feita por plugin quando poderia ser feita diretamente no servidor, com vantagens, vamos pensar em como um redirecionamento funciona, do ponto de vista do visitante (que pode ser um bot ou uma pessoa usando um navegador) e do ponto de vista do servidor.

Seja como for, por plugin ou no servidor, a informação que o visitante vai ver segue um fluxo bem simples:


Requisição
A requisição a um URL é feita

Servidor responde
Uma resposta é enviada indicando que o URL mudou para outro lugar

Navegador segue o redirecionamento
Navegador interpreta a resposta do servidor e segue o redirecionamento, entregando o conteúdo para o visitante, todos ficam felizes

Já do ponto de vista do servidor (ou do site, se ficar mais fácil de entender), o fluxo varia de acordo com o método usado para o redirecionamento.

Redirecionamento feito por plugin

Quando usamos um plugin para redirecionar, o fluxo que a máquina precisa seguir é mais complexo:


Servidor
O servidor web recebe uma requisição

PHP
A requisição é repassada para o PHP

WordPress
O PHP carrega todo o WP na memória, incluindo temas e plugins, repassando a este a requisição

Plugin
O plugin identifica a requisição como sendo de um URL redirecionado, formata a resposta e envia-a de volta ao PHP

PHP
O PHP repassa a resposta do WordPress ao servidor web

Servidor
O servidor web recebe a resposta do PHP e a repassa para o visitante

Observe quantos passos são necessários para que um simples redirecionamento feito por plugin possa funcionar. Cada etapa implica processamento, uso de memória e principalmente uso de tempo (mesmo que sejam milissegundos). As etapas de WordPress (e plugin, por conseguinte) são ainda mais custosas, porque o PHP interpreta o código a cada requisição, e um site com muitos plugins e/ou com problemas de código pode levar a um consumo absurdo de recursos, a depender de muitas variáveis, em casos extremos.

Redirecionamento feito pelo servidor web

Já um redirecionamento feito pelo servidor web (que no caso dos servidores da PortoFácil é o Nginx) é muito mais simples:


Servidor
A requisição é recebida, interpretada e entregue ao visitante em um único passo

Devido à arquitetura do Nginx, todas as configurações são carregadas na memória no momento em que o serviço “sobe” — diferente do popular .htaccess do Apache, que a cada requisição precisa ser interpretado, o que pode implicar um belo desperdício de recursos de computação.

Assim, o Nginx está o tempo todo sendo executado, “sabendo”, portanto, como deve tratar cada redirecionamento sem precisar aguardar por nenhum tratamento lógico feito por qualquer linguagem interpretada, como o PHP no redirecionamento feito por plugin.

Como redirecionar URLs diretamente no Nginx

Redirecionar URLs diretamente pelo servidor Nginx é simples, muito eficiente, mas é um trabalho que requer uma certa desenvoltura para lidar com códigos e a certeza de não estar fazendo nada errado.

Em caso de dúvida ou de insegurança, em vez de executar você mesmo o procedimento abaixo indicado, solicite ajuda ao Suporte Técnico, que poderá fazer o trabalho por você.

Além de conhecimento e boa vontade, para redirecionar URLs diretamente no servidor você precisará de:

  • Acesso à Mônica para Clientes;
  • acesso ao SFTP;
  • um programa para edição de códigos (nossos favoritos são Visual Studio Code e Atom).

Arquivos de regras de redirecionamento

Cópia da tela do computador
Arquivo de redirecionamentos da PortoFácil

Por meio do SFTP você deve criar um arquivo vazio, caso ainda não exista um com as regras de redirecionamento, no seguinte local:

  • /var/www/domínio.com.br/conf/nginx/

A sugestão que damos é que o arquivo tenha um nome sugestivo, como redirects.conf, ou qualquer outro que faça sentido para quem o vir. A extensão .conf é obrigatória para que o Nginx reconheça o arquivo.

As regras de redirecionamento

O arquivo deverá conter diretivas válidas de configuração do Nginx. Não cabe neste tutorial entrar em detalhes sobre esse assunto, mas simplificadamente: cada linha no arquivo conterá uma regra de redirecionamento, que seguirá o formato abaixo (se houver quebra de linha ignore, o conteúdo deve estar numa única linha do arquivo de configuração):

location /url-antigo { return 301 /url-novo; }

A linha acima contém diversos elementos que devem ser respeitados:

  • location é uma diretiva, ou uma instrução para o Nginx, indicando como ele deve agir ao encontrar a URL que virá descrita a seguir;
  • /url-antigo é a URL que desejamos redirecionar;
  • o trecho contido entre { e } é a ação que o Nginx deve executar ao receber uma requisição que case com o url-antigo;
    • return é o que o Nginx deve fazer, ou seja, imediatamente retornar um resultado com o que será definido a seguir;
    • 301 é o código do estado HTTP do redirecionamento; normalmente será 301 ou 302;
    • /url-novo é para onde queremos que o visitante vá, ou seja, o destino do redirecionament;
    • ; é a partícula que indica ao Nginx que essa instrução acabou.

Vamos a um exemplo real, um trecho de código retirado do arquivo de configurações de redirecionamento da própria PortoFácil (mais uma vez, caso haja quebra de linhas devido às dimensões da tela, lembre-se de que cada diretiva location deve estar numa linha só).

Observação: as URLs de destino podem ser relativas (como no exemplo genérico mais acima) ou absolutas (como no exemplo real); basta informar a URL completa no destino caso deseje.

Como você pode ver, não é algo complexo demais, mas é um trabalho que requer atenção para que cada diretiva location seja corretamente interpretada pelo Nginx; o erro mais comum é esquecer do ; após a URL de destino.

A menos que você tenha certeza absoluta do grau 33 do que estiver fazendo, o arquivo de redirecionamento deve conter unicamente diretivas location. Caso queira fazer algum comentário (ou seja, escrever algo para informar quem porventura vir o código e sem que o Nginx o leve em consideração) basta iniciar uma linha com o sinal de # (sustenido, hash ou “jogo da velha”, entre outras denominações).

Você não pode cometer erros neste arquivo, pois caso isto aconteça o Nginx poderá parar de funcionar, deixando a máquina inteira offline. Claro, nada que não possa ser facilmente consertado por nossa Equipe de Suporte.

Observações importantes

Especial cuidado deve ser tomado com caracteres especiais (ou seja, os que não são A-Z, a-z e 0-9 — além de - e _, sinais de menos e sublinhado). Isso porque o Nginx utiliza alguns dos caracteres especiais para a definição de Expressões Regulares, assunto que não cabe no contexto deste tutorial.

Quando tiver um caractere especial na sua URL (principalmente na origem) será necessário utilizar o seguinte formato:

location '/ /' { return 301 /; }

O exemplo é real, e visa resolver um problema recorrente em nosso site: alguém fez um link para a página inicial, mas adicionou um espaço ao final do URL! Aí quem chega ao site a partir deste link (que sequer conseguimos identificar onde está para tentar pedir uma revisão) acaba indo para uma página de erro 404 e não para a página inicial do site.

Para resolver o problema a regra acima intercepta este espaço, porém é necessário envolver todo caminho da origem em “aspas simples”, para que o Nginx não confunda o espaço literal que ele deve interpretar com o espaço usado para separar as diversas partes da diretiva location.

Atenção! O arquivo de exportação do Redirection não considera a necessidade de tratar de maneira específica os caracteres especiais, mais uma razão pela qual não é possível apenas copiar e colar o conteúdo dele no arquivo de redirecionamentos do Nginx.

Reiniciando o Nginx

Como fazer redirecionamentos no servidor

Uma vez que você tenha concluído a edição do seu arquivo de redirecionamentos, só resta instruir o Nginx para fazer uso dele.

Você deve acessar a Mônica para Clientes e acionar a opção “Recarregar Nginx” para que suas configurações sejam incorporadas ao servidor web. Suas configurações podem levar até um minuto para serem reconhecidas e ativadas, portanto tenha um pouquinho de paciência.

Dica bônus 1: status 410

Uma das funções mais úteis do YOAST SEO é detectar a exclusão de posts e páginas, servindo no lugar delas uma página de erro com o status 410 nos cabeçalhos HTTP.

O 410 é semelhante ao 404, assim como o 302 é semelhante ao 301: enquanto o 404 diz aos indexadores “este conteúdo não foi encontrado” o 410 diz “este conteúdo foi removido e não vai mais voltar”.

Você pode fazer o Nginx servir “erros” 410 também, usando o mesmo esquema de que trata este tutorial inteiro. Basta ajustar o parâmetro de retorno da diretiva location. Exemplo:

location /natal-2018.html { return 410; }

Um buscador ao encontrar o URL /natal-2018.html vai receber o código de retorno 410 e vai saber que esta página foi removida do domínio e não vai mais voltar.

Contudo, observe que a página 410 padrão do Nginx não é absolutamente nada amigável a seres humanos. Caso exista a possibilidade de uma pessoa vir a acessar a página removida talvez seja melhor manter os 410 sob responsabilidade do YOAST em nome da usabilidade.

Como fazer redirecionamentos no servidor
Página 410 padrão do Nginx — ruim para humanos

Dica bônus 2: utilizando o plugin Redirection para monitorar os erros 404

Um dos principais motivos pelos quais alguém pode querer ou precisar fazer redirecionamentos em seu site é para evitar os potencialmente prejudiciais erros 404 (página não encontrada), que podem prejudicar o domínio na já difícil tarefa de aparecer bem posicionado nas páginas de resultados do Google.

Uma boa ideia é usar o plugin Redirection para monitorar diariamente as incidências de páginas 404 que ocorrem no WP. Caberá uma análise de cada caso, para ver se vale ou não a pena criar um redirecionamento permanente. Se você julgar que sim, use a informação descoberta para alimentar o arquivo de configuração do Nginx, conforme explicado acima.

Atenção! O Redirection tem um recurso que exporta as regras de redirecionamento para o formato do Nginx. Infelizmente não se trata apenas de copiar e colar o conteúdo exportado pelo Redirection para o arquivo de diretivas. Se você fizer isso seu site poderá ficar offline até que o suporte técnico possa fazer a necessária manutenção; até a Mônica para Clientes vai deixar de funcionar caso o Nginx caia.

Cuidado com os “logs” do Redirection

O plugin Redirection é muito útil para detectar incidências de erros 404 causados por agentes externos, para que possamos tratar cada um com um redirecionamento.

Entretanto, é muito importante que você não deixe acumular registros de erros não tratados porque dependendo do movimento do site em poucos dias seu banco de dados poderá estar tão inchado a ponto de não ser possível nem ao menos fazer backup.

Em caso de dúvida, consulte o Suporte Técnico.

Resumo

A configuração dos redirecionamentos diretamente no servidor pode ser vantajosa em muitos casos, aliviando o servidor de processamento desnecessário.

Para configurar os redirecionamentos no Nginx, nos servidores da PortoFácil, basta:

  • Acessar o servidor por SFTP;
  • baixar o arquivo de redirecionamentos para seu computador;
  • incluir (ou alterar, ou remover) as diretivas location, sempre tomando o cuidado de não desrespeitar a sintaxe obrigatória;
  • subir de volta o arquivo modificado para o servidor;
  • reiniciar o Nginx para aplicar as novas configurações.

Não custa repetir que nosso Suporte Técnico está sempre disponível e disposto para ajudar com esta tarefa.

 

Quero ser cliente da PortoFácil!Contato

Publicado por Janio Sarmento – 10 de junho de 2020