luckiest-co 1.0.52 → 1.0.53
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/ab-testing/CHANGELOG.md +4 -0
- package/skills/ab-testing/SKILL.md +3 -3
- package/skills/ab-testing/references/sample-size-guide.md +15 -2
- package/skills/ad-creative/CHANGELOG.md +8 -0
- package/skills/ad-creative/SKILL.md +23 -13
- package/skills/ads/CHANGELOG.md +6 -0
- package/skills/ads/SKILL.md +14 -10
- package/skills/ads/evals/evals.json +13 -0
- package/skills/ads/references/operating-check.md +75 -0
- package/skills/ai-seo/CHANGELOG.md +11 -0
- package/skills/ai-seo/SKILL.md +28 -27
- package/skills/ai-seo/references/agent-defaults.md +79 -0
- package/skills/ai-seo/references/ai-attribution.md +54 -0
- package/skills/ai-seo/references/answer-accuracy.md +84 -0
- package/skills/ai-seo/references/content-patterns.md +24 -0
- package/skills/ai-seo/references/multilingual-and-commerce.md +55 -0
- package/skills/ai-seo/references/platform-ranking-factors.md +29 -11
- package/skills/ai-seo/references/prompt-portfolio.md +83 -0
- package/skills/analytics/CHANGELOG.md +8 -0
- package/skills/analytics/SKILL.md +74 -18
- package/skills/analytics/references/event-library.md +2 -2
- package/skills/churn-prevention/CHANGELOG.md +7 -0
- package/skills/churn-prevention/SKILL.md +16 -8
- package/skills/churn-prevention/references/dunning-playbook.md +10 -7
- package/skills/co-marketing/CHANGELOG.md +3 -0
- package/skills/co-marketing/SKILL.md +9 -9
- package/skills/coder/CHANGELOG.md +19 -0
- package/skills/coder/SKILL.md +4 -3
- package/skills/coder-writing-plans/CHANGELOG.md +5 -0
- package/skills/coder-writing-plans/SKILL.md +4 -3
- package/skills/content-strategy/CHANGELOG.md +3 -0
- package/skills/content-strategy/SKILL.md +3 -3
- package/skills/content-strategy/references/headless-cms.md +4 -4
- package/skills/copy-editing/CHANGELOG.md +4 -0
- package/skills/copy-editing/SKILL.md +5 -3
- package/skills/copy-editing/evals/evals.json +13 -0
- package/skills/copy-editing/references/checklist.md +24 -0
- package/skills/copywriting/CHANGELOG.md +6 -0
- package/skills/copywriting/SKILL.md +57 -4
- package/skills/copywriting/evals/evals.json +14 -0
- package/skills/emails/CHANGELOG.md +4 -0
- package/skills/emails/SKILL.md +5 -3
- package/skills/marketing-plan/CHANGELOG.md +4 -0
- package/skills/marketing-plan/SKILL.md +8 -3
- package/skills/offers/CHANGELOG.md +4 -0
- package/skills/offers/SKILL.md +4 -4
- package/skills/onboarding/CHANGELOG.md +4 -0
- package/skills/onboarding/SKILL.md +13 -7
- package/skills/pricing/CHANGELOG.md +4 -0
- package/skills/pricing/SKILL.md +3 -3
- package/skills/pricing/references/research-methods.md +12 -2
- package/skills/product-marketing/CHANGELOG.md +5 -0
- package/skills/product-marketing/SKILL.md +76 -11
- package/skills/product-marketing/references/brand-voice.md +103 -0
- package/skills/prospecting/CHANGELOG.md +3 -0
- package/skills/prospecting/SKILL.md +22 -22
- package/skills/prospecting/references/data-sources.md +0 -18
- package/skills/prospecting/references/saas-prospecting.md +2 -2
- package/skills/referrals/CHANGELOG.md +4 -0
- package/skills/referrals/SKILL.md +3 -3
- package/skills/referrals/references/program-examples.md +9 -2
- package/skills/research/CHANGELOG.md +5 -0
- package/skills/research/SKILL.md +5 -5
- package/skills/research/references/visual-read.md +10 -4
- package/skills/revops/CHANGELOG.md +4 -0
- package/skills/revops/SKILL.md +6 -6
- package/skills/revops/references/scoring-models.md +14 -13
- package/skills/seo-audit/CHANGELOG.md +4 -0
- package/skills/seo-audit/SKILL.md +7 -7
- package/skills/seo-audit/references/international-seo.md +3 -1
- package/skills/social/CHANGELOG.md +4 -0
- package/skills/social/SKILL.md +4 -4
- package/skills/social/references/listening.md +13 -0
- package/skills/social/references/platforms.md +35 -0
- package/skills/social/references/short-form-video.md +10 -0
- package/skills/trends/CHANGELOG.md +7 -0
- package/skills/trends/SKILL.md +5 -5
- package/skills/trends/agents/openai.yaml +8 -0
- package/skills/trends/references/comparison.md +5 -2
- package/skills/trends/references/engine-contract.md +2 -2
- package/skills/trends/references/synthesis.md +2 -2
- package/skills/trends/scripts/build-skill.sh +39 -0
- package/skills/trends/scripts/compare.sh +61 -0
- package/skills/trends/scripts/evaluate_search_quality.py +584 -0
- package/skills/trends/scripts/lib/arxiv.py +10 -1
- package/skills/trends/scripts/lib/bluesky.py +22 -2
- package/skills/trends/scripts/lib/devto.py +108 -18
- package/skills/trends/scripts/lib/digg.py +79 -17
- package/skills/trends/scripts/lib/github.py +9 -4
- package/skills/trends/scripts/lib/hackernews.py +74 -2
- package/skills/trends/scripts/lib/html_render.py +15 -1
- package/skills/trends/scripts/lib/pipeline.py +1 -1
- package/skills/trends/scripts/lib/planner.py +5 -0
- package/skills/trends/scripts/lib/providers.py +1 -1
- package/skills/trends/scripts/lib/reddit_shreddit.py +4 -1
- package/skills/trends/scripts/lib/render.py +49 -45
- package/skills/trends/scripts/lib/youtube_yt.py +10 -7
- package/skills/trends/scripts/test-v1-vs-v2.sh +220 -0
- package/skills/trends/scripts/test_device_auth.py +128 -0
- package/skills/trends/scripts/verify_v3.py +200 -0
- package/skills/video/CHANGELOG.md +1 -1
package/package.json
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Changelog — luckiest-ab-testing
|
|
2
2
|
|
|
3
|
+
## 1.1.2 — 2026-10-21
|
|
4
|
+
From coreyhaines31/marketingskills at 06d647e (issue #213, MIT).
|
|
5
|
+
- Test duration accounts for arms, exposure, and unequal allocation, with a worked example.
|
|
6
|
+
|
|
3
7
|
## 1.1.1 — 2026-10-16
|
|
4
8
|
From coreyhaines31/marketingskills at 1efedbc (issue #174, MIT).
|
|
5
9
|
|
|
@@ -3,7 +3,7 @@ name: ab-testing
|
|
|
3
3
|
description: Plan, design, analyze, and scale A/B tests and growth experiments for marketers — builds valid hypotheses, sizes samples, picks primary/secondary/guardrail metrics, guards against peeking and Sample Ratio Mismatch, and runs an ongoing experimentation program. Use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "MVT," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program," "experiment playbook," "sample ratio mismatch," "SRM," "my test results look weird," "why is my split uneven," or "Bayesian A/B test." Use whenever someone is comparing two approaches and wants to measure which performs better, or wants to build a systematic experimentation practice. For tracking implementation, see luckiest-analytics. For page-level conversion optimization, see luckiest-cro.
|
|
4
4
|
license: See ATTRIBUTION.md
|
|
5
5
|
metadata:
|
|
6
|
-
version: "1.1.
|
|
6
|
+
version: "1.1.2"
|
|
7
7
|
listing_id: luckiest-ab-testing
|
|
8
8
|
author: luckiest
|
|
9
9
|
---
|
|
@@ -14,9 +14,9 @@ You are an expert in experimentation and A/B testing. Your goal is to help desig
|
|
|
14
14
|
|
|
15
15
|
## Staying current
|
|
16
16
|
|
|
17
|
-
On activation, call the Luckiest MCP check_updates tool with { listingId: "dbff1677-8ede-4016-b52d-21db4aec7801", installedSemver: "1.1.
|
|
17
|
+
On activation, call the Luckiest MCP check_updates tool with { listingId: "dbff1677-8ede-4016-b52d-21db4aec7801", installedSemver: "1.1.2" }. 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-ab-testing", skill_version: "1.1.
|
|
19
|
+
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-ab-testing", skill_version: "1.1.2", 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
|
## Initial Assessment
|
|
22
22
|
|
|
@@ -99,8 +99,14 @@ Reference for calculating sample sizes and test duration.
|
|
|
99
99
|
|
|
100
100
|
```
|
|
101
101
|
Duration (days) = (Sample per variant × Number of variants) / (Daily traffic × % exposed)
|
|
102
|
+
|
|
103
|
+
For unequal allocation, calculate each arm separately:
|
|
104
|
+
Days per arm = Required sample for that arm / (Daily eligible traffic × Exposure fraction × Arm allocation fraction)
|
|
105
|
+
Total collection time = longest arm duration
|
|
102
106
|
```
|
|
103
107
|
|
|
108
|
+
Use fractions for exposure and allocation (50% = 0.5). Count eligible randomized units consistently with the sample-size calculation; repeat pageviews are not additional participants. The balanced formula assumes equal sample requirements and equal allocation.
|
|
109
|
+
|
|
104
110
|
### Examples
|
|
105
111
|
|
|
106
112
|
**Scenario 1: High-traffic page**
|
|
@@ -276,15 +282,22 @@ SRM is a data-quality failure where the observed traffic split deviates from the
|
|
|
276
282
|
### Can I run this test?
|
|
277
283
|
|
|
278
284
|
```
|
|
279
|
-
Daily traffic
|
|
285
|
+
Daily eligible traffic (randomization units): _____
|
|
286
|
+
Fraction exposed to the experiment: _____
|
|
287
|
+
Number of arms (including control): _____
|
|
288
|
+
Allocation fraction for each arm: _____
|
|
280
289
|
Baseline conversion rate: _____
|
|
281
290
|
MDE I care about: _____
|
|
282
291
|
|
|
283
292
|
Sample needed per variant: _____ (from tables above)
|
|
284
|
-
Days
|
|
293
|
+
Balanced allocation: Days = Sample per arm × Number of arms / (Daily eligible traffic × Exposure fraction)
|
|
294
|
+
Unequal allocation: Days = max across arms of [Sample required for arm / (Daily eligible traffic × Exposure fraction × Arm allocation)]
|
|
295
|
+
Round collection time up, then apply the minimum-duration rules above.
|
|
285
296
|
|
|
286
297
|
If days > 60: Consider alternatives (Bayesian/sequential, CUPED, or qualitative)
|
|
287
298
|
If days > 30: Acceptable for high-impact tests
|
|
288
299
|
If days < 14: Likely feasible
|
|
289
300
|
If days < 7: Easy to run, consider running longer anyway
|
|
290
301
|
```
|
|
302
|
+
|
|
303
|
+
**Duration check (illustrative):** with 2,000 participants required per arm and 1,000 eligible participants/day, two arms at 50/50 with full exposure require four days, not two. At 50% exposure they require eight days. With full exposure and 90/10 allocation, the smaller arm needs 20 days to reach 2,000. These are collection estimates; honor planned business cycles and the analysis stopping rule.
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog — luckiest-ad-creative
|
|
2
2
|
|
|
3
|
+
## 1.5.1 — 2026-10-23
|
|
4
|
+
- Removed dead `tools/` registry and integration links and the upstream `tools/clis` commands. The platforms stay as plain names: pull data via API, MCP, or CSV export.
|
|
5
|
+
|
|
6
|
+
## 1.5.0 — 2026-10-21
|
|
7
|
+
From coreyhaines31/marketingskills at 06d647e (issue #213, MIT).
|
|
8
|
+
- Reads the Learnings section before drafting. Exact product names in every field. Test hypotheses that can lose.
|
|
9
|
+
- Skipped: the vendor promotion block upstream added to the performance loop, and hook-system.md (not in this fork).
|
|
10
|
+
|
|
3
11
|
## 1.4.0 — 2026-10-08
|
|
4
12
|
Upstream sync with coreyhaines31/marketingskills dda3841 (issue #112).
|
|
5
13
|
|
|
@@ -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.5.1"
|
|
7
7
|
listing_id: luckiest-ad-creative
|
|
8
8
|
author: luckiest
|
|
9
9
|
---
|
|
@@ -14,15 +14,17 @@ 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.5.1" }. 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.5.1", 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
|
|
|
23
23
|
**Check for product marketing context first:**
|
|
24
24
|
If `.agents/product-marketing.md` exists (or `.claude/product-marketing.md`, or the legacy `product-marketing-context.md` filename, in older setups), read it before asking questions. Use that context and only ask for information not already covered or specific to this task.
|
|
25
25
|
|
|
26
|
+
Check its **Learnings** section before drafting: angles, offers, and formats already tested there shouldn't be re-proposed as new ideas, and active lessons apply unless the user says otherwise.
|
|
27
|
+
|
|
26
28
|
Gather this context (ask if not provided):
|
|
27
29
|
|
|
28
30
|
### 1. Platform & Format
|
|
@@ -264,6 +266,22 @@ Track what was learned and what's being tested. Record a **hypothesis for every
|
|
|
264
266
|
- Claims without specificity ("Best," "Leading," "Top")
|
|
265
267
|
- All caps or excessive punctuation
|
|
266
268
|
- Clickbait that the landing page can't deliver on
|
|
269
|
+
- Shortened or nicknamed product names — use the exact product name the
|
|
270
|
+
brief gives, in every field of every concept, unless a short form is
|
|
271
|
+
explicitly approved
|
|
272
|
+
|
|
273
|
+
### Test Hypotheses That Can Lose
|
|
274
|
+
|
|
275
|
+
When a concept ships with a test hypothesis, write one that a result can
|
|
276
|
+
prove wrong. "This will resonate with renters" cannot lose; "beats the
|
|
277
|
+
control on CTR among renters" can.
|
|
278
|
+
|
|
279
|
+
- Name the metric (CTR, CVR, CPA, thumb-stop rate) and the comparison —
|
|
280
|
+
against which control or sibling concept, in which audience
|
|
281
|
+
- State the expected direction, and a magnitude when a baseline exists
|
|
282
|
+
("+15% CTR vs. Concept A")
|
|
283
|
+
- The hypothesis should follow from the angle's motivation, so a win or a
|
|
284
|
+
loss teaches you something about the audience, not just the asset
|
|
267
285
|
|
|
268
286
|
### No AI Tells
|
|
269
287
|
|
|
@@ -380,20 +398,12 @@ For large-scale creative production (Anthropic's growth team generates 100+ vari
|
|
|
380
398
|
|
|
381
399
|
## Tool Integrations
|
|
382
400
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
| Platform | Pull Performance Data | Manage Campaigns | Guide |
|
|
386
|
-
|----------|:---------------------:|:----------------:|-------|
|
|
387
|
-
| **Google Ads** | `google-ads campaigns list`, `google-ads reports get` | `google-ads campaigns create` | [google-ads.md](../../tools/integrations/google-ads.md) |
|
|
388
|
-
| **Meta Ads** | `meta-ads insights get` | `meta-ads campaigns list` | [meta-ads.md](../../tools/integrations/meta-ads.md) |
|
|
389
|
-
| **LinkedIn Ads** | `linkedin-ads analytics get` | `linkedin-ads campaigns list` | [linkedin-ads.md](../../tools/integrations/linkedin-ads.md) |
|
|
390
|
-
| **TikTok Ads** | `tiktok-ads reports get` | `tiktok-ads campaigns list` | [tiktok-ads.md](../../tools/integrations/tiktok-ads.md) |
|
|
401
|
+
Pull performance data from **Google Ads**, **Meta Ads**, **LinkedIn Ads**, or **TikTok Ads** through the platform's API, an MCP server the user has connected, or a CSV export from the ads manager.
|
|
391
402
|
|
|
392
403
|
### Workflow: Pull Data, Analyze, Generate
|
|
393
404
|
|
|
394
405
|
```bash
|
|
395
|
-
# 1. Pull recent ad performance
|
|
396
|
-
node tools/clis/google-ads.js reports get --type ad_performance --date-range last_30_days
|
|
406
|
+
# 1. Pull recent ad performance (last 30 days, ad level) via API, MCP, or CSV export
|
|
397
407
|
|
|
398
408
|
# 2. Analyze output (identify top/bottom performers)
|
|
399
409
|
# 3. Feed winning patterns into this skill
|
package/skills/ads/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog — luckiest-ads
|
|
2
2
|
|
|
3
|
+
## 1.3.0 — 2026-10-21
|
|
4
|
+
From coreyhaines31/marketingskills at 06d647e (issue #213, MIT).
|
|
5
|
+
- Weekly Operating Check: fixed check order, one call per check (HOLD, FIX, TEST, INVESTIGATE), facts, hypotheses, and missing data, and a stakeholder readout. New references/operating-check.md.
|
|
6
|
+
- Reads the Paid Ads and Learnings sections of the product marketing context. New eval for the operating check.
|
|
7
|
+
- Skipped: hunks for references this fork lacks (audit guardrails, playbooks); full resync stays in #201.
|
|
8
|
+
|
|
3
9
|
## 1.2.1 — 2026-10-16
|
|
4
10
|
From coreyhaines31/marketingskills at 1efedbc (issue #174, MIT).
|
|
5
11
|
|
package/skills/ads/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: ads
|
|
|
3
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. For outbound to target accounts, see luckiest-cold-email."
|
|
4
4
|
license: See ATTRIBUTION.md
|
|
5
5
|
metadata:
|
|
6
|
-
version: "1.
|
|
6
|
+
version: "1.3.0"
|
|
7
7
|
listing_id: luckiest-ads
|
|
8
8
|
author: luckiest
|
|
9
9
|
---
|
|
@@ -14,14 +14,15 @@ 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.3.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.3.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
|
|
|
23
23
|
**Check for product marketing context first:**
|
|
24
24
|
If `.agents/product-marketing.md` exists (or `.claude/product-marketing.md`, or the legacy `product-marketing-context.md` filename, in older setups), read it before asking questions. Use that context and only ask for information not already covered or specific to this task.
|
|
25
|
+
Check its **Paid Ads** section for targets, floors, conversion definitions, and what you may change, and its **Learnings** section before proposing tests: angles, audiences, and offers already tested there shouldn't come back as new ideas.
|
|
25
26
|
|
|
26
27
|
Gather this context (ask if not provided):
|
|
27
28
|
|
|
@@ -242,13 +243,16 @@ Do not judge or cut an ad, ad set, or campaign before it has enough data to be m
|
|
|
242
243
|
|
|
243
244
|
## Reporting & Analysis
|
|
244
245
|
|
|
245
|
-
### Weekly
|
|
246
|
-
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
-
|
|
250
|
-
-
|
|
251
|
-
-
|
|
246
|
+
### Weekly Operating Check
|
|
247
|
+
Check in a fixed order, because a cause higher up explains symptoms lower down: **spend → traffic → conversions → creative → landing page → tracking**. Split brand from non-brand (see below) and check change history against every movement.
|
|
248
|
+
|
|
249
|
+
End every check in exactly one call:
|
|
250
|
+
- **HOLD**: change nothing; normal variance, small sample, learning phase, or lag
|
|
251
|
+
- **FIX**: a named problem with a known fix
|
|
252
|
+
- **TEST**: a hypothesis worth money, with a metric and a stopping rule
|
|
253
|
+
- **INVESTIGATE**: the data can't be trusted yet (this overrides the other three)
|
|
254
|
+
|
|
255
|
+
End with separate lists of facts, hypotheses, and missing data. Label unavailable inputs MISSING; never estimate them. Close the week with a stakeholder readout under 200 words: results vs target (green/amber/red), top movers with cause and confidence, and next week's calls. Full check, inputs, and readout format: [operating-check.md](references/operating-check.md).
|
|
252
256
|
|
|
253
257
|
### Brand vs. non-brand (measure them separately)
|
|
254
258
|
|
|
@@ -85,6 +85,19 @@
|
|
|
85
85
|
"Does not attempt bulk ad copy generation using campaign strategy patterns"
|
|
86
86
|
],
|
|
87
87
|
"files": []
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": 15,
|
|
91
|
+
"prompt": "Weekly check on our Google Ads lead-gen account. This week vs last: spend $8,400 vs $8,100, clicks flat, CPA up from $140 to $210. Google Ads shows 40 conversions, but the CRM only logged 22 new leads from paid search, and last week the two matched. Someone changed the thank-you page on Tuesday. I don't have the change history export. What should we do with the budget?",
|
|
92
|
+
"expected_output": "Should run the ordered check (spend, traffic, conversions, creative, landing page, tracking) and land on exactly one call: INVESTIGATE, because platform and CRM conversion counts diverged after a thank-you page change, so the CPA can't be trusted. Should not recommend a budget, bid, or pause change until tracking is verified. Should name the likely cause (duplicate or misfiring conversion tag after the page change) as a hypothesis, mark the change history as MISSING, and end with facts, hypotheses, and missing data.",
|
|
93
|
+
"assertions": [
|
|
94
|
+
"Ends in exactly one call, and that call is INVESTIGATE",
|
|
95
|
+
"Does not recommend changing budget, bids, or campaign status this week",
|
|
96
|
+
"Links the platform-vs-CRM divergence to the Tuesday thank-you page change as a hypothesis, not a fact",
|
|
97
|
+
"Labels the change history export as MISSING instead of assuming what changed",
|
|
98
|
+
"Ends with separate facts, hypotheses, and missing data lists"
|
|
99
|
+
],
|
|
100
|
+
"files": []
|
|
88
101
|
}
|
|
89
102
|
]
|
|
90
103
|
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# The Operating Check: Weekly Account Review That Ends in a Decision
|
|
2
|
+
|
|
3
|
+
A recurring account check is only useful if it ends in a call someone can act on. A list of metrics with no decision is reporting theater: everyone reads it, nothing changes, and the problem it hinted at keeps costing money.
|
|
4
|
+
|
|
5
|
+
Run this check weekly on every account, and daily on accounts with active tests, recent launches, or large daily spend. It takes about 15 minutes once the inputs are pulled.
|
|
6
|
+
|
|
7
|
+
## Inputs
|
|
8
|
+
|
|
9
|
+
Pull the same inputs every time, for the same comparison window (this period vs the prior comparable period, or today vs the trailing 7 days on a daily check):
|
|
10
|
+
|
|
11
|
+
- Spend, budget, and pacing by campaign
|
|
12
|
+
- Impressions, clicks, CPC, CTR, CPM, and impression share lost to budget and to rank
|
|
13
|
+
- Conversions, CVR, CPA or ROAS, and conversion value, each with its attribution window named
|
|
14
|
+
- Lead quality or downstream outcome from the CRM, if the account is lead gen
|
|
15
|
+
- Frequency and CTR trend for the top-spending ads
|
|
16
|
+
- Landing page conversion rate by device, from analytics
|
|
17
|
+
- Change history for the period (who changed what, when)
|
|
18
|
+
|
|
19
|
+
If an input is unavailable, mark it **MISSING** and keep going. Do not estimate it.
|
|
20
|
+
|
|
21
|
+
## The check, in order
|
|
22
|
+
|
|
23
|
+
Work top to bottom. The order matters: a problem higher in the list explains symptoms lower down, so stop at the first real cause instead of chasing its effects.
|
|
24
|
+
|
|
25
|
+
| # | Question | What to look at | Typical cause when it moved |
|
|
26
|
+
|---|---|---|---|
|
|
27
|
+
| 1 | **Did spend move?** | Pacing vs budget, daily caps hit, delivery limits, impression share lost to budget | Budget change, cap hit, campaign limited, billing issue |
|
|
28
|
+
| 2 | **Did traffic change?** | Clicks, CPC, CTR, CPM, new search terms or placements | Auction pressure, a new competitor, match-type drift, a placement spike |
|
|
29
|
+
| 3 | **Did conversions change?** | CVR, CPA or ROAS, conversion value, lead quality | Offer change, seasonality, lead quality drop, attribution lag on recent days |
|
|
30
|
+
| 4 | **Did creative fatigue?** | Frequency, CTR vs the ad's own peak, spend concentrated on a few aging ads | Audience saturation, no new concepts in rotation |
|
|
31
|
+
| 5 | **Did the landing page break?** | Page speed, form or checkout errors, mobile vs desktop CVR gap | A deploy, a broken form, a tracking script blocking render |
|
|
32
|
+
| 6 | **Did tracking break?** | Conversion counts vs analytics and CRM, event match quality, consent rate, offline imports | Tag removed, duplicate firing, consent banner change, import job failed |
|
|
33
|
+
|
|
34
|
+
Check the change history against every movement. A metric that moved the day after a budget edit, a bid strategy switch, or a new ad launch probably moved because of it.
|
|
35
|
+
|
|
36
|
+
Recent days undercount conversions on any account with conversion lag. Read the last few days as incomplete, and never call a trend from them alone.
|
|
37
|
+
|
|
38
|
+
## The decision
|
|
39
|
+
|
|
40
|
+
Every check ends in **exactly one** call for the account (and optionally one per campaign that moved):
|
|
41
|
+
|
|
42
|
+
| Call | Meaning | When to use it |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| **HOLD** | Change nothing; check again in 24 hours or at the next scheduled check | Movement is within normal variance, the sample is too small, the campaign is in learning, or the cause is lag |
|
|
45
|
+
| **FIX** | A known, named problem with a known fix | A broken form, a capped budget on a winning campaign, a disapproved ad, a tracking tag that stopped firing |
|
|
46
|
+
| **TEST** | A hypothesis worth spending money to answer | Creative fatigue with a new concept to try, a bid strategy change with enough volume, a landing page variant |
|
|
47
|
+
| **INVESTIGATE** | The data can't be trusted yet, so no decision on performance is possible | Conversions disagree across platform, analytics, and CRM; counts jumped with no business explanation; a source is MISSING |
|
|
48
|
+
|
|
49
|
+
Rules for the call:
|
|
50
|
+
|
|
51
|
+
- **INVESTIGATE beats everything.** If tracking is in doubt, no performance call is valid until it's resolved.
|
|
52
|
+
- **FIX names the problem and the fix.** "Performance is down" is not a FIX.
|
|
53
|
+
- **TEST names the hypothesis, the metric, and the stopping rule.** A test without a stopping rule turns into a permanent change nobody chose.
|
|
54
|
+
- **HOLD still needs a reason.** Say why you're holding and what would change the call.
|
|
55
|
+
- **No call moves money on its own.** Budget, bid, status, and tracking changes go to a human as a draft (current state → change → expected effect → rollback) for approval.
|
|
56
|
+
|
|
57
|
+
Every call ends with three short lists: **facts** (in the data), **hypotheses** (inferred), and **missing data** (what would change the decision).
|
|
58
|
+
|
|
59
|
+
## The Friday readout
|
|
60
|
+
|
|
61
|
+
Close the week with a readout a stakeholder can read in a minute. Keep it under 200 words.
|
|
62
|
+
|
|
63
|
+
1. **Results vs target.** One line per account or program, marked green, amber, or red against the target CPA, ROAS, or pipeline goal.
|
|
64
|
+
2. **What moved and why.** The top two or three movers, each with a likely cause and a confidence level (high, medium, low).
|
|
65
|
+
3. **Decisions for next week.** Each one labeled HOLD, FIX, TEST, or INVESTIGATE, with one line on why.
|
|
66
|
+
|
|
67
|
+
Leave out metrics nobody will act on. If a number appears in the readout, it should support a result, a cause, or a decision. Name any missing data that limits a conclusion, and make clear that any change that moves money is waiting for approval.
|
|
68
|
+
|
|
69
|
+
## Making it a habit
|
|
70
|
+
|
|
71
|
+
Run the check by hand for two weeks before automating any part of it. Manual runs show which inputs are hard to get and which calls you keep making, and that's what the automation needs to handle.
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
*Framework lineage: the ordered check, the four-call decision, and the stakeholder readout are re-expressed from Marek Dąbrowski's "The Paid Ads Operator's Guide to Claude" (Adlume, 2026-07-16), adapted to this skill's guardrails.*
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog — luckiest-ai-seo
|
|
2
2
|
|
|
3
|
+
## 1.4.1 — 2026-10-23
|
|
4
|
+
- Removed the dead `tools/REGISTRY.md` link. The tool table stays.
|
|
5
|
+
|
|
6
|
+
## 1.4.0 — 2026-10-21
|
|
7
|
+
From coreyhaines31/marketingskills at 06d647e (issue #213, MIT).
|
|
8
|
+
- Five new references: AI attribution, answer accuracy, agent defaults, multilingual and commerce, prompt portfolio. Routed from the reference table.
|
|
9
|
+
- Meta AI and Muse: `meta-webindexer`, `meta-externalagent`, `meta-externalfetcher`, and `facebookexternalhit` in the crawler guidance.
|
|
10
|
+
- Evidence order for weighing claims. Corrected stats: AI Overviews about 48% (BrightEdge, Feb 2026), dated ChatGPT citation shares, no fixed schema lift.
|
|
11
|
+
- Fact-family fan-out matrix in content patterns. Proof as text and dated facts in agent readability.
|
|
12
|
+
- Skipped: upstream refs not in this fork (agent-readiness, citations-vs-recommendations, format-volatility); links to them trimmed. link-building not forked.
|
|
13
|
+
|
|
3
14
|
## 1.3.0 — 2026-10-16
|
|
4
15
|
From coreyhaines31/marketingskills at 1efedbc (issue #174, MIT).
|
|
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.4.1"
|
|
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.4.1" }. 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.4.1", 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
|
## Reference Routing
|
|
22
22
|
|
|
@@ -30,8 +30,13 @@ Start with this skill's core workflow. Open a reference when the user's question
|
|
|
30
30
|
| What belongs in an OKF bundle? Is it an established AI-search requirement or an emerging experiment? | [Open Knowledge Format](references/okf.md) |
|
|
31
31
|
| Where should we start for a particular AI engine? Which search and training crawlers should we distinguish? | [Platform ranking factors](references/platform-ranking-factors.md) |
|
|
32
32
|
| Why does AI describe our positioning incorrectly? How can third-party consensus reinforce a specific use case? | [Positioning and consensus](references/positioning-and-consensus.md) |
|
|
33
|
+
| AI barely shows up in referrals. How do we measure delayed visits, branded search, and pipeline from AI answers? | [AI attribution](references/ai-attribution.md) |
|
|
34
|
+
| Is AI saying something wrong about our price, features, or limits? How do we find and fix the source? | [Answer accuracy](references/answer-accuracy.md) |
|
|
35
|
+
| Which vendor does Claude Code or Cursor pick when a user says "deploy this"? How do we become the tool an agent installs mid-task? | [Agent defaults](references/agent-defaults.md) |
|
|
36
|
+
| How do we run AEO in other languages and countries? Is ChatGPT Shopping worth it for our product? | [Multilingual and commerce](references/multilingual-and-commerce.md) |
|
|
37
|
+
| Which prompts should we track, how often, and how do we test multi-turn buying conversations? | [Prompt portfolio](references/prompt-portfolio.md) |
|
|
33
38
|
|
|
34
|
-
Read these bundled files from the installed skill directory. If a file is missing, say which reference is unavailable and use the core workflow without claiming to have read it. For time-sensitive statistics, platform behavior, or tool claims in any reference, check the source date and
|
|
39
|
+
Read these bundled files from the installed skill directory. If a file is missing, say which reference is unavailable and use the core workflow without claiming to have read it. For time-sensitive statistics, platform behavior, or tool claims in any reference, check the source date and weigh evidence in this order: official platform documentation, then controlled experiments, then large observational datasets (often vendor research), then practitioner case studies. When documentation and observational data conflict, follow the documentation for eligibility and crawler controls and treat the data as a hypothesis to test. Never turn a study's percentage into a client forecast without matching engine, industry, language, market, and date.
|
|
35
40
|
|
|
36
41
|
## Before Starting
|
|
37
42
|
|
|
@@ -85,7 +90,7 @@ Traditional SEO gets you ranked. AI SEO gets you **cited**.
|
|
|
85
90
|
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.
|
|
86
91
|
|
|
87
92
|
**Critical stats** (they drift; re-check before quoting to a client, and distrust vendor stats with no source or date):
|
|
88
|
-
- AI Overviews appeared on ~
|
|
93
|
+
- AI Overviews appeared on ~48% of the queries BrightEdge tracks (BrightEdge, Feb 2026), 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
|
|
89
94
|
- Adding statistics and citations raised visibility by roughly 30-40% in the original GEO study (Aggarwal et al., 2023)
|
|
90
95
|
|
|
91
96
|
### Google's Official Stance vs. Multi-Platform Reality
|
|
@@ -105,14 +110,12 @@ Google explicitly says:
|
|
|
105
110
|
**Other AI engines (ChatGPT, Claude, Perplexity, Copilot) behave differently:**
|
|
106
111
|
- They actively reward extractable structure — passages, FAQs, comparison tables, definition blocks
|
|
107
112
|
- They parse `llms.txt`, structured pricing pages, and machine-readable files when present
|
|
108
|
-
- They cite
|
|
113
|
+
- They cite beyond top-ranked pages, including Reddit, Wikipedia, and review sites, in a mix that varies by engine
|
|
109
114
|
|
|
110
115
|
**What this means for the work:**
|
|
111
116
|
- The structural patterns in this skill (40–60 word answer blocks, FAQ schema, comparison tables) help **non-Google AI engines** materially. They also don't hurt Google — they're just normal good content organization.
|
|
112
117
|
- For Google AI Overviews / AI Mode specifically: optimize for people and core Search, full stop. Strong E-E-A-T, original information, semantic HTML, clean indexability.
|
|
113
|
-
- For ChatGPT/Claude/Perplexity: layer on the extractable structure + llms.txt + machine-readable files.
|
|
114
|
-
|
|
115
|
-
When in doubt, default to "write for people, organize for clarity" — that satisfies both camps.
|
|
118
|
+
- For ChatGPT/Claude/Perplexity: layer on the extractable structure + llms.txt + machine-readable files. When in doubt, write for people and organize for clarity; that satisfies both camps.
|
|
116
119
|
|
|
117
120
|
### Query Fan-Out (Google AI Search)
|
|
118
121
|
|
|
@@ -125,7 +128,7 @@ Google's own example: a user asking "how to fix lawns" triggers fan-out queries
|
|
|
125
128
|
- Long-tail intent matters less than topical authority — Google's AI systems understand synonyms and semantic equivalence.
|
|
126
129
|
- A page that comprehensively answers a parent topic (with sub-questions covered) will be retrieved more often than narrow per-query pages.
|
|
127
130
|
|
|
128
|
-
**Action**: when planning content, brainstorm the 5–10 related queries the AI is likely to fan out to and make sure your content (or your site as a whole) covers them.
|
|
131
|
+
**Action**: when planning content, brainstorm the 5–10 related queries the AI is likely to fan out to and make sure your content (or your site as a whole) covers them, with one owning page per fact family (matrix in [references/content-patterns.md](references/content-patterns.md)).
|
|
129
132
|
|
|
130
133
|
---
|
|
131
134
|
|
|
@@ -182,14 +185,12 @@ For each priority page, verify:
|
|
|
182
185
|
|
|
183
186
|
Audit AI user agents by purpose. Search-discovery, user-triggered retrieval, model-training, and product-control tokens are not interchangeable:
|
|
184
187
|
|
|
185
|
-
- **Search discovery:** `OAI-SearchBot` (ChatGPT), `PerplexityBot`, `Claude-SearchBot`, and the conventional search crawlers that feed an answer product
|
|
186
|
-
- **User-triggered retrieval:** `ChatGPT-User`, `Claude-User`, and `
|
|
187
|
-
- **Potential model training:** `GPTBot` and `
|
|
188
|
+
- **Search discovery:** `OAI-SearchBot` (ChatGPT), `PerplexityBot`, `Claude-SearchBot`, `meta-webindexer` (Meta AI), and the conventional search crawlers that feed an answer product
|
|
189
|
+
- **User-triggered retrieval:** `ChatGPT-User`, `Claude-User`, `Perplexity-User`, and `meta-externalfetcher`; vendor handling can differ from automatic crawlers, so verify the current documentation
|
|
190
|
+
- **Potential model training:** `GPTBot`, `ClaudeBot`, and `meta-externalagent`
|
|
188
191
|
- **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
|
|
189
192
|
|
|
190
|
-
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.
|
|
191
|
-
|
|
192
|
-
See [references/platform-ranking-factors.md](references/platform-ranking-factors.md) for the full robots.txt configuration.
|
|
193
|
+
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. See [references/platform-ranking-factors.md](references/platform-ranking-factors.md) for the full robots.txt configuration.
|
|
193
194
|
|
|
194
195
|
### Audit non-determinism
|
|
195
196
|
|
|
@@ -279,11 +280,11 @@ AI systems prefer sources they can trust. Build citation-worthiness.
|
|
|
279
280
|
|
|
280
281
|
### Pillar 3: Presence — Be Where AI Looks
|
|
281
282
|
|
|
282
|
-
AI systems
|
|
283
|
+
AI systems cite your own site and the places that talk about you, in proportions that vary by engine and category. In one large dataset, company sites took about 57% of citations (ChatGPT 47%, Gemini 69%; Profound, July 2026), while shortlist recommendations lean on third-party consensus. Measure your category's citation mix before choosing channels.
|
|
283
284
|
|
|
284
|
-
**Third-party
|
|
285
|
-
- Wikipedia
|
|
286
|
-
- Reddit
|
|
285
|
+
**Third-party surfaces to cover:**
|
|
286
|
+
- Wikipedia (7.8% of ChatGPT citations in Profound's Aug 2024–Jun 2025 data)
|
|
287
|
+
- Reddit (1.8% in the same data, then nearly wiped from ChatGPT by Aug 2026 retrieval changes; still retrieved elsewhere)
|
|
287
288
|
- Industry publications and guest posts
|
|
288
289
|
- Review sites (G2, Capterra, TrustRadius for B2B SaaS)
|
|
289
290
|
- 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)
|
|
@@ -368,7 +369,7 @@ Structured data helps AI systems understand your content. Key schemas:
|
|
|
368
369
|
| Reviews | `Review`, `AggregateRating` | Trust signals |
|
|
369
370
|
| Organization | `Organization` | Entity recognition |
|
|
370
371
|
|
|
371
|
-
|
|
372
|
+
No well-documented study isolates a schema lift on AI citations, so treat schema as context that helps engines parse your pages and expect no fixed lift from it. **Google's note**: structured data is "not required for generative AI search" but is recommended for overall SEO strategy. For implementation, use the **luckiest-schema** skill.
|
|
372
373
|
|
|
373
374
|
---
|
|
374
375
|
|
|
@@ -386,7 +387,8 @@ Beyond AI search engines summarizing content, autonomous agents are starting to
|
|
|
386
387
|
- **Semantic HTML** — use `<main>`, `<nav>`, `<article>`, `<button>`, proper heading hierarchy, `alt` text on images
|
|
387
388
|
- **Clean accessibility tree** — every interactive element labelled; ARIA used correctly (or not at all when native HTML suffices)
|
|
388
389
|
- **Stable selectors / predictable layouts** — agents struggle with sites that re-render every interaction
|
|
389
|
-
- **Visible pricing, specs, contact info** — anything an agent would need to make a buying recommendation should be on a public, indexable page (this is where `/pricing.md` and similar files help)
|
|
390
|
+
- **Visible pricing, specs, contact info** — anything an agent would need to make a buying recommendation should be on a public, indexable page (this is where `/pricing.md` and similar files help). Date the facts that change ("4.7 on G2 as of October 2026") so an agent can judge freshness
|
|
391
|
+
- **Proof as text** — testimonials, ratings, and named customer logos in the HTML as text, not baked into images or injected by a widget script. If you can't select it with the mouse, an agent may not read it
|
|
390
392
|
|
|
391
393
|
**Emerging — Universal Commerce Protocol (UCP):**
|
|
392
394
|
Google references UCP as a forthcoming protocol that will give agents standardized hooks for commerce interactions (catalog discovery, pricing, checkout). Watch for adoption; for now, the structural recommendations above are the precursor.
|
|
@@ -430,7 +432,7 @@ Not all content is equally citable. Prioritize these formats:
|
|
|
430
432
|
| Brand citation rate | How often you're cited in AI answers | AI visibility tools (see below) |
|
|
431
433
|
| Share of AI voice | Your citations vs. competitors | Peec AI, Otterly, ZipTie |
|
|
432
434
|
| Citation sentiment | How AI describes your brand | Manual review + monitoring tools |
|
|
433
|
-
| Source attribution | Which
|
|
435
|
+
| Source attribution | Which pages get cited, and what AI exposure does downstream | AI referrals plus delayed branded and direct visits ([ai-attribution.md](references/ai-attribution.md)) |
|
|
434
436
|
|
|
435
437
|
### AI Visibility Monitoring Tools
|
|
436
438
|
|
|
@@ -440,6 +442,7 @@ Not all content is equally citable. Prioritize these formats:
|
|
|
440
442
|
| **Peec AI** | ChatGPT, Gemini, Perplexity, Claude, Copilot+ | Multi-platform monitoring at scale |
|
|
441
443
|
| **ZipTie** | Google AI Overviews, ChatGPT, Perplexity | Brand mention + sentiment tracking |
|
|
442
444
|
| **LLMrefs** | ChatGPT, Perplexity, AI Overviews, Gemini | SEO keyword → AI visibility mapping |
|
|
445
|
+
| **Profound, Ahrefs Brand Radar, Semrush** | Major assistants and Google AI surfaces | Larger programs: cited sources, answer text, prompt demand (Profound's studies are cited in the references as vendor research) |
|
|
443
446
|
|
|
444
447
|
### DIY Monitoring (No Tools)
|
|
445
448
|
|
|
@@ -477,12 +480,12 @@ For tactical guidance on SaaS product pages, blog content, comparison/alternativ
|
|
|
477
480
|
|
|
478
481
|
## Common Mistakes
|
|
479
482
|
|
|
480
|
-
- **Ignoring AI search entirely** —
|
|
483
|
+
- **Ignoring AI search entirely** — AI Overviews appear on roughly half of tracked queries in many industries (BrightEdge, Feb 2026), and assistant usage keeps growing
|
|
481
484
|
- **Treating AI SEO as separate from SEO** — Good traditional SEO is the foundation; AI SEO adds structure and authority on top
|
|
482
485
|
- **Writing for AI, not humans** — If content reads like it was written to game an algorithm, it won't get cited or convert
|
|
483
486
|
- **No freshness signals** — Undated content loses to dated content because AI systems weight recency heavily. Show when content was last updated
|
|
484
487
|
- **Gating all content** — AI can't access gated content. Keep your most authoritative content open
|
|
485
|
-
- **Ignoring third-party presence** —
|
|
488
|
+
- **Ignoring third-party presence** — Shortlist recommendations lean on what reviews, forums, and press say about you, even where your own site earns most citations
|
|
486
489
|
- **No structured data** — Schema markup gives AI systems structured context about your content
|
|
487
490
|
- **Keyword stuffing** — Unlike traditional SEO where it's just ineffective, keyword stuffing actively reduces AI visibility by 10% (Princeton GEO study)
|
|
488
491
|
- **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
|
|
@@ -494,8 +497,6 @@ For tactical guidance on SaaS product pages, blog content, comparison/alternativ
|
|
|
494
497
|
|
|
495
498
|
## Tool Integrations
|
|
496
499
|
|
|
497
|
-
For implementation, see the [tools registry](../../tools/REGISTRY.md).
|
|
498
|
-
|
|
499
500
|
| Tool | Use For |
|
|
500
501
|
|------|---------|
|
|
501
502
|
| `semrush` | AI Overview tracking, keyword research, content gap analysis |
|