Skip to main content

design-programmatic-template

Designs a programmatic content template: variable map, page structure, per-slot SEO rules, and quality filters. Use when building scalable location, product, or data-driven pages.

Source facts

Repository
seohow/seo
Last source activity
June 2, 2026 at 11:22
Detected SKILL.md language
English
Stars
0
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
design-programmatic-template
description
Designs a programmatic content template: variable map, page structure, per-slot SEO rules, and quality filters. Use when building scalable location, product, or data-driven pages.
# Design Programmatic Template This skill produces the template + data spec for a green-lit programmatic build. Output is the handoff document engineering + content + design teams build against. The skill is opinionated about a few things: every page needs substantive unique content per slot (templates that are mostly boilerplate produce thin pages); index-control rules are non-negotiable (publish only when data threshold is met); internal-link orchestration is part of the template (hub-and-spoke + peer linking), not an afterthought; schema is per-template, not per-page. ## When to use this skill - The user has a green-lit programmatic build (from `plan-programmatic-seo`) and is ready to spec the template. - Engineering is ready to build and needs the template + data spec. - Content team is ready to populate and needs the field-by-field spec. - The team is iterating on an existing programmatic template and needs the redesign spec. ## When NOT to use this skill - Programmatic viability hasn't been evaluated — run `plan-programmatic-seo` first. - The user wants to brief a single editorial piece — use `generate-content-brief`. - The user wants the template *code* — that's engineering's job; this produces the spec. - The user wants to design a single pillar / blog post — use `design-pillar-page` / `generate-content-brief`. ## Inputs required 1. **Business context and SEO foundation** — read `businesses/<slug>/business_context.md` and, for SEO-specific work, `businesses/<slug>/seo_foundation.md`. Resolve `<slug>` by listing `businesses/`: if exactly one folder exists, use it; if multiple, ask which business; if none, recommend running `business-context` first. If SEO foundation is missing, recommend running `seo-foundation` before producing output. Critical fields: products/services, customer, and brand voice from `business_context.md`. 2. **Programmatic evaluation** — read `businesses/<slug>/programmatic/<use-case-slug>-evaluation.md` (output of `plan-programmatic-seo`). Required. Confirms the build is green-lit. 3. **Cluster map** — read `businesses/<slug>/clusters/cluster-map.md`. Programmatic pages often anchor to a topic cluster. 4. **Archetype** — confirmed from the evaluation (glossary, comparison, location, listing, "for [persona]"). 5. **Data sample** — strongly preferred. 3-5 example entries with the data the user has available. If unavailable, ask what fields exist; the spec is harder to design without sample data. 6. **Existing schema patterns** — if the brand has an existing schema strategy (per `plan-schema-strategy`), build on it. 7. **CMS / tech stack** — optional but useful. Affects template implementation patterns. If evaluation document or archetype is missing, ask. The template is anchored to a specific approved build. ## Process 1. **Confirm the archetype** and load archetype-specific conventions. - **Glossary:** entry per term; hub at `/[type]/`; sections: definition, mechanism, uses, related entries, related products. - **Comparison:** entry per pair; URL pattern `/compare/[a]-vs-[b]`; sections: side-by-side table, deep-dive per item, recommendation, related comparisons. - **Location:** entry per location; URL pattern `/[service]/[location]`; sections: service description, local context, location-specific data, related locations. - **Listing / database:** index page with filters; entry per item; URL pattern `/[type]/[slug]`. - **For [persona]:** entry per persona; URL pattern `/for/[persona]`; sections: persona description, recommendations, social proof, related personas. 2. **Design the URL pattern.** Lowercase, hyphen-separated, no year stamps, no UTM-style query parameters. URL is the most stable element of the template; design carefully. 3. **Build the page section spec.** What sections does every page have? For each section: required vs. optional, content requirements, length range, data slots, fallback behaviour when data is missing. 4. **Define the data schema.** Field-by-field. For each field: - Name + type (string / number / boolean / array / structured object). - Required or optional. - Validation rules (length, format, allowed values). - Source (own database, manually curated, third-party API). - Maintainer (team / role). 5. **Set index-control rules.** What constitutes "enough data to publish"? Typically: 80%+ of required fields populated, all required fields meeting minimum-content thresholds, no banned-content flags. 6. **Plan schema markup.** Per-template schema: - Glossary entries: Article + DefinedTerm (where supported) + FAQPage. - Comparison pages: Article + ItemList (the comparison) + Product (per item) + FAQPage. - Location pages: LocalBusiness (if appropriate) + Article + FAQPage. - Listing pages: ItemList + Article. 7. **Plan internal linking.** - **Hub:** index page (`/[type]/`) lists all entries. The hub is the highest-equity page; should rank for the head term. - **Spoke (each entry):** links back to hub; links to 3-5 related entries; links to 2-3 related products / cluster posts. - **Peer linking:** entries link to topically-related peers (related ingredients, related comparisons, etc.). - **Cluster-bridge linking:** programmatic entries link to cluster pillar / blog spokes where contextually relevant. 8. **Plan XML sitemap segmentation.** Dedicated sitemap for the programmatic template (e.g. `sitemap-ingredients.xml`). Helps GSC analysis at the cohort level. 9. **Plan analytics.** Page-template-level events. Cohort-level dashboards (all pages in this template) for ranking, traffic, engagement, indexing. 10. **Define acceptance criteria.** Per-page criteria + cohort-level criteria. 11. **Plan Phase 1 production.** First-batch population (30-50 entries). Editorial review. Quality gates before launch. 12. **Plan ongoing operations.** Data maintenance cadence. Quality monitoring (cohort-level). Quarterly reviews. 13. **Write the spec.** Output is a structured Markdown doc covering all of the above. ## Output format ```markdown # Programmatic Template Spec — [Use case] **Use case:** [from evaluation] **Archetype:** [glossary / comparison / location / listing / "for [persona]"] **Phase 1 page count:** [n] **Spec date:** [date] **Engineering owner:** [name / TBD] **Data owner:** [name / role] ## URL pattern - **Index (hub):** `/[type]/` - **Entry:** `/[type]/[slug]` - **Slug rules:** lowercase, hyphen-separated, no special characters, no year stamps. - **Examples:** `/ingredients/zinc-oxide`, `/ingredients/niacinamide`, `/ingredients/hyaluronic-acid`. ## Page section spec ### Section 1 — Hero - **H1:** [pattern, e.g. `What is {{ingredient.name}}?`] - **Subtitle:** [pattern, e.g. `{{ingredient.summary_short}}`] - **Required:** `name`, `summary_short`. - **Length range:** [n words]. - **Fallback:** if data missing, page should be `noindex`ed. ### Section 2 — Mechanism / Definition - **Heading:** [pattern, e.g. `How {{ingredient.name}} works`] - **Body content:** [pattern] - **Required:** `mechanism_explanation` (200-400 words). - **Optional:** `mechanism_diagram_url` (illustration). - **Length range:** [n words]. - **Fallback:** if `mechanism_explanation` is < 150 words, page is below threshold → `noindex`. ### Section 3 — [Section name] - **Heading:** [...] - **Required:** [...] - **Optional:** [...] - ... [Repeat for each section in the template — typically 6-10 sections per page] ### Section N — FAQ - **Heading:** "Frequently asked questions about {{name}}" - **Body:** 3-6 question / answer pairs. - **Required:** at least 3 Q&A pairs. - **Schema:** populates FAQPage schema. ### Section N+1 — Related entries - **Heading:** "Related [archetype]" - **Body:** 3-5 cards linking to related entries (peer linking). - **Required:** at least 3 related entries. - **Selection logic:** rule-based (same category, similar mechanism, etc.) or curated. ### Section N+2 — Related products / blog - **Heading:** "Find this in our products" / "Read more" - **Body:** 2-3 product cards + 1-2 cluster blog links. - **Required:** at least 1 link, but not blocking — leave empty if no good match. ## Data schema | Field | Type | Required | Source | Maintainer | Validation | |-------|------|----------|--------|------------|------------| | `name` | string | ✅ | manual | content | 2-50 chars | | `slug` | string | ✅ | derived | system | lowercase-hyphenated | | `summary_short` | string | ✅ | manual | content | 80-160 chars | | `mechanism_explanation` | text (markdown) | ✅ | manual + dermatologist review | content + reviewer | 150-400 words | | `regulatory_status` | enum | ✅ | manual | content | one of: FDA-approved, EU-approved, multi-region, restricted | | `our_percentage` | number (or null) | optional | own database | product | 0-100, % | | `our_products` | array of product IDs | optional | own database | system (sync) | 0-10 entries | | `tolerance_three_skin_tones` | structured (object) | optional | own testing | product testing | structured fields | | `dermatologist_note` | text | optional + reviewed | dermatologist | reviewer | up to 200 words | | `related_ingredients` | array of slugs | ✅ | manual | content | 3-5 entries | | `faqs` | array of {question, answer} | ✅ | manual | content | 3-6 pairs | | `last_reviewed` | date | ✅ (system) | system | system | ISO-8601 | | `last_reviewed_by` | string | ✅ for credibility-sensitive | manual | reviewer | name + credentials | ## Index-control rules A page **publishes** (status: indexable) only if all of the following are true: - All ✅ required fields are populated. - `mechanism_explanation` is ≥ 150 words. - `faqs` has ≥ 3 Q&A pairs. - `related_ingredients` has ≥ 3 entries. - For credibility-sensitive content: `dermatologist_note` is populated and `last_reviewed_by` is set. If any condition fails: - Page is generated but `noindex,follow` (still findable via internal links, not indexed). - Page is excluded from XML sitemap. - Daily report flags the page for content team to populate / review. ## Schema markup Per-template schema implementation: ### Article - `@type`: "Article" - `headline`: `{{name}}` - `datePublished`: `{{first_published}}` - `dateModified`: `{{last_reviewed}}` - `author`: `{{last_reviewed_by}}` (or default brand author) - `image`: hero image URL - `mainEntityOfPage`: page URL ### FAQPage - Populated from `faqs` array. - One `Question` + `acceptedAnswer` per Q&A. ### DefinedTerm (where supported) - `@type`: "DefinedTerm" - `name`: `{{name}}` - `description`: `{{summary_short}}` ### BreadcrumbList - Home → [Type Index] → [Entry] ### Reference - See [generate-schema-markup](../../technical/generate-schema-markup/SKILL.md) for implementation. ## Internal linking strategy ### Hub linking - `/[type]/` (index) lists all published entries with thumbnail + summary. - Hub is linked from main nav and footer. - Each entry links back to hub in breadcrumb. ### Peer linking - Each entry links to 3-5 related entries (selected by category match + manual curation). - Anchor pattern: entry name + descriptive context. ### Cluster bridging - Each entry links to relevant cluster pillar (where applicable). - Each entry links to 1-2 sibling blog posts in the cluster. - Cluster pillar links to relevant entries in body content. ### Product bridging - Each entry with `our_products` populated displays product cards with link to PDP. - Anchor pattern: product name (not generic "shop now"). ## XML sitemap segmentation - Dedicated sitemap: `sitemap-[type].xml`. - Updated on every entry publish / unpublish. - Submitted to GSC. - Referenced from sitemap index (`sitemap.xml`). ## Analytics instrumentation - **Page-template-level events:** page view, scroll depth, internal-link clicks, product-card clicks, FAQ expand. - **Cohort dashboards:** all pages in the template — average ranking, total traffic, average engagement, indexing rate. - **GSC analysis:** filter by URL prefix `/ingredients/` (or template path) for cohort GSC queries. - **Quality metrics:** % of pages publishing vs. `noindex`ed; % of pages with all required fields; data freshness (last reviewed > 12 months). ## Acceptance criteria ### Per-page - [ ] Page publishes only if index-control rules pass. - [ ] All required fields populated. - [ ] `mechanism_explanation` ≥ 150 words. - [ ] FAQ has ≥ 3 Q&A pairs. - [ ] Related-entries section has ≥ 3 entries. - [ ] Schema (Article + FAQPage + BreadcrumbList) deployed and validates in Rich Results Test. - [ ] Page LCP ≤ 2.5s, INP ≤ 200ms. - [ ] No broken internal links. ### Cohort (Phase 1, 30 pages) - [ ] At least 25 of 30 entries pass index-control and are indexable. - [ ] All 30 entries have dermatologist review for credibility-sensitive fields. - [ ] Hub page (`/[type]/`) is linked from main nav. - [ ] Sitemap `sitemap-[type].xml` is submitted to GSC. - [ ] Cohort dashboard is set up in analytics. - [ ] At month 4 post-launch: average ranking is at position 25 or better; cohort traffic is on track for 12-month target. ## Phase 1 production plan ### Engineering (weeks 1-4) - [ ] Template implementation (HTML / CMS / static-gen). - [ ] Data schema in CMS or database. - [ ] Index-control logic. - [ ] Schema markup.
View on GitHub
This SKILL.md is very large, so SkillsMP previews the first section here. View on GitHub