El SEO local determina si una empresa aparece en Google Maps y en el paquete local para consultas con orientación geográfica. Un verificador de SEO local analiza cómo aparece una empresa en los resultados locales: su calificación, recuento de reseñas, si tiene un sitio web y cómo se clasifica en relación con la competencia. Este tutorial crea un verificador de SEO local utilizando la API de Scavio que consulta los resultados locales para las palabras clave objetivo, evalúa la calidad de la lista de empresas y produce un informe de puntuación de SEO local.
Requisitos previos
- Python 3.8 o superior
- solicita biblioteca instalada
- Una clave API de Scavio
- Un nombre comercial y una ubicación para verificar
Guia paso a paso
Paso 1: Obtener resultados locales para palabras clave objetivo
Busque palabras clave con intención local para las que su empresa debería clasificarse. El campo local_results contiene listados de Google Maps.
def get_local_results(keyword: str, location: str) -> list[dict]:
r = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"query": f"{keyword} in {location}", "country_code": "us"}
)
r.raise_for_status()
return r.json().get("local_results", [])Paso 2: Encuentre el negocio objetivo en los resultados
Escanee los resultados locales en busca del nombre comercial de destino. Devuelva su posición y los detalles del listado si los encuentra.
def find_business(results: list[dict], business_name: str) -> dict | None:
for i, r in enumerate(results):
if business_name.lower() in r.get("title", "").lower():
return {"position": i + 1, **r}
return NonePaso 3: Califique la calidad del listado
Calcule una puntuación de SEO local en función de la calificación, el recuento de reseñas, la presencia del sitio web y la disponibilidad de números de teléfono.
def score_listing(listing: dict) -> dict:
score = 0
factors = {}
rating = float(listing.get("rating", 0) or 0)
if rating >= 4.5:
score += 30
factors["rating"] = f"{rating}/5 (excellent)"
elif rating >= 4.0:
score += 20
factors["rating"] = f"{rating}/5 (good)"
else:
factors["rating"] = f"{rating}/5 (needs improvement)"
reviews = int(listing.get("reviews", 0) or 0)
if reviews >= 100:
score += 25
elif reviews >= 20:
score += 15
factors["reviews"] = str(reviews)
if listing.get("website"):
score += 20
factors["website"] = "present"
else:
factors["website"] = "missing"
if listing.get("phone"):
score += 15
factors["phone"] = "present"
else:
factors["phone"] = "missing"
return {"score": score, "max_score": 90, "factors": factors}Paso 4: Generar el informe SEO local
Ejecute el verificador en varias palabras clave y genere un informe SEO local completo.
def local_seo_check(business: str, location: str, keywords: list[str]) -> None:
print(f"Local SEO Report: {business} in {location}\n" + "=" * 50)
for kw in keywords:
results = get_local_results(kw, location)
match = find_business(results, business)
if match:
scores = score_listing(match)
print(f"\n{kw}: Position #{match['position']}, Score: {scores['score']}/{scores['max_score']}")
else:
print(f"\n{kw}: Not found in local results")Ejemplo en Python
import os
import requests
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
def get_local(kw: str, loc: str) -> list[dict]:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"query": f"{kw} in {loc}", "country_code": "us"})
r.raise_for_status()
return r.json().get("local_results", [])
def score(listing: dict) -> int:
s = 0
if float(listing.get("rating") or 0) >= 4.0: s += 25
if int(listing.get("reviews") or 0) >= 50: s += 25
if listing.get("website"): s += 25
if listing.get("phone"): s += 15
return s
if __name__ == "__main__":
business = "Joe's Coffee"
keywords = ["coffee shop", "best coffee", "cafe near me"]
for kw in keywords:
results = get_local(kw, "Austin, TX")
match = next((r for r in results if business.lower() in r.get("title", "").lower()), None)
if match:
print(f"{kw}: #{results.index(match)+1}, score={score(match)}/90")
else:
print(f"{kw}: not found")Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
async function getLocal(kw, loc) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ query: `${kw} in ${loc}`, country_code: "us" })
});
const data = await res.json();
return data.local_results || [];
}
async function main() {
const business = "Joe's Coffee";
const keywords = ["coffee shop", "best coffee"];
for (const kw of keywords) {
const results = await getLocal(kw, "Austin, TX");
const idx = results.findIndex(r => r.title?.toLowerCase().includes(business.toLowerCase()));
if (idx >= 0) {
console.log(`${kw}: #${idx + 1}, rating: ${results[idx].rating}`);
} else {
console.log(`${kw}: not found`);
}
}
}
main().catch(console.error);Salida esperada
Local SEO Report: Joe's Coffee in Austin, TX
==================================================
coffee shop: Position #3, Score: 75/90
rating: 4.7/5 (excellent)
reviews: 234
website: present
phone: present
best coffee: Position #5, Score: 65/90
cafe near me: Not found in local results