web-dev-qa-db-pt.com

O redirecionamento / encaminhamento 301 do GoDaddy tem um URL intermediário aleatório estranho, mata o suco de link?

Estou tentando usar o redirecionamento 301 do GoDaddy, chamado de encaminhamento de domínio. Eu configurei o encaminhamento DomainA.example para DomainB.example como 301 "tipo".

Percebi que DomainA.example ainda está indexado no Google após ~ 6 meses e tem um título em SERP de DomainB.example. Quando clico no Google ou visito no navegador, ele é redirecionado para DomainB.example, para que tudo esteja bem da perspectiva do UX.

Eu inspecionei DomainA.example com a ferramenta http://www.webconfs.com/redirect-check.php e descobri que http://DomainA.example/ realmente redireciona para http://DomainA.example/MmSWZ/. E esse URL supostamente redireciona para DomainB.example. O que é isso?

Se eu verificar novamente alguns minutos depois na mesma ferramenta, eu vejo http://DomainA.example/ redireciona para http://DomainA.example/MpppZ/, então é uma URL intermediária aleatória única sempre que parece!

Tenho certeza que é ruim para o SEO. Como faço para corrigir isso?

5
Gintas_

Eu tive esse problema ocorrer em vários domínios diferentes controlados pelo GoDaddy. Tentei várias vezes entrar em contato com o suporte do GoDaddy para resolver o problema sem sorte. Por fim, decidi resolver o problema sozinho porque o GoDaddy parece sem noção para o problema deles.

Aqui está minha solução: Adicione este código PHP ao topo da sua página de erro 404. Para o WordPress, adicione este arquivo 404.php do seu tema:

<?php 
/* GoDaddy 404 Redirects FIX - by Daniel Chase - https://riseofweb.com */
$currURL = $_SERVER['REQUEST_URI'];
$CheckRedirectError1 = substr($currURL, -6);
$CheckRedirectError2 = substr($currURL, 0, 7);
$CheckRedirectError = false;
if (preg_match("/^[a-zA-Z]{5}\/$/",$CheckRedirectError1)){
    $CheckRedirectError = $CheckRedirectError1;
}else if (preg_match("/^\/[a-zA-Z]{5}\/$/",$CheckRedirectError2)){
    $CheckRedirectError = substr($CheckRedirectError2, 1);
}
if($CheckRedirectError){
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
    $redirectTo = str_replace($CheckRedirectError, '', $currURL);
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: " . $protocol . $_SERVER['HTTP_Host'] . $redirectTo);
    exit();
}
?>

O script verifica os caracteres aleatórios e os remove e depois os redireciona para a página apropriada. Pode ser necessário adicionar algumas exceções ou modificar o script para atender às suas necessidades.

1
Daniel Chase

Para fazer um redirecionamento 301, é necessário que haja um servidor no local especificado para responder à solicitação de conteúdo do navegador com um local como:

HTTP/1.1 301 Moved Permanently
Location: http://domainb.example

Isso é necessário porque o servidor precisa responder ao navegador por HTTP com uma resposta. Esse tipo de redirecionamento não pode ser feito com o DNS porque esse não é o objetivo do DNS.

Você pode considerar configurar um registro CNAME para DomainA.example com DomainB.example como o valor. Sua zona DNS pode se parecer com:

NAME                    TYPE   VALUE
--------------------------------------------------
www.domaina.example.    CNAME  www.domainb.example.
www.domainb.example.    A      192.0.2.23

Você também precisaria garantir que todos os registros MX (informa aos servidores de e-mail para onde enviar email para um domínio) de DomainA.example sejam atualizados para apontar para o Host em DomainB.example para que o email possa ser roteado em conformidade (se necessário).

1
Justin Pearce