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.
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,curlejson - 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
echo extension_loaded('openssl') ? 'OK' : 'KO'; a um ficheiro PHP de teste.
Instalação
- Descarregue o ZIP
dfcannibalization-1.0.0.zipa partir da sua área de cliente DataFirefly. - No back-office do PrestaShop, vá a Módulos → Gestor de módulos.
- Clique em Carregar um módulo e selecione o ZIP.
- 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
- Abra console.cloud.google.com.
- Crie um novo projeto (por exemplo, «DataFirefly SEO») ou selecione um existente.
- No menu de navegação, vá a APIs e serviços → Biblioteca.
- Procure Google Search Console API e clique em Ativar.
2. Criar a conta de serviço
- No mesmo menu, vá a APIs e serviços → Credenciais.
- Clique em Criar credenciais → Conta de serviço.
- 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
- Clique na conta de serviço criada.
- Separador Chaves → Adicionar chave → Criar chave.
- Selecione o formato JSON e confirme. O ficheiro é descarregado automaticamente.
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.
- Abra search.google.com/search-console.
- Selecione a sua propriedade (URL-prefix ou domain).
- Clique em Definições → Utilizadores e permissões.
- Clique em Adicionar utilizador.
- Cole o e-mail
client_emailda conta de serviço e escolha a permissão Restrito (apenas leitura). - 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 prefixosc-domain:).
- Numa propriedade URL-prefix:
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.
Lançar um exame
Clique em Lançar um exame agora. O módulo:
- Consulta a API da Search Console para o período configurado (com paginação até 200 000 linhas).
- Agrupa as linhas por consulta.
- Filtra segundo os seus limiares (impressões, cliques, posição).
- Retém apenas as consultas com pelo menos 2 URL distintos.
- Calcula a pontuação de gravidade e a recomendação.
- 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:
- Clique no botão Selecionar como origem, ao lado do URL a redirecionar (o que não é o vencedor).
- O URL de destino (o vencedor) é preenchido automaticamente.
- 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.
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.
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.