PS PrestaShop Intermédio

Detetor de canibalização de SEO: guia completo para PrestaShop 8 e 9

Detete e resolva a canibalização de SEO da sua loja PrestaShop através da Google Search Console: instalação, configuração, exames e redirecionamentos 301.

Atualizado Versão do módulo 1.0.0

O Detetor de Canibalização de SEO liga-se apenas para leitura à sua propriedade da Google Search Console, identifica cada consulta em que vários URL da sua loja PrestaShop se canibalizam e propõe uma ação concreta: consolidar, redirecionar com 301, diferenciar ou vigiar. Esta documentação cobre a instalação, a configuração da conta de serviço da Google, o lançamento do primeiro exame, a leitura do relatório e a gestão dos redirecionamentos.

Pré-requisitos

  • PrestaShop 8.0 a 9.x
  • PHP 8.1 ou superior, com as extensões openssl, curl e json
  • Um projeto na Google Cloud (chega uma conta gratuita, sem crédito necessário)
  • Uma propriedade da Google Search Console já verificada para o domínio da sua loja
Verificar o OpenSSL: na maioria dos alojamentos, o OpenSSL vem ativo por predefinição. Para confirmar, acrescente temporariamente echo extension_loaded('openssl') ? 'OK' : 'KO'; a um ficheiro PHP de teste.

Instalação

  1. Descarregue o ZIP dfcannibalization-1.0.0.zip a partir da sua área de cliente DataFirefly.
  2. No back-office do PrestaShop, vá a Módulos → Gestor de módulos.
  3. Clique em Carregar um módulo e selecione o ZIP.
  4. Terminada a instalação, clique em Configurar.

O módulo cria 4 tabelas SQL (scan, query, page e action), um separador de administração «DataFirefly Cannibalization» em MELHORAR, e um token único para os exames agendados.

Criar uma conta de serviço da Google

Uma conta de serviço é uma conta técnica da Google que permite à sua loja ler os dados da Search Console sem pedir autenticação interativa. É gratuita e limitada a leitura.

1. Ativar a API da Search Console

  1. Abra console.cloud.google.com.
  2. Crie um novo projeto (por exemplo, «DataFirefly SEO») ou selecione um existente.
  3. No menu de navegação, vá a APIs e serviços → Biblioteca.
  4. Procure Google Search Console API e clique em Ativar.

2. Criar a conta de serviço

  1. No mesmo menu, vá a APIs e serviços → Credenciais.
  2. Clique em Criar credenciais → Conta de serviço.
  3. Dê-lhe um nome claro (por exemplo, «datafirefly-cannibalization») e confirme. Pode ignorar os passos opcionais de funções e de acesso de utilizadores.

3. Gerar a chave JSON

  1. Clique na conta de serviço criada.
  2. Separador Chaves → Adicionar chave → Criar chave.
  3. Selecione o formato JSON e confirme. O ficheiro é descarregado automaticamente.
Guarde este ficheiro em lugar seguro: contém a chave privada da conta de serviço. Quem tiver este JSON pode ler os seus dados da Search Console.

Autorizar a conta de serviço na Search Console

A conta de serviço tem o seu próprio e-mail (visível no JSON, na chave client_email, por exemplo datafirefly-cannibalization@projeto-123.iam.gserviceaccount.com). É preciso autorizá-la em modo de leitura na sua propriedade.

  1. Abra search.google.com/search-console.
  2. Selecione a sua propriedade (URL-prefix ou domain).
  3. Clique em Definições → Utilizadores e permissões.
  4. Clique em Adicionar utilizador.
  5. Cole o e-mail client_email da conta de serviço e escolha a permissão Restrito (apenas leitura).
  6. Confirme.

Configurar o módulo

Volte ao back-office do PrestaShop, à configuração do módulo.

Conta de serviço e propriedade

  • JSON da conta de serviço: abra o ficheiro descarregado e copie todo o conteúdo para o campo.
  • URL do site (propriedade da GSC): reproduza exatamente o formato apresentado na Search Console.
    • Numa propriedade URL-prefix: https://www.exemplo.pt/ (com a barra final).
    • Numa propriedade domain: sc-domain:exemplo.pt (sem protocolo e com o prefixo sc-domain:).

Limiares de deteção

  • Período de análise: de 7 a 490 dias. 90 dias é um bom compromisso entre atualidade e volume estatístico.
  • Impressões mínimas: ignora as consultas com muito pouco volume. 30 por predefinição. Ponha 10 se a sua loja for recente.
  • Cliques mínimos: limiar de cliques por consulta para ser analisada. 1 por predefinição. Ponha 0 para incluir também as consultas com impressões sem cliques, o que é útil em sites jovens.
  • Posição máxima: ignora as consultas em que o melhor URL está para lá desta posição. 30 por predefinição.

Numa versão portuguesa recém-publicada, os limiares predefinidos costumam ser demasiado altos: as páginas ainda não acumularam 30 impressões por consulta. Comece com 5 impressões e 0 cliques durante os primeiros meses, e volte aos valores normais quando o histórico for suficiente.

Redirecionamentos 301 automáticos

Ativa a interceção através do hook do encaminhador do PrestaShop. Desative se preferir gerir os redirecionamentos manualmente em Tráfego e SEO → Redirecionamentos.

Clique em Guardar e depois em Testar a ligação à GSC. Se a ligação for bem-sucedida, o módulo mostra uma mensagem verde.

«403 User does not have sufficient permissions»: a conta de serviço ainda não foi acrescentada na Search Console, ou a propriedade indicada não corresponde exatamente à que aparece na GSC. Verifique os dois lados.

Lançar um exame

Clique em Lançar um exame agora. O módulo:

  1. Consulta a API da Search Console para o período configurado (com paginação até 200 000 linhas).
  2. Agrupa as linhas por consulta.
  3. Filtra segundo os seus limiares (impressões, cliques, posição).
  4. Retém apenas as consultas com pelo menos 2 URL distintos.
  5. Calcula a pontuação de gravidade e a recomendação.
  6. Guarda tudo na base de dados.

Num site médio (10 000 a 50 000 páginas), um exame completo a 90 dias demora entre 30 segundos e 3 minutos.

Ler o relatório

Terminado o exame, abra-o no separador Histórico de exames. O relatório lista cada consulta canibalizada, com:

  • A palavra-chave (a consulta do Google).
  • A pontuação de gravidade, sob a forma de um sinal colorido (low, medium, high, critical).
  • O número de URL em competição.
  • A recomendação (REDIRECT 301, CONSOLIDATE, DIFFERENTIATE, MONITOR).
  • O estado (pendente, analisado, resolvido, ignorado).

Clique numa consulta para ver o detalhe: a lista dos URL concorrentes com cliques, impressões, posição média, CTR e tipo de página (produto, categoria, CMS, blogue e outros). O URL identificado como «vencedor» aparece destacado a verde.

Numa loja multi-idioma, não confunda canibalização com versões linguísticas. Uma página portuguesa e a sua equivalente noutro idioma são URL distintos, mas não competem entre si nas mesmas consultas: são ligadas por hreflang e o Google trata-as como alternativas. Se aparecerem juntas na mesma consulta, o problema não é canibalização mas hreflang mal configurado, e nesse caso a resposta é corrigir as etiquetas de idioma, nunca redirecionar uma versão para a outra. Um 301 do português para outro idioma faria desaparecer a sua loja portuguesa dos resultados.

Compreender a pontuação de gravidade

A pontuação é sobre 100 e combina 4 fatores ponderados:

  • Número de páginas concorrentes (máximo de 25 pontos), com a fórmula min((n-1)/3, 1) × 25. A partir de 4 URL concorrentes, o fator é máximo.
  • Repartição dos cliques (máximo de 30 pontos), com base num índice HHI invertido. Uma canibalização a 50/50 entre dois URL é mais grave do que uma a 95/5. Fórmula: ((1-HHI)/(1-1/n)) × 30.
  • Diferença de posição (máximo de 30 pontos), ponderada pela posição do melhor resultado. Bonificação de 1,0 se a melhor posição for igual ou inferior a 10, de 0,7 até 20, e de 0,4 acima disso.
  • Volume de impressões (máximo de 15 pontos), em escala logarítmica: min(log10(impr+1)/4, 1) × 15.

Níveis: low abaixo de 26, medium abaixo de 51, high abaixo de 76 e critical a partir de 76.

As 4 recomendações

REDIRECT 301

O módulo propõe esta ação quando um URL capta pelo menos 70 % dos cliques com uma posição média igual ou inferior a 15. É o URL «vencedor»: o Google considera-o claramente a melhor resposta. Os outros URL são redirecionados para ele com 301. O conteúdo pode ser fundido do lado editorial antes do redirecionamento, se for preciso.

CONSOLIDATE

O desempenho está repartido, sem um vencedor claro. A recomendação é fundir o conteúdo dos dois URL num só e redirecionar depois o outro com 301. É um trabalho editorial, não automatizável. O módulo identifica o caso, mas não faz a fusão por si.

DIFFERENTIATE

As páginas são de tipos diferentes (por exemplo, uma ficha de produto e um artigo de blogue). A canibalização indica um problema de segmentação das etiquetas title e meta, e não um verdadeiro conflito de conteúdo. A recomendação é rever as etiquetas para visar consultas distintas (cauda longa no blogue e consulta principal no produto).

MONITOR

A pontuação é baixa (abaixo de 26). Não há ação urgente. O módulo mantém a consulta no relatório, classificada como «a vigiar».

Aplicar um redirecionamento 301

No detalhe de uma consulta com recomendação REDIRECT 301:

  1. Clique no botão Selecionar como origem, ao lado do URL a redirecionar (o que não é o vencedor).
  2. O URL de destino (o vencedor) é preenchido automaticamente.
  3. Clique em Aplicar o redirecionamento.

A regra é guardada e servida de imediato a partir do hook actionDispatcherBefore. Em desempenho, é um único SELECT por worker de PHP-FPM, graças a uma cache estática em memória.

Confirmar que um redirecionamento funciona: abra o URL de origem num navegador em navegação privada, ou use curl -I https://a-sua-loja.pt/url-antigo. Deve ver um HTTP/1.1 301 e um cabeçalho Location: para o novo URL.

Gerir os redirecionamentos ativos

O separador Redirects 301 lista todos os redirecionamentos em vigor, com o respetivo contador de acessos. Pode:

  • Desativar um redirecionamento sem o eliminar (útil para testar um regresso atrás).
  • Eliminar definitivamente um redirecionamento.
  • Ver o número de acessos desde a criação (mede a eficácia).

Exames agendados por cron

O módulo expõe um controlador de front-office protegido por token. O URL aparece na configuração do módulo, nesta forma:

https://a-sua-loja.pt/index.php?fc=module&module=dfcannibalization&controller=cron&token=XXXX

Cron Linux normal

Num servidor Linux ou Unix com acesso SSH, edite o crontab:

crontab -e

Acrescente, por exemplo, um exame todos os domingos às 23h:

0 23 * * 0 curl -s "https://a-sua-loja.pt/index.php?fc=module&module=dfcannibalization&controller=cron&token=XXXX" > /dev/null

Tarefas agendadas no painel do alojamento

A maioria dos alojamentos oferece um agendador no seu painel. Indique o URL completo e a frequência pretendida. Para a maioria das lojas, um exame semanal chega perfeitamente.

Gerar um novo token: desinstale e reinstale o módulo se achar que o seu token foi divulgado. É gerado um novo token na instalação.

Multiloja

Todas as tabelas incluem uma coluna id_shop. Os exames são delimitados pela loja ativa no seletor, no topo do back-office. Cada loja tem a sua configuração (conta de serviço, URL da GSC, limiares) e o seu histórico de exames.

Se gere vários domínios a partir do mesmo back-office, crie uma conta de serviço por propriedade, ou autorize a mesma conta de serviço em todas as suas propriedades da Search Console.

Resolução de problemas

«OpenSSL extension required»

Peça ao seu alojamento que ative a extensão PHP OpenSSL. Em quase todos os alojamentos modernos, está ativa por predefinição.

«Invalid service account JSON»

O JSON colado está incompleto ou corrompido. Volte a descarregar a chave da Google Cloud Console e cole-a por inteiro, sem alterações.

«Site URL must match exactly the GSC property»

Verifique o formato na Search Console. Uma propriedade URL-prefix escreve-se https://www.exemplo.pt/ (com barra final). Uma propriedade domain escreve-se sc-domain:exemplo.pt (sem protocolo e sem barra).

«403 User does not have sufficient permissions»

A conta de serviço não foi autorizada na Search Console, ou foi autorizada noutra propriedade. Verifique em Definições → Utilizadores e permissões.

O exame corre mas não encontra qualquer canibalização

Os seus limiares podem estar demasiado altos para o seu volume. Experimente baixar as impressões mínimas para 5 e os cliques mínimos para 0.

Um redirecionamento 301 não é acionado

Confirme que a opção «Redirecionamentos 301 automáticos» está ativa na configuração, que a regra está marcada como ativa no separador Redirects 301, e que a cache do PrestaShop foi limpa depois de ativar o módulo.

Ir mais longe

  • Política de revisão: nas consultas critical, intervenha em 7 dias. Nas high, em 30 dias. Nas medium, no âmbito de uma revisão trimestral.
  • 301 face a consolidação: o redirecionamento 301 transfere o PageRank mas perde a possibilidade de ter duas páginas indexadas. Prefira a diferenciação quando as intenções de pesquisa são diferentes.
  • Caso particular das fichas de produto: se duas variantes muito próximas se canibalizam, funda-as num produto com combinações, em vez de manter dois produtos separados.
  • Vocabulário português: uma boa parte da canibalização numa loja traduzida vem de sinónimos usados sem critério nas fichas e nas categorias. Fixe uma escolha por conceito num glossário (por exemplo, «encomenda» e não «pedido», «entrega» e não «envio») e aplique-a em todo o catálogo.
Esta página foi útil?

Ainda com dúvidas? Contacte o suporte