Prompt packs · free template
SEO Brief Prompt Pack
Five chained prompts that turn a keyword and a SERP into a review-gated SEO brief.
Make it yours
Fill in your values.
Everything you enter below is substituted live into the template — copy or download it and the file is already yours. Skip anything you're not sure of; unfilled fields stay as {{PLACEHOLDER}} markers. Values save in your browser and carry across every template in the library.
The template
Your copy, ready to run.
The preview below updates as you type. Copy it to your clipboard or download it as seo-brief-prompts.md.
# SEO Brief Prompt Pack
Five chained prompts that take one target keyword to a writer-ready SEO brief:
intent -> outline -> coverage checklist -> internal-link plan -> title/meta variants.
Run them in order. Each output feeds the next. Nothing here publishes anything —
the pack produces a draft brief that an editor signs off before a writer sees it.
---
## How to use this pack
1. Fill every {{PLACEHOLDER}} the first time it appears. Later prompts reuse
values you already produced (intent, outline, word-count target).
2. Paste one prompt at a time into your assistant. Copy each output into the
brief template at the bottom of this file.
3. Keep prompts read-only. You paste data in; the assistant analyzes and drafts.
It is not connected to your CMS and cannot publish — by design. If you run
this pack through an agent instead of a chat session, the agent operates
under your Campaign AGENTS.md scope rules: pasted SERPs and URL exports are
read-only sources, and every brief is RECOMMEND-tier output.
4. Log the run (see "Audit log line") and route the finished draft to review.
No brief moves to a writer until an editor approves it.
---
## Governance rail (fill once, applies to the whole pack)
- REVIEW GATE: Every brief is a draft until {{REVIEWER_NAME}} (the editor who
approves briefs) signs off. Drafts never publish and never reach a writer
unreviewed.
- READ-ONLY DEFAULT: This pack only reads what you paste (keyword, SERP titles,
your URL list). It gets no login and no publish scope of any kind.
- CAPS (placeholders — set your own house numbers, these are not recommendations):
- {{MAX_INTERNAL_LINKS}} (max internal links proposed per brief)
- {{MAX_H2}} (max H2 sections in an outline)
- {{TITLE_CHAR_CAP}} (max title length you allow)
- {{META_CHAR_CAP}} (max meta description length you allow)
- AUDIT LINE: Log every brief with the Trigger / Action / Impact line at the end
of this file, so any brief can be traced back to its inputs and regenerated.
Shared inputs you will paste more than once:
- {{TARGET_KEYWORD}} (the primary keyword this brief targets)
- {{BRAND}} (your brand or site name)
- {{DOMAIN}} (your domain, e.g. example.com)
---
## Prompt 1 — Keyword-to-intent analysis
**Inputs:**
- {{TARGET_KEYWORD}}
- {{SERP_TITLES}} (paste the titles of the top 10 organic results, one per line)
- {{AUDIENCE}} (one line: who you are writing for, e.g. "B2B ops leads")
**Prompt:**
```
You are an SEO strategist. Analyze search intent for a single keyword. Use ONLY
the SERP titles I provide as evidence — do not invent rankings or metrics.
Keyword: {{TARGET_KEYWORD}}
Audience: {{AUDIENCE}}
Top SERP titles (one per line):
{{SERP_TITLES}}
Classify the dominant intent as exactly one of: Informational, Commercial,
Navigational, or Transactional. Then justify it from patterns in the titles.
Return a Markdown table with these rows:
| Field | Value |
| Dominant intent | (one label) |
| Confidence | High / Medium / Low, with one-line reason |
| Evidence from titles | 2-3 recurring patterns you see (formats, modifiers, angle) |
| Content format implied | e.g. how-to guide, listicle, comparison, definition |
| Suggested angle | one sentence — how {{BRAND}} can differ from the SERP |
| Word-count target | a range, inferred from the depth the titles imply, marked "estimate" |
| Open questions for editor | anything the titles cannot settle |
Do not write the article. Do not claim search volume or difficulty numbers.
```
**Expected output:** the 7-row table above. Save "Dominant intent" and "Word-count
target" — Prompts 2 and 3 reuse them.
**Guardrail:** intent is a judgment call. {{REVIEWER_NAME}} confirms the label and
the angle before you build the outline — a wrong intent here misroutes the whole
brief.
---
## Prompt 2 — Outline with heading hierarchy
**Inputs:**
- {{TARGET_KEYWORD}}
- {{SEARCH_INTENT}} (the label from Prompt 1)
- {{ANGLE}} (the suggested angle from Prompt 1, edited if the editor changed it)
- {{WORD_COUNT_TARGET}} (the range from Prompt 1)
- {{SERP_H2_THEMES}} (optional: recurring H2 themes you noted while scanning the SERP)
**Prompt:**
```
You are building the outline for one SEO article. Produce a heading hierarchy
only — no body copy.
Keyword: {{TARGET_KEYWORD}}
Intent: {{SEARCH_INTENT}}
Angle: {{ANGLE}}
Word-count target: {{WORD_COUNT_TARGET}}
Themes seen in competing results: {{SERP_H2_THEMES}}
Rules:
- One H1 that contains the keyword naturally.
- No more than {{MAX_H2}} H2 sections. Nest H3s only where a section truly splits.
- Each heading gets a one-line "covers:" note stating what the section answers.
- Order sections to match the intent (definition-first for informational,
comparison-first for commercial, etc.).
- Mark one section as the primary answer target for a featured snippet, if any.
Return this structure:
# H1: (title-style heading)
## H2: (heading) — covers: (one line)
### H3: (heading) — covers: (one line)
## H2: ...
End with a one-line "Notes for writer" on tone or a must-include example.
```
**Expected output:** an indented H1/H2/H3 tree, each heading with a "covers:" note,
plus one "Notes for writer" line.
**Guardrail:** the editor checks that the hierarchy is logical, stays within
{{MAX_H2}} H2s, and that no heading promises content the intent does not support.
---
## Prompt 3 — Entity & subtopic coverage checklist
**Inputs:**
- {{TARGET_KEYWORD}}
- {{SEARCH_INTENT}} (from Prompt 1)
- {{OUTLINE}} (paste the full outline from Prompt 2)
**Prompt:**
```
You are doing topical-coverage QA on an article outline before it is written.
Identify the entities and subtopics a thorough piece on this keyword should
cover, then check them against the outline.
Keyword: {{TARGET_KEYWORD}}
Intent: {{SEARCH_INTENT}}
Outline:
{{OUTLINE}}
List the entities, concepts, and subtopics a strong article should address.
Base this on the keyword's topic, not on external data you cannot verify.
Do not fabricate statistics, dates, or named studies for the writer to cite.
Return a Markdown table:
| Entity / subtopic | Why it matters | Covered in outline? | Where / gap note |
- "Covered in outline?" = Yes / Partial / Missing
- For Partial or Missing, say which section should hold it.
After the table, add:
- "Must-add before writing" — any Missing item that is core to the intent.
- "Nice-to-have" — items that would strengthen but are optional.
```
**Expected output:** the coverage table plus two short lists (must-add, nice-to-have).
**Guardrail:** the editor decides which "must-add" items are real gaps vs. scope
creep, and folds the accepted ones back into the Prompt 2 outline before the brief
is finalized. Any statistic a "must-add" item implies must be source-checked by a
human, not taken from the model.
---
## Prompt 4 — Internal-link plan
**Inputs:**
- {{TARGET_KEYWORD}}
- {{OUTLINE}} (from Prompt 2, with any accepted gaps added)
- {{EXISTING_URLS}} (paste your site's URL inventory, one per line, as
"URL — page title or topic". Use a sitemap export or crawl. Read-only.)
**Prompt:**
```
You are planning internal links for a new article. Choose links ONLY from the
URL list I provide. Never invent URLs, and never suggest a link you cannot match
to a line in the list.
Keyword: {{TARGET_KEYWORD}}
Outline:
{{OUTLINE}}
Existing URLs (one per line, "URL — topic"):
{{EXISTING_URLS}}
Propose at most {{MAX_INTERNAL_LINKS}} internal links. For each, pick the outline
section it belongs in and write anchor text that reads naturally — not exact-match
keyword stuffing.
Return a Markdown table:
| Target URL | Relevance to section | Suggested anchor text | Place in section |
- Order by relevance, strongest first.
- If fewer than {{MAX_INTERNAL_LINKS}} URLs are genuinely relevant, return fewer
and say so. Do not pad the list.
Below the table, list any URL you were unsure about under "Editor: confirm these".
```
**Expected output:** a link table (target URL, relevance, anchor, placement) capped
at {{MAX_INTERNAL_LINKS}} rows, plus an "Editor: confirm these" list.
**Guardrail:** the editor verifies each proposed URL actually exists and is live,
confirms the anchor is not over-optimized, and drops any link that does not serve
the reader. The cap is a ceiling, not a quota.
---
## Prompt 5 — Title & meta variants
**Inputs:**
- {{TARGET_KEYWORD}}
- {{SEARCH_INTENT}} (from Prompt 1)
- {{ANGLE}} (final angle after editor review)
- {{SERP_TITLES}} (the same top-10 titles, so variants can differ from them)
**Prompt:**
```
Write title tag and meta description variants for one article. Optimize for a
click without over-promising — the page must deliver what the title says.
Keyword: {{TARGET_KEYWORD}}
Intent: {{SEARCH_INTENT}}
Angle: {{ANGLE}}
Competing SERP titles (differentiate from these):
{{SERP_TITLES}}
Rules:
- Titles: keep each under {{TITLE_CHAR_CAP}} characters. Include the keyword or a
close variant near the front. No clickbait, no unverifiable claims.
- Meta descriptions: keep each under {{META_CHAR_CAP}} characters, active voice,
one clear reason to click.
- Give 3 title options and 2 meta options. Note the character count for each.
Return a Markdown table:
| Type | Variant | Char count | Note (angle / differentiator) |
Flag any variant over the cap instead of silently trimming it.
```
**Expected output:** a table of 3 titles + 2 metas, each with a character count and
a one-line note, with over-cap variants flagged.
**Guardrail:** the editor picks the final title/meta, confirms character counts
against your house limits, and checks that the promise matches the drafted content.
Nothing is locked until the article itself is reviewed.
---
## Assemble the brief (paste outputs into this template)
# SEO Brief — {{TARGET_KEYWORD}}
Owner: {{REVIEWER_NAME}} Date: {{DATE}} (date the brief was assembled)
Status: DRAFT (pending review)
## Intent & angle (Prompt 1 table)
## Outline (Prompt 2 hierarchy)
## Coverage checklist (Prompt 3 table + must-add items resolved)
## Internal links (Prompt 4 table)
## Title & meta (Prompt 5 table — editor's pick marked)
## Word-count target {{WORD_COUNT_TARGET}} (estimate)
## Handoff prompt (one paragraph telling the writer the angle,
must-include points, and tone)
Review: [ ] approved by {{REVIEWER_NAME}} on ________
Status flips to BRIEFED only after this box is checked.
---
## Audit log line (record one per brief)
Append to your brief tracker so any brief is traceable and reproducible:
TRIGGER: keyword "{{TARGET_KEYWORD}}" entered the brief queue on {{DATE}}
ACTION: ran SEO Brief Prompt Pack {{PROMPT_VERSION}} (the pack revision you
ran, e.g. v1) — prompts 1-5; inputs = SERP titles + URL inventory
(read-only, pasted)
IMPACT: draft brief created; routed to {{REVIEWER_NAME}} for review;
status = DRAFT until approved
Keep the pasted inputs (SERP titles, URL list) with the log entry so a brief can
be regenerated against the exact data it was built from.
What it is
A five-prompt pack that walks a target keyword all the way to a writer-ready SEO brief: keyword-to-intent analysis, an outline with heading hierarchy, an entity and subtopic coverage checklist, an internal-link plan drawn from your own URLs, and title/meta variants. Each prompt names exactly what to paste in and what shape the output takes, so the results drop straight into a standardized brief.
It exists because briefing is a common bottleneck in content operations. The pack makes that step fast and repeatable without lowering the bar — every draft passes an editor before a writer ever sees it, and every run is logged so a brief can be traced and regenerated.
Make it yours