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,263 @@
|
|
|
1
|
+
---
|
|
2
|
+
discipline: linkedin
|
|
3
|
+
asset_types: [linkedin-post, linkedin-article, linkedin-carousel, linkedin-poll]
|
|
4
|
+
version: "1.0"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# LinkedIn Playbook
|
|
8
|
+
|
|
9
|
+
## Production Guidance
|
|
10
|
+
|
|
11
|
+
LinkedIn rewards content that keeps people on the platform. The algorithm actively penalizes posts with external links (~60% less reach per 2026 data). Every LinkedIn post must deliver its full value natively -- no teasers, no "read more at..." redirects. If a link is essential, place it in the first comment, not the post body.
|
|
12
|
+
|
|
13
|
+
### Hook First
|
|
14
|
+
|
|
15
|
+
The first line is everything. It must appear before the "see more" truncation (~210 characters on mobile). The hook determines whether the reader expands the post or scrolls past.
|
|
16
|
+
|
|
17
|
+
**Do NOT start with "I".** Opening with "I was thinking...", "I recently...", or "I just..." signals a self-centered post that the reader has no reason to care about. Instead, open with:
|
|
18
|
+
- A question that challenges an assumption
|
|
19
|
+
- A bold claim or counterintuitive statement
|
|
20
|
+
- A specific data point or statistic
|
|
21
|
+
- A scene-setting scenario the reader recognizes
|
|
22
|
+
|
|
23
|
+
The hook must be complete within the first 210 characters. Do not start a thought in the hook that requires expanding the post to understand.
|
|
24
|
+
|
|
25
|
+
### Native Content Only
|
|
26
|
+
|
|
27
|
+
LinkedIn's algorithm penalizes posts with external links. Content must stand alone without requiring a click. Apply these rules:
|
|
28
|
+
|
|
29
|
+
1. **No URLs in the post body.** If the post references external content, summarize the key insight in the post itself.
|
|
30
|
+
2. **Link in first comment** if a URL is essential. Mention "link in comments" at the end of the post if needed.
|
|
31
|
+
3. **Content self-sufficiency:** A reader who never clicks any link should still get full value from the post text.
|
|
32
|
+
|
|
33
|
+
### Visual Assets
|
|
34
|
+
|
|
35
|
+
Document/carousel posts and image posts get higher engagement than text-only. When including visual assets:
|
|
36
|
+
- Use 1:1 (square) or 4:5 (portrait) image ratios for maximum feed space
|
|
37
|
+
- Carousel documents should be PDF format with one key point per slide
|
|
38
|
+
- Infographics and data visualizations perform well for B2B audiences
|
|
39
|
+
|
|
40
|
+
### Engagement Design
|
|
41
|
+
|
|
42
|
+
The algorithm rewards posts that generate meaningful replies (not just reactions). Design for conversation:
|
|
43
|
+
- End with a specific question or conversation prompt
|
|
44
|
+
- Consider what the reader would actually type as a comment
|
|
45
|
+
- Avoid generic prompts like "What do you think?" -- ask something specific
|
|
46
|
+
- Questions that invite personal experience sharing generate the best threads
|
|
47
|
+
|
|
48
|
+
### Format for Scanning
|
|
49
|
+
|
|
50
|
+
LinkedIn posts are read on phones. Format accordingly:
|
|
51
|
+
- Use line breaks liberally between ideas
|
|
52
|
+
- Short paragraphs: 1-2 sentences maximum
|
|
53
|
+
- Use whitespace as a design element -- dense blocks of text get skipped
|
|
54
|
+
- Bullet points and numbered lists break up the visual rhythm
|
|
55
|
+
- Avoid long paragraphs that create walls of text on mobile
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Discipline Gates
|
|
60
|
+
|
|
61
|
+
### DISC-LI-01: Hook Quality -- Tier 1
|
|
62
|
+
|
|
63
|
+
**Checks:** First line effectiveness and format
|
|
64
|
+
**Against:** Post content (first 210 characters)
|
|
65
|
+
|
|
66
|
+
#### Evaluation Criteria
|
|
67
|
+
|
|
68
|
+
1. **Opening word**
|
|
69
|
+
- PASS: Post does NOT start with "I" -- opens with a question, data point, bold claim, or scene-setting statement
|
|
70
|
+
- WARN: Post starts with "I" but follows immediately with a surprising or counterintuitive statement (e.g., "I deleted our most successful campaign -- here's why")
|
|
71
|
+
- FAIL: Post starts with "I" followed by mundane context (e.g., "I was thinking about...", "I recently attended...", "I just read...")
|
|
72
|
+
|
|
73
|
+
2. **Hook visibility**
|
|
74
|
+
- PASS: Hook is complete within the first 210 characters -- the reader gets the key promise or tension before "see more"
|
|
75
|
+
- WARN: Hook starts strong but the key payoff falls after the 210-character truncation point
|
|
76
|
+
- FAIL: First 210 characters are setup or context with no hook -- no reason for the reader to expand the post
|
|
77
|
+
|
|
78
|
+
### DISC-LI-02: Native Content Format -- Tier 1
|
|
79
|
+
|
|
80
|
+
**Checks:** Absence of external links in post body and content self-sufficiency
|
|
81
|
+
**Against:** Post content
|
|
82
|
+
|
|
83
|
+
#### Evaluation Criteria
|
|
84
|
+
|
|
85
|
+
1. **Link placement**
|
|
86
|
+
- PASS: No external URLs in the main post body
|
|
87
|
+
- WARN: One external link present in the post body, but the post content stands alone without it (the link is supplementary, not the point)
|
|
88
|
+
- FAIL: External link is the primary purpose of the post -- link-centric content (e.g., "Check out this article: [URL]" or "New blog post: [URL]")
|
|
89
|
+
|
|
90
|
+
2. **Content self-sufficiency**
|
|
91
|
+
- PASS: Reader gets full value from the post text alone without clicking any link
|
|
92
|
+
- WARN: Post summarizes linked content but adds original perspective or insight beyond the link
|
|
93
|
+
- FAIL: Post is a teaser that requires clicking a link for the actual content (e.g., "5 tips for better marketing -- read them here: [URL]")
|
|
94
|
+
|
|
95
|
+
### DISC-LI-03: Engagement Path -- Tier 2
|
|
96
|
+
|
|
97
|
+
**Checks:** Conversation prompt and reply path design
|
|
98
|
+
**Against:** Post content (focus on closing section)
|
|
99
|
+
|
|
100
|
+
#### Evaluation Criteria
|
|
101
|
+
|
|
102
|
+
1. **Conversation prompt**
|
|
103
|
+
- PASS: Post ends with a specific question or clear invitation to respond that relates to the post's topic
|
|
104
|
+
- WARN: Post has an implied question or general prompt but no explicit ask (e.g., ends with a provocative statement but no question)
|
|
105
|
+
- FAIL: Post ends without any engagement prompt -- just a statement, a link, or a hashtag block
|
|
106
|
+
|
|
107
|
+
2. **Reply path clarity**
|
|
108
|
+
- PASS: The question or prompt has a clear, easy-to-answer response path -- readers know what to type (e.g., "What's the biggest deal you almost lost to a competitor this quarter?")
|
|
109
|
+
- WARN: Prompt exists but is too broad or abstract (e.g., "What do you think?", "Agree or disagree?", "Thoughts?")
|
|
110
|
+
- FAIL: N/A -- linked to conversation prompt presence above
|
|
111
|
+
|
|
112
|
+
### DISC-LI-04: Character/Format Limits -- Tier 2
|
|
113
|
+
|
|
114
|
+
**Checks:** Post length and formatting for optimal engagement
|
|
115
|
+
**Against:** LinkedIn platform limits and engagement data
|
|
116
|
+
|
|
117
|
+
#### Evaluation Criteria
|
|
118
|
+
|
|
119
|
+
1. **Character count**
|
|
120
|
+
- PASS: Post is 1,200-2,100 characters (optimal engagement range based on 2026 data)
|
|
121
|
+
- WARN: Post is 800-1,199 or 2,101-3,000 characters (functional but outside optimal range)
|
|
122
|
+
- FAIL: Post exceeds 3,000 characters (LinkedIn maximum) or is under 300 characters (too thin for meaningful content)
|
|
123
|
+
|
|
124
|
+
2. **Readability formatting**
|
|
125
|
+
- PASS: Line breaks between paragraphs, short paragraphs of 1-3 sentences, limited hashtags (3-5 at end of post)
|
|
126
|
+
- WARN: Some long paragraphs (4+ sentences) or slightly excessive hashtags (6-10)
|
|
127
|
+
- FAIL: Wall of text with no line breaks, or 10+ hashtags cluttering the post
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Base Gate Overrides
|
|
132
|
+
|
|
133
|
+
None -- all base gates keep default tiers.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Format Rules
|
|
138
|
+
|
|
139
|
+
LinkedIn-specific structural requirements enforced during production:
|
|
140
|
+
|
|
141
|
+
- **Maximum post length:** 3,000 characters
|
|
142
|
+
- **Optimal post length:** 1,200-2,100 characters
|
|
143
|
+
- **Hook completion:** Must complete within first 210 characters (mobile "see more" truncation)
|
|
144
|
+
- **Hashtags:** 3-5 maximum, placed at end of post, not inline
|
|
145
|
+
- **Mentions:** Use sparingly -- only mention people who will likely engage; avoid tag-spam
|
|
146
|
+
- **Line breaks:** Between every paragraph; no paragraph longer than 3 sentences
|
|
147
|
+
- **Carousel documents:** PDF format, 1:1 or 4:5 ratio slides, one key point per slide
|
|
148
|
+
- **Article headline:** Under 100 characters
|
|
149
|
+
- **Image ratio:** 1:1 (square) or 4:5 (portrait) for maximum feed space
|
|
150
|
+
- **No external links in post body:** Place links in first comment if needed
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Examples
|
|
155
|
+
|
|
156
|
+
### Good: Strong Hook, Native Content, Engagement Question
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
We analyzed 847 B2B LinkedIn posts last quarter.
|
|
160
|
+
|
|
161
|
+
The #1 predictor of engagement wasn't the topic.
|
|
162
|
+
It wasn't the time of posting.
|
|
163
|
+
It wasn't even the visual assets.
|
|
164
|
+
|
|
165
|
+
It was the first line.
|
|
166
|
+
|
|
167
|
+
Posts that opened with a specific data point got 3.2x more comments
|
|
168
|
+
than posts that opened with "I".
|
|
169
|
+
|
|
170
|
+
Here's what the top-performing hooks had in common:
|
|
171
|
+
|
|
172
|
+
1. They challenged a common assumption
|
|
173
|
+
2. They included a number in the first 10 words
|
|
174
|
+
3. They created a knowledge gap the reader wanted to close
|
|
175
|
+
|
|
176
|
+
The worst-performing hooks? Almost all started with:
|
|
177
|
+
"I'm excited to announce..."
|
|
178
|
+
"I was thinking about..."
|
|
179
|
+
"I recently had the pleasure of..."
|
|
180
|
+
|
|
181
|
+
What's the strongest opening line you've ever written for a LinkedIn post?
|
|
182
|
+
|
|
183
|
+
#B2BMarketing #ContentStrategy #LinkedInTips
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Why it works:** Opens with data (not "I"), hook completes before 210 chars, no external links, specific engagement question, good formatting with line breaks, 5 hashtags at end.
|
|
187
|
+
|
|
188
|
+
### Good: Counterintuitive Claim with Carousel
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
Stop writing LinkedIn posts.
|
|
192
|
+
|
|
193
|
+
Seriously. If your last 10 posts got fewer than 20 comments each,
|
|
194
|
+
writing more of the same won't fix it.
|
|
195
|
+
|
|
196
|
+
Here's what to do instead (carousel attached):
|
|
197
|
+
|
|
198
|
+
Slide 1: Audit your last 10 posts for hook quality
|
|
199
|
+
Slide 2: Identify which topics generated replies vs. just likes
|
|
200
|
+
Slide 3: Double down on reply-generating topics
|
|
201
|
+
Slide 4: Rewrite your weakest hook using the data-first formula
|
|
202
|
+
|
|
203
|
+
The carousel breaks down each step with examples.
|
|
204
|
+
|
|
205
|
+
What's your current average comments per post? (Be honest -- no judgment.)
|
|
206
|
+
|
|
207
|
+
#LinkedInStrategy #ContentMarketing
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**Why it works:** Bold claim opener, no "I", native content (carousel provides value without external link), specific question with low barrier to answer.
|
|
211
|
+
|
|
212
|
+
### Bad: "I" Opener with Link
|
|
213
|
+
|
|
214
|
+
```
|
|
215
|
+
I'm excited to share that our team just published a new blog post
|
|
216
|
+
about the future of B2B marketing.
|
|
217
|
+
|
|
218
|
+
It covers some really interesting trends that I think you'll find
|
|
219
|
+
valuable. We spent weeks researching this.
|
|
220
|
+
|
|
221
|
+
Check it out here: https://example.com/blog/future-of-b2b
|
|
222
|
+
|
|
223
|
+
Let me know what you think!
|
|
224
|
+
|
|
225
|
+
#Marketing #B2B #Future #Trends #Innovation #Digital #Strategy #Growth #Leadership #Tech
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**Why it fails:** DISC-LI-01 FAIL (starts with "I'm excited"), DISC-LI-02 FAIL (link-centric post), DISC-LI-03 WARN ("Let me know what you think" is too vague), DISC-LI-04 WARN (10 hashtags).
|
|
229
|
+
|
|
230
|
+
### Bad: Wall of Text, No Engagement
|
|
231
|
+
|
|
232
|
+
```
|
|
233
|
+
The landscape of B2B marketing is rapidly evolving and companies need to adapt their strategies to stay competitive in 2026. With the rise of AI-powered tools, content marketing has become both easier to produce and harder to differentiate. Traditional approaches like gated whitepapers and webinar registrations are seeing declining conversion rates as buyers increasingly prefer ungated, freely available content that demonstrates expertise without requiring an email exchange. The companies that are winning are those that publish research, share data openly, and build trust through transparency rather than through form-fill gates. This shift requires a fundamental rethinking of how we measure marketing ROI since the traditional MQL model breaks down when your best content is freely accessible.
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
**Why it fails:** DISC-LI-01 FAIL (no hook -- just context), DISC-LI-03 FAIL (no engagement prompt), DISC-LI-04 FAIL (wall of text, no line breaks, single paragraph).
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Anti-Patterns
|
|
241
|
+
|
|
242
|
+
1. **Starting with "I was thinking about..." or "I recently...":** These openers signal self-focused content. The reader has no reason to care about what you were thinking -- lead with what matters to them.
|
|
243
|
+
|
|
244
|
+
2. **Posting external links as the main content:** LinkedIn algorithm suppresses link posts by approximately 60%. If the post is just a wrapper around a URL, it will reach a fraction of your audience.
|
|
245
|
+
|
|
246
|
+
3. **Wall of text with no line breaks:** Mobile readers see a dense block of text and scroll past. Use whitespace aggressively -- every 1-2 sentences should have a line break.
|
|
247
|
+
|
|
248
|
+
4. **Ending with no engagement prompt:** A post that ends with a statement gives the reader no reason to comment. Always close with a specific question or invitation to share their experience.
|
|
249
|
+
|
|
250
|
+
5. **Excessive hashtags (10+):** More than 5 hashtags looks spammy and does not improve discovery. Use 3-5 relevant hashtags at the end of the post.
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## Metrics
|
|
255
|
+
|
|
256
|
+
What to measure post-ship for LinkedIn content:
|
|
257
|
+
|
|
258
|
+
- **Impressions:** Reach and distribution -- how many feeds the post appeared in. Baseline varies by follower count.
|
|
259
|
+
- **Engagement rate:** (Reactions + comments) / impressions. Benchmark: 2-5% is good for B2B.
|
|
260
|
+
- **Comment quality:** Ratio of meaningful replies (2+ sentences, on-topic) vs. emoji-only or generic reactions. High-quality comments signal content resonance and drive algorithmic distribution.
|
|
261
|
+
- **Profile views driven:** Awareness metric -- did the post drive people to learn more about the author/company? Track the spike in profile views within 48 hours of posting.
|
|
262
|
+
- **Click-through to CTA in comments:** If using the link-in-comments strategy, track click-through rate on the comment link. Note: LinkedIn does not provide native analytics for comment links, so use UTM-tagged URLs.
|
|
263
|
+
- **Follower growth:** Net new followers within 48 hours of posting. Sustained growth signals content-market fit.
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
---
|
|
2
|
+
discipline: paid-ads
|
|
3
|
+
asset_types: [search-ad, display-ad, social-ad, video-ad, landing-page-ad]
|
|
4
|
+
version: "1.0"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Paid Ads Discipline Playbook
|
|
8
|
+
|
|
9
|
+
This playbook extends the base playbook contract (`base.md`) with paid advertising-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
|
+
### Ad-to-Landing-Page Message Match
|
|
16
|
+
|
|
17
|
+
The single most important factor in paid ad performance is message match -- the ad copy promise must match the landing page headline and above-the-fold content exactly. When a user clicks an ad that says "Get 50% Off Your First Month," the landing page H1 must say "50% Off Your First Month" (or semantically equivalent). Any disconnect between ad promise and landing page delivery kills conversion rate and wastes ad spend.
|
|
18
|
+
|
|
19
|
+
For every ad creative, specify the landing page URL and confirm that:
|
|
20
|
+
|
|
21
|
+
- The ad headline claim appears in the landing page H1
|
|
22
|
+
- The ad CTA matches the landing page primary action button
|
|
23
|
+
- The visual style (colors, imagery, tone) is consistent between ad and landing page
|
|
24
|
+
- The offer terms visible in the ad are present above the fold on the landing page
|
|
25
|
+
|
|
26
|
+
### Creative Variety
|
|
27
|
+
|
|
28
|
+
Never run a single creative. Every campaign must include multiple creative variations for A/B testing:
|
|
29
|
+
|
|
30
|
+
- Minimum 3 distinct variations per ad set
|
|
31
|
+
- Each variation should test a different angle: different hook, different value proposition emphasis, different visual approach
|
|
32
|
+
- Variations should differ meaningfully -- changing one word does not count as a variation
|
|
33
|
+
- Label each variation clearly (e.g., "Pain Point Hook," "Social Proof Hook," "Benefit-First Hook")
|
|
34
|
+
|
|
35
|
+
Creative variety enables performance optimization. Without it, you cannot know which message resonates and you are guessing with budget.
|
|
36
|
+
|
|
37
|
+
### Audience-Creative Fit
|
|
38
|
+
|
|
39
|
+
Match creative angle to the target audience segment:
|
|
40
|
+
|
|
41
|
+
- Pull language directly from ICP.md customer language library -- use the words your audience uses, not internal product jargon
|
|
42
|
+
- Address specific pain points or jobs-to-be-done (JTBD) relevant to the audience segment
|
|
43
|
+
- Adjust tone for platform context: LinkedIn ads are professional, Instagram ads are visual-first, Google Search ads are intent-driven
|
|
44
|
+
- If targeting multiple segments, create segment-specific ad sets with tailored creative -- do not use one-size-fits-all copy
|
|
45
|
+
|
|
46
|
+
### Bid Strategy Awareness
|
|
47
|
+
|
|
48
|
+
Creative approach must align with the campaign bid strategy and objective:
|
|
49
|
+
|
|
50
|
+
- **Awareness campaigns** (CPM/reach): Broad messaging, brand-focused, emotional appeal. Creative drives impressions and recall.
|
|
51
|
+
- **Consideration campaigns** (CPC/engagement): Educational, value-driven. Creative drives clicks and engagement.
|
|
52
|
+
- **Conversion campaigns** (CPA/ROAS): Direct response, clear CTA, urgency. Creative drives specific actions.
|
|
53
|
+
|
|
54
|
+
Mismatching creative style and bid strategy wastes budget -- brand awareness copy with aggressive "Buy Now" CTAs confuses the audience; conversion campaigns with vague brand messaging fail to drive action.
|
|
55
|
+
|
|
56
|
+
### Platform-Specific Copy Constraints
|
|
57
|
+
|
|
58
|
+
Each platform has strict format requirements. Produce creative within these constraints from the start -- do not write long copy and then truncate:
|
|
59
|
+
|
|
60
|
+
- **Google Search Ads:** Headlines 1-3 (30 chars each), descriptions 1-2 (90 chars each)
|
|
61
|
+
- **Meta/Facebook:** Primary text (125 chars above fold), headline (40 chars), description (30 chars), image 1200x628px
|
|
62
|
+
- **LinkedIn:** Single image headline (70 chars), intro text (150 chars above fold), image 1200x627px
|
|
63
|
+
- **Display ads:** Varies by size (300x250, 728x90, 160x600) -- text must be legible at each size
|
|
64
|
+
|
|
65
|
+
Write to the constraint, not around it. If the headline must be 30 characters, write a 30-character headline -- do not write 50 characters and hope it fits.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Discipline Gates
|
|
70
|
+
|
|
71
|
+
### DISC-PAID-ADS-01: Message Match -- Tier 1
|
|
72
|
+
|
|
73
|
+
**Checks:** Ad copy promise matches the landing page headline and above-the-fold content
|
|
74
|
+
**Against:** Ad creative and specified landing page content
|
|
75
|
+
|
|
76
|
+
#### Evaluation Criteria
|
|
77
|
+
|
|
78
|
+
1. **Headline-to-landing-page alignment**
|
|
79
|
+
- PASS: Ad headline claim appears verbatim or semantically equivalent in the landing page H1, and the CTA matches the landing page primary action
|
|
80
|
+
- WARN: Ad and landing page share the same topic but the specific promise differs (e.g., ad says "50% off" but LP says "save big")
|
|
81
|
+
- FAIL: Ad copy makes a promise not present on the landing page, or landing page URL is missing from the brief
|
|
82
|
+
|
|
83
|
+
2. **Offer consistency**
|
|
84
|
+
- PASS: Any pricing, discount, or offer terms in the ad are identically present on the landing page above the fold
|
|
85
|
+
- WARN: Offer is present on the landing page but requires scrolling or clicking to find
|
|
86
|
+
- FAIL: Ad mentions an offer or price not found on the landing page
|
|
87
|
+
|
|
88
|
+
### DISC-PAID-ADS-02: Creative Variety -- Tier 1
|
|
89
|
+
|
|
90
|
+
**Checks:** Campaign includes multiple creative variations for testing
|
|
91
|
+
**Against:** Ad brief creative set
|
|
92
|
+
|
|
93
|
+
#### Evaluation Criteria
|
|
94
|
+
|
|
95
|
+
1. **Variation count**
|
|
96
|
+
- PASS: At least 3 distinct ad variations (different hooks, visuals, or angles) defined in the brief, each clearly labeled
|
|
97
|
+
- WARN: 2 variations defined
|
|
98
|
+
- FAIL: Single creative with no variation plan
|
|
99
|
+
|
|
100
|
+
2. **Variation distinctiveness**
|
|
101
|
+
- PASS: Each variation tests a meaningfully different angle (different pain point, different value prop, different emotional appeal)
|
|
102
|
+
- WARN: Variations exist but differ only in minor wording changes (synonym swaps)
|
|
103
|
+
- FAIL: "Variations" are identical copy with only formatting changes
|
|
104
|
+
|
|
105
|
+
### DISC-PAID-ADS-03: Audience-Creative Fit -- Tier 2
|
|
106
|
+
|
|
107
|
+
**Checks:** Creative angle matches the target audience segment's pain points and language
|
|
108
|
+
**Against:** ICP.md customer language library and audience segment definition
|
|
109
|
+
|
|
110
|
+
#### Evaluation Criteria
|
|
111
|
+
|
|
112
|
+
1. **Language alignment**
|
|
113
|
+
- PASS: Ad copy uses language from ICP.md customer language library, addresses a specific pain point or JTBD relevant to the audience segment
|
|
114
|
+
- WARN: Ad copy addresses the right topic but uses generic rather than ICP-specific language
|
|
115
|
+
- FAIL: Ad copy uses internal/product jargon or addresses pain points not in the ICP definition
|
|
116
|
+
|
|
117
|
+
2. **Segment specificity**
|
|
118
|
+
- PASS: Creative is tailored to a specific audience segment with named pain points from that segment's profile
|
|
119
|
+
- WARN: Creative is broadly relevant to the target market but not tailored to a specific segment
|
|
120
|
+
- FAIL: Creative uses one-size-fits-all messaging with no audience segment consideration
|
|
121
|
+
|
|
122
|
+
### DISC-PAID-ADS-04: Platform Format Compliance -- Tier 2
|
|
123
|
+
|
|
124
|
+
**Checks:** Ad copy respects platform character limits and format rules
|
|
125
|
+
**Against:** Platform specifications (Google, Meta, LinkedIn, Display)
|
|
126
|
+
|
|
127
|
+
#### Evaluation Criteria
|
|
128
|
+
|
|
129
|
+
1. **Character limits**
|
|
130
|
+
- PASS: All headlines under platform limit (Google: 30 chars, Meta: 40 chars, LinkedIn: 70 chars), descriptions under limit (Google: 90 chars, Meta: 125 chars primary text), all copy verified against the target platform
|
|
131
|
+
- WARN: Copy is within 10% of limits but could be tighter to avoid truncation on some devices
|
|
132
|
+
- FAIL: Copy exceeds platform character limits or uses formats unsupported by the target platform
|
|
133
|
+
|
|
134
|
+
2. **Asset specifications**
|
|
135
|
+
- PASS: Image dimensions, video length, and file format match platform requirements (e.g., Meta: 1200x628px, Google Display: specified banner sizes)
|
|
136
|
+
- WARN: Specs are close but not exact (e.g., slightly off aspect ratio)
|
|
137
|
+
- FAIL: No image/video specs provided, or specs are incompatible with the target platform
|
|
138
|
+
|
|
139
|
+
### DISC-PAID-ADS-05: Bid Strategy Alignment -- Tier 2
|
|
140
|
+
|
|
141
|
+
**Checks:** Creative approach aligns with the stated bid strategy and campaign objective
|
|
142
|
+
**Against:** Campaign brief bid strategy and objective declaration
|
|
143
|
+
|
|
144
|
+
#### Evaluation Criteria
|
|
145
|
+
|
|
146
|
+
1. **Strategy-creative coherence**
|
|
147
|
+
- PASS: Awareness campaigns use broad/engagement-focused creative, conversion campaigns use direct-response creative with clear CTA, the brief explicitly states bid strategy
|
|
148
|
+
- WARN: Bid strategy stated but creative style does not clearly match the objective (e.g., awareness campaign with aggressive CTA)
|
|
149
|
+
- FAIL: No bid strategy stated in the brief, or creative contradicts the campaign objective
|
|
150
|
+
|
|
151
|
+
2. **CTA appropriateness**
|
|
152
|
+
- PASS: CTA strength matches funnel stage -- soft CTAs ("Learn more") for awareness, strong CTAs ("Start free trial") for conversion
|
|
153
|
+
- WARN: CTA is present but mismatched to the funnel stage
|
|
154
|
+
- FAIL: No CTA in conversion-focused ads, or aggressive sales CTA in awareness-stage ads
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Base Gate Overrides
|
|
159
|
+
|
|
160
|
+
| Base Gate ID | Default Tier | Override Tier | Reason |
|
|
161
|
+
|-------------|-------------|---------------|--------|
|
|
162
|
+
| GATE-05 (Funnel Integrity) | Tier 2 | Tier 1 | Paid traffic with broken funnels wastes ad spend directly -- every click costs money, so the funnel must be verified before launch |
|
|
163
|
+
| GATE-06 (UTM Hygiene) | Tier 2 | Tier 1 | Paid channels require precise attribution to justify spend and optimize campaigns. Missing or incorrect UTMs make ROAS unmeasurable. |
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Format Rules
|
|
168
|
+
|
|
169
|
+
### Google Search Ads
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
Headline 1: {30 characters max -- primary keyword + value prop}
|
|
173
|
+
Headline 2: {30 characters max -- differentiator or benefit}
|
|
174
|
+
Headline 3: {30 characters max -- CTA or brand}
|
|
175
|
+
Description 1: {90 characters max -- expand on the promise, include keyword}
|
|
176
|
+
Description 2: {90 characters max -- social proof, urgency, or secondary benefit}
|
|
177
|
+
Display URL path: {15 chars}/{15 chars}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Meta / Facebook Ads
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
Primary text: {125 characters visible above fold -- hook + value prop}
|
|
184
|
+
Extended text: {up to 500 chars total, but only 125 visible before "See more"}
|
|
185
|
+
Headline: {40 characters max}
|
|
186
|
+
Description: {30 characters max -- appears below headline}
|
|
187
|
+
CTA button: {Select from platform options: Learn More, Sign Up, Shop Now, etc.}
|
|
188
|
+
Image: 1200x628px (1.91:1 ratio), max 20% text overlay
|
|
189
|
+
Video: 1:1 or 4:5 for feed, 9:16 for Stories/Reels, 15-60 seconds
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### LinkedIn Ads
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
Single Image:
|
|
196
|
+
Intro text: {150 characters visible above fold, up to 600 total}
|
|
197
|
+
Headline: {70 characters max}
|
|
198
|
+
Image: 1200x627px (1.91:1 ratio)
|
|
199
|
+
CTA button: {Platform options: Learn More, Sign Up, Download, etc.}
|
|
200
|
+
|
|
201
|
+
Carousel:
|
|
202
|
+
Cards: 2-10 cards
|
|
203
|
+
Card headline: {45 characters max}
|
|
204
|
+
Card image: 1080x1080px (1:1 ratio)
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Display Ad Sizes
|
|
208
|
+
|
|
209
|
+
| Size | Use Case | Text Guidelines |
|
|
210
|
+
|------|----------|-----------------|
|
|
211
|
+
| 300x250 | Medium rectangle -- sidebars and in-content | Max 2 lines of headline text, 1 line CTA |
|
|
212
|
+
| 728x90 | Leaderboard -- page headers | Single headline + CTA, horizontal layout |
|
|
213
|
+
| 160x600 | Wide skyscraper -- sidebars | Stacked layout, headline on top, CTA at bottom |
|
|
214
|
+
| 320x50 | Mobile banner | Ultra-short: 5-7 word headline + CTA |
|
|
215
|
+
| 300x600 | Half page -- high impact | More room for messaging, image-heavy |
|
|
216
|
+
|
|
217
|
+
### Video Ad Specs
|
|
218
|
+
|
|
219
|
+
| Format | Duration | Platform | Notes |
|
|
220
|
+
|--------|----------|----------|-------|
|
|
221
|
+
| Bumper | 6 seconds | YouTube, Meta | Single message, no CTA click-through |
|
|
222
|
+
| Short | 15 seconds | All platforms | Hook in first 2 seconds, CTA at end |
|
|
223
|
+
| Standard | 30 seconds | YouTube, Meta, LinkedIn | Full structure: hook, value, CTA |
|
|
224
|
+
| Long-form | 60+ seconds | YouTube (skippable) | Hook in first 5 seconds before skip option |
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Examples
|
|
229
|
+
|
|
230
|
+
### Good: Strong Message Match Pair
|
|
231
|
+
|
|
232
|
+
```
|
|
233
|
+
Google Search Ad:
|
|
234
|
+
Headline 1: "50% Off First 3 Months" (25 chars)
|
|
235
|
+
Headline 2: "Marketing OS for Startups" (27 chars)
|
|
236
|
+
Headline 3: "Start Free Trial Today" (23 chars)
|
|
237
|
+
Description 1: "Ship marketing campaigns with built-in quality gates. No more guessing." (73 chars)
|
|
238
|
+
Description 2: "Trusted by 500+ startups. Cancel anytime. No credit card required." (68 chars)
|
|
239
|
+
|
|
240
|
+
Landing Page H1: "Get 50% Off Your First 3 Months"
|
|
241
|
+
Landing Page CTA: "Start Free Trial"
|
|
242
|
+
Above fold: Pricing table showing the 50% discount, feature highlights, "No credit card required"
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Why it works: Ad headline promise ("50% Off First 3 Months") matches LP H1 exactly. CTA matches. Offer terms are consistent. No surprises after the click.
|
|
246
|
+
|
|
247
|
+
### Bad: Broken Message Match
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
Meta Ad:
|
|
251
|
+
Primary text: "The #1 marketing tool for growing teams"
|
|
252
|
+
Headline: "Try It Free"
|
|
253
|
+
CTA: Sign Up
|
|
254
|
+
|
|
255
|
+
Landing Page H1: "Enterprise Marketing Platform"
|
|
256
|
+
Landing Page CTA: "Request a Demo"
|
|
257
|
+
Above fold: Enterprise features, case studies from Fortune 500 companies
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
Why it fails: Ad targets "growing teams" but LP targets "enterprise." Ad says "Try It Free" but LP says "Request a Demo." The user who clicked expecting a free trial for a small team lands on an enterprise sales page. Conversion rate: near zero.
|
|
261
|
+
|
|
262
|
+
### Good: Creative Variety Set
|
|
263
|
+
|
|
264
|
+
```
|
|
265
|
+
Variation A - Pain Point Hook:
|
|
266
|
+
"Tired of marketing campaigns that ship without quality checks?"
|
|
267
|
+
|
|
268
|
+
Variation B - Social Proof Hook:
|
|
269
|
+
"500+ startups use this to ship marketing 3x faster"
|
|
270
|
+
|
|
271
|
+
Variation C - Benefit-First Hook:
|
|
272
|
+
"Ship campaigns with built-in quality gates -- no more guessing"
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
Why it works: Each tests a fundamentally different angle (pain, proof, benefit). Clear labels. Measurable differences in CTR will reveal which angle resonates.
|
|
276
|
+
|
|
277
|
+
### Bad: Monotone Creative Set
|
|
278
|
+
|
|
279
|
+
```
|
|
280
|
+
Variation A: "Great marketing tool for your team"
|
|
281
|
+
Variation B: "Amazing marketing tool for your team"
|
|
282
|
+
Variation C: "Excellent marketing tool for your team"
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
Why it fails: Only the adjective changes. No meaningful test. CTR differences will be noise, not signal.
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## Anti-Patterns
|
|
290
|
+
|
|
291
|
+
1. **Sending all ad traffic to the homepage** -- Homepage is not a landing page. It serves multiple audiences and purposes. Paid traffic needs a dedicated landing page with a single message and CTA that matches the ad.
|
|
292
|
+
|
|
293
|
+
2. **Single creative with no A/B variants** -- Running one ad creative means you cannot optimize. You are paying for traffic with no ability to learn what works. Always launch with 3+ variations.
|
|
294
|
+
|
|
295
|
+
3. **Awareness creative with conversion bid strategy** -- Running brand awareness copy ("Introducing our new platform") with a CPA bid tells the algorithm to optimize for conversions, but the creative is not designed to convert. Match creative intent to bid strategy.
|
|
296
|
+
|
|
297
|
+
4. **Ignoring platform character limits** -- Writing 50-character headlines for Google Ads (30-char limit) means the platform truncates your message. Write to the constraint from the start.
|
|
298
|
+
|
|
299
|
+
5. **Same copy across all platforms** -- LinkedIn professional audience, Instagram visual-first audience, and Google search-intent audience require different creative approaches. Cross-posting identical copy shows audience blindness.
|
|
300
|
+
|
|
301
|
+
6. **Missing landing page URL in brief** -- An ad brief without a specified landing page cannot be verified for message match. The landing page is half the ad -- always include it.
|
|
302
|
+
|
|
303
|
+
7. **No bid strategy declaration** -- If the brief does not state whether this is an awareness, consideration, or conversion campaign, the creative cannot be evaluated for strategy alignment. Always declare the objective.
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## Metrics
|
|
308
|
+
|
|
309
|
+
Track these indicators for paid ad campaigns after launch:
|
|
310
|
+
|
|
311
|
+
- **Cost per click (CPC)** -- Average cost per click. Compare against industry benchmarks and historical campaign data.
|
|
312
|
+
- **Click-through rate (CTR)** -- Impressions to clicks. Measures ad creative effectiveness. Google Search benchmark: 3-5%. Display benchmark: 0.5-1%.
|
|
313
|
+
- **Conversion rate** -- Clicks to desired action (signup, purchase, download). Measures landing page effectiveness post-click.
|
|
314
|
+
- **Return on ad spend (ROAS)** -- Revenue generated per dollar spent. Primary efficiency metric for conversion campaigns.
|
|
315
|
+
- **Cost per acquisition (CPA)** -- Total spend divided by conversions. Measures efficiency of the full funnel.
|
|
316
|
+
- **Quality Score (Google)** -- 1-10 rating based on expected CTR, ad relevance, and landing page experience. Higher scores reduce CPC.
|
|
317
|
+
- **Relevance Score (Meta)** -- Ad relevance diagnostics: quality ranking, engagement rate ranking, conversion rate ranking. Low scores indicate audience-creative mismatch.
|
|
318
|
+
- **Impression share** -- Percentage of eligible impressions captured. Low impression share may indicate budget or bid constraints.
|