Parte da semana de um especialista em SEO vai para buscar uma a uma as palavras-chave importantes e conferir em que posição o site aparece. Com cinco palavras-chave, é um hábito; com quinhentas palavras-chave, três cidades e dois tipos de dispositivo, é um trabalho impossível. E as verificações manuais enganam: a posição que você vê em um navegador logado no Google não é a mesma que um usuário em Izmir vê no celular.
Neste artigo, explicamos o que são uma SERP (página de resultados do buscador) e o acompanhamento de posições, por que o acompanhamento manual não escala e como começar a automatizar com a API do Search Console, com um exemplo funcional em Python. Depois, vemos os dados que o Search Console não entrega, por que os resultados mudam conforme a localização, as partes de um sistema de acompanhamento e os limites desse trabalho segundo os termos de serviço. Um aviso importante logo de início: extrair automaticamente os resultados do Google sem permissão viola as políticas do Google. Este artigo recomenda primeiro o caminho oficial e, depois, as fontes de dados licenciadas.
O que são SERPs e acompanhamento de posições?
Uma SERP (Search Engine Results Page) é a página de resultados que um buscador devolve para uma consulta. A SERP de hoje não são só dez links azuis: na mesma página podem aparecer anúncios, um mapa com o pacote de empresas locais, resultados de shopping, caixas de "As pessoas também perguntam", vídeos, imagens e resumos gerados por IA.
O acompanhamento de posições é registrar, em intervalos regulares, onde o seu site aparece nessa página para palavras-chave específicas. O objetivo não é saber a posição de um dia, e sim ver a mudança ao longo do tempo: a posição subiu depois de uma atualização de conteúdo, quais páginas caíram depois de uma atualização do algoritmo, a nova página da cidade aparece naquela cidade?
As principais métricas do acompanhamento de posições:
- Posição: o lugar do resultado na página. No Search Console, esse valor é a média das impressões de um período.
- Impressões: quantas vezes o seu site foi mostrado nos resultados.
- Cliques e taxa de cliques (CTR): quantas impressões viraram visitas.
- Tipo de exibição: se o resultado é um link comum, um resultado enriquecido ou um pacote local.
Por que o acompanhamento manual não escala?
As verificações manuais de posição são lentas e enganosas por três motivos:
- Personalização. Uma busca feita logado em uma conta Google pode ser influenciada pelas suas buscas e visitas anteriores. Se você visita o seu próprio site com frequência, pode vê-lo mais alto do que ele realmente está.
- Localização. Os resultados de busca mudam conforme o país, a cidade e, em consultas com intenção local, até o bairro do usuário. O resultado que você vê do seu escritório em Istambul não é o que um usuário em Ancara recebe.
- Dispositivo e idioma. Resultados no celular e no desktop mostram posições diferentes por causa do layout da página e dos recursos da SERP. A configuração de idioma do navegador também afeta os resultados.
Some a isso a dimensão do tempo: os resultados podem mudar ao longo do dia. A verificação de uma pessoa em uma manhã mostra uma única combinação dessas variáveis. As decisões precisam da mesma medição repetida nas mesmas condições em intervalos regulares.
Por que começar pela API do Search Console?
O jeito certo de começar a acompanhar as posições do seu próprio site é o Google Search Console, porque os dados vêm diretamente do Google e se baseiam nos resultados que os usuários reais veem. O relatório de Desempenho da interface basta para análises pequenas; para um acompanhamento regular e detalhado, usa-se o método searchanalytics.query da API do Search Console.
Os dados que a API oferece:
| Campo | Descrição |
|---|---|
Dimensões (dimensions) | date, query, page, country, device, searchAppearance e hour para dados por hora |
| Métricas | clicks, impressions, ctr (0-1), position (média) |
Tipo de busca (type) | web (padrão), image, video, news, discover, googleNews |
Limite de linhas (rowLimit) | Até 25.000 por requisição; acima disso, pagina-se com startRow |
Estado dos dados (dataState) | final (padrão, consolidado), all (inclui dados recentes ainda não consolidados) |
| Permissão | O escopo webmasters.readonly basta |
Os pontos fortes do Search Console são ser dado real, gratuito e dividido por país e dispositivo. Mas é preciso conhecer os limites: a posição é uma média, os dados dos últimos dias podem ainda não estar consolidados e algumas consultas muito pouco buscadas ficam fora dos relatórios por privacidade.
Como puxar dados de posição com a API do Search Console?
A configuração tem quatro etapas:
- Crie um projeto no Google Cloud e ative a API do Search Console.
- Crie uma conta de serviço e baixe o arquivo de chave (JSON). Não adicione esse arquivo ao controle de versão.
- Adicione o endereço de e-mail da conta de serviço como usuário da sua propriedade no Search Console. Acesso de leitura basta. Se você pular essa etapa, a API devolve um erro de permissão.
- Instale as bibliotecas Python:
pip install google-api-python-client google-authO script abaixo puxa os dados de um intervalo de datas divididos por consulta, página, país e dispositivo, lê em páginas de 25.000 linhas e grava em um banco de dados SQLite:
import sqlite3
from datetime import date, timedelta
from google.oauth2 import service_account
from googleapiclient.discovery import build
SITE = "sc-domain:example.com" # propriedade de domínio; para propriedade de URL, use "https://example.com/"
SCOPES = ["https://www.googleapis.com/auth/webmasters.readonly"]
PAGE_SIZE = 25_000
credentials = service_account.Credentials.from_service_account_file("service-account.json", scopes=SCOPES)
service = build("searchconsole", "v1", credentials=credentials)
def fetch_rows(start, end):
start_row = 0
while True:
body = {
"startDate": start.isoformat(),
"endDate": end.isoformat(),
"dimensions": ["date", "query", "page", "country", "device"],
"rowLimit": PAGE_SIZE,
"startRow": start_row,
}
response = service.searchanalytics().query(siteUrl=SITE, body=body).execute()
rows = response.get("rows", [])
yield from rows
if len(rows) < PAGE_SIZE:
break
start_row += PAGE_SIZE
db = sqlite3.connect("rankings.db")
db.execute("""
CREATE TABLE IF NOT EXISTS performance (
date TEXT, query TEXT, page TEXT, country TEXT, device TEXT,
clicks REAL, impressions REAL, ctr REAL, position REAL,
PRIMARY KEY (date, query, page, country, device)
)
""")
end = date.today() - timedelta(days=3) # os últimos dias podem ainda não estar consolidados
start = end - timedelta(days=6)
with db:
db.executemany(
"INSERT OR REPLACE INTO performance VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
(
(*row["keys"], row["clicks"], row["impressions"], row["ctr"], row["position"])
for row in fetch_rows(start, end)
),
)
print("Número de linhas:", db.execute("SELECT COUNT(*) FROM performance").fetchone()[0])A ordem dos valores no array keys corresponde à ordem de dimensions na requisição; leve isso em conta ao gravar na tabela. Graças ao INSERT OR REPLACE, puxar o mesmo dia de novo atualiza os dados em vez de duplicá-los.
Com os dados em mãos, a consulta mais útil é a mudança de posição entre dois períodos. Por exemplo, para comparar a posição média das buscas no celular em Türkiye nas duas últimas semanas:
WITH period AS (
SELECT query,
AVG(CASE WHEN date >= date('now', '-10 days') THEN position END) AS this_week,
AVG(CASE WHEN date < date('now', '-10 days') THEN position END) AS last_week,
SUM(impressions) AS impressions
FROM performance
WHERE country = 'tur' AND device = 'MOBILE' AND date >= date('now', '-17 days')
GROUP BY query
)
SELECT query, ROUND(last_week, 1) AS before, ROUND(this_week, 1) AS now,
ROUND(this_week - last_week, 1) AS change, impressions
FROM period
WHERE impressions > 100
ORDER BY change DESC
LIMIT 20;Um número de posição maior significa que a posição caiu; a consulta coloca no topo as palavras-chave que mais caíram. Os códigos de país são códigos ISO de três letras (tur para Türkiye).
Dados que o Search Console não entrega
O Search Console é uma fonte confiável sobre o seu próprio site, mas não cobre algumas necessidades do acompanhamento de posições:
- As posições dos concorrentes. O Search Console só mostra os dados do seu próprio site. Você não vê qual site está em primeiro para uma palavra-chave nem a subida de um concorrente.
- Resultados por cidade. A divisão é por país. Não dá para separar as posições em Ancara das posições em Izmir.
- A visão completa da SERP. Quantos anúncios, pacotes locais ou resumos de IA ficam acima do seu resultado, ou seja, o layout de página que afeta os cliques, não é informado.
- Consultas sem impressões. Para uma palavra-chave em que você não aparece nas primeiras páginas, praticamente não há dados.
- O estado atual. Os dados são consolidados com alguns dias de atraso.
Há duas opções legítimas para cobrir essas lacunas: serviços de dados de SERP que fornecem dados de resultados de busca sob licença e verificações manuais de localização em escala humana. Coletar automaticamente os resultados dos buscadores com o seu próprio script não é uma opção, pelos motivos explicados abaixo.
Por que os resultados mudam conforme a localização?
Os buscadores avaliam se uma consulta tem intenção local. Em consultas informativas como "o que é um proxy", os resultados são praticamente iguais dentro de um país. Em consultas com intenção local, como "clínica odontológica", "chaveiro", "aluguel de carro" ou "agência dos correios mais próxima", os resultados mudam completamente conforme a cidade e até o bairro.
Em Türkiye, essa diferença se destaca em:
- Empresas com filiais em várias cidades. Se a página de cada cidade aparece na própria cidade.
- Empresas com área de atendimento. Se uma empresa aparece nos resultados locais dos bairros que atende.
- Lojas online nacionais. Páginas de categoria que ranqueiam de forma diferente nas grandes cidades.
- Buscas em idiomas diferentes. Os resultados vistos por usuários que buscam em inglês a partir de Türkiye em comparação com os que buscam em turco.
Medir diferenças por cidade em escala usa os parâmetros de localização dos serviços de dados de SERP. Conferir de vez em quando como um número limitado de páginas importantes aparece em certas cidades é um trabalho em escala humana: um especialista em SEO busca ele mesmo algumas consultas críticas em um perfil de navegador limpo e deslogado, com um endereço IP da cidade correspondente. Para pontos de saída por cidade em Türkiye, veja a nossa página de localizações de Türkiye, e para saber como essas verificações são montadas, a nossa página de solução de proxy para SEO.
Comparando fontes de dados
| Critério | API do Search Console | Serviço licenciado de dados de SERP | Extrair buscadores com o seu próprio script |
|---|---|---|---|
| Dados de quem? | Só do seu próprio site | De qualquer consulta e site | De qualquer consulta e site |
| Origem | Dados reais de usuários do Google | Páginas de resultados coletadas pelo serviço | Consultas automatizadas enviadas por você |
| Tipo de posição | Média | Instantânea, medição única | Instantânea, medição única |
| Nível de cidade | Não, país | Geralmente sim | Tecnicamente possível |
| Posições dos concorrentes | Não | Sim | Sim |
| Cliques e impressões | Sim | Não | Não |
| Custo | Gratuito | Pago por consulta | Infraestrutura e manutenção |
| Termos de serviço | Caminho oficial | Depende do contrato do serviço | Consultas automatizadas não autorizadas ao Google violam as políticas |
| Nossa recomendação | Primeira fonte | Para dados de concorrentes e por cidade | Não usar |
Partes da automação
Um sistema de acompanhamento de posições tem quatro partes, seja qual for a fonte de dados:
- Lista de palavras-chave. Para cada palavra-chave: a página de destino, a prioridade, o país e o dispositivo acompanhados e, se necessário, a cidade. A lista fica em uma planilha ou banco de dados e é atualizada junto com os objetivos do negócio. Consultas com muitas impressões nos dados do Search Console podem entrar na lista como candidatas.
- Agendamento. Para os dados do Search Console, uma execução por dia basta; os dados são consolidados com alguns dias de atraso de qualquer forma. Dá para usar
cronno Linux, o Agendador de Tarefas no Windows ou uma tarefa agendada em um pipeline de CI. - Armazenamento. Cada medição é guardada com data e hora; dados antigos não são apagados, porque o valor do acompanhamento está em comparar com o passado. SQLite para projetos pequenos, PostgreSQL ou um data warehouse para uso em equipe.
- Relatórios e alertas. Um relatório semanal de mudanças, alertas para consultas que caem além de um limite e uma visão agrupada por grupos de páginas (categoria, blog, páginas de cidade).
Para os alertas fazerem sentido, filtre as oscilações de consultas com poucas impressões; uma consulta com um punhado de impressões indo da posição 3 para a 9 pode não significar nada estatisticamente.
Termos de serviço e uso responsável
Esta seção é a parte mais importante do artigo.
As políticas contra spam do Google, no item "tráfego gerado por máquina", definem como violação enviar consultas automatizadas ao Google e extrair resultados para verificar posições sem permissão expressa, e afirmam que isso também viola os termos de serviço do Google. Os termos de serviço do Google também citam, entre os exemplos de abuso, usar meios automatizados para acessar os serviços violando instruções legíveis por máquina, como o robots.txt.
Na prática, isso significa:
- Não extraia automaticamente os resultados do Google com o seu próprio script, nem com um pool de proxies. Trocar o endereço IP não coloca você fora de uma política.
- Para o seu próprio site, use primeiro a API do Search Console. Ela é oficial, gratuita e baseada em dados de usuários reais.
- Para dados de concorrentes e por cidade, escolha um serviço de dados licenciado e confira como o serviço obtém os dados e se o contrato cobre o seu uso.
- Mantenha as verificações manuais em escala humana. Um especialista que busca algumas consultas importantes com uma conexão que parece vir de outra cidade não é o mesmo que um script enviando milhares de consultas automaticamente.
- Leia também os termos de outros buscadores. Cada buscador, o Yandex incluído, tem os próprios termos de uso e ferramentas de dados oficiais.
Explicamos o enquadramento legal geral da coleta de dados na web em Web scraping é legal?, e como as regras do robots.txt são lidas em O que é robots.txt e como ler o arquivo?.
Casos de uso
- Relatório semanal de uma equipe de conteúdo: dados diários da API do Search Console, guardados em SQLite, e uma lista semanal das 20 consultas que mais caíram e mais subiram.
- Visibilidade local de uma empresa em várias cidades: uma tendência por país com o Search Console, medição por cidade com um serviço de SERP licenciado e verificação em escala humana das páginas de cidade importantes. Endereços Proxies residenciais, que saem por conexões domésticas reais, permitem a um especialista ver essas páginas como um usuário daquela cidade veria.
- Visibilidade em buscadores regionais: conferir os resultados regionais em buscadores além do Google; as páginas relacionadas são as nossas soluções de proxy para Google e de proxy para Yandex.
- Pesquisa de mercado: comparar com dados licenciados a visibilidade nos buscadores dos sites de um setor. A configuração de pesquisa está na nossa página de solução de pesquisa de mercado.
- Monitorar as páginas públicas dos concorrentes: não os resultados dos buscadores, e sim as mudanças de conteúdo e de preço nos próprios sites dos concorrentes. Esse trabalho segue o robots.txt e os termos dos sites com limite de taxa; dá para usar um Proxies rotativos para distribuir a carga. Explicamos as regras em Como fazer web scraping sem ser bloqueado.
Erros comuns
- Conferir posições em um navegador logado. A personalização distorce o resultado.
- Confundir a posição do Search Console com uma posição instantânea. O valor é a média de todas as impressões do período e ainda pode misturar países e dispositivos diferentes. Olhe-o com filtros de país e dispositivo.
- Tomar decisões com os dados dos últimos dois ou três dias. Os dados podem ainda não estar consolidados.
- Esquecer o limite de 25.000 linhas. Em sites grandes, sem paginação, os dados voltam incompletos em silêncio.
- Reagir a oscilações de consultas com poucas impressões. Defina um limite de impressões para considerar uma mudança significativa.
- Nunca atualizar a lista de palavras-chave. As páginas novas do site e as mudanças no comportamento de busca devem se refletir na lista.
- Extrair automaticamente os resultados dos buscadores. Viola as políticas e não é uma solução duradoura.
Guia de decisão
| Sua necessidade | Recomendação |
|---|---|
| Posições por consulta do seu próprio site | API do Search Console |
| Cliques, impressões e CTR | API do Search Console |
| Divisão por país e dispositivo | API do Search Console |
| Posições dos concorrentes | Serviço licenciado de dados de SERP |
| Medição de posições por cidade | Serviço licenciado de dados de SERP |
| Conferir como algumas páginas críticas aparecem a partir de uma cidade | Verificação manual em escala humana, IP por cidade |
| Mudanças de conteúdo e preço nos sites dos concorrentes | Scraping dentro das regras, com limite de taxa |
| Coletar resultados do Google com o seu próprio script | Não recomendado, viola as políticas |
Perguntas frequentes
O que significa a posição média no Search Console?
É a média da posição mais alta do seu site em todas as impressões que ele recebeu para aquela consulta no período escolhido. Como mistura posições vistas em dias, países e dispositivos diferentes, pode não ser exatamente igual à posição que um único usuário vê.
A API do Search Console é paga?
Não, a API do Search Console é gratuita. Há cotas de uso; um script de acompanhamento de posições que faz uma única extração em lote por dia geralmente fica bem abaixo delas.
Por que algumas consultas não aparecem no Search Console?
Para proteger a privacidade dos usuários, o Google deixa fora dos relatórios algumas consultas buscadas por pouquíssimas pessoas. Por isso o total de cliques na divisão por consultas pode parecer menor que o total geral.
Como acompanho as posições dos meus concorrentes?
O Search Console não fornece esses dados. Para as posições dos concorrentes, usam-se serviços que fornecem dados de resultados de busca sob licença. Ao escolher um serviço, confira como os dados são coletados e se o contrato cobre o seu uso.
Posso fazer verificações automáticas de posição no Google com proxy?
As políticas contra spam do Google proíbem enviar consultas automatizadas para verificar posições sem permissão expressa; trocar o endereço IP não muda isso. O uso legítimo de um proxy nessa área é um especialista conferir, em escala humana, como algumas páginas críticas aparecem a partir de cidades diferentes.
Com que frequência devo acompanhar as posições?
Para os dados do Search Console, uma extração diária basta; para tomar decisões, olhe as tendências semanais e mensais. As oscilações diárias muitas vezes não mostram uma mudança significativa.
Em resumo
A verificação manual de posições não escala e engana por causa da personalização e das diferenças de localização e dispositivo. Comece a automatizar com a API do Search Console: puxe dados diariamente divididos por consulta, página, país e dispositivo, pagine de 25.000 em 25.000 linhas, guarde em um banco de dados e relate as mudanças entre períodos. Use serviços de SERP licenciados para dados de concorrentes e por cidade, e verificações em escala humana para ver como as páginas importantes aparecem localmente. Extrair os resultados do Google com consultas automatizadas não autorizadas viola as políticas dele. Opções para verificações manuais por localização estão nos nossos serviços de proxy.




