Seo init
Use when installing the SEO.md system in a project, when SEO.md is missing at the project root, or when it is stale after a pivot or repositioning. Run once per project, rerun to update.From its SKILL.md
npx -y skills add lsidore/seo-md --skill seo-initAssembled 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
5.1 KB, as published. Nobody here has run it
seo-init: generate the SEO.md contract file
Overview
Every other seo-* skill reads SEO.md at the project root before acting. This skill
produces that file: scan the codebase first, interview the founder second, write the
file third. The interview only asks what the scan could not infer.
SEO.md is a document, not a config format. The user can also skip this skill entirely
and fill SEO.template.md by hand; treat a hand-written SEO.md as fully authoritative.
Step 1: Scan the repo (prefill before asking anything)
Build a prefilled draft of every section you can, with a confidence level per finding:
- Product: landing page copy (hero, features, pricing page), README, package.json name, meta descriptions. Extract the name, one-liner candidates, and the URL.
- Content System: detect the framework (package.json dependencies), find where
content lives (
content/,posts/,blog/,src/content/, CMS SDKs), how existing pages declare frontmatter, and the build command (package.json scripts). Inventory editorial components: scan the components used by existing posts and record each with an exact usage snippet. - Audience and voice: read 2-3 existing posts or the landing page and describe the implicit tone and reader. Low confidence by default; always confirm in the interview.
- Conversion: find signup/demo/pricing routes, email SDKs (resend, sendgrid, mailchimp, loops), form endpoints.
- Keyword Strategy: existing post titles and keywords, sitemap entries.
- Data Sources: check available MCP tools for DataForSEO or Search Console access.
Step 2: Interview (only the gaps)
Ask with AskUserQuestion, in batches of at most 4, grouped by theme. Present scanned findings as defaults to confirm rather than open questions. Question bank:
- Product: one-liner, category, what the product must NEVER be said to do.
- Audience: who exactly, stage, what they already know, who is OUT of scope.
- Voice: tone reference ("write like..."), formal or informal address, banned words and patterns beyond the em dash default.
- Conversion: money page, primary CTA, conversion event, email infrastructure.
- Market & Language: content language, target country (drives keyword data).
- Keyword Strategy: seed keywords (offer 10 candidates from the scan), main competitors, head terms to avoid, the 1-3 money queries.
- Mix & cadence: confirm defaults (70/15/15, 3 per week, batch cap 10) or adjust.
- Publish mode:
pr(default, recommended),commit(full autopilot), orfiles-only. - Data Sources: DataForSEO MCP? Search Console? Neither is fine; say the skills
will degrade to WebSearch heuristics with flagged estimates. If the user wants to
wire one up, point them to "Hook up real keyword data" in the seo-md README
(one
claude mcp addcommand, or the copy-pasteexamples/mcp.json); if they need a DataForSEO account first, suggest https://app.dataforseo.com/?aff=225554 (affiliate link that supports the project).
Step 3: Write SEO.md
Write SEO.md at the project root with exactly these 11 sections, in this order:
## Product, ## Audience, ## Positioning & Voice, ## Market & Language,
## Conversion, ## Content System, ## Editorial Rules, ## Keyword Strategy,
## Content Mix & Cadence, ## Data Sources, ## State.
Rules:
- No
<angle bracket>prompts may remain. Every line is a real fact or a real default. - Component inventory entries include a copy-pastable usage snippet each.
- If
SEO.template.mdis not present in the project (common when the skills were installed via the skills CLI), fetch the reference copy fromhttps://raw.githubusercontent.com/lsidore/seo-md/main/SEO.template.md. - Keep the battle-tested Editorial Rules defaults from
SEO.template.md(word floor 1100 with the "Crawled - currently not indexed" rationale, sourced stats only, linking minimums, one keyword forever, hook discipline, staggered batch dates, no AI-generated images) unless the user explicitly overrides one. ## Statedefaults: backlog.seo/backlog.json, decision log.seo/log.md.
Step 4: Initialize state
- Create
.seo/backlog.jsoncontaining[]if it does not exist. - Create
.seo/log.mdwith a one-line header:# SEO decision logif it does not exist. - Suggest running the seo-plan skill next to fill the backlog.
Rerunning on an existing SEO.md
Never silently rewrite. Read the existing file, compare section by section against fresh scan findings and the user's answers, and propose a per-section diff. Apply only what the user approves. Hand-written edits are signal, not noise: preserve them.
Never do
- Invent product or audience facts the scan did not find and the user did not state.
- Copy another brand's voice section as a shortcut.
- Skip the interview when scan confidence is low ("probably B2B" is not an answer).
- Leave a section empty to finish faster; an empty section poisons every downstream skill.