
lighthouse
Search Console avisando “Página alternativa com tag canônica adequada” em URL que você quer indexada costuma ter um culpado só: alguém mandou a /page/2/ apontar a canônica para a página 1. O Yoast expõe essa URL num filtro e dá para consertar no functions.php do tema filho.
Antes de escrever código, olhe a tag que o servidor entrega. Nada de inspecionar no navegador, que plugin de cache pode mentir:
curl -s https://sualoja.com.br/loja/page/2/ | grep -i canonical O filtro recebe a URL que o Yoast montou (no Yoast 27 vem a presentation como segundo argumento) e imprime o que você devolver. Retornando false, a tag não sai.
add_filter( 'wpseo_canonical', function ( $canonical ) {
// URL de filtro de loja: consolida na vitrine, sem os parâmetros
if ( function_exists( 'is_shop' ) && is_shop() && ! empty( $_GET['filter_cor'] ) ) {
return get_post_type_archive_link( 'product' );
}
// paginação: cada página aponta para ela mesma
if ( is_paged() ) {
return get_pagenum_link( (int) get_query_var( 'paged' ) );
}
return $canonical;
}, 20 ); A ordem das duas condições não é gosto pessoal. O get_pagenum_link() remonta a URL a partir da requisição atual e devolve a query string junto, então em /loja/page/2/?filter_cor=azul ele entregaria uma canônica com o parâmetro dentro. Por isso o teste do filtro vem primeiro.
A origem do problema costuma ser tema ou plugin de filtro reescrevendo a canônica para evitar conteúdo duplicado, e consolidando toda a paginação na página 1. O Google lê como “a página 2 é a mesma coisa que a 1” e para de indexar o que só aparece no fim da lista.
Depois de salvar o arquivo, limpe o cache de página e rode o curl de novo. Já perdi tempo achando que o filtro não tinha pegado quando o problema era HTML velho no disco. E cuide de dois detalhes: o filtro roda em toda requisição de front, então deixe as condicionais apertadas, e devolva sempre URL absoluta, porque o Yoast imprime a string que você retornar.
Se travou nisso e precisa de ajuda, me chama aqui.
Negar /.env no nginx parece resolvido até alguém pedir /wp-content/uploads/.env ou backup.sql. As regras que testei e os furos que…
Um módulo de terceiro plantou um banner no topo da loja e você não quer desinstalar nada: tire o bloco…
Importou o banco de produção e o site pula para o domínio antigo? Rode o UPDATE em core_config_data, limpe o…
Seu catch trata pedido inexistente e banco fora do ar do mesmo jeito. Veja como criar exceção customizada em PHP…
O form do admin salva mas abre em branco na edição: veja o getData() indexado pelo id da entidade e…
O meta está no banco mas some do /wp-json/wp/v2/posts. Veja o register_post_meta certo, com single, type, schema de array e…