O redireccionamento 301 é a forma mais eficiente e amiga dos motores de busca, para redireccionar websites.
A sua utilização pode ser feita por diversos motivos, e geralmente, os utilizadores não conhecem a norma 301 redirect na altura de apontarem para outra página.
A sua execução pode ser feita em diversos casos, embora os mais conhecidos sejam:
-
Redireccionar uma página antiga para um endereço novo;
-
Redireccionar diversos domínios para uma única página;
-
Para apontar apenas uma versão da sua página (www ou não-www);
-
Para armonizar uma estrutura URL no seu site;
-
Outras.
Um dos grandes problemas que envolve o PageRank e o seu “sistema de votos” é o facto de quando se migra para um novo endereço, tudo aquilo que foi feito é perdido. Mas está errado. Com o redirect é possível redireccionar todos esses votos, links e tráfego de forma legal para um novo endereço, e sem perder todo o caminho já feito, inclusivé o valor do PageRank.
Existem também dois tipos de redireccionamento: o 301 redirect e o 302 redirect.
O primeiro é uma redireccionamento permanente, ou seja, para sempre, enquanto o segundo é um redireccionamento temporário, que acontece por diversos motivos.
Neste artigo apenas vou focar o Redireccionamento 301, que quanto a mim é o mais importante e o mai utilizado nos casos acima referidos.
Existem diversos código de redireccionamento, pelo que é importante informar-se junto do seu prestador de serviços que tipo de servidor tem e que linguagem ele utiliza.
Redireccionamento de uma página singular PHP
Para redireccionar apenas uma página estática singular do seu blog ou website para um novo endereço, simplesmente coloque o código seguinte dentro do seu ficheiro index.php.
<?php
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location: http://www.newdomain.com/page.html“);
exit();
?>
Redireccionamento Canónico em PHP
O redireccionamento canónico 301 em PHP irá remover (ou adicionar) o prefixo www. em todas as páginas do seu domínio.
O código seguinte redirecciona todos os seus utilizadores da sua versão http:// para a versão http://www. do seu website ou blog.
<?php
if (substr($_SERVER['HTTP_HOST'],0,3) != ‘www’) {
header(’HTTP/1.1 301 Moved Permanently’);
header(’Location: http://www.’.$_SERVER['HTTP_HOST']
.$_SERVER['REQUEST_URI']);
}
?>
Redireccionamento de Página Singular em Apache
Para executar este comando, você deverá criar um ficheiro de nome .htaccess (não suportado por versões de alojamento em Windows) e colocá-lo na raíz do seu website ou blog. Se não sabe criar esse ficheiro, leia este artigo. Nesse ficheiro adicione o seguinte código:
Redirect 301 /old/oldpage.htm /new/http://www.domain.com/newpage.htm
Redireccionamento Canónico .htaccess em Apache
Utilize o mesmo funcionalismo descrito anteriormente para este redireccionamento também. Ele vai deslocar os seus utilizadores da versão http:// do seu website para a nova versão em http://www.
Options +FollowSymlinks
RewriteEngine on
rewritecond %{http_host} ^domain.com [nc]
rewriterule ^(.*)$ http://www.domain.com/$1 [r=301,nc]
Redireccionamento de Páginas Singulares em ASP
O ASP funciona em servidores Windows. Utilize este código para redireccionar páginas singulares estáticas do seu website ou blog, para um novo endereço.
<%
Response.Status=”301 Moved Permanently”
Response.AddHeader=’Location’,'http://www.new-url.com/’
%>
Redireccionamento Canónico em ASP
O redireccionamento canónico em ASP deverá estar localizado num script que seja executado em todas as páginas do servidor, antes do conteúdo da página começar.
<%
If InStr(Request.ServerVariables(“SERVER_NAME”),”www”) = 0 Then
Response.Status=”301 Moved Permanently”
Response.AddHeader “Location”,”http://www.”
& Request.ServerVariables(“HTTP_HOST”)
& Request.ServerVariables(“SCRIPT_NAME”)
End if
%>
Basicamente é isto. O funcionamento é simples e garante também melhorias ao nível do SEO. Pelo menos evita-se problemas, falta de indexação, ou perda de PageRank na altura em que tiver de mudar de domínio.
Acontece frequentemente também, é reparar passado algum tempo, que o seu website ou blog foi instalado no endereço http:// ao invés de levar o www.. Com este tipo de redireccionamento, evita-se então os problemas acima descritos, e pode-se executar migrações de forma mais tranquila.
Alguma dúvida por favor deixe um comentário.
NOTA: De acordo com os comentários do post, é sugerido que faça sempre o redirect através de .htacess, tanto para o PHP como para o ASP. Para mais informação por favor leia os comentários abaixo descritos.
Até Já!

Se gostou deste post, considere subscrever o nosso RSS Feed Completo!
Ou então Subscreva o Fique Rico por Email!


































Raúl Pedro Santos
Atenção a uns pormenores:
Dado que o Apache é um sistema feito acima de tudo para Unix (Linux, OS X, etc.) e nesses sistemas operativos há diferenciação entre caractéres maiúsculos e minúsculos, nada nos garante que não vá implicar com o tamanho das directivas do .htaccess, especialmente se estiver correr num dos sistemas Unix (o Windows é um pouco mais burro e não diferencia entre maiúsculas e minúsculas), pelo que convém escrevê-las com as maiúsculas no sítio certo.
Já vi acontecer um ficheiro .htaccess não deixar um site funcionar por causa do tamanho das letras, apesar de estar tudo bem escrito, portanto mais vale prevenir do que remediar.
Adicionalmente, dado que o mod_rewrite funciona com base em expressões regulares, também pode acontecer que o ‘.’ no domain.com seja interpretado como ‘qualquer caracter’ e não como o ‘ponto’ que pretendemos, portanto deve adicionar-se uma ‘\’ antes, para que o ponto seja interpretado literalmente como um ponto e não como uma expressão que deve ser interpretada.
Convém também especificar que a regra é a última a ser aplicada (para os casos em que possam existir outras regras a seguir). Isto é feito adicionando um ‘L’ às «flags» (a parte final da regra, entre []).
Já agora, o NC no final da condição e da regra significa “No Case”, ou seja, o Apache não irá diferenciar entre maiúsculas e minúsculas no URL a ser rescrito. Isto é importante, porque assim o redireccionamento funciona quer o visitante escreve no seu browser ‘DOMAIN.COM’, quer escreva ‘domain.com’.
Posto isto, o NC não é necessário na regra (na segunda linha), apenas na condição, porque a condição, tal como o nome indica, é que determina se o endereço a ser pedido coincide com o que especificamos. Por outras palavras, neste caso a condição é que determina se queremos diferenciar entre maiúsculas e minúsculas, e para a regra isso já vai ser indiferente. Assim sendo podemos deixar o NC de lado
Por fim, há que especificar na condição onde pretendemos que termine o nome do domínio. Isto é, queremos definir que só queremos que a condição seja satisfeita para casos que contenham ‘domain.com’ mas não ‘domain.com.blah’. Isto é feito utilizando um ‘$’ onde queremos que seja simbolizado o final da linha.
Depois de tudo isto, as duas linhas com as alterações que sugiro, ficariam assim:
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/ $1 [L,R=301]
A configuração do Apache é algo bastante complexo mas para quem tiver paciência e quiser aprender um pouco mais, pode consultar a documentação em http://httpd.apache.org/docs/2.2/
Especificamente, em relação ao mod_rewrite e às RewriteConds e RewriteRules:
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule
Raúl Pedro Santos publicou um post sobre..O valor do nosso tempo
Raúl Pedro Santos
Hmm… parece que houve aqui um problema com um ‘$’…
Na RewriteRule que sugiro, falta um ‘$’ antes do ‘1′ no final do URL…
Raúl Pedro Santos publicou um post sobre..O valor do nosso tempo
Paulo Faustino
Olá Raul. Obrigado pelo excelente comentário.
Nada a apontar. Nesse assunto o colega saberá certamente mais do que eu.
Editei o seu 1º comentário para colocar o cifrão referido no 2º comentário. Espero que esteja OK.
O cifrão estava lá, mas ele ao ler o link do domain estava a comê-lo.
Até Já :D
Raúl Pedro Santos
Olá Paulo.
Ainda bem que gostou :)
Confesso que me deixei levar e isto acabou por ficar bem maior do que eu inicialmente tencionava… :P
Obrigado pela correcção do cifrão no URL.
Deixo só a advertência para quem ler isto e não souber: apesar de estar lá um espaço entre a ‘/’ e o ‘$’, é suposto ser tudo junto. ;)
Cumprimentos,
Raúl
Domingos V.
Apenas gostaría de acrescentar que os motores de busca não apreciam mesmo nada os redirects através dos “headers em php” (ou atraves de ASP).
Para que fique mais claro, dou um exemplo:
A página A está já indexada pelos motores de busca, se a redirecionar com php para a página B, pode incorrer no problema descrito acima e a página A ser considerada como uma “doorway page” – .
Portanto, aconselho o redirect apenas através do htaccess.
Tá a ver Paulo que não sou tão crítico como pareço. Repito, apenas pretendo ajudar (embora possa por vezes não lhe parecer).
Cumps
Paulo Faustino
Olá Domingos. Obrigado pelo comentário.
Por acaso todos os Domingos que conheço até são boas pessoas :D
Obrigado pelo reparo. Aproveito a dica, mesmo em PHP sugere que seja sempre pelo htacess?
Até Já.
Domingos V.
Sugiro, sem dúvida alguma.
Cumps
Paulo Faustino
Olá Domingos. Agradeço a preciosa ajuda. Aproveitei para actualizar o post com uma nota de rodapé a focar esse pormenor. Obrigado!
Raúl Pedro Santos
@Domingos V.
Pode elaborar sobre a diferença entre entre um redirect em PHP e um pelo .htaccess?
É que, pelo menos tanto quanto sei, um redirect com a função header(…) em PHP, vai traduzir-se exactamente no mesmo que um redirect no .htaccess: o Apache (ou o servidor HTTP que estiver a ser usado) vai enviar uma resposta HTTP, na qual, entre os cabeçalhos, vai estar o tal 301.
Ou seja, pelo que sei, não deveria existir qualquer diferença entre um e outro.
Domingos V.
Caro Raúl
Como o Raúl já explicou e bem, não há diferença nenhuma entre os 2 tipos de redirect em termos da sua funcionalidade: dizer aos motores de busca que uma página mudou definitivamente de endereço.
O que tentei acrescentar foi que o redirect através do htaccess é, chamemos-lhe assim, “SEO friendly”, enquanto que o redirect através de PHP não. Essa é a única diferença. Se vir o meu primeiro comentário perceberá melhor o que quero dizer.
Podemos usar os dois, mas em circunstâncias diferentes.
cumps
Raúl Pedro Santos
@Domingos V.
Eu penso que percebi o seu primeiro comentário mas a minha questão era precisamente sobre o que disse no segundo:
“[...] não há diferença nenhuma entre os 2 tipos de redirect em termos da sua funcionalidade [...]”
Isto significa que os motores de busca vão ver exactamente a mesma coisa, quer num caso, quer noutro. Assim sendo, e era aqui que queria chegar mas não me expliquei bem, como é que fazem a distinção para considerar um caso uma “doorway page”, e outro não?
Domingos V.
“como é que fazem a distinção para considerar um caso uma “doorway page””
O algoritmo está preparado para saber se uma página está a redireccionar através de PHP ou não. Acredite, é muito fácil de fazer essa distinção.
Daí que seja relativamente fácil de distinguir uma “doorway page”, de uma página (legítima) que simplesmente mudou de localização.
Cumps
Raúl Pedro Santos
@Domingos V.
Não quero ser chato mas o que me está a responder é simplesmente “porque sim”, não está a dar uma explicação concreta, com pormenores técnicos que justifiquem a contraição das suas próprias palavras – ora diz que os dois métodos produzem exactamente o mesmo resultado, ora diz que há diferenças.
Assim que vi o seu primeiro comentário sobre isto, achei estranho e montei um pequeno teste em que fazia o redirecionamento dos dois métodos, através do .htaccess e através de PHP, e pondo um sniffer a correr pelo meio.
O pedido HTTP GET efectuado pelo browser é idêntico em ambos os casos, como seria de esperar. E a resposta recebida também o é:
HTTP/1.1 301 moved permanently
Location: http://www.domain.com
E Isto é tudo o que os motores de busca conseguem ver, porque, como é óbvio, não têm acesso ao “interior” dos nossos servidores. Ora se isto é tudo o que os motores de busca conseguem ver e se é exactamente a mesma coisa para um caso e para o outro, volto a colocar a minha questão original:
como é que fazem a distinção para considerar um caso uma “doorway page”, e outro não?
Quando li o seu primeiro comentário, achei estranho a sua afirmação mas pus a hipótese de ter razão e por isso coloquei a questão. Segundo as suas palavras, “é muito fácil de fazer essa distinção”, pelo que lhe peço que explique como é que tal é feito, pois eu não estou a ver e sinceramente duvido que tal seja possível.
Cumprimentos,
Raúl
Domingos V.
Caro Raúl
Sem querer ser chato, também não me poderei alongar muito mais sobre esta questão. Repare que o modo como os motores de busca vêem um site não é bem o mesmo método que é usado por um browser.
O processo de Spidering, Data Retrieval e Indexação de uma página é complexo e passa por vários algoritmos.
Não sei que mais lhe possa dizer sobre isto, mas se acha que isto é uma resposta algo incompleta [nem o censuro], lamento mas não poderei acrescentar muito mais.
Cumprimentos
Raúl Pedro Santos
@Domingos V.
Lamento, mas de facto a sua resposta é mais que incompleta: é incorrecta.
O modo como os motores de busca vêem um site é exactamente o mesmo que um browser. O protocolo de comunicação usado é exactamente o mesmo (HTTP) e o servidor onde o site está não lhes envia nem mais nem menos dados do que envia para o browser.
As inferências que os motores de busca depois fazem sobre os dados que receberam é que é substancialmente diferente – ou melhor, eu nem diria diferente, dado que um browser normal não faz qualquer tratamento de informação, pelo que nesse aspecto não faz sentido compará-lo a um motor de busca. O motor de busca faz tratamento de dados, o browser não. (não vou usar termos técnicos ou “caros” para tentar impressionar, penso que não vale a pena)
De qualquer modo, o ponto fulcral aqui continua a ser o mesmo: os dados a que os motores de busca têm acesso são exactamente os mesmos que um browser normal, quer para o redirect em PHP, quer para o redirect através do .htaccess.
Mas o Domingos parece estar a querer ignorar este facto propositadamente, pois responde sempre com o mesmo subterfúgio: os algortimos dos motores de busca são uma coisa muito complexa.
Não ponho isso em questão, antes pelo contrário, concordo a 100%, mas parece que o que está a dizer é que, por serem coisas complexas, nem sequer vamos tentar compreendê-los e vamos simplesmente acreditar que é assim, sem os questionar, como se de um milagre se tratasse. Os meus avós também me diziam que eu podia morrer se cortasse as unhas ou o cabelo depois de comer, porque tal acto parar-me-ia a digestão. Das inúmeras vezes que o fiz e sobrevivi, a justificação deles foi sempre “tiveste sorte”. Ora bolas, assim também eu justifico que todos os animais do jardim zoológico falam. O Domingos não os viu falar quando lá esteve da última vez? Epá, teve azar… Mas acredite que eles falam!
Se não deixa que a sua teoria seja posta à prova, ou seja, recusa-se a argumentar quando lhe são apresentadas provas que contrariam as suas afirmações, como espera que acreditemos em si?
Eu provei-lhe por A+B que os motores de busca não têm acesso a mais dados do que um browser normal, porque o servidor envia exactamente a mesma coisa para ambos. Se precisar de recriar o que eu fiz e descrevi no meu comentário anterior, de bom grado lhe darei indicações sobre como o fazer. Mas não pode seriamente esperar que se acredite na sua teoria, se não é capaz de contrariar argumentos concretos como os que eu apresentei.
É que para além do que a minha experiência e conhecimentos me dizem, nem sequer no Google encontro referências à diferenciação que o Domingos tão convictamente defende existir. No mínimo podia indicar alguma referência que comprove o que diz, com base em factos lógicos e palpáveis.
Eu tive a humildade de iniciar esta argumentação pondo a hipótese de o Domingos ter razão no que dizia, mesmo tendo efectuado o teste e tendo visto com os meus olhos que não era assim. Penso que estava na altura de mostrar também alguma humildade e admitir que se calhar não tem assim tanta certeza do que está a dizer.
@Paulo Faustino
Sugiro que retire a nota que adicionou ao seu artigo, sobre fazer os redirects sempre por .htaccess, pois é nada mais que um mito insubstanciado que vai denegrir a imagem do seu site perante visitantes que entendam um bocadinho do assunto.
Já para não falar das dores de cabeça desnecessárias que poderá causar a muita gente, por serem levados a fazer algo que afinal é inútil e não vai fazer diferença absolutamente alguma.
Cumprimentos,
Raúl
Domingos V.
Caro Raul
Em primeiro lugar, nunca disse que o Raúl estava errado. Em segundo não percebo o porquê de tanta agressividade, tenha lá calma que isto é só um artigo acerca de como fazer redirects.
Se calhar expliquei-me mal. O que sempre quis dizer foi que o redirect 301 através de php não será o mais aconselhado em termos de SEO, nunca disse que não traria o mesmo efeito. Sei que sabe de redirects, não sei o que poderá saber de SEO…
Para finalizar as minhas fontes são: Google (staff do mesmo e não qualquer outra fonte) e a minha própria experiência. Nada mais poderei acrescentar acerca de onde fui buscar esta info. Nem devia era ter dito nada…
Agora não me diga que é um mito ou que vai dar dores de cabeça, isso sim não corresponde à verdade. Mas cada um que faça os ditos redirects como bem entender.
Cumps
Raúl Pedro Santos
@Domingos V.
Peço desculpa, de facto o modo como escrevi não foi o mais apropriado e tal deveu-se à irritação que senti.
O que me irritou foi o facto de o Domingos nunca responder à minha questão, contornando-a sempre. Isso é algo que me irrita em qualquer assunto, sejam coisas de que percebo ou não.
Vou explicar o porquê da minha relutância em acreditar que um motor de busca consiga diferenciar entre os dois métodos de redirect:
Imaginemos que eu e o Domingos estamos ambos perante três portas fechadas, sabendo nada mais do que isto: atrás de uma delas (mas sem saber qual) existe um tigre.
Estamos ambos a ver a mesma coisa, nenhum de nós pôde espreitar para trás das portas, não foi nenhum de nós que lá pôs o tigre e nenhum de nós teve informação privilegiada da parte de quem lá o colocou.
Se eu afirmar com toda a convicção que sei em que porta está o tigre, o Domingos certamente quererá saber como é que eu sei tal coisa, dado que, na igualdade de circunstâncias, deveríamos os dois saber a mesma coisa.
Ignorando possibilidades como poderes psíquicos e vidência, só há uma hipótese: eu não sei em que porta está o tigre.
O que se passa com a nossa discussão é a mesma coisa. O Domingos insiste que um motor de busca consegue diferenciar entre duas coisas diferentes que na verdade são iguais. Isto contradiz toda e qualquer lógica que eu conheço, o que só serviu para aguçar a minha curiosidade.
Referir como fontes staff do Google não é propriamente algo que eu considere como uma fonte fidedigna. Eu também conheço pessoas que trabalham no Google, tanto cá como na Califórnia. Mas o que eu gostaria de ver era, por exemplo, um site com um artigo (não recente, de preferência) que falasse disto. Eventualmente e se possível, uma forma de reproduzir os resultados que defende seria o ideal – eu tenho uma forma de reproduzir os resultados que defendo.
Mais uma vez, lamento a forma como escrevi o meu comentário anterior, mas este tipo de argumentação em que se anda às voltas sem chegar a lado nenhum incomoda-me bastante.
Por isso mesmo vou abandonar esta discussão, a não ser que o Domingos queira trazê-la a um nível superior, mostrando uma forma de reproduzir os resultados que defende, ou apresentando referências concretas que confirmem o que afirma.
Como já disse, estou aberto à possibilidade de os motores de busca de facto diferenciarem entre os dois métodos de redirect mas tendo em conta que do lado técnico tudo me leva a crer no contrário, para acreditar que isto corresponde ao que se passa na realidade, preciso de provas.
Cumprimentos,
Raúl
Leonardo Vergani
Tenho várias páginas assim:
http://www.site.com/palavra-palavra/titulo-da-pagina
E gostaria que quando alguem digitasse assim:
http://www.site.com/Palavra-Palavra/titulo-da-pagina
também entrasse na mesma página.
Terei de fazer um redirecionamento individual para cada páginas?
Ou teria como fazer um redirecionamento que mude em todas as páginas este “Palavra-Palavra”?
Obrigado!
Paulo Faustino
Olá Leandro. Obrigado pelo comentário.
O colega pretende fazer isso em Wordpress, Joomla ou em algum CMS conhecido?
Em Wordpress salvo erro, é automático.
Até Já.
Leonardo Vergani
Pretendo fazer isso numa loja BANS.
Manoel Franklin
Estava a procurar sobre 301 no google e acabei caindo aqui, hehehehe, veja que coisa! Estou tentando fazer inserindo o código mas recebi alguns erros, mais a noite vou revisar todos os comentários para ver como fazer, um abraço!
Manoel Franklin publicou um post sobre..Pesquisador demonstra tela interativa de US$ 50 que usa controle do Wii
Alexandre Brendim
Olá Paulo,
Como sempre faço estava fuçando em uns programas para tentar melhorar meu site.
Entrei no Web Site Grader e ele apontou como um dos erros não ter um “Permanent Redirect’ e que eu deveria ter o “301 redirect” no meu site.
Lendo o seu post, naõ consegui entender se é realmente preciso fazer isso em um site que está em ordem, se vai me trazer algum benefício e como fazer.
O site é http://www.jjcabeleireiros.com.br
Agradeço a atenção
Agenor
Caro Paulo,
Qual desses tipos de redirecionamento eu uso no blogspot?
Onde eu coloco no template?
Desculpe as perguntas básicas, mas não entendo muito e comprei o dominio com o blog alojado no blogger e até agora não tô usando para não perder o Page Rank do antigo endereço.
No aguardo.
Leonardo
Paulo, te mandei um e-mail com algumas dúvidas em relação ao redicionamento. Você viu?
Rodrigo Spengler
Eu já conhecia todos os redirecionamentos 301 citados, mas tenho uma dúvida quanto ao uso simultâneo do redirecionamento no .htaccess e PHP.
No htaccess ficaria algo assim:
URL_antiga?id=9000 => redicionamento301.php?id=$1
E depois no redicionamento301.php, ficaria o código:
Ou seja, ficaria algo assim:
redicionamento301.php?id=$1 => URL_amigavel/conteudo.htm
A dúvida é: usando esses 2 redirecionamentos, os buscadores (Google) conseguiria seguir os 2 passos e entender que eu quero assim:
URL_antiga?id=9000 => $URL_amigavel
?
Luiz Conte
Paulo, estou com a mesma duvida do Alexandre Brendin……….o website grader indica este problema de 301 redirect…….. como fazer? Inseri o código no php.index e a pg saiu do ar……tive q retirar.
Como fazemos isso?…….por favor responda por email.
grato
Inglid
Paulo, quando vou mudar para a estrutura usando o Plugin Dean Permanent Link para /%category%/%postname%/ dá erro 404. Tem alguma forma de resolver isso? :idea:
Nogueira
Ví que o artigo se aplica a Wp e Hospedagens particulares, mas bem que gostaria de ver uma solução dessas para Blogger.
Gostaria de saber se tem como revender o “Exercícios para Blogueiros”.
Se sim tem que fazer um banner para a moeda R$ Real.
Desejo sucesso!
Rafael
Olá Paulo,
Como o agenor, também estou precisando de um código de redirecionamento 301 para usar no blogger…
Já pesquisei em vários blogs, mas não acho…
Gostaria também de saber em que parte do HTML devo colocar…
joaobob
Muito bom, seria horrivel perder um bom tempo de trabalho simplesmente por mudar de endereço.