{
  "$comment": "Cada cifra citada en case-study.tr.md se registra aquí con su fuente. Regenerable: ver 'reproduce'. Nada se cita desde summary.md; todas las series GSC se recomputan desde data/seo/raw/<run>/gsc/date.json.",
  "generatedAt": "2026-09-05",
  "studyWindow": { "from": "2026-04-22", "to": "2026-08-22" },
  "reproduce": {
    "gscSeries": "node -e 'const d=require(\"./data/seo/raw/<run>/gsc/date.json\"); ...' — sumar clicks e impressions sobre todas las filas; CTR = clicks/impressions; posición = media ponderada por impresiones.",
    "radiografia": "node scripts/seo/anonymize-radiografia.mjs  → docs/case-study-avangard/radiografia-dataset.anon.json"
  },
  "caveats": [
    "Las ventanas GSC son solapadas y de 26-27 días efectivos, no 28: Search Console tiene retraso de datos. wave9 (05-31 jul) y wave10 (21 jul-15 ago) comparten 11 días.",
    "Volumen absoluto bajo (25-49 clics / ventana). Ninguna diferencia individual es estadísticamente significativa; el valor está en la dirección sostenida a lo largo de 6 ventanas.",
    "Todas las cifras GSC son GSC-only. Bing se excluye deliberadamente: summary.md fusiona ambos motores desde wave8 y esas filas no son comparables con la línea base.",
    "No se reportan tasas de conversión: no existe export de GA4 en el repositorio y el volumen sería insuficiente para concluir."
  ],
  "gsc": [
    { "run": "smoke-https",  "window": "2026-04-22/2026-05-18", "days": 27, "clicks": 32, "impressions": 3400, "ctrPct": 0.94, "positionWeighted": 12.3, "clicksPer1kImpr": 9.4,  "engine": "gsc-only", "source": "data/seo/raw/smoke-https/gsc/date.json" },
    { "run": "wave4-28d",    "window": "2026-06-01/2026-06-26", "days": 26, "clicks": 49, "impressions": 5418, "ctrPct": 0.90, "positionWeighted": 10.8, "clicksPer1kImpr": 9.0,  "engine": "gsc-only", "source": "data/seo/raw/wave4-28d/gsc/date.json" },
    { "run": "wave8-28d",    "window": "2026-07-01/2026-07-27", "days": 27, "clicks": 31, "impressions": 3666, "ctrPct": 0.85, "positionWeighted": 13.3, "clicksPer1kImpr": 8.5,  "engine": "gsc-only", "source": "data/seo/raw/wave8-28d/gsc/date.json" },
    { "run": "wave9-28d",    "window": "2026-07-05/2026-07-31", "days": 27, "clicks": 25, "impressions": 3456, "ctrPct": 0.72, "positionWeighted": 12.9, "clicksPer1kImpr": 7.2,  "engine": "gsc-only", "source": "data/seo/raw/wave9-28d/gsc/date.json" },
    { "run": "wave10-28d",   "window": "2026-07-21/2026-08-15", "days": 26, "clicks": 43, "impressions": 3213, "ctrPct": 1.34, "positionWeighted": 15.7, "clicksPer1kImpr": 13.4, "engine": "gsc-only", "source": "data/seo/raw/wave10-28d/gsc/date.json" },
    { "run": "wave11-28d",   "window": "2026-07-28/2026-08-22", "days": 26, "clicks": 42, "impressions": 3174, "ctrPct": 1.32, "positionWeighted": 17.0, "clicksPer1kImpr": 13.2, "engine": "gsc-only", "source": "data/seo/raw/wave11-28d/gsc/date.json" }
  ],
  "headlineClaims": [
    { "claim": "Impresiones -41% (5.418 -> 3.174)", "from": "wave4-28d", "to": "wave11-28d", "verified": true },
    { "claim": "Posición media empeora 10,8 -> 17,0", "from": "wave4-28d", "to": "wave11-28d", "verified": true, "note": "Media ponderada por impresiones, recomputada desde raw." },
    { "claim": "CTR 0,72% -> 1,32% (+83%)", "from": "wave9-28d", "to": "wave11-28d", "verified": true, "note": "Sostenido en dos ventanas consecutivas (wave10 1,34%, wave11 1,32%), no un pico único." },
    { "claim": "Clics por 1.000 impresiones 9,0 -> 13,2 (+47%)", "from": "wave4-28d", "to": "wave11-28d", "verified": true },
    { "claim": "Clics casi sostenidos (49 -> 42, -14%) con 41% menos impresiones", "from": "wave4-28d", "to": "wave11-28d", "verified": true },
    { "claim": "Páginas con impresiones 59 -> 49; con clics 15 -> 12", "from": "wave4-28d", "to": "wave11-28d", "verified": true, "source": "data/seo/raw/<run>/gsc/page.json" }
  ],
  "failures": [
    { "claim": "Caída de clics -37% (49 -> 31) entre wave4 y wave8", "source": "data/seo/reports/runs/wave8-28d/wave5-7-measurement.md", "verified": true, "note": "Recomputado GSC-only: 49 -> 31 confirmado desde raw." },
    { "claim": "7 de 8 páginas nuevas de waves 6-7 con cero impresiones", "source": "data/seo/reports/runs/wave8-28d/wave5-7-measurement.md", "verified": "documental" },
    { "claim": "La consolidación de 'diseño web' no redirigió: Netlify sirve el archivo exportado antes que una regla _redirects sin force", "source": "memoria de proyecto wave9 + data/seo/reports/runs/wave9-28d/wave8-measurement.md", "verified": "documental" },
    { "claim": "Canibalización en el cluster SEO, incluida una página en posición 1 con 0 clics", "source": "wave10 — data/seo/reports/runs/wave10-28d/", "verified": "documental" }
  ],
  "radiografia": {
    "runId": "radiografia-2026q3",
    "source": "data/audits/radiografia-2026q3/{sample,sites,aggregate}.json",
    "regenerate": "scripts/seo/audit-sample.mjs + scripts/seo/audit-run.mjs",
    "businesses": 99,
    "rubros": 10,
    "withVerifiedWebsite": 55,
    "websiteSharePct": 56,
    "sitesRowsPublished": 52,
    "reachable": 48,
    "unreachable": 4,
    "lighthouseCompleted": 47,
    "lcpSampleSize": 44,
    "medianLcpMs": 11002,
    "minLcpMs": 1341,
    "maxLcpMs": 37129,
    "lcpGoodUnder2500": 1,
    "lcp2500to4000": 4,
    "lcpOver4000": 39,
    "lcpOver10000": 24,
    "lcpOver20000": 8,
    "medianPerformance": 62,
    "performanceUnder50": 5,
    "performanceOver90": 3,
    "httpsPct": 100,
    "viewportPct": 100,
    "titlePct": 98,
    "metaDescriptionPct": 79,
    "h1Pct": 63,
    "schemaPct": 60,
    "whatsappPct": 46,
    "rubroExtremes": {
      "bodegas": { "websiteSharePct": 100, "medianLcpMs": 13986 },
      "veterinarias": { "websiteSharePct": 30, "medianLcpMs": 18775 },
      "talleres": { "websiteSharePct": 0, "medianLcpMs": null },
      "contadores": { "websiteSharePct": 60, "medianLcpMs": 5357 }
    },
    "dataQualityNote": "1 de 52 filas no pudo asociarse a un rubro por diferencia de host tras redirección; se publica como 'desconocido'."
  },
  "performance": [
    { "claim": "next/font con arrays de weight generaba 13 archivos woff2, 5 precargados (~196 KB) antes de un LCP de texto", "source": "components/layouts/BaseLayout.tsx (comentario en código) + commit 6ea90a5", "verified": "documental" },
    { "claim": "Migración a fuentes variables (Fraunces + Inter_Tight, display swap, subset latin) reduce a 2 archivos", "source": "components/layouts/BaseLayout.tsx:17-33", "verified": true },
    { "claim": "LCP 8,2 s frente a FCP 2,0 s en móvil throttled por un párrafo animado desde opacity 0; página comparable sin Framer Motion 4,0 s", "source": "commit e1babf5", "verified": "documental" },
    { "claim": "Corrección: animar sólo 'y' (los transforms sí pintan); además reparó un párrafo invisible para usuarios con reduced-motion", "source": "commit e1babf5", "verified": "documental" }
  ],
  "architecture": {
    "pageFiles": 83,
    "localLandingPages": 19,
    "sharedLocalComponent": "components/LocalLandingPage.tsx",
    "toolPages": 7,
    "dynamicRoutes": ["app/(es)/servicios/[slug]", "app/(en)/en/servicios/[slug]", "app/(es)/blog/categoria/[slug]"],
    "englishSubsetPages": 5,
    "routeConfig": "lib/seo/route-seo-config.ts",
    "localePolicy": "lib/seo/locale-route-policy.ts",
    "schemaBuilder": "lib/seo/schemas.ts",
    "analytics": { "ga4": "components/layouts/BaseLayout.tsx", "gtm": "components/layouts/BaseLayout.tsx", "funnel": "lib/analytics/funnel-events.ts" },
    "funnelEvents": ["primary_cta_click", "whatsapp_click", "contact_click", "form_submit", "tool_complete"],
    "pricingSourceOfTruth": "lib/web-pricing.ts",
    "pricingScopeCaveat": "Fuente única sólo para proyectos web. lib/currency.ts mantiene otra tasa de referencia (1500 vs 1520), por lo que NO se afirma 'fuente única en todo el sitio'.",
    "dataforseoResearchSpendUsd": 0.57948
  }
}
