Las empresas de SaaS en etapa inicial necesitan tráfico orgánico, pero no pueden permitirse el lujo de escribir cientos de páginas manualmente. El SEO programático genera páginas orientadas a palabras clave a escala combinando datos de búsqueda con plantillas. El enfoque funciona especialmente bien para páginas de comparación, directorios de funciones y listados de integración. Este tutorial muestra cómo utilizar datos SERP de la API de Scavio para identificar palabras clave de cola larga, validar la demanda y generar páginas dirigidas a consultas de búsqueda reales. Construirás un canal que produce docenas de páginas SEO a partir de una única lista inicial de palabras clave.
Requisitos previos
- Python 3.8+ instalado
- solicita biblioteca instalada
- Una clave API de Scavio de scavio.dev
- Un producto SaaS con funciones o integraciones definidas
Guia paso a paso
Paso 1: Descubrimiento de palabras clave iniciales
Utilice People Also Ask y búsquedas relacionadas para ampliar sus palabras clave iniciales a objetivos de cola larga.
import os, requests
API_KEY = os.environ["SCAVIO_API_KEY"]
def expand_keywords(seed):
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": seed})
data = resp.json()
paa = [q.get("question","") for q in data.get("people_also_ask", [])]
related = [r.get("query","") for r in data.get("related_searches", [])]
return {"seed": seed, "paa": paa, "related": related}
result = expand_keywords("crm for startups")
print(f"Found {len(result['paa'])} PAA + {len(result['related'])} related")Paso 2: Validar la demanda de palabras clave
Verifique cada palabra clave candidata para conocer el nivel de competencia y las lagunas de contenido.
def validate_keyword(keyword):
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": keyword})
data = resp.json()
results = data.get("organic_results", [])[:10]
weak_results = sum(1 for r in results
if len(r.get("snippet","")) < 50 or "reddit.com" in r.get("link",""))
return {
"keyword": keyword,
"competition": "low" if weak_results >= 3 else "medium" if weak_results >= 1 else "high",
"has_aio": bool(data.get("ai_overview")),
}Paso 3: Generar datos de página
Cree datos estructurados para cada página utilizando los resultados de búsqueda como enriquecimiento del contenido.
def generate_page(keyword, template_type="comparison"):
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": keyword})
data = resp.json()
return {
"slug": keyword.lower().replace(" ", "-"),
"title": keyword.title(),
"type": template_type,
"top_results": [{"title": r["title"], "url": r.get("link","")}
for r in data.get("organic_results", [])[:5]],
"questions": [q.get("question","") for q in data.get("people_also_ask", [])],
}Paso 4: Generar páginas por lotes
Procese todas las palabras clave validadas y los datos de la página de salida para su motor de plantillas.
import json
seeds = ["crm for startups", "project management for freelancers"]
all_keywords = []
for seed in seeds:
expanded = expand_keywords(seed)
all_keywords.extend(expanded["paa"][:3])
all_keywords.extend(expanded["related"][:3])
pages = []
for kw in all_keywords:
v = validate_keyword(kw)
if v["competition"] != "high":
pages.append(generate_page(kw))
with open("programmatic_pages.json", "w") as f:
json.dump(pages, f, indent=2)
print(f"Generated {len(pages)} pages from {len(all_keywords)} keywords")Ejemplo en Python
import os, requests
API_KEY = os.environ["SCAVIO_API_KEY"]
def expand(seed):
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": seed})
d = resp.json()
paa = [q.get("question","") for q in d.get("people_also_ask",[])]
related = [r.get("query","") for r in d.get("related_searches",[])]
return paa + related
for kw in expand("crm for startups"):
print(kw)Ejemplo en JavaScript
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};
async function expand(seed) {
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({platform: "google", query: seed})
});
const d = await r.json();
const paa = (d.people_also_ask||[]).map(q=>q.question);
const rel = (d.related_searches||[]).map(r=>r.query);
return [...paa, ...rel];
}
expand("crm for startups").then(kws => kws.forEach(k => console.log(k)));Salida esperada
A programmatic SEO pipeline that discovers long-tail keywords, validates demand, and generates page data for template-based content at scale.