OpenClaw SEO-GEO Workflow
This is the controlling runbook for Ray's OpenClaw SEO-GEO daily workflow. It coordinates Hunter discovery, Tony content production, the 12-post SEO/GEO factory, Peter publish/build/live QA, and daily SEO patrol for ClawLite/OpenClaw marketing.
Use this skill as the first stop. Do not invent a parallel workflow. The source of truth is the deterministic scripts and receipts under /Users/m1/.openclaw/workspace.
Default Stance
- Receipt first, then claims. Inspect durable JSON/Markdown receipts before saying a workflow passed, failed, published, or used a skill.
- Local staging is not production publishing.
STAGED_LOCAL, Peter local build success, and source publish are not live deployment. - Production publish claims require deploy evidence plus live QA.
- Monitor/ranking/backlink/AI-citation claims require connector or live patrol data.
- Missing live dependencies should degrade to explicit
SKIPPED,NEEDS_DATA, orPASS_WITH_WARNINGS, not silent success. - Never let the legacy
/Users/m1/Projects/clawliteproject take overclawlite.aiproduction aliases unless Ray explicitly asks. - Never write into
/Users/m1/Projects/clawlite/content/blogfrom chat-triggered workflow runs unless Ray explicitly asks for main-site local apply and the command uses--allow-main-site-write.
Main Commands
Run from /Users/m1/.openclaw/workspace.
Full daily workflow, recommended default:
node scripts/run-hunter-tony-seo-geo-workflow.mjs --date YYYY-MM-DD
Factory-only workflow:
node scripts/run-daily-seo-geo-blog-factory.mjs --date YYYY-MM-DD
Safe full workflow with no live deploy:
node scripts/run-hunter-tony-seo-geo-workflow.mjs \
--date YYYY-MM-DD \
--peter-skip-live-deploy \
--peter-skip-live-qa
Protected main-site local apply requires an explicit override. Do not add this flag unless Ray asked to modify the main ClawLite repo:
node scripts/run-clawlite-publish-apply.mjs \
--date YYYY-MM-DD \
--allow-main-site-write
Live deploy path requires explicit evidence:
node scripts/run-hunter-tony-seo-geo-workflow.mjs \
--date YYYY-MM-DD \
--peter-allow-live-deploy \
--peter-deploy-command "npm exec -- vercel deploy --prod --prebuilt" \
--peter-deploy-evidence-path /path/to/deploy-evidence.json \
--peter-live-qa-base-url https://clawlite.ai
Environment equivalents:
CLAWLITE_PETER_DEPLOY_COMMANDCLAWLITE_PETER_DEPLOY_EVIDENCE_PATHCLAWLITE_PETER_SKIP_LIVE_DEPLOY=1OPENCLAW_SEO_PATROL_MODE=liveDATAFORSEO_B64
Role Boundaries
- Hunter: topic radar, multi-source discovery, keyword opportunity scouting, raw scouting receipts, durable wiki handoff briefs, and 14-30 day dedupe.
- Tony: keyword briefs, SEO/GEO drafts, quality audit, preflight, and source-ready delivery. Tony does not claim live production publication.
- Factory: creates the daily 12-post SEO/GEO package, phase receipts, manifests, repairs, and local publish artifacts.
- Peter: ClawLite publish apply, build QA, optional live deploy, live QA, canonical safety, and closeout.
- Patrol: post-publish and daily visibility checks for SERP/indexing,
llms.txt, GA4, canonical/cannibalization, locale paths, and rescue signals.
Required Phase Matrix
Every generated article should have receipts for:
- Research:
keyword-research,competitor-analysis,serp-analysis,content-gap-analysis - Build:
seo-content-writer,geo-content-optimizer,meta-tags-optimizer,schema-markup-generator - Optimize:
on-page-seo-auditor,technical-seo-checker,internal-linking-optimizer,content-refresher - Monitor:
rank-tracker,backlink-analyzer,performance-reporter,alert-manager - Cross-cutting:
content-quality-auditor,domain-authority-auditor,entity-optimizer,memory-management
Monitor receipts may be NEEDS_DATA until live URLs, rank provider data, analytics, and backlink data exist.
Receipt Map
Core daily receipts:
mission-control/data/runner/hunter-tony-seo-geo-YYYY-MM-DD.jsonmission-control/data/runner/hunter-daily-topic-delivery-YYYY-MM-DD.jsonmission-control/data/runner/clawlite-publish-apply-build-YYYY-MM-DD.jsonmission-control/data/content-delivery/hunter-daily-topic-radar-raw-YYYY-MM-DD.jsonmission-control/data/content-delivery/hunter-daily-topics-YYYY-MM-DD.jsonmission-control/data/content-delivery/tony-keyword-brief-YYYY-MM-DD.jsonmission-control/data/content-delivery/tony-content-quality-audit-YYYY-MM-DD.jsonmission-control/data/content-delivery/tony-blog-preflight-YYYY-MM-DD.jsonmission-control/data/content-delivery/tony-blog-source-publish-YYYY-MM-DD.jsonmission-control/data/peter/peter-blog-closeout-verify-YYYY-MM-DD.jsonmission-control/data/peter/peter-live-publish-qa-YYYY-MM-DD.jsonmission-control/data/seo-patrol/gr-seo-patrol-YYYY-MM-DD.jsonmission-control/data/seo-patrol/gr-seo-patrol-YYYY-MM-DD.md
Daily package outputs:
delivery/seo-geo/YYYY-MM-DD/manifest.mddelivery/seo-geo/YYYY-MM-DD/manifest.jsondelivery/seo-geo/YYYY-MM-DD/blogs/delivery/seo-geo/YYYY-MM-DD/metadata/delivery/seo-geo/YYYY-MM-DD/audits/delivery/seo-geo/YYYY-MM-DD/skills/<phase>/<skill>/delivery/seo-geo/YYYY-MM-DD/repairs/delivery/seo-geo/YYYY-MM-DD/publish/clawlite-content/synthadoc/wiki/*hunter-daily-topic*
Operating Loop
- Identify target date. Default to today only when Ray did not provide a date.
- Read the runner receipt first:
mission-control/data/runner/hunter-tony-seo-geo-YYYY-MM-DD.json. - If the runner receipt is missing and Ray asked to run delivery, run the full daily command.
- Inspect Hunter raw radar and durable topic delivery before judging topic selection.
- Inspect
delivery/seo-geo/YYYY-MM-DD/manifest.mdandmanifest.jsonbefore judging article readiness. - Check
repairSummary,skillPipeline,publishQueue,deploy,patrol, and Peter closeout. - If any article has
humanReviewRequired > 0, inspectrepairs/and failed skill receipts before editing. - If Peter/local build passed but live deploy was skipped, say staged/build passed, not published.
- If live deploy ran, verify deploy evidence and
peter-live-publish-qa. - Treat overall workflow as not fully green until patrol blockers are cleared.
Status Meanings
READY: publish-queue eligible.BLOCKED: at least one blocking gate failed.PASS: a required step completed successfully.FAIL: a blocking step failed and needs repair or human review.NEEDS_DATA: non-blocking monitor step is waiting for live URL or connector data.PASS_WITH_WARNINGS: delivery may continue, but connector data or non-blocking checks are missing.STAGED_LOCAL: source files or local repo changes were prepared; production publication is not proven.SKIPPED: a step intentionally did not run and must include a reason.
Gates
An article can enter publish queue only when:
- all blocking Research, Build, Optimize, and Cross-cutting receipts are
PASS - draft audit status is
PASS - audit score is at least
90 - repair status is
NOT_NEEDEDorREPAIRED - no blocking skill receipt has
FAIL
If a blocking gate fails:
- Mark the article
BLOCKED. - Map audit failures to failed skills.
- Write
delivery/seo-geo/YYYY-MM-DD/repairs/<article>.json. - Repair only the failed surface: structure, word count, keyword placement, internal links, meta, or schema.
- Rerun failed skill and downstream receipts.
- Queue only if final audit reaches
PASSand score>= 90. - If repair is disabled or still fails, mark failed blocking receipts
FAILwithhumanReviewRequired: true.
Common Diagnostics
"The blog did not publish"
Check in order:
mission-control/data/runner/hunter-tony-seo-geo-YYYY-MM-DD.jsondelivery/seo-geo/YYYY-MM-DD/manifest.mdmission-control/data/runner/clawlite-publish-apply-build-YYYY-MM-DD.jsonmission-control/data/peter/peter-blog-closeout-verify-YYYY-MM-DD.jsonmission-control/data/peter/peter-live-publish-qa-YYYY-MM-DD.json- Live URL and sitemap only after Peter live QA exists.
Report the exact stage: Hunter, Tony, Factory, Peter local apply/build, live deploy, live QA, or patrol.
"Did you use the SEO/GEO skill?"
Check delivery/seo-geo/YYYY-MM-DD/skills/ and manifest.json. The expected skill family is seo-geo-claude-skills, with article-level receipts for the phase matrix. Do not answer from memory.
"Daily workflow is stuck"
Check:
- OpenClaw logs:
/Users/m1/.openclaw/logs/*.log - LaunchAgents:
launchd/ai.openclaw.daily-seo-geo-blog-factory.plist - runner receipt freshness under
mission-control/data/runner/ - active OpenClaw sessions if the task was triggered through Feishu/Discord/Telegram
If a chat-triggered task timed out, use the receipts to determine whether work completed after the chat reply failed.
Patrol blockers
Known examples:
GA4_TAG_MISSING: Peter/build/live site issue. Verify built layout and live HTML.DATAFORSEO_B64_MISSING: connector/env issue. Configure env/Keychain before rank/index checks can be complete.- locale
/en/,/ja/,/ko/404 or redirect warnings: usually non-blocking unless Ray wants locale pages live. - no top-100 keyword hits: monitor finding, not a publish blocker by itself.
Production alias safety
If clawlite.ai shows old Mission Control or /mission-control unexpectedly returns 200, suspect the legacy Vercel project clawlite reclaimed the alias. Restore to the verified safe ClawLite main deployment before claiming live success.
Patrol and Rescue Routing
- new top-30 long-tail opportunity -> Hunter
- title/body/internal-link decay -> Tony
- canonical, live URL, build, deploy, alias, sitemap, or GA4 issue -> Peter
- missing connector or API credential -> environment/config maintenance
Every daily run should produce a gr-seo-patrol receipt. Patrol checks include SERP rank diff when DATAFORSEO_B64 exists, Google index count when supported, llms.txt, GA4, canonical/cannibalization, rescue signals, rank-tracking slots, and redirect-aware locale checks.
Related Skills and References
ray-tony-seo-geo: use for single-article Tony keyword/content/audit/source-publish work.gr-seo-patrol: use for focused patrol/rescue work./Users/m1/seo-geo-claude-skills: upstream SEO/GEO phase skill library.references/clawlite-seo-geo-workflow.md: workflow reference notes.