Date: 2026-04-28
Owner: Cinder (autonomous after Costa greenlight)
Goal: Continuously improve organic + AI-Overview citations across all 29 sites without Costa in the loop.
| Cron | What it does | Action surface |
|---|---|---|
gsc-weekly-pull (Mon 11:00) | Pulls 28d clicks/impressions/CTR/position per site | JSON + Telegram digest |
gsc-striking-distance (daily) | Identifies queries in pos 4-20 (one-content-push-from-ranking) + risers/fallers | JSON + Telegram digest |
ga4-feedback-loop (daily) | Sessions + conversions per site | JSON + Telegram digest |
thin-content-dryrun (daily) | Identifies pages under 700 words | DRY-RUN ONLY — no fixes |
indexnow-daily (daily) | Pings IndexNow for crawl signals | 27/29 succeed (Orlando + Bloomington 403) |
innovation-sprint (Mon 06:00) | Weekly research digest covering Google updates, AI Overview shifts, R&R industry, competitor moves | Telegram |
The gap: Every loop is one-way. Signal → report → done. Nothing closes back to action.
Trigger: Query falls 3+ positions in gsc-striking-distance daily run.
Action: Enqueue (domain, page, query, current_pos, prior_pos) to data/action-queue/seo-refresh.jsonl.
Worker (tools/seo-refresh-worker.py, runs nightly 02:30):
data/action-queue/seo-refresh-completed.jsonlTrigger: Page identified by thin-content-dryrun AND has GSC impressions but 0 clicks (= ranking but not converting).
Action: Same as Loop 1, except prompt focuses on E-E-A-T expansion (case studies, FAQ, pricing transparency).
Safety rails:
services/, locations/, blog/*. Never touch contact, privacy, terms.Trigger: Weekly innovation-sprint pulls competitor SERP samples + AI Overview snippets for top-10 queries per site.
Action:
data/geo-wins.jsonlgeo-optimize skill)Schema deployment:
FAQPage schema to any page with H2/H3 question patternsLocalBusiness schema to all locations/* pagesService schema to all services/* pagesTrigger: Page with rising impressions but flat clicks (CTR drop).
Action: Auto-add 2-3 contextual internal links FROM higher-authority pages on the same site TO the rising page. Concentrates link equity.
Trigger: Any of Loop 1/2/3/4 ships a page edit.
Action:
data/gsc-submit-queue.jsonl for Playwright + Chrome user-data-dir relay (per docs/gsc-relay-options-2026-04-28.md, Option 1)GEO = Generative Engine Optimization (ChatGPT, Perplexity, Claude, Google AI Overviews).
| Traditional SEO | GEO addition |
|---|---|
| Keywords in title/H1 | Q&A blocks matching how users ask AI assistants |
| Backlinks for authority | Mentions on authoritative third-party content (Wikipedia, industry directories, .gov, .edu) |
| Schema for rich snippets | Schema for fact-extraction (Product, Service, FAQ, HowTo, BreadcrumbList) |
| Page speed | Crawlable structured facts above the fold |
| Title CTR | Direct answer in first 60 words |
Each site gets a per-page "AI-readability score" computed weekly:
Below 60/100: auto-queued for GEO-optimization rewrite via Loop 3.
For each site, query Perplexity/Claude API with:
Score: are we mentioned? In what position? With what description?
Track in data/geo-citations.jsonl over time. Trend = our GEO trajectory.
Build tools/site-health-dashboard.py (cron daily 06:30):
For each of 29 sites, write data/site-health/<domain>.json:
{
"domain": "elkhornhardwood.com",
"as_of": "2026-04-28",
"gsc_28d": { "clicks": 13, "impressions": 985, "ctr": 1.3, "position": 17.3 },
"ga4_7d": { "sessions": 24, "conversions": 1 },
"twilio_7d": { "real_calls": 0, "spam_calls": 0 },
"thin_pages": 3,
"ai_readability": 52,
"geo_citations_30d": 0,
"queued_actions": [
{"type": "seo-refresh", "page": "services/refinishing", "reason": "fall -3.4 pos"},
{"type": "thin-expand", "page": "locations/papillion", "current_words": 312}
],
"trend": "stable"
}
Surfaced in morning brief as a single 5-row exception report:
> Site health alerts (3):
> - elkhornhardwood.com — 0 calls 7d, 24 GA4 sessions, 2 actions queued for tonight
> - phxpoolresurfacing.com — fallers detected on 3 queries, refresh queued
> - orlandoconcretedriveway.com — IndexNow 403 7 days running, key needs regenerated
| Tonight (overnight-v7) | Tomorrow | Day 3 | Week 2 |
|---|---|---|---|
| Build action-queue/seo-refresh.jsonl + worker | Wire striking-distance → queue (Loop 1) | Wire thin-content live mode (Loop 2) on services/* whitelist | Loop 3 (AI Overview citation tracking) |
| Fix IndexNow 403s on Orlando + Bloomington | Build site-health-dashboard.py + cron | First 5 Loop 1/2 runs Costa-reviewed | Loop 4 + Loop 5 wiring |
| Patch 4 wrong-tel: numbers (DONE earlier today) | Greenlight Loop 1 production | Greenlight Loop 2 production | GEO citation tracker live |
Costa input required ONLY at:
gsc-relay-options-2026-04-28.md)After greenlight, all 5 loops run autonomously. Telegram morning brief surfaces exceptions only.
Once:
Ongoing (weekly, ~5 min):
That's it. Everything else is mine.