Pergunte a um dono de negócio local onde ele aparece para “emergency plumber” e ele geralmente vai te dar um número, muitas vezes o que viu pesquisando do próprio escritório. Esse número é real, mas descreve um único ponto no mapa. O Google classifica os resultados locais em parte pela distância até quem pesquisa, então o mesmo negócio pode estar em primeiro na sua própria rua, em oitavo a um quilômetro e meio de distância e ausente por completo do outro lado da cidade.
Um geo-grid corrige isso medindo o ranking a partir de muitos pontos ao mesmo tempo. Você sobrepõe uma grade de coordenadas sobre a área que um negócio atende, roda a mesma busca no Maps a partir de cada ponto e registra onde o negócio aparece. O resultado é um mapa de rankings em vez de um único rank, e ele mostra exatamente onde um negócio vence e onde ele desaparece.
Este guia cobre como desenhar a grade, o código para executá-la, como ler as três métricas que as equipes reportam a partir dela, e os erros que tornam as grades enganosas.
Por que um único rank não é suficiente
A própria orientação do Google aponta três fatores por trás dos resultados locais: relevância (quão bem o anúncio corresponde à busca), distância (quão longe o resultado está de quem pesquisa ou do local informado na busca) e proeminência (quão conhecido o negócio é, a partir de avaliações, links e outros sinais). Relevância e proeminência quase não mudam de um quarteirão para o outro. A distância muda a cada passo.
Isso faz do ranking local uma superfície, não um número. Um dentista com um perfil forte pode se manter entre os três primeiros em todo um distrito, enquanto um concorrente mais novo só é bem posicionado perto da própria porta. Uma única verificação feita do escritório esconde ambos os fatos. O mesmo acontece com uma verificação em nível de cidade: pedir resultados “em Chicago” faz uma média que elimina exatamente a variação com a qual um negócio local se importa.
Se você é novo em como a localização molda os resultados de busca de forma mais ampla, nosso guia sobre APIs de SERP geolocalizadas para SEO local cobre a escada de granularidade, do país até as coordenadas. Um geo-grid fica no último degrau.
Projetando a grade
Uma grade tem três configurações, e cada uma delas muda o que o mapa pode te dizer.
| Configuração | O que controla | Um início razoável |
|---|---|---|
| Tamanho | Número de pontos por lado (7 significa 7 x 7 = 49 pontos) | 7 para um negócio de bairro, 9 a 13 para uma área de serviço |
| Espaçamento | Distância entre pontos vizinhos | 0,5 a 1 km em cidades densas, 2 a 5 km em subúrbios e áreas rurais |
| Zoom | O zoom do mapa com o qual a busca é feita | 15 para nível de rua, 13 para uma área mais ampla |
Três regras mantêm uma grade honesta:
- Use um tamanho ímpar e centralize-o no negócio. O ponto do meio então fica sobre o endereço, de modo que o mapa sempre mostra o melhor cenário ao lado de tudo ao redor.
- Ajuste o espaçamento a como as pessoas realmente pesquisam. Uma cafeteria compete dentro de uma distância a pé; uma empresa de telhados compete em todo um condado. Uma grade apertada demais mostra só verde, e uma larga demais mostra só células vazias.
- Mantenha todas as configurações fixas entre as execuções. Tamanho, espaçamento, zoom, palavra-chave, idioma e dispositivo precisam permanecer idênticos, senão dois mapas não podem ser comparados.
O código
O módulo abaixo constrói a grade, prepara uma busca no Maps por ponto, encontra o negócio em cada resposta e resume o resultado. Ele usa apenas a biblioteca padrão.
import math
EARTH_RADIUS_KM = 6371.0088
NOT_FOUND = 21 # um a mais que os 20 lugares que uma busca no Maps retorna
def grid_points(lat, lng, size=7, spacing_km=1.0):
"""A size x size grid centred on (lat, lng), points spacing_km apart."""
if size % 2 == 0:
raise ValueError("size must be odd so the business sits on the centre point")
half = size // 2
points = []
for row in range(size):
for col in range(size):
north_km = (half - row) * spacing_km
east_km = (col - half) * spacing_km
p_lat = lat + math.degrees(north_km / EARTH_RADIUS_KM)
p_lng = lng + math.degrees(east_km / (EARTH_RADIUS_KM * math.cos(math.radians(p_lat))))
points.append({"row": row, "col": col, "lat": round(p_lat, 6), "lng": round(p_lng, 6)})
return points
def maps_params(keyword, lat, lng, zoom=15, api_key="YOUR_API_KEY"):
"""Query parameters for one Google Maps search seen from (lat, lng)."""
return {
"engine": "google_maps",
"api_key": api_key,
"q": keyword,
"type": "search",
"ll": f"@{lat},{lng},{zoom}z",
"hl": "en",
}
def rank_of(response, place_id):
"""Position of the business in one response, or None when it is not listed."""
for place in response.get("places_results", []):
if place.get("place_id") == place_id:
return place.get("position")
return None
def summarise(ranks, top=3):
"""ranks: one rank (or None) per grid point."""
found = [r for r in ranks if r is not None]
return {
"points": len(ranks),
"found": len(found),
"arp": round(sum(found) / len(found), 2) if found else None,
"atrp": round(sum(r if r is not None else NOT_FOUND for r in ranks) / len(ranks), 2),
"solv": round(sum(1 for r in found if r <= top) / len(ranks), 3),
}
def render(points, ranks, size):
"""The grid as text, north at the top: rank per point, '--' when not found."""
cells = {(p["row"], p["col"]): r for p, r in zip(points, ranks)}
return "\n".join(
" ".join(f"{cells[(row, col)]:>2}" if cells[(row, col)] is not None else "--" for col in range(size))
for row in range(size)
)
grid_points converte quilômetros em graus sobre uma esfera, então o espaçamento permanece uniforme em qualquer latitude em vez de se esticar conforme você se afasta do equador. O ponto 0 é o canto noroeste, e as linhas vão de norte a sul.
Executá-lo para um negócio e uma palavra-chave é um loop curto. Cada ponto se torna uma busca no Google Maps através da SERP API da Shifter, com as coordenadas passadas no parâmetro ll para que a busca seja feita a partir daquele ponto:
import json
import os
import time
import requests
from geogrid import grid_points, maps_params, rank_of, render, summarise
API = "https://serp.shifter.io/v1"
KEYWORD = "emergency plumber"
PLACE_ID = "ChIJ_YOUR_PLACE_ID" # the business you are tracking
CENTER = (41.8781, -87.6298) # its address
SIZE, SPACING_KM = 7, 1.0
points = grid_points(*CENTER, size=SIZE, spacing_km=SPACING_KM)
ranks = []
for p in points:
params = maps_params(KEYWORD, p["lat"], p["lng"], api_key=os.environ["SERP_API_KEY"])
response = requests.get(API, params=params, timeout=60).json()
ranks.append(rank_of(response, PLACE_ID))
time.sleep(0.2)
print(render(points, ranks, SIZE))
print(json.dumps(summarise(ranks)))
Para fazer a correspondência com o anúncio certo, use o place_id do negócio em vez do nome: nomes se repetem, e franquias compartilham os mesmos. Você pode encontrar o place_id em qualquer resposta do Maps que contenha o negócio.
Testamos o módulo contra um respondente sintético que classifica um negócio pela sua distância do ponto central, com um lado leste ligeiramente mais fraco. A saída fica assim (os números são do teste sintético, não de um negócio real):
12 10 9 8 11 12 14
10 8 6 6 8 10 12
9 6 4 3 6 8 11
8 6 3 1 5 8 10
9 6 4 3 6 8 11
10 8 6 6 8 10 12
12 10 9 8 11 12 14
{"points": 49, "found": 49, "arp": 8.31, "atrp": 8.31, "solv": 0.082}
O padrão é o mesmo que grades reais mostram: forte no endereço, enfraquecendo com a distância, e desigual conforme a direção.
Lendo o mapa: três métricas
As equipes resumem uma grade com três números, e cada um responde a uma pergunta diferente.
| Métrica | Como é calculada | O que te diz |
|---|---|---|
| ARP, average rank position | Rank médio sobre os pontos onde o negócio aparece | Quão bem ele é classificado onde de fato aparece |
| ATRP, average total rank position | Rank médio sobre todos os pontos, contando “não encontrado” como 21 | Visibilidade geral em toda a área |
| SoLV, share of local voice | Parcela de pontos onde o negócio está entre os 3 primeiros | Quanto do mapa ele domina no pacote de mapas |
Elas precisam ser lidas em conjunto. Um negócio encontrado em apenas cinco pontos, todos entre os três primeiros, tem um ARP excelente e um ATRP fraco. O mapa mostra o porquê: ele domina uma pequena área e é invisível em todo o resto. Isso aponta para um problema de distância, não de relevância, e um trabalho melhor na página não vai resolver.
O SoLV importa mais para negócios que dependem do pacote de mapas, os três resultados locais que o Google mostra acima das listagens normais. As posições quatro a vinte existem na lista completa do Maps, mas muito menos pesquisadores rolam até lá.
Usando uma grade para tomar decisões
Uma grade feita uma única vez é um diagnóstico. Grades repetidas são onde está o valor.
- Compare com concorrentes na mesma grade. Rode os mesmos pontos para os dois ou três negócios que te superam no centro. Os mapas deles muitas vezes mostram que um concorrente vence em proeminência (uma área grande e uniforme) enquanto você vence em proximidade.
- Meça a mudança depois de agir. Novas avaliações, uma categoria corrigida ou um endereço consertado devem aparecer como uma área verde maior algumas semanas depois. Sem uma grade fixa, você não consegue distinguir uma melhora de ruído.
- Acompanhe as bordas. As células na borda da área forte de um negócio se movem primeiro, em ambas as direções. Observá-las dá um aviso mais antecipado do que o centro.
- Verifique com cuidado negócios de área de serviço. Negócios que escondem o endereço e atendem clientes no local muitas vezes se classificam de forma bem diferente das lojas físicas. Uma grade mais larga mostra se eles aparecem onde seus clientes estão.
Execuções semanais são suficientes para a maioria dos negócios. Os rankings locais de fato se movem diariamente, mas uma cadência semanal com configurações fixas mostra tendências sem pagar por cada flutuação. Se você também acompanha rankings orgânicos regulares, nosso guia sobre detectar volatilidade de SERP cobre como diferenciar um movimento real de ruído do dia a dia.
Erros que tornam as grades enganosas
- Pesquisar com o nome da cidade na palavra-chave. “Plumber Chicago” diz ao Google onde procurar e substitui a localização do ponto. Use o termo de serviço simples, da forma como alguém nas proximidades pesquisaria.
- Misturar dispositivos ou idiomas entre as execuções. Os resultados do Maps em mobile e desktop diferem. Escolha um e mantenha-o.
- Tratar “não encontrado” como um rank de 20. Um negócio ausente é pior do que um em vigésimo lugar. Conte isso separadamente, como o ATRP faz com 21, e reporte o número de pontos onde ele foi encontrado.
- Rodar grades sobre água ou terreno vazio. Pontos em um lago ou uma floresta adicionam células das quais nenhum cliente jamais vai pesquisar. Desloque o centro ou remova essas células antes de calcular médias.
- Ler uma única execução como a verdade. Os resultados variam ligeiramente entre buscas idênticas. Aja sobre padrões que se mantêm em várias execuções, não sobre uma única célula mudando de cor.
Para o panorama mais amplo sobre medição de ranking limpa e consistente (personalização, dispositivo e horário), veja como medir rankings de palavras-chave com precisão.
Custo e escala
O custo de uma grade é simplesmente pontos vezes palavras-chave vezes execuções. Uma grade 7 x 7 é 49 buscas por palavra-chave. Dez palavras-chave acompanhadas semanalmente são 490 buscas por semana, ou cerca de 2.100 por mês. Uma grade 13 x 13 para as mesmas dez palavras-chave é 1.690 buscas por semana.
Essa aritmética é a principal razão para escolher o tamanho da grade com critério. Comece com uma grade 7 x 7 nas palavras-chave que trazem clientes, e amplie apenas aquelas em que as bordas do mapa ainda estão mudando.
Perguntas frequentes
Quantos pontos uma geo-grid deve ter?
Para um negócio que atende um bairro, uma grade 7 x 7 (49 pontos) geralmente é suficiente. Negócios que atendem uma cidade ou condado inteiro precisam de espaçamento maior, e às vezes de uma grade de 9 x 9 a 13 x 13, para ver onde a visibilidade deles termina.
Uma geo-grid é o mesmo que verificar rankings por CEP?
Não. Uma verificação por CEP roda uma busca para uma área e retorna um único rank. Uma geo-grid roda uma busca a partir de cada coordenada, então mostra como o ranking muda dentro de uma área, que é exatamente aquilo de que os resultados locais baseados em distância dependem.
Por que meu negócio aparece em primeiro no escritório mas não do outro lado da cidade?
A distância é um dos principais fatores nos resultados locais do Google. Perto do endereço, a distância trabalha a seu favor. Mais longe, concorrentes que estão mais próximos de quem pesquisa, ou mais conhecidos, ocupam as primeiras posições.
Com que frequência devo rodar uma geo-grid?
Semanalmente é suficiente para a maioria dos negócios. Rode uma grade extra algumas semanas depois de uma mudança significativa, como novas avaliações ou uma categoria de negócio corrigida, para ver se a área forte cresceu.
Conclusão
Os rankings locais são um mapa, não um número. Uma geo-grid mede esse mapa com a mesma busca a partir de muitos pontos, e três métricas (ARP, ATRP e share of local voice) o resumem. Mantenha a grade centralizada no negócio, dimensionada para seu mercado real e fixa entre as execuções, e ela se torna a forma mais direta de ver onde um negócio local está visível, onde não está, e se isso está mudando.