
SEO Metadata Pack
Generate a complete on-page SEO metadata pack for a set of pages: it first scopes each page's primary keyword and search intent and the length/format rules (title tag, meta description, Open Graph, Twitter card, slug), then writes optimized, unique metadata for every page that respects pixel/character limits and front-loads the keyword, producing a structured JSON file ready to drop into a CMS or templating layer. Covers SEO metadata, meta tags, title tags, meta descriptions, Open Graph tags, social cards, and on-page SEO. Scoping the keyword and limits per page before writing is the point: a small model that fixes the rules first produces unique, limit-respecting tags across the whole set, instead of duplicate titles and descriptions that get truncated in the SERP.
Steps
Entry step: scope. Each step names the specialist role it wants; the full working prompt is expandable.
- Metadata scopeplannerentry
lock per-page keyword/intent and the metadata field rules
Show working prompt
1) List the pages in scope; for EACH, identify its primary keyword/phrase and search intent in one line. 2) Lock the field schema and limits: title tag (50-60 chars, keyword near front, brand suffix policy), meta description (140-155 chars, includes keyword + a soft CTA), URL slug (lowercase, hyphenated, keyword-based), Open Graph (og:title, og:description, og:type), and Twitter card (card type, title, description). 3) Set the duplicate policy: every title and description must be UNIQUE across pages. Write an acceptance-criteria checklist (e.g. 'every page has all fields'; 'titles 50-60 chars, descriptions 140-155 chars'; 'primary keyword present and front-loaded in title'; 'no duplicate titles or descriptions across pages'; 'slugs are valid kebab-case'; 'OG/Twitter fields populated'). Use write_task_note for the per-page keyword map + field rules + checklist, and write the same to the produces path. No metadata yet.
- Write the metadatacopywriter
write unique, limit-respecting metadata for every page
Show working prompt
Write the metadata for EVERY page in scope to the locked schema. 1) For each page: a title tag (50-60 chars, primary keyword front-loaded, brand suffix per policy), a meta description (140-155 chars with the keyword and a soft CTA), a kebab-case slug, and the Open Graph + Twitter card fields. 2) Count characters for title and description and stay within range — do not exceed limits or they truncate in the SERP. 3) Ensure NO title and NO description is duplicated across pages. 4) Make each compelling and accurate to the page, not keyword-stuffed. 5) Output a single valid JSON array, one object per page: {"page", "title", "titleChars", "metaDescription", "descChars", "slug", "og": {"title","description","type"}, "twitter": {"card","title","description"}}. Save to the produces path and note the page count. - Evaluatereviewer
Grade the deliverable against every acceptance criterion. All pass → finish; any fail → loop back and fix the gap.
Show working prompt
Parse seo-meta.json (must be valid JSON) and grade against the checklist. Check EACH criterion and write PASS/FAIL: (a) every page in scope has an object with all fields populated; (b) titles are 50-60 chars and descriptions 140-155 chars (verify the char counts); (c) the primary keyword is present and front-loaded in each title; (d) no duplicate titles or descriptions across pages; (e) slugs are valid lowercase kebab-case; (f) OG and Twitter fields are populated. A pack with truncated, duplicate, or missing metadata FAILS — loop back to build and name the offending pages. Then route — this is the whole point of the loop: - **Every criterion PASSES →** call `advance_task_step({ ref, stepId: "evaluate", next: "finish" })`. - **Any criterion FAILS →** write the specific gaps to notes, then call `advance_task_step({ ref, stepId: "evaluate", next: "build" })` to loop back. The builder fixes exactly those gaps. Never route to `finish` while any criterion is unmet. The build phase's completion gate already blocked a grossly-incomplete deliverable; your job is the judgment an automated check cannot make (does it actually work, read well, look right). After ~3 unproductive loops, stop and report DONE_WITH_CONCERNS so the user can step in. - Finishdeveloper
All acceptance criteria met. Stamp a short summary and report DONE.
Show working prompt
Every acceptance criterion passed. Write a one-paragraph DONE summary to task notes via `write_task_note`: what was built, the deliverable path(s), and a one-line confirmation that each criterion is met. Then report DONE.
Triggers
Phrases that suggest this craftbook to a crew.
- write seo meta tags
- generate meta descriptions
- title tags for pages
- open graph tags
- seo metadata pack
Source
View this craftbook on GitHub · MIT license