Seo run
Use as the single entry point of the SEO.md system, the command to invoke on a schedule (cron, GitHub Action, scheduled agent). Decides and executes exactly one content action per run.From its SKILL.md
npx -y skills add lsidore/seo-md --skill seo-runAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
3.0 KB, as published. Nobody here has run it
seo-run: decide and run the next best SEO action
Before anything
- Read
SEO.mdat the project root, in full. It is the only source of truth for product, audience, voice, rules, and paths. If it does not exist: stop and tell the user to run the seo-init skill (or fillSEO.template.mdby hand). - Never invent product or audience facts that are not in SEO.md.
- Default paths (overridable in SEO.md § State): backlog
.seo/backlog.json, decision log.seo/log.md.
Decision procedure (deterministic, in order)
- Read state: SEO.md, the backlog, and the decision log.
- Cadence guard: find the most recent
publishedAtacross backlogdoneentries and published content. If it is today, STOP: "already published today". Never double-publish a day. Also respect SEO.md § Content Mix & Cadence (e.g. at "3 per week", if 3 pieces shipped in the last 7 days, stop and say when the next slot opens). - Backlog health: count
todoentries. Under 20: invoke the seo-plan skill, then STOP for this run (refreshing the backlog IS the action; one action per run). - Inventory the published mix: count published pieces by
type(backlogdoneentries plus anything obvious in the content locations).glossarycounts in the programmatic bucket: the mix has three buckets (articles / tools / programmatic). Compute each bucket's actual share. - Pick the type: the type furthest BELOW its target share in SEO.md § Content Mix
& Cadence that has at least one
todotopic available. Tie-break: lowerprioritynumber first, then higher opportunity (strong intent, high volume, low difficulty). Worked example: targets 70/15/15, published 12 articles + 1 tool + 0 programmatic (shares 92%/8%/0%): programmatic is furthest below target; if no programmatic topic istodo, fall back to tool; if none either, article. - Invoke the matching skill via the Skill tool (or your agent's skill
mechanism):
seo-write(article),seo-tool(tool),seo-programmatic(programmatic or glossary). Exactly one. - Log the decision: append one line to
.seo/log.md:2026-07-07 | article | reduce-return-rate-shopify | articles 62% vs 70% target, top priority todo
Failure handling
If the invoked skill's quality gate fails, report the failure and STOP. Do not retry with a different topic in the same run: a failed gate is signal about the backlog or the rules, and burning through topics hides it.
Never do
- Two content actions in one run (a seo-plan refresh counts as the run's action).
- Bypassing a worker skill or its gate "because the decision is obvious".
- Inventing a topic when the backlog has none of the needed type: that is seo-plan's job.
- Editing SEO.md: the contract changes only via seo-init or the user's hand.