GSC Connect: documentação
Tudo para instalar, configurar e utilizar o GSC Connect: OAuth da Google, mapas do site, inspeção de URL em massa, relatórios de cliques e posições, alertas de queda e de desindexação, e cron compatível com alojamento partilhado.
O GSC Connect traz toda a potência da Google Search Console diretamente para o back-office do PrestaShop: ligação OAuth com um clique, submissão de mapas do site, inspeção de URL em massa, relatórios de cliques e posições por produto e categoria, e alertas automáticos de queda e de desindexação. Este guia cobre a instalação, a configuração de OAuth da Google, a primeira sincronização, o agendamento do cron, a leitura dos relatórios, a resolução dos erros mais comuns e a arquitetura interna.
Instalação
O módulo instala-se como qualquer módulo PrestaShop: sem dependências Composer, sem workers persistentes e sem serviços externos além da Google.
- Descarregue o
dfgscconnect.zipa partir da sua conta DataFirefly (a ligação de transferência chega depois da encomenda). - Back-office → Módulos → Gestor de módulos → Carregar um módulo.
- Arraste o ZIP. O PrestaShop instala automaticamente as 8 tabelas
dfgsc_*, os separadores de menu e os hooks associados. - Clique em Configurar, na ficha do módulo.
Multiloja nativo. O módulo é multiloja. Cada loja guarda o seu token OAuth, a sua propriedade da Search Console e o seu histórico de métricas. Pode ligar uma loja sem tocar nas outras.
Pré-requisitos
- PrestaShop 8.0.0 a 9.99.99
- PHP 7.4, 8.0, 8.1, 8.2 ou 8.3
- MySQL 5.6+ ou MariaDB 10.3+
- Extensão PHP
curlativa (predefinida em todos os alojamentos) - Uma conta Google que já tenha acesso de proprietário, ou proprietário delegado, à propriedade da Search Console da sua loja
Configuração de OAuth da Google
O módulo usa OAuth 2.0 para aceder à Search Console em nome do proprietário da loja. Esta etapa faz-se uma única vez e demora cerca de 5 minutos. Não é preciso qualquer conta de serviço: a autenticação usa diretamente a conta Google que já tem acesso à sua propriedade da Search Console.
Passo 1: criar um projeto na Google Cloud
- Vá a console.cloud.google.com com a conta Google que tem acesso à Search Console.
- Clique no seletor de projeto no topo e depois em Novo projeto.
- Dê-lhe um nome, por exemplo
prestashop-gsc, e crie-o. - Selecione esse novo projeto depois de criado.
Passo 2: ativar a API da Search Console
- Menu → API e Serviços → Biblioteca.
- Procure Google Search Console API.
- Clique nela e depois em Ativar.
Passo 3: configurar o ecrã de consentimento
- Menu → API e Serviços → OAuth consent screen.
- Escolha External se a sua conta Google não pertencer a uma organização Google Workspace; caso contrário, Internal.
- Preencha o nome da aplicação (por exemplo,
GSC Connect), o seu endereço de apoio e o domínio da loja. - No ecrã Scopes, acrescente o âmbito
https://www.googleapis.com/auth/webmasters(leitura e escrita na Search Console). - No ecrã Test users, acrescente o seu endereço Google. Enquanto o ecrã ficar em modo de teste, isso chega para uso privado: não é preciso submeter a aplicação a verificação pela Google.
Passo 4: criar as credenciais de OAuth
- Menu → API e Serviços → Credentials.
- Create Credentials → OAuth client ID.
- Tipo de aplicação: Web application.
- Nome:
GSC Connect(à sua escolha). - Em Origens JavaScript autorizadas, acrescente o domínio da sua loja com o protocolo HTTPS:
https://a-sua-loja.pt. - Em URI de redirecionamento autorizado, cole o URL exato apresentado na configuração do módulo no PrestaShop (caixa do URL de redirecionamento OAuth).
- Clique em Create. A Google mostra um Client ID e um Client Secret.
O URL de redirecionamento tem de ser exatamente igual. Incluindo o protocolo (https), os subdomínios (com ou sem www) e a ausência de barra final. Basta uma diferença para a Google bloquear a ligação com redirect_uri_mismatch.
Passo 5: preencher as credenciais no PrestaShop
- Back-office → módulo → Configurar.
- Cole o Client ID e o Client Secret.
- Grave o formulário. Aparece um botão Ligar com a Google.
- Clique nele. É reencaminhado para a página de consentimento da Google.
- Confirme as permissões e volta ao back-office do PrestaShop.
- A lista das suas propriedades da Search Console é obtida automaticamente: o módulo seleciona por predefinição a que corresponde ao domínio da sua loja.
Primeiro arranque
Estabelecida a ligação OAuth, lance a primeira sincronização para trazer os seus dados:
- Separador Painel. A propriedade predefinida já está selecionada.
- Clique em Sincronizar agora. O módulo obtém os últimos 28 dias de dados (cliques, impressões, CTR e posição) ao nível de página e de consulta. Conte entre 30 segundos e 2 minutos, conforme o volume do seu catálogo.
- Separador Mapas do site. Os candidatos são detetados automaticamente (
/sitemap.xmlna raiz e o padrão*_sitemap.xmlgerado pelo módulogsitemapdo PrestaShop). Clique em Submeter ao lado de cada mapa relevante. - Separador Inspeção. Clique em Colocar em fila todos os produtos ativos. A fila enche-se de imediato. O processamento real é feito pelo cron, respeitando o limite da Google de 2000 inspeções por dia.
Latência da Search Console. A Google disponibiliza os dados do Search Analytics com cerca de 48 h de atraso. Se acabou de se ligar, algumas métricas do dia anterior ou de anteontem ainda não estarão disponíveis. É normal. O módulo tem isso em conta automaticamente no cálculo das quedas (janela deslizante com desvio de 2 dias).
Painel
O painel reúne 8 indicadores sobre 28 dias:
- Cliques: total de cliques orgânicos na janela
- Impressões: total de apresentações nos resultados de pesquisa
- CTR médio: percentagem de cliques face às impressões
- Posição média: posição média ponderada no conjunto das consultas
- Alertas por ler: número de alertas abertos a tratar
- Páginas não indexadas: número de páginas inspecionadas cujo veredito da Google é FAIL ou NEUTRAL
- Quota do dia: chamadas à API de inspeção consumidas do limite diário
- Última sincronização: data e hora da última passagem do cron
sync
Por baixo dos indicadores, um gráfico de evolução de 28 dias mostra os cliques (linha contínua) e as impressões (linha tracejada, em eixo secundário). O Chart.js está incluído localmente, sem qualquer dependência de CDN.
À direita, o Top 10 de produtos e o Top 10 de categorias ordenam as suas páginas por cliques, com a posição média e o CTR. A resolução de URL para entidade usa o encaminhamento nativo do PrestaShop: padrão id-slug nos produtos, link_rewrite nas categorias e cms_lang nas páginas CMS.
Numa loja multi-idioma, as páginas portuguesas e as de outro idioma aparecem como URL distintos, cada um com as suas métricas. Filtre os relatórios pelo prefixo /pt/ para avaliar o desempenho da versão portuguesa isoladamente: misturar os idiomas na mesma média esconde precisamente o que quer medir depois de uma tradução.
Relatórios de cliques e posições
O separador Relatórios tem três vistas detalhadas: Produtos, Categorias e Consultas. Cada vista aceita um período configurável: 7, 14, 28 ou 90 dias.
Em cada linha, obtém os cliques, as impressões, o CTR e a posição média. Clique em qualquer cabeçalho de coluna para ordenar (ordenação no cliente, imediata). A exportação CSV produz um ficheiro UTF-8 com BOM e ponto e vírgula como separador (compatível com o Excel), até 5000 linhas por exportação.
Comparação de janelas
Em cada produto ou categoria listado, o relatório mostra também a variação face à janela anterior de igual duração. Uma queda de posição significativa aparece a vermelho, e uma melhoria a verde.
A vista de Consultas é a mais útil numa loja recém-traduzida: mostra as palavras que os portugueses usam mesmo, que raramente são a tradução literal das francesas. Se aparecer com impressões em consultas que não previu, é sinal de que vale a pena rever o vocabulário das fichas.
Mapas do site
O separador Mapas do site deteta automaticamente os candidatos na sua loja:
https://a-sua-loja.pt/sitemap.xml: mapa do site na raizhttps://a-sua-loja.pt/sitemap_index.xml: índice de mapas do site- Padrão
*_sitemap.xmlna raiz, gerado pelo módulogsitemapdo PrestaShop, com um ficheiro por loja e por idioma
Submeta com um clique. O módulo passa depois a acompanhar por si:
- O número de URL submetidos (declarado pelo seu mapa do site)
- O número de URL efetivamente indexados (comunicado pela Google)
- O número de erros detetados pela Google
- A data da última transferência pelo Googlebot
Se a Google detetar erros num mapa do site, é levantado um alerta automático: gravidade HIGH a partir de 10 erros e MEDIUM abaixo disso.
O módulo gsitemap gera um ficheiro por loja e por idioma: numa loja com português ativo, submeta também o mapa português, e não apenas o do idioma de origem. Sem isso, a Google descobre as páginas portuguesas apenas por ligações internas, o que é bem mais lento.
Inspeção de URL em massa
A API de URL Inspection da Google está limitada a 2000 chamadas por dia e por propriedade. O GSC Connect gere esse limite com uma fila de espera e repetição automática.
Ações disponíveis
- Colocar em fila todos os produtos ativos: acrescenta todos os produtos com visibilidade
both,searchoucatalog - Colocar em fila todas as categorias: acrescenta todas as categorias ativas (a raiz fica excluída)
- Voltar a inspecionar as páginas alteradas: acrescenta apenas as entidades marcadas como desatualizadas pelos hooks
actionProductUpdateeactionCategoryUpdate - Processar a fila agora: para testes, sem esperar pelo cron
- Inspecionar um URL avulso: para validar uma correção imediata numa página concreta
Dados registados
Em cada URL inspecionado, o módulo regista:
- O veredito global da Google: PASS, PARTIAL, FAIL ou NEUTRAL
- O estado de cobertura (Indexed, Discovered, Crawled but not indexed, entre outros)
- O estado do robots.txt e a indexabilidade declarada
- Os resultados enriquecidos detetados (Product, Breadcrumb, Review, entre outros)
- O estado de AMP e a conformidade com dispositivos móveis
- O mapa do site de referência e os URL de referência
- A data da última exploração pelo Googlebot
Desindexação detetada, alerta automático. Se o veredito for FAIL ou NEUTRAL, ou se o estado de cobertura for DEINDEXED ou INDEXING_NOT_ALLOWED, é levantado automaticamente um alerta HIGH, com o motivo devolvido pela Google.
Alertas e quedas
O módulo trata automaticamente três famílias de alertas:
Quedas de posição
Deteta uma queda significativa de posição numa página já bem classificada. Por predefinição, uma queda de 5 lugares ou mais numa página em posição igual ou inferior a 50. O limiar é ajustável na configuração (DFGSC_DROP_POS).
Quedas de cliques
Deteta uma queda significativa do número de cliques numa página que gerava um volume mínimo. Por predefinição, uma queda de 30 % com um mínimo de 5 cliques na janela anterior. Os limiares são ajustáveis na configuração (DFGSC_DROP_CLICKS e DFGSC_DROP_MIN_CLICKS).
Desindexações
Levantada automaticamente quando um URL inspecionado volta com um veredito FAIL ou NEUTRAL, ou um estado de cobertura DEINDEXED ou INDEXING_NOT_ALLOWED.
Mecânica de comparação
A comparação de quedas é feita numa janela deslizante de 7 dias contra os 7 dias anteriores, com um desvio de 2 dias para respeitar a latência da Search Console. O módulo compara D-9..D-2 com D-16..D-9.
Eliminação de duplicados em 24 h
Um mesmo alerta (mesma página, mesmo tipo) só é acionado uma vez em cada 24 h, para evitar ruído, mesmo que o cron corra de hora a hora.
Notificações por e-mail
Os alertas podem ser enviados por e-mail, sob a forma de resumo em HTML agrupado por gravidade, em francês ou em inglês. Ative-os na configuração e indique o endereço de destino.
O resumo só existe em francês e inglês, mas é uma mensagem interna para a sua equipa, não para clientes: aqui, ao contrário de um e-mail transacional, o idioma não é uma questão de conformidade. Traduza-o apenas se a pessoa que recebe os alertas não ler nenhuma das duas línguas.
Cron e agendamento
Todas as tarefas em segundo plano passam por um endpoint único, protegido por token e visível na página de configuração:
https://a-sua-loja.pt/index.php?fc=module&module=dfgscconnect&controller=cron&token=XXXXXXXXXX
Agende-o de 1 em 1 a 6 em 6 horas, no painel de cron do seu alojamento (cPanel, Plesk ou outro). Exemplo de crontab:
0 */2 * * * curl -fsS "https://a-sua-loja.pt/index.php?fc=module&module=dfgscconnect&controller=cron&token=XXXX" > /dev/null 2>&1
Tarefas executadas
Por predefinição, o endpoint executa todas as tarefas. Pode filtrar uma parte com o parâmetro &tasks=:
| Tarefa | Ação |
|---|---|
sync |
Obtenção dos novos dados do Search Analytics (período configurável) |
inspect |
Processamento da fila de inspeção de URL, respeitando o limite |
sitemaps |
Atualização do estado dos mapas do site submetidos |
drops |
Deteção das quedas de posição e de cliques |
notify |
Envio do resumo de alertas por e-mail |
prune |
Limpeza das entradas de fila terminadas e dos contadores de quota antigos |
Exemplo para sincronizar apenas as métricas, sem tocar na inspeção:
curl "https://a-sua-loja.pt/index.php?fc=module&module=dfgscconnect&controller=cron&token=XXXX&tasks=sync,drops,notify"
Compatível com alojamento partilhado. Sem dependências de Redis, BullMQ, workers persistentes ou PHP-FPM dedicado. O endpoint do cron é apenas um URL HTTPS protegido por token. Funciona nativamente em qualquer alojamento Linux corrente.
Configuração de referência
Todas as opções estão na página Configurar do módulo:
| Opção | Chave | Predefinição |
|---|---|---|
| Client ID da Google | DFGSC_CLIENT_ID |
(a preencher) |
| Client Secret da Google | DFGSC_CLIENT_SECRET |
(a preencher) |
| Período de sincronização (dias) | DFGSC_LOOKBACK_DAYS |
28 |
| Quota diária de inspeção de URL | DFGSC_DAILY_QUOTA |
2000 |
| Limiar de queda de posição | DFGSC_DROP_POS |
5 |
| Limiar de queda de cliques (%) | DFGSC_DROP_CLICKS |
30 |
| Cliques mínimos para detetar queda | DFGSC_DROP_MIN_CLICKS |
5 |
| Notificações por e-mail ativas | DFGSC_ALERT_ENABLED |
sim |
| Endereço de destino dos alertas | DFGSC_ALERT_EMAIL |
e-mail do administrador |
| Token do cron | DFGSC_CRON_TOKEN |
gerado automaticamente |
Quotas e limites da API da Google
A API da Search Console é gratuita, mas está sujeita a limites da Google:
- URL Inspection: 2000 chamadas por dia e por propriedade, 600 por minuto (limite rígido da Google, não negociável)
- Search Analytics: 25 000 linhas por chamada, cerca de 1200 chamadas por minuto e 30 000 por dia (limite indicativo)
- Mapas do site: 5000 chamadas por dia
O módulo regista todas as chamadas por endpoint e por dia na tabela dfgsc_quota. A fila de inspeção para corretamente quando o limite configurado é atingido, gerando um alerta de gravidade MEDIUM. Os contadores são limpos automaticamente ao fim de 30 dias, pela tarefa prune.
Arquitetura e dados
O módulo segue uma arquitetura PSR-4 clássica, no namespace DataFireflyGscConnect, com um autoloader próprio incluído em vendor/autoload.php. Sem dependências Composer e sem dependências externas: as chamadas à API da Google são feitas em cURL nativo, com verificação de SSL.
Camadas
Api: clientes HTTP (GoogleOAuth, SearchConsoleClient)Model: repositórios de acesso à base (Token, Site, Metric, Inspection, Sitemap, Alert, Queue, Quota)Services: orquestração (MetricsSync, Inspection, Sitemap, Alert)
Tabelas criadas
| Tabela | Função |
|---|---|
dfgsc_token |
Refresh token de OAuth e expiração, por loja |
dfgsc_site |
Propriedades conhecidas da Search Console (por loja, com a predefinida) |
dfgsc_metric |
Linhas do Search Analytics (por dia, por página e, opcionalmente, por consulta) |
dfgsc_inspection |
Cache local das inspeções de URL, com o veredito completo |
dfgsc_sitemap |
Estado dos mapas do site submetidos (URL, submetidos, indexados, erros, última transferência) |
dfgsc_alert |
Alertas gerados (tipo, gravidade, página, variação, estado) |
dfgsc_queue |
Fila de inspeção, com estados pending, processing, done e failed |
dfgsc_quota |
Contadores de chamadas à API por endpoint e por dia |
Hooks utilizados
actionAdminControllerSetMedia: carregamento dos recursos do back-officedisplayBackOfficeHeader: reservado para notificações futurasactionProductUpdateeactionCategoryUpdate: invalidação da cache de inspeçãoactionObjectProductDeleteAftereactionObjectCategoryDeleteAfter: limpeza das inspeções órfãs
Segurança
- Token de estado CSRF em cookie, no fluxo de OAuth
- Validação com
hash_equalsno token do cron - Refresh token guardado na base e nunca registado em logs
- Access token nunca persistido: é regenerado a pedido a partir do refresh token e mantido em memória durante o pedido
- Ficheiros
index.phpanti-listagem em todos os subdiretórios - Escape sistemático com
Tools::safeOutputem todas as saídas dos templates
Resolução de problemas
O botão «Ligar com a Google» não aparece
Confirme que o Client ID e o Client Secret estão gravados. Grave o formulário e recarregue a página de configuração.
O ecrã da Google mostra redirect_uri_mismatch
O URI de redirecionamento na Google Cloud tem de ser exatamente igual ao apresentado na configuração do módulo: mesmo protocolo (https), mesmo subdomínio (com ou sem www), mesmo caminho e sem barra final. Copie e cole sem alterações.
A sincronização não traz dados
Verifique três pontos: a propriedade selecionada é mesmo a sua loja; tem pelo menos 72 h de histórico na Search Console (a Google publica com cerca de 48 h de latência); e a conta Google ligada tem mesmo acesso de proprietário ou proprietário delegado a essa propriedade.
As inspeções não são feitas
Confirme que o cron está agendado e que corre. Verifique depois a quota do dia: se consumiu as 2000 chamadas da Google, a fila fica em pausa até ao dia seguinte. Pode forçar manualmente com o botão Processar a fila agora.
Os alertas por e-mail não chegam
Confirme que o endereço indicado é válido, que a configuração de SMTP do PrestaShop funciona (teste com um e-mail de boas-vindas, por exemplo) e que as notificações estão ativas na configuração do módulo.
Erro 401 ou 403 nas chamadas à Search Console
O refresh token foi provavelmente revogado do lado da Google (mudança de palavra-passe, segurança da conta ou consentimento expirado). Desligue e volte a ligar a loja a partir da configuração.
Erro Quota Exhausted (429)
Foi atingida a quota da Google para a propriedade. Está limitada a 2000 inspeções por dia pela Google, independentemente do número de módulos ou ferramentas que consultem a propriedade. A fila retoma automaticamente no dia seguinte.
Registo de alterações
Consulte o ficheiro CHANGELOG.md incluído no ZIP do módulo, para a lista completa de evoluções por versão.
Para qualquer questão não coberta aqui, contacte o suporte DataFirefly em support@datafirefly.com.