← ClaudeAtlas

refreshlisted

Upgrade an existing blog post — re-run SERP analysis against the current top 3, refresh stats from `stats.md`, fix any Tier 1 on-page SEO gaps, update internal links to recent content, refresh the `dateModified`. Preserves the original URL and primary keyword (no cannibalization). Use when the user types `/refresh` or asks to update an existing post.
mkreindel/seo-toolkit-template · ★ 0 · AI & Automation · score 70
Install: claude install-skill mkreindel/seo-toolkit-template
# `/refresh` — Existing-post refresher Upgrades an existing published blog post in place. Often higher-leverage than writing a new post — Google rewards freshness on existing-ranking content. ## Inputs Required: - **Site** — must match a folder under `sites/[name]/`. - **Post URL** — the live URL of the post to refresh. Optional: - **Refresh scope** — `light` (stats + internal links + `dateModified` only), `medium` (light + Tier 1 fixes + image upgrades), `heavy` (medium + section rewrites + new SERP analysis). Default: `medium`. - **Image source** — overrides default (only if scope includes image upgrades). ## Workflow ### Step 0 — Cron-mode detection (if invoked with `--cron`) If the invocation contains `--cron`, this skill runs in cron mode (no user available). Required behavior: 1. **Idempotency check:** see this skill's "Routine versioning + idempotency contract" section. If today's output already exists, exit cleanly with `exit: "idempotent-skip"`. Write one line to the audit log via `scripts/lib/audit-log.mjs` `appendRun({ exit: "idempotent-skip", ... })`. 2. **Escalation contract:** any decision that would normally prompt the user (missing required file, voice anti-AI failure, schema validation failure, keyword cannibalization, etc.) MUST be escalated by writing an item to `sites/{site}/_inbox/` via `scripts/lib/cron-mode.mjs` `writeInboxItem(...)`. After writing, exit cleanly with `exit: "escalated"`. Do NOT use `AskUserQuestion` in cron mode. 3. **Defaults