Canonical errado no Yoast: corrigindo pelo filtro wpseo_canonical

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.

Confira o que está saindo no HTML

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 wpseo_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.

A armadilha do cache

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.

Dúvidas? Faça um comentário logo abaixo ou envie uma mensagem clicando aqui.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *