luckiest-co 1.0.39 → 1.0.41
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/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/package.json +1 -1
- package/skills/ad-creative/CHANGELOG.md +7 -0
- package/skills/ad-creative/SKILL.md +23 -4
- package/skills/ad-creative/references/generative-tools.md +6 -30
- package/skills/ads/CHANGELOG.md +9 -0
- package/skills/ads/SKILL.md +19 -9
- package/skills/ads/references/reading-google-ads-data.md +121 -0
- package/skills/ai-seo/CHANGELOG.md +11 -0
- package/skills/ai-seo/SKILL.md +21 -22
- package/skills/ai-seo/references/content-types.md +11 -0
- package/skills/ai-seo/references/linkedin-ai-citations.md +122 -0
- package/skills/ai-seo/references/platform-ranking-factors.md +32 -19
- package/skills/ai-seo/references/positioning-and-consensus.md +102 -0
- package/skills/coder/CHANGELOG.md +23 -0
- package/skills/coder/SKILL.md +16 -4
- package/skills/coder-brainstorming/CHANGELOG.md +9 -0
- package/skills/coder-brainstorming/SKILL.md +5 -3
- package/skills/coder-debugging/CHANGELOG.md +11 -0
- package/skills/coder-debugging/SKILL.md +15 -3
- package/skills/coder-executing-plans/CHANGELOG.md +9 -0
- package/skills/coder-executing-plans/SKILL.md +5 -3
- package/skills/coder-finishing-a-branch/CHANGELOG.md +9 -0
- package/skills/coder-finishing-a-branch/SKILL.md +7 -3
- package/skills/coder-guard/CHANGELOG.md +7 -0
- package/skills/coder-guard/SKILL.md +6 -6
- package/skills/coder-receiving-code-review/CHANGELOG.md +9 -0
- package/skills/coder-receiving-code-review/SKILL.md +5 -3
- package/skills/coder-shipping/CHANGELOG.md +9 -0
- package/skills/coder-shipping/SKILL.md +4 -4
- package/skills/coder-subagent-driven-development/CHANGELOG.md +9 -0
- package/skills/coder-subagent-driven-development/SKILL.md +5 -3
- package/skills/coder-writing-plans/CHANGELOG.md +9 -0
- package/skills/coder-writing-plans/SKILL.md +5 -3
- package/skills/cold-email/CHANGELOG.md +7 -0
- package/skills/cold-email/SKILL.md +15 -8
- package/skills/cold-email/references/follow-up-sequences.md +4 -4
- package/skills/cold-email/references/frameworks.md +5 -5
- package/skills/cold-email/references/personalization.md +10 -10
- package/skills/competitor-profiling/CHANGELOG.md +8 -0
- package/skills/competitor-profiling/SKILL.md +34 -9
- package/skills/competitor-profiling/references/tool-reference.md +141 -5
- package/skills/competitors/CHANGELOG.md +8 -0
- package/skills/competitors/SKILL.md +32 -5
- package/skills/competitors/references/content-architecture.md +6 -0
- package/skills/competitors/references/templates.md +3 -0
- package/skills/copy-editing/CHANGELOG.md +10 -0
- package/skills/copy-editing/SKILL.md +41 -9
- package/skills/copy-editing/references/checklist.md +11 -0
- package/skills/copywriting/CHANGELOG.md +11 -0
- package/skills/copywriting/SKILL.md +32 -4
- package/skills/copywriting/references/copy-frameworks.md +2 -3
- package/skills/copywriting/references/natural-transitions.md +4 -20
- package/skills/customer-research/CHANGELOG.md +8 -0
- package/skills/customer-research/SKILL.md +6 -3
- package/skills/directory-submissions/CHANGELOG.md +9 -0
- package/skills/directory-submissions/SKILL.md +21 -10
- package/skills/emails/CHANGELOG.md +8 -0
- package/skills/emails/SKILL.md +22 -3
- package/skills/emails/references/sequence-templates.md +3 -3
- package/skills/image/CHANGELOG.md +8 -0
- package/skills/image/SKILL.md +4 -4
- package/skills/image/references/ai-image-prompting.md +1 -1
- package/skills/marketing-plan/CHANGELOG.md +8 -0
- package/skills/marketing-plan/SKILL.md +8 -4
- package/skills/marketing-plan/references/market-sizing.md +166 -0
- package/skills/marketing-plan/references/methodology.md +2 -0
- package/skills/model-router/CHANGELOG.md +9 -0
- package/skills/model-router/SKILL.md +3 -3
- package/skills/model-router/references/weave-routing-notes.md +1 -0
- package/skills/model-router/scripts/route.py +3 -1
- package/skills/prospecting/CHANGELOG.md +7 -0
- package/skills/prospecting/SKILL.md +3 -3
- package/skills/prospecting/references/saas-prospecting.md +1 -1
- package/skills/public-relations/CHANGELOG.md +10 -0
- package/skills/public-relations/SKILL.md +16 -4
- package/skills/public-relations/references/crisis-communications.md +111 -0
- package/skills/public-relations/references/newsjacking.md +2 -0
- package/skills/public-relations/references/statement-templates.md +143 -0
- package/skills/sales-enablement/CHANGELOG.md +8 -0
- package/skills/sales-enablement/SKILL.md +72 -4
- package/skills/sales-enablement/references/win-loss-analysis.md +72 -0
- package/skills/skill-audit/ATTRIBUTION.md +5 -0
- package/skills/skill-audit/CHANGELOG.md +19 -0
- package/skills/skill-audit/SKILL.md +121 -0
- package/skills/skill-audit-security/ATTRIBUTION.md +14 -0
- package/skills/skill-audit-security/CHANGELOG.md +14 -0
- package/skills/skill-audit-security/LICENSE-APACHE-2.0 +190 -0
- package/skills/skill-audit-security/SKILL.md +99 -0
- package/skills/skill-audit-security/references/rule-ids.md +28 -0
- package/skills/skill-audit-security/references/source-review.md +58 -0
- package/skills/sms/CHANGELOG.md +8 -0
- package/skills/sms/SKILL.md +18 -4
- package/skills/sms/references/whatsapp.md +258 -0
- package/skills/social/CHANGELOG.md +11 -0
- package/skills/social/SKILL.md +31 -7
- package/skills/social/references/listening.md +2 -0
- package/skills/social/references/platforms.md +15 -9
- package/skills/social/references/post-templates.md +9 -9
- package/skills/social/references/short-form-video.md +5 -5
- package/skills/social/references/x-algorithm.md +69 -0
- package/skills/trends/CHANGELOG.md +3 -0
- package/skills/trends/SKILL.md +14 -4
- package/skills/video/CHANGELOG.md +8 -0
- package/skills/video/SKILL.md +11 -25
- package/skills/video-studio/ATTRIBUTION.md +3 -0
- package/skills/video-studio/CHANGELOG.md +25 -0
- package/skills/video-studio/LICENSE-motionmaxxing +202 -0
- package/skills/video-studio/SKILL.md +115 -25
- package/skills/video-studio/references/audio.md +15 -0
- package/skills/video-studio/references/interview.md +75 -0
- package/skills/video-studio/references/step-2-plan.md +39 -7
- package/skills/video-studio/references/storyboard.md +3 -1
- package/skills/video-studio/references/tones.md +5 -5
- package/skills/video-studio/scripts/pyproject.toml +4 -2
- package/skills/video-studio/scripts/qa.mjs +85 -1
- package/skills/video-studio/scripts/qa.test.mjs +37 -1
- package/skills/video-studio/scripts/render-scenes.mjs +1 -0
- package/skills/video-studio/scripts/storyboard.schema.json +6 -1
- package/skills/video-studio/scripts/uv.lock +8 -5
- package/skills/video-studio-art-director/ATTRIBUTION.md +3 -0
- package/skills/video-studio-art-director/CHANGELOG.md +7 -0
- package/skills/video-studio-art-director/LICENSE-motionmaxxing +202 -0
- package/skills/video-studio-art-director/SKILL.md +42 -7
- package/skills/video-studio-composition/ATTRIBUTION.md +3 -0
- package/skills/video-studio-composition/CHANGELOG.md +7 -0
- package/skills/video-studio-composition/LICENSE-motionmaxxing +202 -0
- package/skills/video-studio-composition/SKILL.md +17 -4
- package/skills/video-studio-director/ATTRIBUTION.md +3 -0
- package/skills/video-studio-director/CHANGELOG.md +15 -0
- package/skills/video-studio-director/LICENSE-motionmaxxing +202 -0
- package/skills/video-studio-director/SKILL.md +105 -10
- package/skills/video-studio-motion/ATTRIBUTION.md +3 -0
- package/skills/video-studio-motion/CHANGELOG.md +8 -0
- package/skills/video-studio-motion/LICENSE-motionmaxxing +202 -0
- package/skills/video-studio-motion/SKILL.md +98 -5
- package/skills/video-studio-motion/references/kinetic-type.md +89 -0
- package/skills/video-studio-motion/references/ui-demo.md +59 -0
- package/skills/video-studio-review/CHANGELOG.md +11 -0
- package/skills/video-studio-review/SKILL.md +31 -5
- package/skills/video-studio-review/editor/index.html +21 -3
- package/skills/video-studio-review/references/apply-feedback.md +19 -0
- package/skills/video-studio-review/scripts/build-reel.mjs +35 -10
- package/skills/video-studio-review/scripts/build-reel.test.mjs +15 -0
- package/skills/video-studio-script/ATTRIBUTION.md +6 -0
- package/skills/video-studio-script/CHANGELOG.md +12 -0
- package/skills/video-studio-script/LICENSE-motionmaxxing +202 -0
- package/skills/video-studio-script/SKILL.md +41 -10
- package/skills/video-studio-showreel/CHANGELOG.md +21 -0
- package/skills/video-studio-showreel/SKILL.md +231 -0
- package/skills/video-studio-showreel/references/motion-design-pack-notes.md +28 -0
- package/skills/video-studio-showreel/references/zingage-breakdown.md +47 -0
- package/skills/video-studio-showreel/scripts/build.py +10 -0
- package/skills/video-studio-showreel/templates/showreel.html +264 -0
- package/skills/video-watcher/CHANGELOG.md +6 -0
- package/skills/video-watcher/SKILL.md +3 -3
- package/skills/video-watcher/scripts/setup.py +9 -7
- package/skills/trends/agents/openai.yaml +0 -8
- package/skills/trends/scripts/build-skill.sh +0 -39
- package/skills/trends/scripts/compare.sh +0 -61
- package/skills/trends/scripts/evaluate_search_quality.py +0 -573
- package/skills/trends/scripts/test-v1-vs-v2.sh +0 -220
- package/skills/trends/scripts/test_device_auth.py +0 -128
- package/skills/trends/scripts/verify_v3.py +0 -195
package/package.json
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog — luckiest-ad-creative
|
|
2
2
|
|
|
3
|
+
## 1.4.0 — 2026-10-08
|
|
4
|
+
Upstream sync with coreyhaines31/marketingskills dda3841 (issue #112).
|
|
5
|
+
|
|
6
|
+
- Added a No AI Tells section (contrast reveals, negation lists, hook and CTA slop, vary batch shapes).
|
|
7
|
+
- Removed retired Sora 2 from video generator lists, table, and decision tree.
|
|
8
|
+
- Skipped: upstream branding and link rewrites; template, hook-system, and spec files not in this fork.
|
|
9
|
+
|
|
3
10
|
## 1.3.0 — 2026-10-05
|
|
4
11
|
- Ad visual prompts apply `luckiest-video-studio-art-director` section 3b and its shot prompting reference, so generated ads do not look AI-made. Bundle ships the art director.
|
|
5
12
|
|
|
@@ -3,7 +3,7 @@ name: ad-creative
|
|
|
3
3
|
description: "Generates, iterates, and scales ad creative — headlines, descriptions, primary text, or full ad variations — for any paid advertising platform, and iterates from real performance data. Use when the user mentions 'ad copy variations,' 'ad creative,' 'generate headlines,' 'RSA headlines,' 'bulk ad copy,' 'ad iterations,' 'creative testing,' 'ad performance optimization,' 'write me some ads,' 'Facebook ad copy,' 'Google ad headlines,' 'LinkedIn ad text,' or 'I need more ad variations.' Use whenever someone needs to produce ad copy at scale or iterate on existing ads. For campaign strategy and targeting, see luckiest-ads. For landing page copy, see luckiest-copywriting."
|
|
4
4
|
license: See ATTRIBUTION.md
|
|
5
5
|
metadata:
|
|
6
|
-
version: "1.
|
|
6
|
+
version: "1.4.0"
|
|
7
7
|
listing_id: luckiest-ad-creative
|
|
8
8
|
author: luckiest
|
|
9
9
|
---
|
|
@@ -14,9 +14,9 @@ This skill drives an expert performance creative strategist. The goal is to gene
|
|
|
14
14
|
|
|
15
15
|
## Staying current
|
|
16
16
|
|
|
17
|
-
On activation, call the Luckiest MCP check_updates tool with { listingId: "9ce2c363-e379-45f7-b7d2-c398992ed30f", installedSemver: "1.
|
|
17
|
+
On activation, call the Luckiest MCP check_updates tool with { listingId: "9ce2c363-e379-45f7-b7d2-c398992ed30f", installedSemver: "1.4.0" }. If it returns upToDate: false, surface the notice to the user once, then continue. Do nothing further if upToDate: true. Never block on this check — if the tool is unavailable, proceed.
|
|
18
18
|
|
|
19
|
-
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-ad-creative", skill_version: "1.
|
|
19
|
+
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-ad-creative", skill_version: "1.4.0", matched: true, success: <true if the skill completed, false otherwise> }. Metadata only, never prompt text. Never block on it — if the tool is unavailable, skip silently.
|
|
20
20
|
|
|
21
21
|
## Before Starting
|
|
22
22
|
|
|
@@ -146,7 +146,7 @@ When something is risky, deliver a compliant alternative alongside the flag rath
|
|
|
146
146
|
For image and video ad creative, use generative AI tools and code-based video rendering. See [references/generative-tools.md](references/generative-tools.md) for the complete guide covering:
|
|
147
147
|
|
|
148
148
|
- **Image generation** — Nano Banana Pro (Gemini), Flux, Ideogram for static ad images
|
|
149
|
-
- **Video generation** — Veo, Kling, Runway,
|
|
149
|
+
- **Video generation** — Veo, Kling, Runway, Seedance, Higgsfield for video ads
|
|
150
150
|
- **Voice & audio** — ElevenLabs, OpenAI TTS, Cartesia for voiceovers, cloning, multilingual
|
|
151
151
|
- **Code-based video** — Remotion for templated, data-driven video at scale
|
|
152
152
|
- **Platform image specs** — Correct dimensions for every ad placement
|
|
@@ -265,6 +265,25 @@ Track what was learned and what's being tested. Record a **hypothesis for every
|
|
|
265
265
|
- All caps or excessive punctuation
|
|
266
266
|
- Clickbait that the landing page can't deliver on
|
|
267
267
|
|
|
268
|
+
### No AI Tells
|
|
269
|
+
|
|
270
|
+
Ad copy that reads as generated looks like every other ad in the feed, and generating at volume multiplies whatever tic the first draft has. Check the whole batch.
|
|
271
|
+
|
|
272
|
+
Never write these:
|
|
273
|
+
- **Contrast reveals**: "It's not X, it's Y." "Not because X. Because Y." State Y directly, with the reason.
|
|
274
|
+
- **Negation lists**: "No X, no Y, no Z." Say what does happen. One plain absence ("No card required") is fine.
|
|
275
|
+
- **Trailing pile-ons**: a full claim, then a comma and more restating clauses. End the sentence at the claim.
|
|
276
|
+
- **Self-answered questions and colon reveals**: "The result? 3x faster." "The best part: it learns." FAQ questions and a question in the reader's own voice are fine.
|
|
277
|
+
- **Stock phrases**: "Say goodbye to," "X, reimagined," "Unlock the power of," "Take it to the next level," "Here's the thing."
|
|
278
|
+
- **Em dashes** in headlines, descriptions, and primary text.
|
|
279
|
+
|
|
280
|
+
Ad-specific tells:
|
|
281
|
+
- **Stacked negations to fit a character limit**: "No setup. No fees. No contracts." Keep the one that matters most and use the space for a fact.
|
|
282
|
+
- **Hook slop**: a generic "POV:", "Stop scrolling," "Here's what nobody tells you about X." Earn the next second with something specific to the viewer. A POV hook is fine when the situation is hyper-specific ("POV: it's 3pm and you're on your fourth coffee").
|
|
283
|
+
- **CTA slop**: "Get started today," "Join thousands of happy customers." Name the action and what they get.
|
|
284
|
+
|
|
285
|
+
Across a batch, vary the sentence shapes. Ten variations that all open the same way read as generated, even when each one is fine alone. For the full blacklist, see `luckiest-copywriting-humanize` (references/patterns.md).
|
|
286
|
+
|
|
268
287
|
### Descriptions That Convert
|
|
269
288
|
|
|
270
289
|
Descriptions should complement headlines, not repeat them. Use descriptions to:
|
|
@@ -10,8 +10,8 @@ Reference for using AI image generators, video generators, and code-based video
|
|
|
10
10
|
|------|---------------|----------|
|
|
11
11
|
| Static ad images (banners, social) | Image generation | ChatGPT Images 2.0, Nano Banana Pro, Flux, Ideogram |
|
|
12
12
|
| Ad images with text overlays | Image generation (text-capable) | Ideogram, Nano Banana Pro |
|
|
13
|
-
| Short video ads (6-30 sec) | Video generation | Veo, Kling, Runway,
|
|
14
|
-
| Video ads with voiceover | Video gen + voice | Veo
|
|
13
|
+
| Short video ads (6-30 sec) | Video generation | Veo, Kling, Runway, Seedance |
|
|
14
|
+
| Video ads with voiceover | Video gen + voice | Veo (native), or Runway + ElevenLabs |
|
|
15
15
|
| Voiceover tracks for ads | Voice generation | ElevenLabs, OpenAI TTS, Cartesia |
|
|
16
16
|
| Multi-language ad versions | Voice generation | ElevenLabs, PlayHT |
|
|
17
17
|
| Brand voice cloning | Voice generation | ElevenLabs, Resemble AI |
|
|
@@ -198,36 +198,13 @@ Video generation and editing platform with strong controllability.
|
|
|
198
198
|
|
|
199
199
|
---
|
|
200
200
|
|
|
201
|
-
### Sora 2 (OpenAI)
|
|
202
|
-
|
|
203
|
-
OpenAI's video generation model with synchronized audio.
|
|
204
|
-
|
|
205
|
-
**Best for:** High-fidelity video with dialogue and sound
|
|
206
|
-
**API:** OpenAI API
|
|
207
|
-
**Pricing:** Free tier available; Pro from $0.10-0.50/sec depending on resolution
|
|
208
|
-
|
|
209
|
-
**Capabilities:**
|
|
210
|
-
- Up to 60 seconds with synchronized audio
|
|
211
|
-
- Dialogue, sound effects, and ambient audio
|
|
212
|
-
- sora-2 (fast) and sora-2-pro (quality) variants
|
|
213
|
-
- Text-to-video and image-to-video
|
|
214
|
-
|
|
215
|
-
**Ad creative use cases:**
|
|
216
|
-
- Video testimonials and talking-head style ads
|
|
217
|
-
- Product demo videos with narration
|
|
218
|
-
- Narrative brand videos
|
|
219
|
-
|
|
220
|
-
**Docs:** [OpenAI Video Generation](https://platform.openai.com/docs/guides/video-generation)
|
|
221
|
-
|
|
222
|
-
---
|
|
223
|
-
|
|
224
201
|
### Seedance 2.0 (ByteDance)
|
|
225
202
|
|
|
226
203
|
ByteDance's video generation model with simultaneous audio-visual generation and multimodal inputs.
|
|
227
204
|
|
|
228
205
|
**Best for:** Fast, affordable video ads with native audio, multimodal reference inputs
|
|
229
206
|
**API:** BytePlus (official), Replicate, WaveSpeedAI, fal.ai (third-party); OpenAI-compatible API format
|
|
230
|
-
**Pricing:** ~$0.10-0.80/min depending on resolution
|
|
207
|
+
**Pricing:** ~$0.10-0.80/min depending on resolution
|
|
231
208
|
|
|
232
209
|
**Capabilities:**
|
|
233
210
|
- Up to 20 seconds at up to 2K resolution
|
|
@@ -274,7 +251,6 @@ Full-stack video creation platform with cinematic camera controls.
|
|
|
274
251
|
| **Veo 3.1** | 60 sec | Native | 1080p/4K | Gemini | Vertical social video |
|
|
275
252
|
| **Kling 2.6** | 3 min | Native | 1080p | Third-party | Longer cinematic |
|
|
276
253
|
| **Runway Gen-4** | 10 sec | No | 1080p | Official | Controlled, consistent |
|
|
277
|
-
| **Sora 2** | 60 sec | Native | 1080p | Official | Dialogue-heavy |
|
|
278
254
|
| **Seedance 2.0** | 20 sec | Native | 2K | Official + third-party | Affordable high-volume |
|
|
279
255
|
| **Higgsfield** | Varies | Yes | 1080p | Web-based | Social, mobile-first |
|
|
280
256
|
|
|
@@ -286,7 +262,7 @@ For layering realistic voiceovers onto video ads, adding narration to product de
|
|
|
286
262
|
|
|
287
263
|
### When to Use Voice Tools
|
|
288
264
|
|
|
289
|
-
Many video generators (Veo, Kling,
|
|
265
|
+
Many video generators (Veo, Kling, Seedance) now include native audio. Use standalone voice tools when you need:
|
|
290
266
|
|
|
291
267
|
- **Voiceover on silent video** — Runway Gen-4 and Remotion produce silent output
|
|
292
268
|
- **Brand voice consistency** — Clone a specific voice for all ads
|
|
@@ -475,7 +451,7 @@ Need voiceover for ads?
|
|
|
475
451
|
2. Generate voiceover with ElevenLabs/OpenAI TTS
|
|
476
452
|
3. Generate or render video:
|
|
477
453
|
a. Silent video from Runway/Remotion → layer voice track
|
|
478
|
-
b. Or use Veo/
|
|
454
|
+
b. Or use Veo/Seedance with native audio (skip separate VO)
|
|
479
455
|
4. Combine with ffmpeg if layering separately:
|
|
480
456
|
ffmpeg -i video.mp4 -i voiceover.mp3 -c:v copy -c:a aac output.mp4
|
|
481
457
|
5. Generate variations (different scripts, voices, or languages)
|
|
@@ -580,7 +556,7 @@ Need video ads?
|
|
|
580
556
|
├── Templated, data-driven (same structure, different data)
|
|
581
557
|
│ └── Use Remotion
|
|
582
558
|
├── Unique creative from prompts (exploratory)
|
|
583
|
-
│ ├── Need dialogue/voiceover? →
|
|
559
|
+
│ ├── Need dialogue/voiceover? → Veo 3.1, Kling 2.6, Seedance 2.0
|
|
584
560
|
│ ├── Need consistency across scenes? → Runway Gen-4
|
|
585
561
|
│ ├── Need vertical social video? → Veo 3.1 (native 9:16)
|
|
586
562
|
│ ├── Need high volume at low cost? → Seedance 2.0
|
package/skills/ads/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog — luckiest-ads
|
|
2
2
|
|
|
3
|
+
## 1.2.0 — 2026-10-08
|
|
4
|
+
Upstream sync with coreyhaines31/marketingskills dda3841 (issue #112).
|
|
5
|
+
|
|
6
|
+
- Added references/reading-google-ads-data.md (withheld search terms, conversions vs all_conversions, small-sample table, break-even CVR, verified/inferred/stale) with a pointer in SKILL.md.
|
|
7
|
+
- Added a search-terms-are-a-sample rule to the kill-vs-keep rules, and new description triggers.
|
|
8
|
+
- Added Brand vs. non-brand section; optimize on non-brand ROAS, judge scaling headroom on blended ROAS.
|
|
9
|
+
- Merged the two learning-phase mistakes into one bullet and merged the ab-testing/cro related-skills lines.
|
|
10
|
+
- Skipped: audit-guardrails and creative-research edits (files not in this fork); registry link rewrites; evals.
|
|
11
|
+
|
|
3
12
|
## 1.1.0 — 2026-07-06
|
|
4
13
|
Skill updater pass: analytics integration.
|
|
5
14
|
|
package/skills/ads/SKILL.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ads
|
|
3
|
-
description: "Plans, optimizes, and scales paid advertising campaigns — campaign strategy, audience targeting, bidding, and optimization. Use when the user wants help with paid advertising on Google Ads, Meta (Facebook/Instagram), LinkedIn, Twitter/X, or other ad platforms. Also use when the user mentions 'PPC,' 'paid media,' 'ROAS,' 'CPA,' 'ad campaign,' 'retargeting,' 'audience targeting,' 'Google Ads,' 'Facebook ads,' 'LinkedIn ads,' 'ad budget,' 'cost per click,' 'ad spend,'
|
|
3
|
+
description: "Plans, optimizes, and scales paid advertising campaigns — campaign strategy, audience targeting, bidding, and optimization. Use when the user wants help with paid advertising on Google Ads, Meta (Facebook/Instagram), LinkedIn, Twitter/X, or other ad platforms. Also use when the user mentions 'PPC,' 'paid media,' 'ROAS,' 'CPA,' 'ad campaign,' 'retargeting,' 'audience targeting,' 'Google Ads,' 'Facebook ads,' 'LinkedIn ads,' 'ad budget,' 'cost per click,' 'ad spend,' 'should I run ads,' 'search terms report,' 'wasted spend,' or 'is this campaign working.' For bulk ad creative generation and iteration, see luckiest-ad-creative. For landing page optimization, see luckiest-cro."
|
|
4
4
|
license: See ATTRIBUTION.md
|
|
5
5
|
metadata:
|
|
6
|
-
version: "1.
|
|
6
|
+
version: "1.2.0"
|
|
7
7
|
listing_id: luckiest-ads
|
|
8
8
|
author: luckiest
|
|
9
9
|
---
|
|
@@ -14,9 +14,9 @@ This skill acts as an expert performance marketer focused on paid customer acqui
|
|
|
14
14
|
|
|
15
15
|
## Staying current
|
|
16
16
|
|
|
17
|
-
On activation, call the Luckiest MCP check_updates tool with { listingId: "5fb8bb24-2d95-4a8e-8778-e403be972d7a", installedSemver: "1.
|
|
17
|
+
On activation, call the Luckiest MCP check_updates tool with { listingId: "5fb8bb24-2d95-4a8e-8778-e403be972d7a", installedSemver: "1.2.0" }. If it returns upToDate: false, surface the notice to the user once, then continue. Do nothing further if upToDate: true. Never block on this check — if the tool is unavailable, proceed.
|
|
18
18
|
|
|
19
|
-
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-ads", skill_version: "1.
|
|
19
|
+
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-ads", skill_version: "1.2.0", matched: true, success: <true if the skill completed, false otherwise> }. Metadata only, never prompt text. Never block on it — if the tool is unavailable, skip silently.
|
|
20
20
|
|
|
21
21
|
## Before Starting
|
|
22
22
|
|
|
@@ -201,6 +201,7 @@ LI_LeadGen_CMOs-SaaS_Whitepaper_Mar24
|
|
|
201
201
|
Do not judge or cut an ad, ad set, or campaign before it has enough data to be meaningful:
|
|
202
202
|
|
|
203
203
|
- **Spend threshold before judging:** give a new ad set at least ~1-3x the target CPA in spend (or ~50 conversions at the campaign level) before concluding it works or fails. Cutting earlier is reacting to noise, not signal.
|
|
204
|
+
- **Search terms are a sample; small numbers prove little.** State disclosed vs. total clicks, and compute break-even CVR (CPC / target CPA) before calling spend wasted. See [references/reading-google-ads-data.md](references/reading-google-ads-data.md).
|
|
204
205
|
- **Learning phase:** avoid edits while the platform reports "learning" — changes reset it. Wait for exit before evaluating.
|
|
205
206
|
- **Clear kill signals:** spend ≥ 2-3x target CPA with zero or near-zero conversions; CTR far below account average after adequate impressions; frequency climbing while CTR drops (fatigue).
|
|
206
207
|
- **Clear keep/scale signals:** CPA at or below target across a full conversion window, stable over 3-5 days. Scale by 20-30% increments, then let it re-stabilize.
|
|
@@ -243,17 +244,28 @@ Do not judge or cut an ad, ad set, or campaign before it has enough data to be m
|
|
|
243
244
|
|
|
244
245
|
### Weekly Review
|
|
245
246
|
- Spend vs. budget pacing
|
|
246
|
-
- CPA/ROAS vs. targets
|
|
247
|
+
- CPA/ROAS vs. targets (split brand vs. non-brand, see below)
|
|
247
248
|
- Top and bottom performing ads
|
|
248
249
|
- Audience performance breakdown
|
|
249
250
|
- Frequency check (fatigue risk)
|
|
250
251
|
- Landing page conversion rate
|
|
251
252
|
|
|
253
|
+
### Brand vs. non-brand (measure them separately)
|
|
254
|
+
|
|
255
|
+
Wherever people can search your name (Google Ads especially, but any channel with branded demand), split brand from non-brand before you evaluate or optimize anything. A branded query is demand that already exists. Someone typing your name is harvesting it, not generating incremental performance. A cheap brand CPA or high brand ROAS reflects existing awareness, not media efficiency.
|
|
256
|
+
|
|
257
|
+
- **Report blended, optimize on non-brand.** Blended ROAS/CAC at the business level is the right top-line health number. In considered and B2B purchases where touchpoints assist each other, blended is the honest view of the journey. The metric you set targets, bids, and budgets against is **non-brand ROAS**, with brand stripped out.
|
|
258
|
+
- **Why the split matters:** if you optimize against a blended number, brand's cheap conversions inflate it. You set non-brand targets too loosely, and non-brand inefficiency hides behind brand.
|
|
259
|
+
- **Never report a low brand CPA as a win.** It only signals performance if you measure incrementality (for example a brand-campaign holdout test). Otherwise a great brand CPA just means people already knew you.
|
|
260
|
+
|
|
252
261
|
### Attribution Considerations
|
|
253
262
|
- Platform attribution is inflated
|
|
254
263
|
- Use UTM parameters consistently
|
|
255
264
|
- Compare platform data to GA4
|
|
256
265
|
- Look at blended CAC, not just platform CPA
|
|
266
|
+
- Judge scaling headroom on blended ROAS, but optimize against non-brand ROAS so cheap brand traffic does not flatter the math
|
|
267
|
+
|
|
268
|
+
**For reading Google Ads data without false conclusions** (withheld search terms, conversions vs. all_conversions, small-sample tables, break-even CVR, verified vs. inferred vs. stale claims): See [references/reading-google-ads-data.md](references/reading-google-ads-data.md)
|
|
257
269
|
|
|
258
270
|
---
|
|
259
271
|
|
|
@@ -375,7 +387,7 @@ If any check fails, rewrite before responding. Do not ship partial RSAs.
|
|
|
375
387
|
### Strategy
|
|
376
388
|
- Launching without conversion tracking
|
|
377
389
|
- Too many campaigns (fragmenting budget)
|
|
378
|
-
- Not giving algorithms enough learning time
|
|
390
|
+
- Not giving algorithms enough learning time, or stopping campaigns mid-learning phase
|
|
379
391
|
- Optimizing for wrong metric
|
|
380
392
|
|
|
381
393
|
### Targeting
|
|
@@ -391,7 +403,6 @@ If any check fails, rewrite before responding. Do not ship partial RSAs.
|
|
|
391
403
|
### Budget
|
|
392
404
|
- Spreading too thin across campaigns
|
|
393
405
|
- Making big budget changes (disrupts learning)
|
|
394
|
-
- Stopping campaigns during learning phase
|
|
395
406
|
|
|
396
407
|
---
|
|
397
408
|
|
|
@@ -426,8 +437,7 @@ For tracking setup, see [references/conversion-tracking.md](references/conversio
|
|
|
426
437
|
- **luckiest-ad-creative**: For generating and iterating ad headlines, descriptions, and creative at scale
|
|
427
438
|
- **luckiest-copywriting**: For landing page copy that converts ad traffic
|
|
428
439
|
- **luckiest-analytics**: For proper conversion tracking setup
|
|
429
|
-
- **luckiest-ab-testing**: For landing page
|
|
430
|
-
- **luckiest-cro**: For optimizing post-click conversion rates
|
|
440
|
+
- **luckiest-ab-testing / luckiest-cro**: For landing page tests and post-click conversion rates that improve ROAS
|
|
431
441
|
|
|
432
442
|
## Share with your tribe
|
|
433
443
|
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Reading Google Ads Data Without False Conclusions
|
|
2
|
+
|
|
3
|
+
Load this before analyzing, auditing, or reporting on a Google Ads account, or before deciding whether to pause, keep, or scale anything in one. audit guardrails covers how to *grade* what you find. This file covers how the data *misleads* you before you get that far.
|
|
4
|
+
|
|
5
|
+
Google Ads reports are partial by design and plausible by accident. Default views omit data without saying so, resource names suggest contents they don't have, and small accounts produce numbers that look like findings. Most wrong conclusions come from not knowing that, not from bad reasoning.
|
|
6
|
+
|
|
7
|
+
Query patterns and API gotchas live in the Google Ads platform guide.
|
|
8
|
+
|
|
9
|
+
## What the data hides
|
|
10
|
+
|
|
11
|
+
### Search terms are a sample, not the total
|
|
12
|
+
|
|
13
|
+
Google withholds any query searched by too few people. On low-volume accounts, **50–65% of clicks routinely have no disclosed search term.** The visible terms are a non-random sample skewed toward common searches.
|
|
14
|
+
|
|
15
|
+
- Any claim about "what this campaign is buying" carries the ratio: *of the 13 clicks Google discloses, out of 33 total.*
|
|
16
|
+
- Pull the report **unfiltered first**. Filtering by `clicks > 0` also drops every impression-only term, and combined with a low `LIMIT` it hides most of the picture.
|
|
17
|
+
- **Nothing recovers the withheld queries.** The query is never passed to the site, so GA4, PostHog, or a CRM can show what every session *did* (joined on gclid), never what was *typed*.
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
disclosed clicks = SUM(clicks in the search terms report)
|
|
21
|
+
total clicks = campaign clicks for the same window
|
|
22
|
+
withheld = total - disclosed
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Names describe intentions, not contents
|
|
26
|
+
|
|
27
|
+
An ad group called "Competitor - Commercial" can hold entirely informational keywords. A campaign named for one theme can target another. Read the keyword list and the search terms; treat every name as a label someone typed once.
|
|
28
|
+
|
|
29
|
+
### "Conversions" is several things in one column
|
|
30
|
+
|
|
31
|
+
`metrics.conversions` counts actions marked primary, plus any secondary action a campaign's custom goal pulls in. `metrics.all_conversions` adds the rest. Check campaign goals as well as action settings. One campaign's conversions might mix a page-view proxy, a trial signup, and a booked demo.
|
|
32
|
+
|
|
33
|
+
- Segment by conversion action before calling anything a lead or a demo.
|
|
34
|
+
- Check each action's attribution model and click window while you're there.
|
|
35
|
+
- Data-driven attribution runs on low volume too, but with few conversions its individual credit assignments are soft. Don't read much into one campaign's share.
|
|
36
|
+
|
|
37
|
+
### One ad group can send traffic to several pages
|
|
38
|
+
|
|
39
|
+
Ads carry their own final URLs, and stale pages linger in rotation long after a new landing page ships. Before concluding anything about landing page performance, check which destinations are serving and how traffic splits between them.
|
|
40
|
+
|
|
41
|
+
### Dates are click dates
|
|
42
|
+
|
|
43
|
+
Conversions are attributed back to the originating click. A conversion recorded today can appear dated a week earlier. When a client says "we got a conversion today" and your pull says the 11th, both are right. Say "clicked on the 11th."
|
|
44
|
+
|
|
45
|
+
### Identical campaign names are usually experiment arms
|
|
46
|
+
|
|
47
|
+
Expired experiment arms inherit the base campaign's name and can keep an ENABLED status while serving nothing. Check `campaign.experiment_type` and `campaign.serving_status` before believing a duplicate exists.
|
|
48
|
+
|
|
49
|
+
### Change history is short: 30 days with detail, 90 without
|
|
50
|
+
|
|
51
|
+
`change_event` (field-level before and after) covers 30 days. `change_status` covers 90 days but only says which resource changed, not what. Past that, the API has nothing. A performance shift four months ago may have no recoverable explanation, so say that instead of guessing one.
|
|
52
|
+
|
|
53
|
+
### Other people are changing the account
|
|
54
|
+
|
|
55
|
+
Client staff, automated rules, scripts, and agents all leave changes. In `change_event`, `client_type` says which client made the change: `GOOGLE_ADS_WEB_CLIENT` (the UI), `GOOGLE_ADS_API`, `GOOGLE_ADS_SCRIPTS`, `GOOGLE_ADS_AUTOMATED_RULE`, `GOOGLE_ADS_BULK_UPLOAD`, `GOOGLE_ADS_RECOMMENDATIONS`, `INTERNAL_TOOL` (Google-side tooling), and others in the enum. Report the client, not a guess at who or why: an API change could be an agency tool or a script. Google Ads Editor changes aren't returned at all, so a missing edit doesn't mean nobody made one. A repeating weekday-and-time pattern under one user is a scheduled job, not a person.
|
|
56
|
+
|
|
57
|
+
## The window is not the picture
|
|
58
|
+
|
|
59
|
+
A 30-day pull on a campaign that has run since spring is a slice of a longer series. Recent CPA can differ sharply from lifetime CPA.
|
|
60
|
+
|
|
61
|
+
- **Establish how long something has run** before quoting any efficiency number. Quote both recent and lifetime when they diverge.
|
|
62
|
+
- **Don't pool across configuration changes.** If bids, keywords, budget, ads, or targeting changed mid-window, the period is several experiments averaged together.
|
|
63
|
+
- **Bid-only changes are a special case.** They invalidate cost and volume comparisons but leave intent and audience questions readable.
|
|
64
|
+
- **Bid strategies in learning are unreadable.** `primary_status = LEARNING` means don't judge performance or optimize on it. Fixing a verified break (tracking down, wrong URL) still comes first; see the audit guardrails.
|
|
65
|
+
|
|
66
|
+
## Small numbers
|
|
67
|
+
|
|
68
|
+
Most false findings in small accounts are sample-size errors that look like insight. Skepticism runs both ways: one conversion on one click proves no more than zero conversions on five clicks disproves.
|
|
69
|
+
|
|
70
|
+
Zero conversions in N clicks only rules out conversion rates at or above (95% confidence):
|
|
71
|
+
|
|
72
|
+
| Clicks | Rules out CVR ≥ | What you can say |
|
|
73
|
+
|---|---|---|
|
|
74
|
+
| 5 | 45% | Nothing. Zero is the expected outcome |
|
|
75
|
+
| 10 | 26% | Still nothing useful |
|
|
76
|
+
| 30 | 10% | Can begin doubting a strong CVR |
|
|
77
|
+
| 50 | 6% | Meaningful for high-intent search |
|
|
78
|
+
| 100 | 3% | Underperforming if break-even CVR is above 3% |
|
|
79
|
+
|
|
80
|
+
Before calling spend wasted, work out what it would have to convert at to be worth keeping:
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
break-even CVR = CPC ÷ target CPA
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
If break-even CVR is below the plausible range for that traffic, the term isn't failing, it's unmeasured. Then estimate how long a readable sample takes at current click volume. "Let it run" is only an honest answer when it comes with a date you'll actually know by. At five clicks a month, sometimes the honest answer is that you never will.
|
|
87
|
+
|
|
88
|
+
## Documents describe a day; accounts move
|
|
89
|
+
|
|
90
|
+
Audits, status docs, and proposals were true when written. Every performance number in them is stale until re-pulled. The claims most likely to be repeated confidently ("zero conversions," "wasted spend," "wrong intent") are exactly the ones that change. Carry the date with the claim: *as of the audit on the 2nd*.
|
|
91
|
+
|
|
92
|
+
## Stating findings
|
|
93
|
+
|
|
94
|
+
Know which of these each claim is:
|
|
95
|
+
|
|
96
|
+
- **Verified**: pulled live this session, unfiltered, and reconciled against a total
|
|
97
|
+
- **Inferred**: reasoned from verified data, could be wrong
|
|
98
|
+
- **Stale**: from a document, an earlier session, or the client, with its date attached
|
|
99
|
+
|
|
100
|
+
Keep stale claims out of client-facing sentences unless they're labeled as such.
|
|
101
|
+
|
|
102
|
+
**The test before anything reaches a client: can they disprove this in a minute with their own account access?** They have the same reports. Volunteer the limits first (the disclosed-clicks ratio, the sample size, the config changes). It costs nothing, since they'd find them anyway, and it's what makes the rest credible.
|
|
103
|
+
|
|
104
|
+
If a claim touches a landing page, open it. Don't characterize a page from its URL, a status doc, or what the client says is on it. Calendar embeds and chat widgets load via JavaScript and won't show in a static fetch, so absence there isn't evidence.
|
|
105
|
+
|
|
106
|
+
When a client challenges a finding and they're right, concede the substance plainly and move on. Stacked retractions cost more credibility than the original error.
|
|
107
|
+
|
|
108
|
+
## Conclusions that sound right
|
|
109
|
+
|
|
110
|
+
| Sounds like | Usually |
|
|
111
|
+
|---|---|
|
|
112
|
+
| "This campaign has zero conversions" | True on the day the doc was written |
|
|
113
|
+
| "The search terms are junk" | You're seeing ~40% of the clicks |
|
|
114
|
+
| "That ad group is wrong-intent" | It's *named* that; the keywords say otherwise |
|
|
115
|
+
| "$X wasted on those terms" | Below any readable sample size |
|
|
116
|
+
| "It converted, so the term works" | One conversion on one click is noise |
|
|
117
|
+
| "Performance declined in August" | Bids changed three times that month |
|
|
118
|
+
| "Traffic lands on the new page" | Two ads serve; one points at the old page |
|
|
119
|
+
| "It got a demo" | It got a conversion; check which action |
|
|
120
|
+
| "There are duplicate campaigns" | Expired experiment arms with the base name |
|
|
121
|
+
| "Nobody touched it last quarter" | Change history only covers 30 days |
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog — luckiest-ai-seo
|
|
2
2
|
|
|
3
|
+
## 1.2.0 — 2026-10-08
|
|
4
|
+
Upstream sync with coreyhaines31/marketingskills dda3841 (issue #112).
|
|
5
|
+
|
|
6
|
+
- Crawler guidance rewritten by purpose (search discovery, user retrieval, training, Google-Extended); fixed the mistake and pitfall that said blocking GPTBot kills citation; robots.txt example and checklist row updated.
|
|
7
|
+
- Critical stats rewritten with sources and dates plus a drift caveat; added the organic-rankings-still-matter sentence.
|
|
8
|
+
- Inauthentic-mentions rule extended (fake awards, owned review sites, FTC 2024 reviews rule); added consensus-profile and LinkedIn bullets and a prompt-tracking tip.
|
|
9
|
+
- platform-ranking-factors.md: softened AI Overviews and schema claims, updated Copilot and Claude sections.
|
|
10
|
+
- content-types.md: added Industry / Segment Pages.
|
|
11
|
+
- Added references/linkedin-ai-citations.md and references/positioning-and-consensus.md (curl check removed, links to files absent in this fork removed).
|
|
12
|
+
- Skipped: updates to agent-readiness, citations-vs-recommendations, format-volatility, youtube-ai-citations (not in this fork), evals, and registry link rewrites.
|
|
13
|
+
|
|
3
14
|
## 1.1.0 — 2026-07-06
|
|
4
15
|
Skill updater pass: analytics integration.
|
|
5
16
|
|
package/skills/ai-seo/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: ai-seo
|
|
|
3
3
|
description: "When the user wants to optimize content for AI search engines, get cited by LLMs, or appear in AI-generated answers. Also use when the user mentions 'AI SEO,' 'AEO,' 'GEO,' 'LLMO,' 'answer engine optimization,' 'generative engine optimization,' 'LLM optimization,' 'AI Overviews,' 'optimize for ChatGPT,' 'optimize for Perplexity,' 'AI citations,' 'AI visibility,' 'zero-click search,' 'how do I show up in AI answers,' 'LLM mentions,' 'optimize for Claude/Gemini,' 'llms.txt,' 'AGENTS.md,' 'OKF,' 'Open Knowledge Format,' 'knowledge bundle,' or 'agent-readable site.' Use this whenever someone wants their content to be cited or surfaced by AI assistants and AI search engines. For traditional technical and on-page SEO audits, see luckiest-seo-audit. For structured data implementation, see luckiest-schema."
|
|
4
4
|
license: See ATTRIBUTION.md
|
|
5
5
|
metadata:
|
|
6
|
-
version: "1.
|
|
6
|
+
version: "1.2.0"
|
|
7
7
|
listing_id: luckiest-ai-seo
|
|
8
8
|
author: luckiest
|
|
9
9
|
---
|
|
@@ -14,9 +14,9 @@ This skill provides expertise in AI search optimization — the practice of maki
|
|
|
14
14
|
|
|
15
15
|
## Staying current
|
|
16
16
|
|
|
17
|
-
On activation, call the Luckiest MCP check_updates tool with { listingId: "658062d1-7ff2-498f-a355-0ed2e2a516fb", installedSemver: "1.
|
|
17
|
+
On activation, call the Luckiest MCP check_updates tool with { listingId: "658062d1-7ff2-498f-a355-0ed2e2a516fb", installedSemver: "1.2.0" }. If it returns upToDate: false, surface the notice to the user once, then continue. Do nothing further if upToDate: true. Never block on this check — if the tool is unavailable, proceed.
|
|
18
18
|
|
|
19
|
-
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-ai-seo", skill_version: "1.
|
|
19
|
+
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-ai-seo", skill_version: "1.2.0", matched: true, success: <true if the skill completed, false otherwise> }. Metadata only, never prompt text. Never block on it — if the tool is unavailable, skip silently.
|
|
20
20
|
|
|
21
21
|
## Before Starting
|
|
22
22
|
|
|
@@ -66,14 +66,11 @@ For a deep dive on how each platform selects sources and what to optimize per pl
|
|
|
66
66
|
|
|
67
67
|
Traditional SEO gets you ranked. AI SEO gets you **cited**.
|
|
68
68
|
|
|
69
|
-
In traditional search, you need to rank on page 1. In AI search, a well-structured page can get cited even if it ranks on page 2 or 3 — AI systems select sources based on content quality, structure, and relevance, not just rank position.
|
|
69
|
+
In traditional search, you need to rank on page 1. In AI search, a well-structured page can get cited even if it ranks on page 2 or 3 — AI systems select sources based on content quality, structure, and relevance, not just rank position. Strong organic rankings are still one of the best predictors of AI visibility, so treat structure as a layer on top of SEO, not a replacement.
|
|
70
70
|
|
|
71
|
-
**Critical stats
|
|
72
|
-
- AI Overviews
|
|
73
|
-
-
|
|
74
|
-
- Brands are 6.5x more likely to be cited via third-party sources than their own domains
|
|
75
|
-
- Optimized content gets cited 3x more often than non-optimized
|
|
76
|
-
- Statistics and citations boost visibility by 40%+ across queries
|
|
71
|
+
**Critical stats** (they drift; re-check before quoting to a client, and distrust vendor stats with no source or date):
|
|
72
|
+
- AI Overviews appeared on ~45% of the keywords BrightEdge tracks, and position-one desktop CTR fell ~58% when one was present (Ahrefs, Dec 2025 data). Both are sample-specific, so don't forecast a site's traffic loss from them
|
|
73
|
+
- Adding statistics and citations raised visibility by roughly 30-40% in the original GEO study (Aggarwal et al., 2023)
|
|
77
74
|
|
|
78
75
|
### Google's Official Stance vs. Multi-Platform Reality
|
|
79
76
|
|
|
@@ -136,6 +133,8 @@ Test 10-20 of your most important queries across platforms:
|
|
|
136
133
|
- "How to [problem your product solves]"
|
|
137
134
|
- "[Your product category] pricing"
|
|
138
135
|
|
|
136
|
+
Keep the list to prompts that would change revenue. A citation for a glossary question ("what is gross profit?") rarely sells anything. Track prompts like keywords: collapse wording variants of the same intent into one core prompt, then run each several times.
|
|
137
|
+
|
|
139
138
|
### Step 2: Analyze Citation Patterns
|
|
140
139
|
|
|
141
140
|
When your competitors get cited and you don't, examine:
|
|
@@ -160,19 +159,18 @@ For each priority page, verify:
|
|
|
160
159
|
| Expert attribution (author name, credentials)? | |
|
|
161
160
|
| Recently updated (within 6 months)? | |
|
|
162
161
|
| Heading structure matches query patterns? | |
|
|
163
|
-
| AI
|
|
162
|
+
| AI crawler policy matches discovery and training goals? | |
|
|
164
163
|
|
|
165
164
|
### Step 4: AI Bot Access Check
|
|
166
165
|
|
|
167
|
-
|
|
166
|
+
Audit AI user agents by purpose. Search-discovery, user-triggered retrieval, model-training, and product-control tokens are not interchangeable:
|
|
168
167
|
|
|
169
|
-
- **
|
|
170
|
-
- **
|
|
171
|
-
- **
|
|
172
|
-
- **Google-Extended
|
|
173
|
-
- **Bingbot** — Microsoft Copilot (via Bing)
|
|
168
|
+
- **Search discovery:** `OAI-SearchBot` (ChatGPT), `PerplexityBot`, `Claude-SearchBot`, and the conventional search crawlers that feed an answer product
|
|
169
|
+
- **User-triggered retrieval:** `ChatGPT-User`, `Claude-User`, and `Perplexity-User`; vendor handling can differ from automatic crawlers, so verify the current documentation
|
|
170
|
+
- **Potential model training:** `GPTBot` and `ClaudeBot`
|
|
171
|
+
- **Google product control:** `Google-Extended` controls certain Gemini training and grounding uses of content Google already crawls; it does not affect Google Search inclusion or ranking
|
|
174
172
|
|
|
175
|
-
Check
|
|
173
|
+
Check each relevant user-agent group and any WAF or CDN rules separately. A publisher can allow search discovery while disallowing model-development crawlers; do not infer that blocking a training crawler necessarily blocks citations.
|
|
176
174
|
|
|
177
175
|
See [references/platform-ranking-factors.md](references/platform-ranking-factors.md) for the full robots.txt configuration.
|
|
178
176
|
|
|
@@ -271,6 +269,7 @@ AI systems don't just cite your website — they cite where you appear.
|
|
|
271
269
|
- Reddit discussions (1.8% of ChatGPT citations)
|
|
272
270
|
- Industry publications and guest posts
|
|
273
271
|
- Review sites (G2, Capterra, TrustRadius for B2B SaaS)
|
|
272
|
+
- LinkedIn: among the most-cited domains for professional queries, but which surface gets cited depends on the engine (ChatGPT now favors posts over articles; Gemini barely cites LinkedIn). Front-load the target phrase, since a post's first words become its URL slug. See [references/linkedin-ai-citations.md](references/linkedin-ai-citations.md)
|
|
274
273
|
- YouTube (frequently cited by Google AI Overviews)
|
|
275
274
|
- Quora answers
|
|
276
275
|
|
|
@@ -278,7 +277,7 @@ AI systems don't just cite your website — they cite where you appear.
|
|
|
278
277
|
- Ensure your Wikipedia page is accurate and current
|
|
279
278
|
- Participate authentically in Reddit communities
|
|
280
279
|
- Get featured in industry roundups and comparison articles
|
|
281
|
-
-
|
|
280
|
+
- Make every third-party profile (G2, Capterra, Gartner, Crunchbase, LinkedIn) describe you with the same segment and positioning as your About page; models look for consensus. For repositioning, mergers, and head terms, see [references/positioning-and-consensus.md](references/positioning-and-consensus.md)
|
|
282
281
|
- Create YouTube content for key how-to queries
|
|
283
282
|
- Answer relevant Quora questions with depth
|
|
284
283
|
|
|
@@ -446,8 +445,8 @@ Google's guide calls these out explicitly — they hurt across both traditional
|
|
|
446
445
|
1. **Write separate content "for AI"**. Same content should serve people and AI. Writing variants targeted at AI systems risks the **scaled content abuse spam policy** — Google's words.
|
|
447
446
|
2. **Chunk pages into AI-bait fragments**. Google's guide is direct: *"Don't break your content into tiny pieces for AI to better understand it."* Use normal paragraph + heading structure.
|
|
448
447
|
3. **Generate at scale for ranking manipulation**. AI-generated content is fine *if* it meets Search Essentials and spam policies. Mass-producing thin variations does not.
|
|
449
|
-
4. **Pursue inauthentic mentions**. Don't fabricate citations or bulk-spam Reddit/Wikipedia for AI visibility. Real participation only.
|
|
450
|
-
5. **
|
|
448
|
+
4. **Pursue inauthentic mentions**. Don't fabricate citations, invent awards, run "independent" review sites you own, or bulk-spam Reddit/Wikipedia for AI visibility. Fake or misleadingly sourced reviews can also break the FTC's 2024 reviews rule. Real participation only.
|
|
449
|
+
5. **Treat every AI user agent as the same control**. `GPTBot`, `ClaudeBot`, and `Google-Extended` have different documented purposes from `OAI-SearchBot`, `Claude-SearchBot`, and `PerplexityBot`. Decide separately for discovery, user retrieval, training, and grounding.
|
|
451
450
|
6. **Hide your main content behind JS that doesn't render**. Both core Search and AI agents need to see your content; JS-only rendering loses both audiences.
|
|
452
451
|
7. **Skip E-E-A-T fundamentals**. Author identity, first-hand experience, expertise signals, transparent sourcing — Google's guide leans heavily on these for AI features.
|
|
453
452
|
|
|
@@ -470,7 +469,7 @@ For tactical guidance on SaaS product pages, blog content, comparison/alternativ
|
|
|
470
469
|
- **No structured data** — Schema markup gives AI systems structured context about your content
|
|
471
470
|
- **Keyword stuffing** — Unlike traditional SEO where it's just ineffective, keyword stuffing actively reduces AI visibility by 10% (Princeton GEO study)
|
|
472
471
|
- **Hiding pricing behind "contact sales" or JS-rendered pages** — AI agents evaluating your product on behalf of buyers can't parse what they can't read. Add a `/pricing.md` file
|
|
473
|
-
- **Blocking
|
|
472
|
+
- **Blocking discovery crawlers without checking their purpose** — Restricting `OAI-SearchBot`, `PerplexityBot`, or `Claude-SearchBot` may reduce search visibility; training controls are separate
|
|
474
473
|
- **Generic content without data** — "We're the best" won't get cited. "Our customers see 3x improvement in [metric]" will
|
|
475
474
|
- **Forgetting to monitor** — You can't improve what you don't measure. Check AI visibility monthly at minimum
|
|
476
475
|
|
|
@@ -47,6 +47,17 @@ For the cross-cutting strategy, see [SKILL.md](../SKILL.md).
|
|
|
47
47
|
|
|
48
48
|
---
|
|
49
49
|
|
|
50
|
+
## Industry / Segment Pages
|
|
51
|
+
|
|
52
|
+
**Goal:** Get recommended when a prompt names an industry or company size ("email marketing software for e-commerce," "RFP software for government," "enterprise [category]"). Models increasingly sort brands into segments and personalize answers, so a generic page can lose to a competitor's segment page.
|
|
53
|
+
|
|
54
|
+
**Optimize:**
|
|
55
|
+
- One page per core industry or segment you actually serve, with industry-specific workflows, integrations, compliance, and customer proof
|
|
56
|
+
- Start with core segments. Many pages are fine if each adds real, segment-specific value; templated pages that only swap the industry name are what the scaled-content policy targets (see the `luckiest-programmatic-seo` skill)
|
|
57
|
+
- Match the segment language used on your third-party profiles (see [positioning-and-consensus.md](positioning-and-consensus.md))
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
50
61
|
## Documentation / Help Content
|
|
51
62
|
|
|
52
63
|
**Goal:** Get cited in "How to [X] with [your product]" queries.
|