Principais redirects para SEO

Redirecionamentos via htaccess


Autor: Réulison Silva Publicado em: Maio 14, 2021

Você entende a importância de uma URL dentro da arquitetura de um site? Se sim, Ótimo!

Se não… Vamos abstrair! Pense na construção de uma cidade, o que seriam as URLs? As URLs seriam as estradas que ligam toda a cidade, seriam as rotas.

E assim que um programador chama uma URL, trata-se de um sistema de rotas criado a partir do backend. E o que acontece quando você tem que retirar uma rota, ou seja, retirar uma estrada. Nesse caso você precisa ter um caminho alternativo, você precisa redirecionar o tráfego daquela estrada, se não o caos é gerado.

No seu site, ecommerce, blog ou seja lá o que for é basicamente a mesma coisa. Você precisa cuidar das suas estradas. E uma das maneiras de gerenciar suas estradas é através de um arquivo chamado htaccess.

O arquivo htaccess permite que você substitua certas decisões que o servidor faz no backend, como o sistema de rotas. Isso significa que o profissional em SEO deve saber manipular as informações que o servidor envia de volta ao cliente, a fim de facilitar a vida dos sistemas de busca e dos usuários.

Para quem possui servidor NGINX, aprenda a converter de Apache Rewrite Rules para NGINX Rewrite Rules.

Nesse primeiro momento eu vou listar alguns dos principais comandos do htaccess (para servidores baseados no Apache), o Rewrite.

Redirects via htaccess

Atalhos

O básico 301

O código de resposta 301 é o status HTTP que indica um redirecionamento permanente. Assim, um comando 301 invocado pelo htaccess permite que os mecanismos de pesquisa saibam que qualquer autoridade/links acumulados pela URL antiga devem ser direcionados para a nova URL permanentemente. Os redirecionamentos 301 são o básico para manutenção de URLs.

Sintax

O redirecionamento 301 é extremamente simples:

redirect 301 /relative/path/to/file.php
http://www.seusite.com/path/to/new/file.php

Redirecionar páginas usando o comando padrão 301 acima é extremamente simples quando você tem um pequeno número de páginas a serem consideradas.

No entanto, quando você precisar fazer redirecionamentos mais complexos, por exemplo, redirecionar URLs que pertencem a um diretório ou um subdomínio, o comando simples de redirecionamento 301 torna-se extremamente ineficiente quando falamos em termos de otimização.

Utilizar um comando de redirecionamento 301 para milhares de URLs pode facilmente levar dias de um trabalho chato.

A solução? A ferramenta Apache Rewrite.

Expressões Regulares

Embora os exemplos a seguir no artigo possam ser modificados para atender às suas necessidades, recomendo que você aprenda expressões regulares. Elas não são tão difíceis quanto parecem.

Usando o Rewrite

Antes de declarar qualquer Rewrite Rule, você precisa dizer ao .htaccess para ativar o Rewrite Engine. Isso é o que chamamos muitas vezes de “redirecionamento”, que na verdade é o Apache Rewrite reescrevendo a string da URL que você selecionou através de uma Expressão Regular.

Na programação, uma cadeia de caracteres ou string é uma sequência de caracteres, geralmente utilizada para representar palavras, frases ou textos de um programa.

Parar ficar claro, o que eu chamo de Rewrite Rules pode ser entendido como Regras de Redirecionamento ou Reescrever uma string qualquer.

Coloque o seguinte comando na parte superior do arquivo .htaccess:

RewriteEngine On

A sintaxe das regras de reconfiguração são assim:

ReWriteRule url_pattern file_reference

[FLAGS]

Vamos definir estes:

  • URL Pattern: Um padrão de Expressão Regular que acionará o Rewrite;
  • Extensão do arquivo: A extensão do arquivo que será exibido;
  • FLAGS: Otimizações opcionais, como redirecionamentos ou correspondência ampla para maiúsculas e minúsculas.

Alterando a extensão do arquivo

Por exemplo, suponhamos que seu antigo servidor só permitia que você exibisse arquivos HTML simples. Agora que você mudou para um servidor que possibilita o uso de php.

Você tinha uma tonelada de arquivos html que agora são arquivos php, e você não quer nenhum problema com conteúdo duplicado ou perder o link juice que as páginas html tinham acumulado.

Link Juice é um termo coloquial no mundo SEO que se refere ao benefício ou capital passado para um site através de links de fontes externas ou internas.

Vamos resolver esse problema:

RewriteBase /

RewriteRule ^(.*).html$ $1.php [R=301, L]

Então agora todas requisião ao seu servidor para www.seusite.com/exemplo.html são redirecionados para www.seusite.com/exemplo.php.

Explicando o código

Vamos começar com a URL Pattern:

^(.*).html$

Parte por parte:

^ O símbolo de sinal de circunflexo corresponde ao início de uma string. No nosso caso, a string é a URL. Na maioria das vezes você irá usar o símbolo circunflexo; sem o circunflexo, o comando poderá gerar ambiguidades na Expressão Regular.

(. *) O ponto para expressões regulares corresponde a qualquer caractere. O “estrelinha” ou asterisco a seguir representa “0 ou mais instâncias”. Assim, * e ponto juntos tem por significado “qualquer caractere entre 0 ou mais”.

Por “0 ou mais”, eu não digo que o caractere não pode ser repetido: . * Corresponde às strings aaaaa e 23e2323. Qualquer caractere, podendo ser repetido infinitas vezes. Entendeu?

Os parênteses em torno do ponto e do asterisco (.*) informam para armazenar (lembrar) esses caracteres correspondentes no que chamamos de referência de retorno (um pouco parecido com uma variável). Isso nos permite reusar esses caracteres mais tarde, o que é extremamente útil!

.html$ – sabemos que o .html é uma extensão. No entanto, conforme definido acima, o operador de ponto representa qualquer caractere. Portanto, o pattern “.html” significa que pode ser “9html” ou “lhtml”, qualquer coisa! Usando o caractere de escape, dizemos que queremos corresponder literalmente a um período.

Uma subcadeia de uma cadeia de caracteres ou substring é outra cadeia que ocorre dentro de uma cadeia de caracteres (string). Por exemplo, “o melhor dos” é uma substring de “Foi o melhor dos tempos”.

Agora que terminamos de entender um pouco sobre Expressão Regulares, vamos dar uma olhada na referência do arquivo.

$1.php O parêntese no pattern da URL anterior nos ajudou a capturar todos os caracteres até a extensão .html. Somos capazes de acessar essas referências por meio do cifrão.

$1 corresponde à primeira referência anterior, $2 corresponde ao segundo e assim por diante.

Agora, arquivos como o seusite.com/exemplo.html farão referência a seusite.com/exemplo.php.

Mas neste exemplo, não queremos apenas transmitir a referência entre as URLs. Se deixarmos a FLAG como está não haverá redirecionamento, você fará a referência para exemplo.php mas a URL ainda será exemplo.html. Isso é apenas conteúdo duplicado!

Colocando a FLAG [R = 301, L] no final da Rewrite Rule, nós damos o sinal para realmente redirecionar para exemplo.php e manter a estrutura da URL.

Isso pode parecer um pouco complexo no início, mas depois de se familiarizar com algumas expressões regulares básicas você entenderá facilmente regras como essa.

Redirects mais usados

Veja como redirecionar seu site de HTTP para HTTPS neste artigo.

Entre diretórios do mesmo domínio

Para redirecionar o conteúdo de um diretório inteiro para outro, use o seguinte:

RewriteRule ^subdirectory/(.*)$ /anotherdirectory/$1 [R=301,NC,L]

De uma URL para outra URL

RewriteRule ^url-string-to-redirect$ http://www.seudominio.com/your-new-url-string [R=301,L]

Ou

Redirect 301 /path/to-old-url    http://www.cyourdomain.com/path/to-new-url

Todo um diretório para a root

Para redirecionar o conteúdo de um diretório inteiro para a raiz(root) do servidor da web:

RewriteRule ^subdirectory/(.*)$ /$1 [R=301,NC,L]

De um diretório para um mesmo diretório em outro domínio

Para redirecionar o conteúdo de um subdiretório para outro domínio, mas no mesmo subdiretório:

 Redirect 301 /subdirectory http://www.outrodominio.com/subdirectory

De um domínio para outro domínio

RewriteEngine On
RewriteCond %{HTTP_HOST} ^olddominio.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.olddominio.com [NC]
RewriteRule ^(.*)$ http://newdominio.com/$1 [L,R=301,NC]

Agora usando www como padrão:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.olddominio\.com$
RewriteRule (.*) http://www.newdominio.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} !^olddominio\.com$
RewriteRule (.*) http://www.newdominio.com/$1 [R=301,L]

Entre subdomínios do mesmo domínio

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^oldsubdominio.seudominio.com$ 
RewriteRule ^(.*)$ http://newsubdominio.seudominio.com/$1 [R=301,L] 

Entre subdomínios de domínios diferentes

Vamos redirecionar de subdominio.olddominio.com para subdominio.newdominio.com. Veja:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^subdominio.olddominio.com$ 
RewriteRule ^(.*)$ http://subdominio.newdominio.com/$1 [R=301,L] 
RewriteCond %{HTTP_HOST} ^www.subdominio.olddominio.com$ 
RewriteRule ^(.*)$ http://subdominio.newdominio.com/$1 [R=301,L]

Entre domínios diferentes mantendo a estrutura de URLs

Nesse caso iremos criar um redirecionamento entre domínios diferentes mas iremos manter a mesma arquitetura de URLs do antigo domínio.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^olddominio.com
RewriteRule ^(.*) http://newdominio.com/$1 [P]

Forçar www em todas as URLs

RewriteCond %{HTTP_HOST} !^www.seusite.com [NC]

RewriteRule ^(.*)$ http://www.seusite.com/$1 [R=301,L]

Retirar o www de todas as URLs

RewriteCond %{HTTP_HOST} !^www.seusite.com [NC]

RewriteRule ^(.*)$ http://seusite.com/$1 [R=301,L]

URLs sem extensão deverão ser executada com php

Por exemplo, meusite.com/sobre será executada meusite.com/sobre.php, mas não será exibida a extensão da URL no final (e as URLs sem extensão são mais atraentes!).

RewriteRule ^$ index.php

RewriteRule ^((?!(.|.php)).)*$ $0.php

Redirecionar index.php para o Root

Options +FollowSymLinks DirectoryIndex index.php

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/

RewriteRule ^index.php$ http://www.seusite.com/ [R=301,L]

Usando Redirecionamento com WordPress

Digamos que você esteja usando o wordpress e queira uma URL bonita para representar uma listagem de livros por autor em um site de livros. O WordPress executa suas próprias regras de redirecionamento que roteiam tudo de volta para index.php, então muitas de suas regras não funcionarão porque você provavelmente está tentando reescrever uma URL que já foi reescrita!

A solução alternativa é usar o parâmetro GET no nome da página do index.php.

Assim, a URL antes assim www.lojadelivros.com/autor/rothfuss, será carregada e exibida pelo aquivo PHP assim www.lojadelivros.com/index.php?pagename=livros&autor=rothfuss. Isso significa que você tem acesso aos valores via $_GET na página de livros em seu tema! Muito útil para um desenvolvedor WordPress que deseja organizar informações.

As regras de redirecionamento permitem que seus sites se tornem mais organizados e mais flexíveis!

Ficou alguma dúvida? Conhece alguma outra regra? Deixe aqui nos comentários.