# scripts/seo — Investigación y monitoreo SEO (sysfarma.pe)

Pipeline propio, gratis, sin navegador ni scraping frágil. Reemplaza pagar Ahrefs para
descubrir keywords y monitorear posicionamiento. Node ≥18 (usa `fetch` nativo).

## Scripts

| Script | Qué hace | Fuente |
|---|---|---|
| `keyword-harvest.mjs` | Descubre long-tail (autocompletado real de Google PE) | Google Autocomplete (sin auth) |
| `gsc-crossref.mjs` | Cruza el harvest con GSC → clusters + "ya rankea" vs "whitespace" | GSC API + harvest |
| `gsc-report.mjs` | Snapshot performance: totales vs mes previo + top + striking distance | GSC API |

## Uso

```bash
# 1) Descubrir keywords nuevas (seeds informacionales por defecto)
node scripts/seo/keyword-harvest.mjs
#    o con seeds propios:
node scripts/seo/keyword-harvest.mjs "control de vencimientos" "cadena de frio medicamentos"

# 2) Cruzar con GSC → dónde hay demanda probada y dónde hay hueco de contenido
node scripts/seo/gsc-crossref.mjs

# 3) Snapshot de posicionamiento (correr cuando quieras medir)
node scripts/seo/gsc-report.mjs
```

Los `.json` intermedios van a `scripts/seo/out/` (ignorado por git).

## Configuración GSC (OAuth)

Los scripts leen el token de Google Search Console. Paths por defecto (override por env var):

| Env | Default | |
|---|---|---|
| `GSC_TOKEN_PATH` | `C:/Users/Sistemax/Documents/gsc-token.json` | token OAuth (con refresh_token) |
| `GSC_CLIENT_PATH` | `C:/Users/Sistemax/Documents/gsc-oauth-client.json` | credenciales OAuth client |
| `GSC_SITE` | `sc-domain:sysfarma.pe` | propiedad GSC |
| `GSC_END` | hoy − 3 días | fin de la ventana de 28 días (GSC tiene ~2-3d de lag) |

**Si el token da `invalid_grant`** (vence / se revoca) → re-autorizar:
```bash
GOOGLE_GSC_CREDENTIALS_PATH=C:/Users/Sistemax/Documents/gsc-oauth-client.json \
GOOGLE_GSC_TOKEN_PATH=C:/Users/Sistemax/Documents/gsc-token.json \
npx -y mcp-gsc setup
```
Abre el consent en el navegador (server local `localhost:9876/callback`) y regenera el token.
La app OAuth está publicada en "Production" (proyecto GCP `sysfarma-gsc-reader`) → el token no debería vencer a los 7 días.

## Agendar (opcional)

Correr semanal para vigilar movimiento y keywords nuevas. Ejemplo con Task Scheduler (Windows) o cron:
```bash
# Lunes 8am: harvest + crossref + report a un log fechado
node scripts/seo/keyword-harvest.mjs && node scripts/seo/gsc-crossref.mjs > scripts/seo/out/report-$(date +%F).txt
node scripts/seo/gsc-report.mjs >> scripts/seo/out/report-$(date +%F).txt
```

## Notas

- El MCP `gsc` (en `.mcp.json`) tiene tools equivalentes (`opportunity_finder`, `quick_wins`,
  `content_decay`, `weekly_seo_report`), pero **cachea el token viejo** al arrancar → estos scripts
  directos con token fresco son más confiables.
- Estrategia de contenido y hallazgos: ver `docs/seo/AUDITORIA-SEO-2026-06-30.md`.
- La cabeza comercial en Perú (`software/sistema para farmacia`) es **<100 vol/mes**: el volumen real
  es **informacional** (FEFO/BPA/DIGEMID/vencimientos). Priorizar contenido whitespace, no landings comerciales.
