taketomarket 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +10 -0
- package/LICENSE +21 -0
- package/README.md +419 -0
- package/agents/ttm-producer.md +53 -0
- package/bin/lib/campaign.cjs +553 -0
- package/bin/lib/commit.cjs +105 -0
- package/bin/lib/core.cjs +172 -0
- package/bin/lib/deviation.cjs +149 -0
- package/bin/lib/drift-log.cjs +219 -0
- package/bin/lib/health.cjs +438 -0
- package/bin/lib/slug.cjs +59 -0
- package/bin/lib/state.cjs +96 -0
- package/bin/ttm-tools.cjs +157 -0
- package/gates/base-gates.md +266 -0
- package/gates/discipline/.gitkeep +0 -0
- package/gates/gate-evaluation.md +341 -0
- package/gates/meta-gates.md +19 -0
- package/install.js +307 -0
- package/package.json +53 -0
- package/playbooks/.gitkeep +0 -0
- package/playbooks/aeo.md +223 -0
- package/playbooks/affiliate.md +272 -0
- package/playbooks/base.md +110 -0
- package/playbooks/email.md +306 -0
- package/playbooks/events.md +320 -0
- package/playbooks/linkedin.md +263 -0
- package/playbooks/paid-ads.md +318 -0
- package/playbooks/pr-media.md +296 -0
- package/playbooks/seo.md +284 -0
- package/playbooks/social.md +305 -0
- package/playbooks/youtube.md +325 -0
- package/references/context-loading.md +107 -0
- package/references/learnings-extraction.md +94 -0
- package/references/measurement-template.md +48 -0
- package/references/meta-gate-evaluation.md +169 -0
- package/references/positioning-check-report.md +197 -0
- package/references/review-checklist.md +78 -0
- package/references/ship-checklist-items.md +94 -0
- package/settings.json +4 -0
- package/skills/ttm-aeo-check/SKILL.md +20 -0
- package/skills/ttm-affiliate-kit/SKILL.md +19 -0
- package/skills/ttm-archive/SKILL.md +13 -0
- package/skills/ttm-brand-refresh/SKILL.md +19 -0
- package/skills/ttm-brief/SKILL.md +14 -0
- package/skills/ttm-competitor-scan/SKILL.md +19 -0
- package/skills/ttm-email-preflight/SKILL.md +19 -0
- package/skills/ttm-fix/SKILL.md +13 -0
- package/skills/ttm-health/SKILL.md +12 -0
- package/skills/ttm-icp-refresh/SKILL.md +19 -0
- package/skills/ttm-init/SKILL.md +12 -0
- package/skills/ttm-keyword-map/SKILL.md +19 -0
- package/skills/ttm-learn/SKILL.md +14 -0
- package/skills/ttm-measure/SKILL.md +14 -0
- package/skills/ttm-new-campaign/SKILL.md +13 -0
- package/skills/ttm-next/SKILL.md +12 -0
- package/skills/ttm-positioning-check/SKILL.md +19 -0
- package/skills/ttm-positioning-shift/SKILL.md +19 -0
- package/skills/ttm-produce/SKILL.md +14 -0
- package/skills/ttm-repurpose/SKILL.md +20 -0
- package/skills/ttm-research/SKILL.md +13 -0
- package/skills/ttm-resume/SKILL.md +13 -0
- package/skills/ttm-review/SKILL.md +13 -0
- package/skills/ttm-seo-audit/SKILL.md +20 -0
- package/skills/ttm-ship/SKILL.md +13 -0
- package/skills/ttm-state/SKILL.md +13 -0
- package/skills/ttm-verify/SKILL.md +14 -0
- package/templates/agents-md.md +65 -0
- package/templates/campaign-brief.md +74 -0
- package/templates/campaign-research.md +39 -0
- package/templates/campaign-state.md +40 -0
- package/templates/claude-md.md +65 -0
- package/templates/deviation-log.md +12 -0
- package/templates/drift-log.md +17 -0
- package/templates/fix-brief.md +59 -0
- package/templates/fix-log.md +22 -0
- package/templates/measurement-report.md +75 -0
- package/templates/migration-plan.md +24 -0
- package/templates/production-manifest.json +20 -0
- package/templates/reference-files/brand.md +45 -0
- package/templates/reference-files/calendar.md +30 -0
- package/templates/reference-files/channels.md +40 -0
- package/templates/reference-files/competitors.md +40 -0
- package/templates/reference-files/icp.md +50 -0
- package/templates/reference-files/learnings.md +40 -0
- package/templates/reference-files/metrics.md +42 -0
- package/templates/reference-files/positioning.md +38 -0
- package/templates/reference-files/state.md +27 -0
- package/templates/verification-report.md +59 -0
- package/workflows/discipline/.gitkeep +0 -0
- package/workflows/discipline/aeo-check.md +180 -0
- package/workflows/discipline/affiliate-kit.md +147 -0
- package/workflows/discipline/email-preflight.md +150 -0
- package/workflows/discipline/keyword-map.md +125 -0
- package/workflows/discipline/repurpose.md +329 -0
- package/workflows/discipline/seo-audit.md +169 -0
- package/workflows/lifecycle/.gitkeep +0 -0
- package/workflows/lifecycle/brief-positioning-check.md +90 -0
- package/workflows/lifecycle/brief.md +355 -0
- package/workflows/lifecycle/fix.md +495 -0
- package/workflows/lifecycle/learn.md +405 -0
- package/workflows/lifecycle/measure.md +379 -0
- package/workflows/lifecycle/produce.md +383 -0
- package/workflows/lifecycle/research.md +264 -0
- package/workflows/lifecycle/review.md +432 -0
- package/workflows/lifecycle/ship.md +521 -0
- package/workflows/lifecycle/verify.md +507 -0
- package/workflows/reference-mgmt/.gitkeep +0 -0
- package/workflows/reference-mgmt/brand-refresh.md +193 -0
- package/workflows/reference-mgmt/competitor-scan.md +228 -0
- package/workflows/reference-mgmt/icp-refresh.md +200 -0
- package/workflows/reference-mgmt/positioning-check.md +339 -0
- package/workflows/reference-mgmt/positioning-shift.md +368 -0
- package/workflows/setup/.gitkeep +0 -0
- package/workflows/setup/init-questions.md +225 -0
- package/workflows/setup/init-validation.md +155 -0
- package/workflows/setup/init.md +449 -0
- package/workflows/setup/new-campaign.md +134 -0
- package/workflows/utility/.gitkeep +0 -0
- package/workflows/utility/archive.md +334 -0
- package/workflows/utility/health.md +166 -0
- package/workflows/utility/next.md +187 -0
- package/workflows/utility/resume.md +249 -0
- package/workflows/utility/state.md +207 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
---
|
|
2
|
+
discipline: pr-media
|
|
3
|
+
asset_types: [press-release, media-pitch, media-kit, byline-article]
|
|
4
|
+
version: "1.0"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# PR/Media Discipline Playbook
|
|
8
|
+
|
|
9
|
+
This playbook extends the base playbook contract (`base.md`) with PR/media-specific production guidance, discipline gates, and format rules. It is loaded by ttm-producer during content generation and parsed by ttm-verify for gate evaluation.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Production Guidance
|
|
14
|
+
|
|
15
|
+
### Media List Structure
|
|
16
|
+
|
|
17
|
+
Every PR campaign starts with a structured media list. Do not pitch without one:
|
|
18
|
+
|
|
19
|
+
- **Minimum 10 contacts** with: outlet name, journalist name, beat/coverage area, recent relevant article, and a specific pitch angle tailored to that journalist
|
|
20
|
+
- **Tiered organization:** Tier 1 (national/major trade), Tier 2 (regional/niche trade), Tier 3 (blogs/newsletters/podcasts). Allocate effort proportionally -- Tier 1 gets the most customization.
|
|
21
|
+
- **Beat matching:** Only pitch journalists who cover your space. A fintech pitch sent to a healthcare reporter wastes both parties' time and damages future relationships.
|
|
22
|
+
- **Recency check:** Verify each contact is still at the listed outlet and still covering the same beat. Journalist turnover is high -- stale lists produce bounced emails and irrelevant pitches.
|
|
23
|
+
|
|
24
|
+
### Pitch Angle Customization
|
|
25
|
+
|
|
26
|
+
Generic pitches fail. Every pitch must connect the story to the journalist's specific interests:
|
|
27
|
+
|
|
28
|
+
- **Reference recent work:** Mention a specific article the journalist published and explain how your story extends, contrasts with, or adds a new angle to their coverage.
|
|
29
|
+
- **Angle-per-journalist:** The same announcement should be pitched differently to a product reviewer (focus on features/UX), an industry analyst (focus on market impact), and a business reporter (focus on funding/growth).
|
|
30
|
+
- **Subject line discipline:** 6-10 words, specific and newsworthy. Avoid clickbait, ALL CAPS, or exclamation marks. The subject line is the pitch -- if it does not convey the news, the email will not be opened.
|
|
31
|
+
|
|
32
|
+
### Embargo Management
|
|
33
|
+
|
|
34
|
+
Embargoes give select journalists early access to a story in exchange for coordinated publication:
|
|
35
|
+
|
|
36
|
+
- **Clear terms:** Specify exact date and time (with timezone) for embargo lift. Use written confirmation (email) -- verbal agreements are unreliable.
|
|
37
|
+
- **NDA when needed:** For sensitive announcements (M&A, funding, partnerships), require a signed NDA before sharing embargoed information.
|
|
38
|
+
- **Break protocol:** Document what happens if an embargo is broken. Typically: immediate release to all other embargoed journalists, note the breaking outlet for future exclusion.
|
|
39
|
+
- **Selective use:** Reserve embargoes for genuinely significant news. Routine product updates do not warrant embargo complexity.
|
|
40
|
+
|
|
41
|
+
### Press Release Structure
|
|
42
|
+
|
|
43
|
+
Follow the inverted pyramid -- most important information first:
|
|
44
|
+
|
|
45
|
+
1. **Headline:** Factual, specific, 8-12 words. State the news clearly.
|
|
46
|
+
2. **Dateline:** City, State/Country -- Date
|
|
47
|
+
3. **Lead paragraph:** Who, what, when, where, why in 2-3 sentences
|
|
48
|
+
4. **Supporting details:** Context, background, market data (2-3 paragraphs)
|
|
49
|
+
5. **Executive quote:** One quote from a named executive providing perspective
|
|
50
|
+
6. **Product/company details:** Specifics about the product or initiative
|
|
51
|
+
7. **Boilerplate:** Standard company description paragraph (consistent across all releases)
|
|
52
|
+
8. **Media contact:** Name, email, phone number for press inquiries
|
|
53
|
+
|
|
54
|
+
### Byline Article Positioning
|
|
55
|
+
|
|
56
|
+
Byline articles (op-eds, thought leadership pieces published under an executive's name) require:
|
|
57
|
+
|
|
58
|
+
- **Original perspective:** The article must offer a viewpoint not available in the company's standard marketing. Personal experience, contrarian takes, or proprietary data analysis.
|
|
59
|
+
- **Publication fit:** Match the article's tone, length, and topic to the target publication's editorial standards. Read 5+ recent bylines in the target outlet before writing.
|
|
60
|
+
- **Attribution balance:** The byline builds the author's credibility and the company's thought leadership. Avoid overt product promotion -- publications reject advertorials.
|
|
61
|
+
|
|
62
|
+
### Earned Media Measurement
|
|
63
|
+
|
|
64
|
+
Plan measurement before pitching, not after:
|
|
65
|
+
|
|
66
|
+
- **Baseline:** Document current share of voice, existing coverage volume, and brand mention frequency before the campaign starts.
|
|
67
|
+
- **Tracking method:** Specify how coverage will be monitored (Google Alerts, media monitoring tool, manual search, or combination).
|
|
68
|
+
- **Success criteria:** Define what "success" looks like in measurable terms (e.g., 5 Tier 1 placements, 20% share-of-voice increase, 500 referral visits from coverage).
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Discipline Gates
|
|
73
|
+
|
|
74
|
+
### DISC-PR-MEDIA-01: Media List Structure -- Tier 1
|
|
75
|
+
|
|
76
|
+
**Checks:** Media outreach includes a structured journalist/outlet list with angles per PLAY-10
|
|
77
|
+
**Against:** Media list document or pitch plan
|
|
78
|
+
|
|
79
|
+
#### Evaluation Criteria
|
|
80
|
+
|
|
81
|
+
1. **List completeness**
|
|
82
|
+
- PASS: Media list includes at least 10 contacts with outlet name, journalist name, beat, and a specific pitch angle per journalist
|
|
83
|
+
- WARN: Media list has contacts but uses the same generic pitch angle for all journalists
|
|
84
|
+
- FAIL: No media list, or list has fewer than 5 contacts, or no pitch angles defined
|
|
85
|
+
|
|
86
|
+
2. **Contact recency**
|
|
87
|
+
- PASS: List notes when contacts were last verified (within 30 days) or references recent articles by each journalist
|
|
88
|
+
- WARN: List exists but verification date is not noted
|
|
89
|
+
- FAIL: List contains obviously stale contacts (wrong outlets, inactive journalists)
|
|
90
|
+
|
|
91
|
+
### DISC-PR-MEDIA-02: Pitch Angle Specificity -- Tier 1
|
|
92
|
+
|
|
93
|
+
**Checks:** Each pitch is customized to the journalist's beat and recent coverage per PLAY-10
|
|
94
|
+
**Against:** Individual pitch content compared to journalist profile
|
|
95
|
+
|
|
96
|
+
#### Evaluation Criteria
|
|
97
|
+
|
|
98
|
+
1. **Journalist-specific customization**
|
|
99
|
+
- PASS: Pitch references the journalist's recent work or beat and connects the story to their audience's interests
|
|
100
|
+
- WARN: Pitch is topically relevant to the beat but does not reference specific recent coverage
|
|
101
|
+
- FAIL: Generic pitch with no journalist-specific customization
|
|
102
|
+
|
|
103
|
+
2. **Angle differentiation**
|
|
104
|
+
- PASS: Different journalists receive different angles of the same story (e.g., product angle vs. market impact angle)
|
|
105
|
+
- WARN: Slight variations in pitch but substantially the same angle for all contacts
|
|
106
|
+
- FAIL: Identical pitch sent to all journalists regardless of beat or outlet
|
|
107
|
+
|
|
108
|
+
### DISC-PR-MEDIA-03: Embargo Management -- Tier 2
|
|
109
|
+
|
|
110
|
+
**Checks:** Embargo terms are documented and communicated if applicable per PLAY-10
|
|
111
|
+
**Against:** Pitch documentation and communication plan
|
|
112
|
+
|
|
113
|
+
#### Evaluation Criteria
|
|
114
|
+
|
|
115
|
+
1. **Embargo clarity**
|
|
116
|
+
- PASS: Embargo date/time with timezone clearly stated in pitch, NDA or embargo agreement terms defined, break protocol documented
|
|
117
|
+
- WARN: Embargo mentioned but terms are vague (no specific date/time or missing timezone)
|
|
118
|
+
- FAIL: Embargoed information sent without embargo terms, or conflicting embargo dates across pitches
|
|
119
|
+
|
|
120
|
+
2. **Non-embargo acknowledgment**
|
|
121
|
+
- PASS: If no embargo applies, the pitch explicitly states the information is for immediate use
|
|
122
|
+
- WARN: N/A (linked to embargo decision)
|
|
123
|
+
- FAIL: Ambiguous about whether information is embargoed or not
|
|
124
|
+
|
|
125
|
+
### DISC-PR-MEDIA-04: Press Release Structure -- Tier 2
|
|
126
|
+
|
|
127
|
+
**Checks:** Press release follows inverted pyramid with required elements
|
|
128
|
+
**Against:** Press release content
|
|
129
|
+
|
|
130
|
+
#### Evaluation Criteria
|
|
131
|
+
|
|
132
|
+
1. **Required elements**
|
|
133
|
+
- PASS: Includes headline, dateline, lead paragraph (who/what/when/where/why), supporting details, executive quote, boilerplate, and media contact info
|
|
134
|
+
- WARN: Missing one non-critical element (e.g., dateline or boilerplate)
|
|
135
|
+
- FAIL: Missing headline, lead paragraph, or more than 2 required elements
|
|
136
|
+
|
|
137
|
+
2. **Inverted pyramid structure**
|
|
138
|
+
- PASS: Most newsworthy information appears in the first paragraph; details expand in subsequent paragraphs
|
|
139
|
+
- WARN: Key news is present but buried below background context
|
|
140
|
+
- FAIL: Release leads with company history or product features before stating the actual news
|
|
141
|
+
|
|
142
|
+
### DISC-PR-MEDIA-05: Earned Media Measurement -- Tier 2
|
|
143
|
+
|
|
144
|
+
**Checks:** Coverage tracking and measurement plan exists per PLAY-10
|
|
145
|
+
**Against:** Campaign measurement documentation
|
|
146
|
+
|
|
147
|
+
#### Evaluation Criteria
|
|
148
|
+
|
|
149
|
+
1. **Measurement plan completeness**
|
|
150
|
+
- PASS: Measurement plan specifies tracking method (media monitoring tool or manual), target outlets, share-of-voice baseline, and success criteria
|
|
151
|
+
- WARN: Success criteria defined but tracking method not specified
|
|
152
|
+
- FAIL: No measurement plan for earned media outcomes
|
|
153
|
+
|
|
154
|
+
2. **Baseline documentation**
|
|
155
|
+
- PASS: Pre-campaign baseline metrics documented (current coverage volume, share of voice, brand mentions)
|
|
156
|
+
- WARN: Baseline mentioned but specific numbers not recorded
|
|
157
|
+
- FAIL: No baseline established before campaign launch
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Base Gate Overrides
|
|
162
|
+
|
|
163
|
+
| Base Gate ID | Default Tier | Override Tier | Reason |
|
|
164
|
+
|-------------|-------------|---------------|--------|
|
|
165
|
+
| GATE-02 (Claim Accuracy) | Tier 2 | Tier 1 | Press claims are amplified by journalists and become public record; inaccuracies are nearly impossible to retract once published |
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Format Rules
|
|
170
|
+
|
|
171
|
+
### Press Release Format
|
|
172
|
+
|
|
173
|
+
- **Headline:** 8-12 words, factual, no jargon. Title case.
|
|
174
|
+
- **Dateline:** CITY, STATE (Month Day, Year) --
|
|
175
|
+
- **Lead paragraph:** 2-3 sentences. Answer who, what, when, where, why.
|
|
176
|
+
- **Body:** 3-5 paragraphs, 400-600 words total (excluding boilerplate).
|
|
177
|
+
- **Quote:** Attributed to a named individual with title. 2-3 sentences maximum.
|
|
178
|
+
- **Boilerplate:** 50-75 words. Consistent across all releases.
|
|
179
|
+
- **Media contact:** Full name, title, email, phone. At the bottom.
|
|
180
|
+
|
|
181
|
+
### Media Pitch Email Format
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
Subject: [6-10 words, specific news angle -- no clickbait]
|
|
185
|
+
|
|
186
|
+
Hi [Journalist first name],
|
|
187
|
+
|
|
188
|
+
[1 sentence referencing their recent coverage or beat relevance]
|
|
189
|
+
|
|
190
|
+
[2-3 sentences stating the news/story and why it matters to their audience]
|
|
191
|
+
|
|
192
|
+
[1 sentence offering: interview, exclusive data, demo, or early access]
|
|
193
|
+
|
|
194
|
+
[1 sentence with a clear ask: "Would this be worth a conversation?"]
|
|
195
|
+
|
|
196
|
+
Best,
|
|
197
|
+
[Name]
|
|
198
|
+
[Title, Company]
|
|
199
|
+
[Phone]
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Total pitch length: 100-150 words. Shorter is better.
|
|
203
|
+
|
|
204
|
+
### Media Kit Contents
|
|
205
|
+
|
|
206
|
+
1. **Company fact sheet:** 1 page with founding date, HQ, team size, funding, key metrics
|
|
207
|
+
2. **Executive bios:** 100-150 words per executive, with high-resolution headshots
|
|
208
|
+
3. **Product screenshots/visuals:** High-resolution, properly licensed, with captions
|
|
209
|
+
4. **Press release archive:** Links to 3-5 most recent releases
|
|
210
|
+
5. **Brand assets:** Logo files (SVG, PNG), brand color codes, usage guidelines
|
|
211
|
+
6. **Media contact:** Dedicated PR contact with direct email and phone
|
|
212
|
+
|
|
213
|
+
### Byline Article Structure
|
|
214
|
+
|
|
215
|
+
- **Length:** 800-1200 words for most publications (check target outlet guidelines)
|
|
216
|
+
- **Opening:** Personal anecdote or contrarian statement -- NOT a product pitch
|
|
217
|
+
- **Body:** 3-5 supporting points with data, examples, or industry references
|
|
218
|
+
- **Closing:** Forward-looking perspective or actionable takeaway
|
|
219
|
+
- **Bio:** 2-3 sentences about the author, company mention in final sentence only
|
|
220
|
+
- **Product mentions:** Zero to one. More than one and the publication will reject it.
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## Examples
|
|
225
|
+
|
|
226
|
+
### Good: Customized Pitch
|
|
227
|
+
|
|
228
|
+
```
|
|
229
|
+
Subject: New data on developer tool adoption in enterprise (for your DevOps series)
|
|
230
|
+
|
|
231
|
+
Hi Sarah,
|
|
232
|
+
|
|
233
|
+
Your recent piece on CI/CD pipeline sprawl in Fortune 500 companies resonated
|
|
234
|
+
with what we are seeing in our customer base. We have new data from 200+
|
|
235
|
+
enterprise deployments showing that tool consolidation reduced pipeline
|
|
236
|
+
failures by 34%.
|
|
237
|
+
|
|
238
|
+
Would you be interested in an exclusive look at the data before we publish
|
|
239
|
+
the full report next month?
|
|
240
|
+
|
|
241
|
+
Best,
|
|
242
|
+
[Name]
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
**Why it works:** References specific recent coverage, offers exclusive data, makes a clear ask, under 100 words.
|
|
246
|
+
|
|
247
|
+
### Bad: Generic Spray-and-Pray Pitch
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
Subject: EXCITING NEWS FROM [COMPANY]!!!
|
|
251
|
+
|
|
252
|
+
Dear Editor,
|
|
253
|
+
|
|
254
|
+
[Company] is thrilled to announce our latest product update! We are the
|
|
255
|
+
leading provider of innovative solutions that empower businesses to
|
|
256
|
+
transform their digital journey. Our new features include...
|
|
257
|
+
|
|
258
|
+
[500 words of product description]
|
|
259
|
+
|
|
260
|
+
Please let us know if you would like to cover this exciting news.
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
**Problems:** No journalist name, no beat relevance, subject line is clickbait, self-congratulatory tone, too long, no specific ask, no news angle.
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## Anti-Patterns
|
|
268
|
+
|
|
269
|
+
1. **Spray-and-pray pitching** -- Sending the same generic pitch to 200+ journalists. Response rates drop below 1%. Customize every pitch or do not send it.
|
|
270
|
+
|
|
271
|
+
2. **Self-congratulatory press releases** -- Leading with "We are thrilled/excited/proud to announce..." The journalist does not care about your feelings. Lead with the news and why it matters to their readers.
|
|
272
|
+
|
|
273
|
+
3. **Ignoring journalist beat** -- Pitching a cybersecurity story to a consumer tech reporter. Shows you did not research the journalist and guarantees your email is deleted.
|
|
274
|
+
|
|
275
|
+
4. **Burying the news** -- Starting the press release with 2 paragraphs of company history before stating what actually happened. The news goes in the first sentence.
|
|
276
|
+
|
|
277
|
+
5. **Pitching without a media list** -- Ad-hoc outreach to whoever comes to mind. Without a structured list, you miss key outlets, duplicate efforts, and cannot track results.
|
|
278
|
+
|
|
279
|
+
6. **Breaking your own embargo** -- Publishing on social media or the company blog before the embargo lifts. This kills journalist trust and ensures future embargoes are ignored.
|
|
280
|
+
|
|
281
|
+
7. **Product pitches disguised as bylines** -- Submitting a byline article that reads like a product brochure. Editors reject these immediately and may blacklist the author.
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## Metrics
|
|
286
|
+
|
|
287
|
+
Track these indicators for PR/media content after shipping:
|
|
288
|
+
|
|
289
|
+
- **Media mentions** -- Total coverage count across Tier 1, 2, and 3 outlets, measured per campaign
|
|
290
|
+
- **Share of voice** -- Brand mention frequency compared to competitors in the same coverage period
|
|
291
|
+
- **Backlinks from coverage** -- Number of dofollow links from media articles pointing to the brand's domain
|
|
292
|
+
- **Referral traffic from coverage** -- Website visits originating from media articles, tracked via UTM or referral source
|
|
293
|
+
- **Tier 1/2/3 coverage ratio** -- Distribution of coverage across outlet tiers to assess campaign quality
|
|
294
|
+
- **Pitch-to-placement rate** -- Percentage of pitches sent that resulted in published coverage
|
|
295
|
+
- **Message pull-through** -- Percentage of coverage that includes key messaging points from the pitch
|
|
296
|
+
- **Journalist response rate** -- Percentage of pitched journalists who responded (even if declining), indicating list quality
|
package/playbooks/seo.md
ADDED
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
---
|
|
2
|
+
discipline: seo
|
|
3
|
+
asset_types: [blog-post, landing-page, pillar-page, programmatic-seo]
|
|
4
|
+
version: "1.0"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# SEO Discipline Playbook
|
|
8
|
+
|
|
9
|
+
This playbook extends the base playbook contract (`base.md`) with SEO-specific production guidance, discipline gates, and format rules. It is loaded by ttm-producer during content generation and parsed by ttm-verify for gate evaluation.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Production Guidance
|
|
14
|
+
|
|
15
|
+
### Search Intent First
|
|
16
|
+
|
|
17
|
+
Identify whether the target query is informational, commercial, navigational, or transactional. Match the content format to the intent:
|
|
18
|
+
|
|
19
|
+
- **Informational** ("how to X", "what is X"): long-form guide or explainer
|
|
20
|
+
- **Commercial** ("best X", "X vs Y"): comparison, listicle, or review
|
|
21
|
+
- **Navigational** ("brand X login", "X pricing"): direct landing page
|
|
22
|
+
- **Transactional** ("buy X", "X free trial"): conversion-focused landing page with CTA
|
|
23
|
+
|
|
24
|
+
If the content format does not match the dominant intent in top-ranking results, the asset will underperform regardless of quality.
|
|
25
|
+
|
|
26
|
+
### Keyword Placement
|
|
27
|
+
|
|
28
|
+
Place the target keyword in:
|
|
29
|
+
|
|
30
|
+
- Title tag (near the front)
|
|
31
|
+
- H1 heading
|
|
32
|
+
- First 100 words of body content
|
|
33
|
+
- At least one H2 subheading
|
|
34
|
+
|
|
35
|
+
Do NOT stuff keywords. Maintain 1-2% keyword density maximum. Keyword variants and synonyms count toward topical coverage but not density.
|
|
36
|
+
|
|
37
|
+
### Content Structure
|
|
38
|
+
|
|
39
|
+
Use H2/H3 hierarchy logically. Every H2 should answer a sub-question of the main query. Avoid skipping heading levels (H1 to H3). Each H2 section should be 150-400 words -- long enough for substance, short enough for scannability.
|
|
40
|
+
|
|
41
|
+
### Internal Linking
|
|
42
|
+
|
|
43
|
+
Weave 3-6 contextual internal links per 1000 words to related content. Use descriptive anchor text that tells the reader what they will find. Avoid generic anchors like "click here" or "read more."
|
|
44
|
+
|
|
45
|
+
### Schema Markup
|
|
46
|
+
|
|
47
|
+
Include Article schema at minimum for blog posts and pillar pages. Add FAQ schema if the content contains question-answer pairs. Add HowTo schema if the content has step-by-step instructions. Specify required fields (headline, author, datePublished for Article; name, acceptedAnswer for FAQ).
|
|
48
|
+
|
|
49
|
+
### Entity-Based SEO
|
|
50
|
+
|
|
51
|
+
Reference known entities (people, organizations, concepts, products) that search engines associate with the topic. Build topical authority by connecting to established knowledge graph entities rather than relying on keyword repetition alone.
|
|
52
|
+
|
|
53
|
+
### Performance Awareness
|
|
54
|
+
|
|
55
|
+
Content decisions impact Core Web Vitals. Follow these rules:
|
|
56
|
+
|
|
57
|
+
- Use optimized image formats (WebP/AVIF) with explicit width/height attributes
|
|
58
|
+
- Lazy-load images below the fold
|
|
59
|
+
- Avoid render-blocking embeds (video players, social widgets) above the fold
|
|
60
|
+
- Reserve space for ad slots and dynamic content to prevent layout shift
|
|
61
|
+
- Prefer native HTML elements (details/summary for accordions) over heavy JavaScript widgets
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Discipline Gates
|
|
66
|
+
|
|
67
|
+
### DISC-SEO-01: Title/H1 Alignment -- Tier 1
|
|
68
|
+
|
|
69
|
+
**Checks:** Title tag and H1 heading convey the same primary topic
|
|
70
|
+
**Against:** Asset content structure
|
|
71
|
+
|
|
72
|
+
#### Evaluation Criteria
|
|
73
|
+
|
|
74
|
+
1. **Title-H1 topic match**
|
|
75
|
+
- PASS: Title tag and H1 contain the same primary keyword and address the same topic
|
|
76
|
+
- WARN: Title and H1 address the same topic but use different keyword phrasing
|
|
77
|
+
- FAIL: Title and H1 address different topics or target different keywords
|
|
78
|
+
|
|
79
|
+
2. **Title length**
|
|
80
|
+
- PASS: Title tag is 50-60 characters
|
|
81
|
+
- WARN: Title tag is 45-49 or 61-70 characters
|
|
82
|
+
- FAIL: Title tag is under 30 or over 70 characters
|
|
83
|
+
|
|
84
|
+
### DISC-SEO-02: Search Intent Match -- Tier 1
|
|
85
|
+
|
|
86
|
+
**Checks:** Content matches the search intent of the target query
|
|
87
|
+
**Against:** Brief's target keyword and declared intent type
|
|
88
|
+
|
|
89
|
+
#### Evaluation Criteria
|
|
90
|
+
|
|
91
|
+
1. **Intent alignment**
|
|
92
|
+
- PASS: First 100-150 words directly address the target query and match the declared intent
|
|
93
|
+
- WARN: Content addresses the query but the direct answer is buried below introductory context
|
|
94
|
+
- FAIL: Content does not match the declared intent type (e.g., informational content for a transactional query)
|
|
95
|
+
|
|
96
|
+
2. **Content format match**
|
|
97
|
+
- PASS: Content format matches intent -- listicle for "best X", how-to guide for "how to X", comparison for "X vs Y"
|
|
98
|
+
- WARN: Content partially matches the expected format but includes mixed intent signals
|
|
99
|
+
- FAIL: Content format contradicts the search intent (e.g., a product page for an informational query)
|
|
100
|
+
|
|
101
|
+
### DISC-SEO-03: Schema Markup -- Tier 2
|
|
102
|
+
|
|
103
|
+
**Checks:** Structured data presence and correctness
|
|
104
|
+
**Against:** schema.org specification for the applicable type (Article, FAQPage, HowTo)
|
|
105
|
+
|
|
106
|
+
#### Evaluation Criteria
|
|
107
|
+
|
|
108
|
+
1. **Schema presence**
|
|
109
|
+
- PASS: Appropriate schema type (Article, FAQ, or HowTo) is specified in the asset with required fields populated
|
|
110
|
+
- WARN: Schema type is mentioned but one or more required fields are missing or incomplete
|
|
111
|
+
- FAIL: No schema markup specified for content that qualifies for structured data
|
|
112
|
+
|
|
113
|
+
2. **Schema accuracy**
|
|
114
|
+
- PASS: All required fields present and correctly typed (e.g., datePublished is ISO 8601, author has name)
|
|
115
|
+
- WARN: Required fields present but optional fields (image, dateModified) are missing
|
|
116
|
+
- FAIL: Required fields missing, incorrect field types, or wrong schema type for the content
|
|
117
|
+
|
|
118
|
+
### DISC-SEO-04: Internal Link Density -- Tier 2
|
|
119
|
+
|
|
120
|
+
**Checks:** Contextual internal link quantity and anchor text quality
|
|
121
|
+
**Against:** Asset content (self-contained check)
|
|
122
|
+
|
|
123
|
+
#### Evaluation Criteria
|
|
124
|
+
|
|
125
|
+
1. **Link count**
|
|
126
|
+
- PASS: 3-6 contextual internal links per 1000 words of content
|
|
127
|
+
- WARN: 1-2 internal links per 1000 words
|
|
128
|
+
- FAIL: 0 internal links in the asset
|
|
129
|
+
|
|
130
|
+
2. **Anchor text quality**
|
|
131
|
+
- PASS: All internal links use descriptive anchor text that indicates the destination content
|
|
132
|
+
- WARN: Some links use generic anchors ("click here", "read more", "learn more")
|
|
133
|
+
- FAIL: N/A -- linked to link count result
|
|
134
|
+
|
|
135
|
+
### DISC-SEO-05: Thin Content Detection -- Tier 1
|
|
136
|
+
|
|
137
|
+
**Checks:** Content depth and uniqueness
|
|
138
|
+
**Against:** Asset content (self-contained check)
|
|
139
|
+
|
|
140
|
+
#### Evaluation Criteria
|
|
141
|
+
|
|
142
|
+
1. **Word count**
|
|
143
|
+
- PASS: 800+ words for standard pages (blog-post, landing-page, pillar-page); 300+ words for programmatic-seo variants
|
|
144
|
+
- WARN: 500-799 words for standard pages
|
|
145
|
+
- FAIL: Under 500 words for standard pages or under 300 words for programmatic-seo
|
|
146
|
+
|
|
147
|
+
2. **Unique substance**
|
|
148
|
+
- PASS: Content provides original analysis, proprietary data, unique perspective, or first-party research
|
|
149
|
+
- WARN: Content summarizes existing publicly available information with minor original commentary
|
|
150
|
+
- FAIL: Content is mostly boilerplate, template-generated text with only location/variable swaps, or restates common knowledge without adding value
|
|
151
|
+
|
|
152
|
+
### DISC-SEO-06: Meta Description -- Tier 2
|
|
153
|
+
|
|
154
|
+
**Checks:** Meta description presence, length, and keyword inclusion
|
|
155
|
+
**Against:** Asset metadata fields
|
|
156
|
+
|
|
157
|
+
#### Evaluation Criteria
|
|
158
|
+
|
|
159
|
+
1. **Presence and length**
|
|
160
|
+
- PASS: Meta description is present and 120-160 characters in length
|
|
161
|
+
- WARN: Meta description is present but under 120 or over 160 characters
|
|
162
|
+
- FAIL: No meta description provided
|
|
163
|
+
|
|
164
|
+
2. **Keyword inclusion**
|
|
165
|
+
- PASS: Target keyword appears naturally within the meta description
|
|
166
|
+
- WARN: A keyword variant or close synonym is used instead of the exact target keyword
|
|
167
|
+
- FAIL: Neither the target keyword nor any recognizable variant appears in the meta description
|
|
168
|
+
|
|
169
|
+
### DISC-SEO-07: Core Web Vitals Budget -- Tier 1
|
|
170
|
+
|
|
171
|
+
**Checks:** Content structure for Core Web Vitals impact -- whether the asset's content design stays within performance budgets
|
|
172
|
+
**Against:** Google Core Web Vitals thresholds (LCP < 2.5s, CLS < 0.1, INP < 200ms)
|
|
173
|
+
|
|
174
|
+
#### Evaluation Criteria
|
|
175
|
+
|
|
176
|
+
1. **LCP risk**
|
|
177
|
+
- PASS: Hero/above-fold content uses optimized image formats (WebP/AVIF) with explicit width/height, lazy-loads below-fold images, no render-blocking embeds above fold
|
|
178
|
+
- WARN: Images present above fold but missing explicit dimensions or using unoptimized formats (PNG/uncompressed JPEG)
|
|
179
|
+
- FAIL: Above-fold content depends on heavy unoptimized media (>200KB hero image without dimensions), multiple render-blocking third-party embeds, or auto-playing video without poster frame
|
|
180
|
+
|
|
181
|
+
2. **CLS risk**
|
|
182
|
+
- PASS: All images and embeds have explicit width/height or aspect-ratio CSS, no dynamically injected content above fold, ad slots have reserved space
|
|
183
|
+
- WARN: Most media has dimensions but 1-2 elements are missing explicit sizing
|
|
184
|
+
- FAIL: Images/embeds without dimensions that will cause layout shift, dynamically inserted banners or CTAs above existing content
|
|
185
|
+
|
|
186
|
+
3. **INP risk**
|
|
187
|
+
- PASS: No heavy inline JavaScript or click handlers that would block interaction -- content relies on standard links and native form elements
|
|
188
|
+
- WARN: Interactive elements present (accordions, tabs) but use standard HTML patterns or lightweight JS
|
|
189
|
+
- FAIL: Content specifies complex interactive widgets, heavy carousels, or inline calculators without performance notes
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Base Gate Overrides
|
|
194
|
+
|
|
195
|
+
| Base Gate ID | Default Tier | Override Tier | Reason |
|
|
196
|
+
|-------------|-------------|---------------|--------|
|
|
197
|
+
| GATE-10 | Tier 2 (advisory) | Tier 1 (blocking) | SEO format correctness directly impacts search rankings; structural errors (missing H1, broken title tag) prevent proper indexing and SERP display |
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Format Rules
|
|
202
|
+
|
|
203
|
+
- **Title tag:** 50-60 characters, target keyword placed near the front
|
|
204
|
+
- **Meta description:** 120-160 characters, action-oriented with target keyword included
|
|
205
|
+
- **H1:** Exactly one per page, must address the same topic as the title tag
|
|
206
|
+
- **URL structure:** Short, hyphenated, includes primary keyword (e.g., `/seo-content-guide` not `/page?id=123`)
|
|
207
|
+
- **Image alt text:** Descriptive of the image content, includes target keyword where naturally appropriate
|
|
208
|
+
- **Images:** Explicit width/height attributes required, WebP/AVIF format preferred, lazy-load attribute on below-fold images
|
|
209
|
+
- **Heading hierarchy:** H1 > H2 > H3 in order, no skipped levels
|
|
210
|
+
- **Canonical URL:** Specified for every page to prevent duplicate content issues
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Examples
|
|
215
|
+
|
|
216
|
+
### Good: Intent-Matching Blog Post Structure
|
|
217
|
+
|
|
218
|
+
```
|
|
219
|
+
Title: "How to Optimize Core Web Vitals in 2024" (48 chars)
|
|
220
|
+
H1: "How to Optimize Core Web Vitals: A Step-by-Step Guide"
|
|
221
|
+
First 100 words: Directly explains what CWV optimization involves and why it matters.
|
|
222
|
+
Schema: HowTo with 6 numbered steps.
|
|
223
|
+
Internal links: 4 links to related performance articles with descriptive anchors.
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Good: Programmatic SEO with Sufficient Depth
|
|
227
|
+
|
|
228
|
+
```
|
|
229
|
+
Title: "Best Coffee Shops in Austin, TX" (33 chars -- variant page)
|
|
230
|
+
H1: "Best Coffee Shops in Austin, Texas"
|
|
231
|
+
Content: 450 words with 3 unique reviews, local entity references, original ratings.
|
|
232
|
+
Schema: Article with LocalBusiness references.
|
|
233
|
+
Unique content ratio: 70%+ original text beyond the template.
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### Bad: Keyword-Stuffed Landing Page
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
Title: "Best SEO Tools | SEO Tools Reviews | Top SEO Tools 2024"
|
|
240
|
+
Problem: Title is 56 chars but keyword "SEO Tools" appears 3 times (stuffing).
|
|
241
|
+
H1: "SEO Tools" -- does not match the multi-topic title.
|
|
242
|
+
Body: "SEO tools" appears every other sentence (4%+ density).
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### Bad: Thin Programmatic SEO Template
|
|
246
|
+
|
|
247
|
+
```
|
|
248
|
+
Title: "Best Coffee Shops in [City], [State]"
|
|
249
|
+
Content: 120 words. Only the city name changes between variants.
|
|
250
|
+
Unique content: Template boilerplate with location swap only.
|
|
251
|
+
No schema, no internal links, no original substance.
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Anti-Patterns
|
|
257
|
+
|
|
258
|
+
1. **Keyword stuffing** -- Keyword density exceeding 2%. Search engines penalize unnatural repetition. Use synonyms and topical variants instead.
|
|
259
|
+
|
|
260
|
+
2. **Title/H1 mismatch** -- Title tag targeting one keyword while H1 targets a different topic. This confuses search engines about the page's primary topic.
|
|
261
|
+
|
|
262
|
+
3. **Missing schema markup** -- Publishing content that qualifies for Article, FAQ, or HowTo structured data without specifying the schema. Missed opportunity for rich results.
|
|
263
|
+
|
|
264
|
+
4. **Generic internal link anchors** -- Using "click here", "read more", or "learn more" as anchor text. Descriptive anchors help search engines understand link relationships.
|
|
265
|
+
|
|
266
|
+
5. **Duplicate/thin programmatic pages** -- Generating hundreds of pages where only a location or variable name changes. Each page must contain substantive unique content (300+ words unique).
|
|
267
|
+
|
|
268
|
+
6. **Ignoring search intent** -- Serving informational content for a transactional query, or a product page for an informational query. Match the dominant intent visible in current SERP results.
|
|
269
|
+
|
|
270
|
+
7. **Hero images without explicit dimensions** -- Placing large images above the fold without width/height attributes causes Cumulative Layout Shift (CLS), degrading Core Web Vitals scores and user experience.
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Metrics
|
|
275
|
+
|
|
276
|
+
Track these indicators for SEO content after shipping:
|
|
277
|
+
|
|
278
|
+
- **Organic impressions and clicks** -- Google Search Console, measured weekly for first 90 days
|
|
279
|
+
- **Average position for target keyword** -- GSC, track trend over 30/60/90 day windows
|
|
280
|
+
- **Click-through rate (CTR) from SERP** -- GSC, compare against position-adjusted benchmarks
|
|
281
|
+
- **Time on page / scroll depth** -- Analytics platform, indicates content engagement
|
|
282
|
+
- **Internal link click-through** -- Track clicks on internal links within the asset
|
|
283
|
+
- **Core Web Vitals pass rate** -- PageSpeed Insights or CrUX data, must maintain "Good" threshold
|
|
284
|
+
- **Indexed status** -- Confirm page is indexed within 7 days of publication via GSC
|