Tutoriais AMP

Desligar o AMP no WordPress 6.9: redirect do /amp/ sem perder tráfego

O AMP saiu dos requisitos do Top Stories faz tempo e eu venho desligando o plugin em cliente atrás de cliente. Desativar e pronto é receita para 404 em massa: cada post tinha um /meu-post/amp/ indexado há anos. Aqui eu subo o redirect 301 no nginx antes de encostar no plugin.

O rewrite que resolve

# dentro do server block, antes dos location
rewrite ^(.+)/amp/?$ $1/ permanent;

# quem indexou a variante com query string
if ($arg_amp) {
    return 301 $uri;
}

Testa e recarrega com nginx -t && systemctl reload nginx. Repare no (.+): com (.*) a URL /amp/ da raiz também casa, o destino sai vazio e o nginx manda um Location quebrado. O $1/ é para permalink terminado em barra, o padrão do WordPress; sem barra, use só $1, senão o 404 vira uma cadeia de dois 301. O return dentro do if não reanexa a query string, e é isso que tira o ?amp=1 da jogada.

A ordem importa mais que o rewrite: publique o redirect primeiro, desative o plugin depois. Ao contrário, o WordPress para de reconhecer o endpoint na hora e o crawler pega uma janela inteira de 404. Uso 301 e não 410 porque os links da versão AMP ainda passam sinal para a URL canônica.

Depois de desativar

Purgue o cache de página inteira, senão a versão antiga continua saindo do disco e você jura que o rewrite não pegou. Confira na mão:

curl -sI https://seusite.com.br/meu-post/amp/ | head -n 3
# HTTP/2 301
# location: https://seusite.com.br/meu-post/

No Search Console o relatório Páginas marca essas URLs como “Página com redirecionamento” ao longo de algumas semanas, e a contagem de 404 não pode subir. Se subir, tem AMP saindo de outro lugar, quase sempre um sitemap antigo ainda enviado na conta.

Deixe o rewrite no ar para sempre: custa quase nada por requisição e o Bing insiste em rastrear /amp/ por mais de um ano depois da mudança.

Post Recentes

Redis OOM Magento 2: ajustar a maxmemory-policy e separar os bancos

A loja cai com OOM command not allowed when used memory > maxmemory: ajuste a maxmemory-policy do Redis e separe…

15 horas atrás

Checkbox de privacidade no checkout do WooCommerce: texto e registro do aceite

Adicione a caixa de aceite no checkout do WooCommerce e grave data e versão da política como meta do pedido,…

1 dia atrás

json_validate no PHP 8.3: conferir se o JSON é válido sem decodificar

A função json_validate do PHP 8.3 diz se a string é JSON válido sem montar array nem objeto. Serve para…

1 dia atrás

Chave de API fora do Git: .env, getenv() e o que fazer se ela já vazou

Tire a chave de API do código com variável de ambiente, bloqueie o .env no nginx e entenda por que…

2 dias atrás

HPOS no WooCommerce: ativar as tabelas wc_orders e migrar os pedidos

A opção de armazenamento de pedidos travada em posts e a sincronização que nunca termina: como migrar para as tabelas…

2 dias atrás

str_contains no PHP 8: parar de comparar strpos com !== false

Troque strpos e substr por str_contains, str_starts_with e str_ends_with no PHP 8, com o polyfill para quem ainda mantém servidor…

3 dias atrás