taketomarket 2.2.0 → 2.3.1
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 +13 -17
- package/.claude-plugin/plugin.json +2 -2
- package/README.md +35 -12
- package/bin/lib/campaign.cjs +12 -8
- package/bin/lib/codebase-scan.cjs +86 -0
- package/bin/lib/config.cjs +129 -0
- package/bin/lib/deploy.cjs +36 -0
- package/bin/lib/deviation.cjs +1 -1
- package/bin/lib/drift-log.cjs +4 -4
- package/bin/lib/health.cjs +32 -31
- package/bin/lib/install-detect.cjs +62 -0
- package/bin/lib/legacy-folder.cjs +100 -0
- package/bin/lib/playwright-check.cjs +26 -0
- package/bin/lib/site-location.cjs +22 -0
- package/bin/lib/state.cjs +3 -3
- package/bin/lib/svg-render.cjs +42 -0
- package/bin/ttm-tools.cjs +136 -4
- package/gates/base-gates.md +8 -8
- package/gates/gate-evaluation.md +8 -8
- package/install.js +37 -3
- package/package.json +10 -6
- package/playbooks/aeo.md +218 -114
- package/playbooks/affiliate.md +225 -160
- package/playbooks/email.md +236 -174
- package/playbooks/events.md +303 -213
- package/playbooks/landing-pages.md +309 -0
- package/playbooks/linkedin.md +264 -142
- package/playbooks/manifesto.md +322 -0
- package/playbooks/paid-ads.md +240 -189
- package/playbooks/positioning.md +340 -0
- package/playbooks/pr-media.md +308 -168
- package/playbooks/pseo.md +426 -0
- package/playbooks/seo.md +251 -158
- package/playbooks/social.md +253 -182
- package/playbooks/youtube.md +286 -181
- package/references/brand-color-theory.md +48 -0
- package/references/codex-image-gen-research.md +58 -0
- package/references/context-loading.md +6 -6
- package/references/humanizer-patterns.md +433 -0
- package/references/inline-education-blurbs.md +461 -0
- package/references/landing-page-anatomy.md +65 -0
- package/references/landing-page-headline-examples.md +190 -0
- package/references/linkedin-post-patterns.md +174 -0
- package/references/logo-design-principles.md +55 -0
- package/references/meta-gate-evaluation.md +3 -3
- package/references/obra-superpowers-conventions.md +170 -0
- package/references/playbook-leaders.md +472 -0
- package/references/playwright-mcp-setup.md +164 -0
- package/references/positioning-check-report.md +2 -2
- package/references/pseo-page-anatomy.md +56 -0
- package/references/pseo-templates/alternative-anatomy.md +31 -0
- package/references/pseo-templates/alternative-content-playbook.md +32 -0
- package/references/pseo-templates/blog-anatomy.md +28 -0
- package/references/pseo-templates/blog-content-playbook.md +36 -0
- package/references/pseo-templates/comparison-anatomy.md +29 -0
- package/references/pseo-templates/comparison-content-playbook.md +35 -0
- package/references/pseo-templates/use-case-anatomy.md +28 -0
- package/references/pseo-templates/use-case-content-playbook.md +30 -0
- package/skills/ttm-101/SKILL.md +25 -0
- package/skills/ttm-aeo-check/SKILL.md +17 -12
- package/skills/ttm-affiliate-kit/SKILL.md +5 -0
- package/skills/ttm-archive/SKILL.md +5 -0
- package/skills/ttm-brand-refresh/SKILL.md +5 -0
- package/skills/ttm-brief/SKILL.md +5 -0
- package/skills/ttm-competitor-scan/SKILL.md +5 -0
- package/skills/ttm-deploy/SKILL.md +22 -0
- package/skills/ttm-discover/SKILL.md +17 -0
- package/skills/ttm-email-check/SKILL.md +17 -0
- package/skills/ttm-email-preflight/SKILL.md +17 -11
- package/skills/ttm-fix/SKILL.md +5 -0
- package/skills/ttm-health/SKILL.md +6 -1
- package/skills/ttm-humanize/SKILL.md +33 -0
- package/skills/ttm-icp-refresh/SKILL.md +5 -0
- package/skills/ttm-improve-skill/SKILL.md +18 -0
- package/skills/ttm-init/SKILL.md +10 -3
- package/skills/ttm-keyword-map/SKILL.md +17 -11
- package/skills/ttm-landing/SKILL.md +19 -0
- package/skills/ttm-learn/SKILL.md +5 -0
- package/skills/ttm-linkedin-post/SKILL.md +26 -0
- package/skills/ttm-measure/SKILL.md +5 -0
- package/skills/ttm-new-campaign/SKILL.md +5 -0
- package/skills/ttm-next/SKILL.md +5 -0
- package/skills/ttm-playwright-setup/SKILL.md +18 -0
- package/skills/ttm-positioning-check/SKILL.md +5 -0
- package/skills/ttm-positioning-shift/SKILL.md +5 -0
- package/skills/ttm-produce/SKILL.md +5 -0
- package/skills/ttm-pseo/SKILL.md +26 -0
- package/skills/ttm-repurpose/SKILL.md +5 -0
- package/skills/ttm-request-skill/SKILL.md +18 -0
- package/skills/ttm-research/SKILL.md +18 -6
- package/skills/ttm-resume/SKILL.md +5 -0
- package/skills/ttm-review/SKILL.md +5 -0
- package/skills/ttm-seo/SKILL.md +64 -0
- package/skills/ttm-seo-audit/SKILL.md +17 -12
- package/skills/ttm-ship/SKILL.md +5 -0
- package/skills/ttm-state/SKILL.md +5 -0
- package/skills/ttm-update/SKILL.md +152 -4
- package/skills/ttm-verify/SKILL.md +5 -0
- package/templates/agents-md.md +14 -4
- package/templates/campaign-research.md +6 -6
- package/templates/campaign-state.md +1 -1
- package/templates/claude-md.md +14 -4
- package/templates/linkedin-base-template.md +48 -0
- package/templates/next-step-footer.md +13 -0
- package/templates/production-manifest.json +4 -4
- package/templates/pseo/alternative-cms-schema.json +65 -0
- package/templates/pseo/blog-cms-schema.json +55 -0
- package/templates/pseo/comparison-cms-schema.json +56 -0
- package/templates/pseo/use-case-cms-schema.json +62 -0
- package/templates/reference-files/brand.md +51 -0
- package/templates/reference-files/product-dna.md +73 -0
- package/templates/site-scaffold/app/globals.css +2 -0
- package/templates/site-scaffold/app/layout.tsx +17 -0
- package/templates/site-scaffold/app/page.tsx +33 -0
- package/templates/site-scaffold/app/robots.ts +8 -0
- package/templates/site-scaffold/app/sitemap.ts +10 -0
- package/templates/site-scaffold/app/tokens.css +21 -0
- package/templates/site-scaffold/components/Comparison.tsx +14 -0
- package/templates/site-scaffold/components/Faq.tsx +14 -0
- package/templates/site-scaffold/components/Features.tsx +14 -0
- package/templates/site-scaffold/components/FinalCta.tsx +17 -0
- package/templates/site-scaffold/components/Footer.tsx +12 -0
- package/templates/site-scaffold/components/Hero.tsx +22 -0
- package/templates/site-scaffold/components/HowItWorks.tsx +14 -0
- package/templates/site-scaffold/components/PricingTeaser.tsx +14 -0
- package/templates/site-scaffold/components/Problem.tsx +14 -0
- package/templates/site-scaffold/components/SocialProof.tsx +14 -0
- package/templates/site-scaffold/components/Solution.tsx +14 -0
- package/templates/site-scaffold/components/Testimonials.tsx +14 -0
- package/templates/site-scaffold/components/UseCases.tsx +14 -0
- package/templates/site-scaffold/content/.gitkeep +0 -0
- package/templates/site-scaffold/lib/.gitkeep +0 -0
- package/templates/site-scaffold/next.config.mjs +10 -0
- package/templates/site-scaffold/package.json +25 -0
- package/templates/site-scaffold/postcss.config.mjs +3 -0
- package/templates/site-scaffold/public/llms.txt +9 -0
- package/templates/site-scaffold/tsconfig.json +21 -0
- package/templates/verification-report.md +1 -1
- package/workflows/channel/linkedin-post.md +178 -0
- package/workflows/discipline/affiliate-kit.md +65 -6
- package/workflows/discipline/{email-preflight.md → email-check.md} +39 -4
- package/workflows/discipline/repurpose.md +82 -31
- package/workflows/discipline/{aeo-check.md → seo/aeo.md} +13 -6
- package/workflows/discipline/{seo-audit.md → seo/audit.md} +13 -6
- package/workflows/discipline/{keyword-map.md → seo/keyword-map.md} +13 -6
- package/workflows/education/ttm-101.md +114 -0
- package/workflows/lifecycle/brief-positioning-check.md +1 -1
- package/workflows/lifecycle/brief.md +64 -28
- package/workflows/lifecycle/{research.md → discover.md} +61 -19
- package/workflows/lifecycle/fix.md +72 -37
- package/workflows/lifecycle/humanize.md +280 -0
- package/workflows/lifecycle/learn.md +72 -35
- package/workflows/lifecycle/measure.md +54 -18
- package/workflows/lifecycle/produce.md +88 -37
- package/workflows/lifecycle/review.md +71 -25
- package/workflows/lifecycle/ship.md +62 -18
- package/workflows/lifecycle/verify.md +72 -26
- package/workflows/reference-mgmt/brand-refresh.md +50 -13
- package/workflows/reference-mgmt/competitor-scan.md +51 -15
- package/workflows/reference-mgmt/icp-refresh.md +48 -12
- package/workflows/reference-mgmt/positioning-check.md +55 -20
- package/workflows/reference-mgmt/positioning-shift.md +53 -17
- package/workflows/setup/init-brand-colors.md +75 -0
- package/workflows/setup/init-logo.md +113 -0
- package/workflows/setup/init-product-dna.md +83 -0
- package/workflows/setup/init-questions.md +166 -30
- package/workflows/setup/init-validation.md +22 -0
- package/workflows/setup/init.md +144 -39
- package/workflows/setup/new-campaign.md +48 -12
- package/workflows/site/deploy.md +98 -0
- package/workflows/site/landing.md +156 -0
- package/workflows/site/pseo.md +96 -0
- package/workflows/site/quality-gates.md +88 -0
- package/workflows/utility/archive.md +45 -9
- package/workflows/utility/health.md +77 -3
- package/workflows/utility/improve-skill.md +233 -0
- package/workflows/utility/next.md +38 -2
- package/workflows/utility/playwright-setup.md +128 -0
- package/workflows/utility/request-skill.md +218 -0
- package/workflows/utility/resume.md +40 -3
- package/workflows/utility/state.md +42 -7
package/playbooks/seo.md
CHANGED
|
@@ -1,192 +1,220 @@
|
|
|
1
1
|
---
|
|
2
2
|
discipline: seo
|
|
3
3
|
asset_types: [blog-post, landing-page, pillar-page, programmatic-seo]
|
|
4
|
-
version: "
|
|
4
|
+
version: "2.0"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# SEO Discipline Playbook
|
|
8
8
|
|
|
9
9
|
This playbook extends the base playbook contract (`base.md`) with SEO-specific production guidance, discipline gates, and format rules. It is loaded by ttm-producer during content generation and parsed by ttm-verify for gate evaluation.
|
|
10
10
|
|
|
11
|
+
The playbook is opinionated around **Strategic SEO Frameworks** as taught by Aleyda Solis (Orainti, LearningSEO.io, SEOFOMO, Crawling Mondays). Operational page-anatomy details for programmatic pages live in `references/pseo-page-anatomy.md` and on-page conversion mechanics in `references/landing-page-anatomy.md` — this playbook governs the **strategy + measurement layer** that sits above them.
|
|
12
|
+
|
|
11
13
|
---
|
|
12
14
|
|
|
13
15
|
## Production Guidance
|
|
14
16
|
|
|
15
|
-
###
|
|
17
|
+
### Strategy before tactics — always
|
|
18
|
+
|
|
19
|
+
"Tactics without strategy is noise." Before drafting any SEO asset, the brief must answer three questions in this order:
|
|
20
|
+
|
|
21
|
+
1. **What business outcome are we serving?** Not "rank #1 for X" — what signups, revenue, or activation does this asset enable? If the answer is "more traffic", the brief is not done.
|
|
22
|
+
2. **What is the search intent and the user journey it sits in?** Awareness, consideration, decision, retention — and which step does this page take the visitor toward?
|
|
23
|
+
3. **Is the technical floor in place?** Crawlability, indexability, rendering parity. If the site cannot be crawled, fix the floor before drafting another word.
|
|
24
|
+
|
|
25
|
+
Tactical knobs (title tags, internal links, schema) only compound when wrapped in a strategy. Skip the strategy and you are polishing pages that no business cares about.
|
|
26
|
+
|
|
27
|
+
### The 3-Layer Measurement Model (Aleyda's framework)
|
|
28
|
+
|
|
29
|
+
Every SEO asset is measured on three layers, never collapsed into one score:
|
|
30
|
+
|
|
31
|
+
- **Layer 1 — Presence:** Are we showing up? Rankings, AI Overview citations, knowledge panel mentions, brand SERP coverage.
|
|
32
|
+
- **Layer 2 — Readiness:** Is our content/site *eligible* to be cited and ranked? Crawlable, renderable, schema-marked, entity-linked, hreflang-correct, fast.
|
|
33
|
+
- **Layer 3 — Business Impact:** Does the presence drive revenue? Organic-attributed signups, qualified leads, expansion revenue.
|
|
34
|
+
|
|
35
|
+
A page can be high on Presence and zero on Business Impact (vanity traffic). It can be high on Readiness and low on Presence (technically perfect, strategically invisible). Producers must declare which layer the asset is moving and why the other two layers are already in place — or queued.
|
|
16
36
|
|
|
17
|
-
|
|
37
|
+
### SEO maturity model — start at the floor
|
|
18
38
|
|
|
19
|
-
-
|
|
20
|
-
- **Commercial** ("best X", "X vs Y"): comparison, listicle, or review
|
|
21
|
-
- **Navigational** ("brand X login", "X pricing"): direct landing page
|
|
22
|
-
- **Transactional** ("buy X", "X free trial"): conversion-focused landing page with CTA
|
|
39
|
+
Engineer-founders routinely try to do off-page link building before fixing on-page structure, or attempt entity SEO before their robots.txt allows crawling. Walk the maturity ladder in order:
|
|
23
40
|
|
|
24
|
-
|
|
41
|
+
1. **Crawlability & indexability** — robots.txt, sitemap, internal linking, noindex hygiene.
|
|
42
|
+
2. **Rendering parity** — SSR/SSG for content-bearing pages. Client-rendered SPAs are second-class for SEO.
|
|
43
|
+
3. **On-page structure** — title, H1, meta description, heading hierarchy, schema, canonical.
|
|
44
|
+
4. **Topical coverage** — clusters of intent-aligned pages around a pillar topic.
|
|
45
|
+
5. **Authority signals** — internal linking depth, entity references, mentions, links.
|
|
46
|
+
6. **AI search readiness** — passage-level optimization, citability, llms.txt, structured data depth.
|
|
25
47
|
|
|
26
|
-
|
|
48
|
+
Do not skip levels. A pillar page on an unrenderable subdomain is worth nothing.
|
|
27
49
|
|
|
28
|
-
|
|
50
|
+
### Audit-driven prioritization
|
|
29
51
|
|
|
30
|
-
-
|
|
31
|
-
- H1 heading
|
|
32
|
-
- First 100 words of body content
|
|
33
|
-
- At least one H2 subheading
|
|
52
|
+
Every campaign starts with a 30-minute audit, not a "what should I write?" brainstorm. The audit answers:
|
|
34
53
|
|
|
35
|
-
|
|
54
|
+
- **Crawl errors:** any 5xx, 4xx surges, blocked critical paths?
|
|
55
|
+
- **Index coverage:** what pages should be indexed and are they?
|
|
56
|
+
- **Cannibalization:** are multiple pages targeting the same intent?
|
|
57
|
+
- **Render parity:** does the rendered HTML contain the same content as the source?
|
|
58
|
+
- **Hreflang correctness:** if international, are we leaking traffic to the wrong locale?
|
|
59
|
+
- **Core Web Vitals at the template level:** which template family is failing?
|
|
36
60
|
|
|
37
|
-
|
|
61
|
+
Output: a ranked list of fixes. **Fix beats write.** A repaired template lifts every page on it; a new blog post lifts only itself.
|
|
38
62
|
|
|
39
|
-
|
|
63
|
+
### Intent-modeled content
|
|
40
64
|
|
|
41
|
-
|
|
65
|
+
Identify whether the target query is informational, commercial, navigational, or transactional — but more importantly, identify the **shape of the SERP**: what formats currently rank, what AI Overviews quote, what entities are co-cited. Reverse-engineer the format the search engine has already decided is correct, then exceed it with substance. Mismatching format kills the asset before the first word is read.
|
|
42
66
|
|
|
43
|
-
|
|
67
|
+
### International-first reflex
|
|
44
68
|
|
|
45
|
-
|
|
69
|
+
Even for solo founders, build with locale-portability from day one: language-agnostic URLs, hreflang stubs ready, content authored in a structure that translates. Most growing startups underinvest here and bleed traffic in non-English markets where competition is thinner.
|
|
46
70
|
|
|
47
|
-
|
|
71
|
+
### Discoverable AND citable
|
|
48
72
|
|
|
49
|
-
|
|
73
|
+
In the AI-search era, the page has two jobs:
|
|
50
74
|
|
|
51
|
-
|
|
75
|
+
1. **Discoverable** — rank in the SERP for the query.
|
|
76
|
+
2. **Citable** — be quoted, summarized, or linked by AI Overviews, Perplexity, ChatGPT, and downstream LLM answer engines.
|
|
52
77
|
|
|
53
|
-
|
|
78
|
+
These require distinct optimization. Discoverability is keyword + intent + on-page. Citability is passage-level self-containedness + named entities + verifiable claims + structured data. See the AEO playbook (`playbooks/aeo.md`) for the citability layer; this playbook ensures the discoverability layer.
|
|
54
79
|
|
|
55
|
-
|
|
80
|
+
### Cross-reference the operational layers
|
|
56
81
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
82
|
+
This playbook is the strategy. For execution mechanics, defer to:
|
|
83
|
+
|
|
84
|
+
- **`references/pseo-page-anatomy.md`** — programmatic-SEO page structure, template anatomy, quality-gate-before-indexing.
|
|
85
|
+
- **`references/landing-page-anatomy.md`** — on-page conversion structure for landing pages.
|
|
86
|
+
- **`playbooks/aeo.md`** — relevance engineering and passage-level citability.
|
|
87
|
+
- **`playbooks/pseo.md`** — data × template × intent for programmatic pages.
|
|
88
|
+
|
|
89
|
+
When this playbook and a reference disagree on a tactical detail, the reference wins on mechanics; this playbook wins on prioritization and measurement.
|
|
62
90
|
|
|
63
91
|
---
|
|
64
92
|
|
|
65
93
|
## Discipline Gates
|
|
66
94
|
|
|
67
|
-
### DISC-SEO-01:
|
|
95
|
+
### DISC-SEO-01: Business-Outcome Linkage — Tier 1
|
|
68
96
|
|
|
69
|
-
**Checks:**
|
|
70
|
-
**Against:** Asset
|
|
97
|
+
**Checks:** Asset brief declares a business outcome on the 3-Layer model, not a vanity metric
|
|
98
|
+
**Against:** Asset brief and campaign measurement plan
|
|
71
99
|
|
|
72
100
|
#### Evaluation Criteria
|
|
73
101
|
|
|
74
|
-
1. **
|
|
75
|
-
- PASS:
|
|
76
|
-
- WARN:
|
|
77
|
-
- FAIL:
|
|
102
|
+
1. **Outcome declared**
|
|
103
|
+
- PASS: Brief names a specific Layer 3 (Business Impact) outcome — signup, trial, qualified lead, revenue path — with the journey step explicit
|
|
104
|
+
- WARN: Brief names a Layer 1 (Presence) goal (rank, impressions) with a documented hand-off to a Layer 3 page
|
|
105
|
+
- FAIL: Brief targets traffic, rankings, or impressions with no journey step or downstream conversion path defined
|
|
78
106
|
|
|
79
|
-
2. **
|
|
80
|
-
- PASS:
|
|
81
|
-
- WARN:
|
|
82
|
-
- FAIL:
|
|
107
|
+
2. **Layer assignment**
|
|
108
|
+
- PASS: Brief states which of the 3 Layers the asset is moving (Presence / Readiness / Business Impact) and confirms the other two are already in acceptable state
|
|
109
|
+
- WARN: Layer named but no evidence the other layers are in place
|
|
110
|
+
- FAIL: No layer assignment — asset treats SEO as a single undifferentiated score
|
|
83
111
|
|
|
84
|
-
### DISC-SEO-02:
|
|
112
|
+
### DISC-SEO-02: Technical Floor Precondition — Tier 1
|
|
85
113
|
|
|
86
|
-
**Checks:**
|
|
87
|
-
**Against:**
|
|
114
|
+
**Checks:** Crawlability, rendering parity, and indexability are verified before content production
|
|
115
|
+
**Against:** Asset URL or template, site configuration
|
|
88
116
|
|
|
89
117
|
#### Evaluation Criteria
|
|
90
118
|
|
|
91
|
-
1. **
|
|
92
|
-
- PASS:
|
|
93
|
-
- WARN:
|
|
94
|
-
- FAIL:
|
|
119
|
+
1. **Crawlable and indexable**
|
|
120
|
+
- PASS: Target URL/template is allowed in robots.txt, has no `noindex` directive, is reachable from at least one indexed internal link, and is included in the sitemap
|
|
121
|
+
- WARN: Crawlable but missing from sitemap, or reachable only via JavaScript navigation
|
|
122
|
+
- FAIL: Blocked by robots.txt, marked noindex, orphan page, or behind authentication
|
|
95
123
|
|
|
96
|
-
2. **
|
|
97
|
-
- PASS:
|
|
98
|
-
- WARN:
|
|
99
|
-
- FAIL:
|
|
124
|
+
2. **Render parity (SSR/SSG)**
|
|
125
|
+
- PASS: Rendered HTML (server response) contains the same primary content, H1, and internal links as the in-browser DOM
|
|
126
|
+
- WARN: Most content present in rendered HTML but secondary sections inject client-side
|
|
127
|
+
- FAIL: Primary content (H1, body copy, internal links) only appears after client-side hydration
|
|
100
128
|
|
|
101
|
-
### DISC-SEO-03:
|
|
129
|
+
### DISC-SEO-03: Search Intent & SERP-Format Match — Tier 1
|
|
102
130
|
|
|
103
|
-
**Checks:**
|
|
104
|
-
**Against:**
|
|
131
|
+
**Checks:** Content shape matches the SERP shape already preferred by the engine for the target query
|
|
132
|
+
**Against:** Brief's target query, declared intent, and observed top-ranking format
|
|
105
133
|
|
|
106
134
|
#### Evaluation Criteria
|
|
107
135
|
|
|
108
|
-
1. **
|
|
109
|
-
- PASS:
|
|
110
|
-
- WARN:
|
|
111
|
-
- FAIL:
|
|
136
|
+
1. **Intent alignment**
|
|
137
|
+
- PASS: First 100-150 words directly address the target query and the declared intent is consistent with the dominant intent in current top-ranking results
|
|
138
|
+
- WARN: Content matches intent but buries the direct answer below introductory throat-clearing
|
|
139
|
+
- FAIL: Declared intent contradicts SERP evidence (e.g., informational long-form for a query where every top result is a transactional page)
|
|
112
140
|
|
|
113
|
-
2. **
|
|
114
|
-
- PASS:
|
|
115
|
-
- WARN:
|
|
116
|
-
- FAIL:
|
|
141
|
+
2. **Format match**
|
|
142
|
+
- PASS: Content format matches the SERP-dominant format (listicle for "best X", how-to for "how to X", comparison for "X vs Y", direct landing for transactional)
|
|
143
|
+
- WARN: Format partially matches but mixes intent signals (e.g., a how-to that pivots to a product pitch)
|
|
144
|
+
- FAIL: Format directly contradicts the SERP-dominant format
|
|
117
145
|
|
|
118
|
-
### DISC-SEO-04:
|
|
146
|
+
### DISC-SEO-04: Cannibalization Check — Tier 1
|
|
119
147
|
|
|
120
|
-
**Checks:**
|
|
121
|
-
**Against:**
|
|
148
|
+
**Checks:** Asset is not competing with an existing page on the same site for the same query intent
|
|
149
|
+
**Against:** Site's existing indexed URL inventory
|
|
122
150
|
|
|
123
151
|
#### Evaluation Criteria
|
|
124
152
|
|
|
125
|
-
1. **
|
|
126
|
-
- PASS:
|
|
127
|
-
- WARN:
|
|
128
|
-
- FAIL:
|
|
153
|
+
1. **Unique intent slot**
|
|
154
|
+
- PASS: No existing indexed page on the same site targets the same primary intent and query cluster; or if one exists, the brief documents an explicit consolidation/redirect plan
|
|
155
|
+
- WARN: A weak existing page exists on overlapping intent but is sufficiently differentiated by sub-intent
|
|
156
|
+
- FAIL: An existing page already targets the same intent and is ranking — producing this asset will split equity
|
|
129
157
|
|
|
130
|
-
|
|
131
|
-
- PASS: All internal links use descriptive anchor text that indicates the destination content
|
|
132
|
-
- WARN: Some links use generic anchors ("click here", "read more", "learn more")
|
|
133
|
-
- FAIL: N/A -- linked to link count result
|
|
158
|
+
### DISC-SEO-05: Citability & Entity Coverage — Tier 2
|
|
134
159
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
**Checks:** Content depth and uniqueness
|
|
138
|
-
**Against:** Asset content (self-contained check)
|
|
160
|
+
**Checks:** Asset is structured to be both ranked AND cited by AI answer engines
|
|
161
|
+
**Against:** Asset content and structured data
|
|
139
162
|
|
|
140
163
|
#### Evaluation Criteria
|
|
141
164
|
|
|
142
|
-
1. **
|
|
143
|
-
- PASS:
|
|
144
|
-
- WARN:
|
|
145
|
-
- FAIL:
|
|
165
|
+
1. **Passage-level self-containedness**
|
|
166
|
+
- PASS: Each H2/H3 section answers a distinct sub-question in a self-contained way; a single passage lifted out of context still answers the implied query
|
|
167
|
+
- WARN: Most sections self-contained but 1-2 sections rely on earlier context to make sense
|
|
168
|
+
- FAIL: Content flows as continuous prose where passages cannot be quoted standalone
|
|
169
|
+
|
|
170
|
+
2. **Entity & citation density**
|
|
171
|
+
- PASS: At least 3 named entities (people, products, organizations, standards) referenced precisely; verifiable claims cite a source by name or URL
|
|
172
|
+
- WARN: Entities present but unnamed or vague ("a leading tool", "industry experts")
|
|
173
|
+
- FAIL: No named entities, no source citations on quantitative claims
|
|
146
174
|
|
|
147
|
-
|
|
148
|
-
- PASS:
|
|
149
|
-
- WARN:
|
|
150
|
-
- FAIL:
|
|
175
|
+
3. **Structured data depth**
|
|
176
|
+
- PASS: Required schema present AND entity properties (`author`, `publisher`, `mainEntity`, `sameAs` where applicable) filled with real values
|
|
177
|
+
- WARN: Required schema present but entity properties missing
|
|
178
|
+
- FAIL: No schema or wrong schema type for the content
|
|
151
179
|
|
|
152
|
-
### DISC-SEO-06:
|
|
180
|
+
### DISC-SEO-06: Confidence-Labelled Metrics — Tier 2
|
|
153
181
|
|
|
154
|
-
**Checks:**
|
|
155
|
-
**Against:**
|
|
182
|
+
**Checks:** Measurement plan declares the confidence level and source of every metric tracked
|
|
183
|
+
**Against:** Campaign measurement plan
|
|
156
184
|
|
|
157
185
|
#### Evaluation Criteria
|
|
158
186
|
|
|
159
|
-
1. **
|
|
160
|
-
- PASS:
|
|
161
|
-
- WARN:
|
|
162
|
-
- FAIL:
|
|
187
|
+
1. **Source named per metric**
|
|
188
|
+
- PASS: Every tracked metric names its source (GSC, GA4, server logs, CrUX, AI-citation tracker) and the granularity (per-URL, per-template, per-cluster)
|
|
189
|
+
- WARN: Sources named for most metrics but 1-2 metrics are unsourced
|
|
190
|
+
- FAIL: Metrics listed without source attribution — "we'll track rankings and traffic" with no tool named
|
|
163
191
|
|
|
164
|
-
2. **
|
|
165
|
-
- PASS:
|
|
166
|
-
- WARN:
|
|
167
|
-
- FAIL:
|
|
192
|
+
2. **Confidence label per metric**
|
|
193
|
+
- PASS: Each metric carries a confidence label — high (server-side, deterministic), medium (sampled, scraped), low (estimated, proxy) — so single-metric dashboards never present false precision
|
|
194
|
+
- WARN: Some metrics labelled, others presented without confidence framing
|
|
195
|
+
- FAIL: All metrics presented as equally reliable with no uncertainty acknowledged
|
|
168
196
|
|
|
169
|
-
### DISC-SEO-07:
|
|
197
|
+
### DISC-SEO-07: On-Page Format Integrity — Tier 1
|
|
170
198
|
|
|
171
|
-
**Checks:**
|
|
172
|
-
**Against:**
|
|
199
|
+
**Checks:** Title, H1, meta description, headings, canonical, and image metadata follow SEO format rules
|
|
200
|
+
**Against:** Asset metadata and content structure (see Format Rules below)
|
|
173
201
|
|
|
174
202
|
#### Evaluation Criteria
|
|
175
203
|
|
|
176
|
-
1. **
|
|
177
|
-
- PASS:
|
|
178
|
-
- WARN:
|
|
179
|
-
- FAIL:
|
|
204
|
+
1. **Title & H1 alignment**
|
|
205
|
+
- PASS: Title tag is 50-60 characters, contains the primary keyword near the front, and addresses the same topic as the single H1
|
|
206
|
+
- WARN: Title 45-49 or 61-70 chars, or H1 phrasing diverges from title while keeping topic
|
|
207
|
+
- FAIL: Title under 30 or over 70 chars, multiple H1s, or title and H1 target different topics
|
|
180
208
|
|
|
181
|
-
2. **
|
|
182
|
-
- PASS:
|
|
183
|
-
- WARN:
|
|
184
|
-
- FAIL:
|
|
209
|
+
2. **Meta description**
|
|
210
|
+
- PASS: 120-160 characters, action-oriented, contains the target keyword or close variant naturally
|
|
211
|
+
- WARN: Present but outside 120-160 range, or uses only a distant synonym
|
|
212
|
+
- FAIL: No meta description, or meta does not relate to the page topic
|
|
185
213
|
|
|
186
|
-
3. **
|
|
187
|
-
- PASS:
|
|
188
|
-
- WARN:
|
|
189
|
-
- FAIL:
|
|
214
|
+
3. **Heading hierarchy & canonical**
|
|
215
|
+
- PASS: Heading levels descend logically (H1 → H2 → H3, no skips), canonical URL specified, image alt text descriptive
|
|
216
|
+
- WARN: Minor heading-level skips, canonical present but self-referencing where it should consolidate
|
|
217
|
+
- FAIL: Skipped levels, missing or wrong canonical, images missing alt text
|
|
190
218
|
|
|
191
219
|
---
|
|
192
220
|
|
|
@@ -194,91 +222,156 @@ Content decisions impact Core Web Vitals. Follow these rules:
|
|
|
194
222
|
|
|
195
223
|
| Base Gate ID | Default Tier | Override Tier | Reason |
|
|
196
224
|
|-------------|-------------|---------------|--------|
|
|
197
|
-
| GATE-10 | Tier 2 (advisory) | Tier 1 (blocking) | SEO format correctness directly impacts
|
|
225
|
+
| GATE-10 | Tier 2 (advisory) | Tier 1 (blocking) | SEO format correctness directly impacts crawling, indexing, and SERP display. A missing H1, broken title tag, or wrong canonical prevents the page from being ranked at all — making format a strategic, not advisory, concern. |
|
|
198
226
|
|
|
199
227
|
---
|
|
200
228
|
|
|
201
229
|
## Format Rules
|
|
202
230
|
|
|
203
|
-
- **Title tag:** 50-60 characters,
|
|
204
|
-
- **Meta description:** 120-160 characters, action-oriented
|
|
205
|
-
- **H1:** Exactly one per page, must address the same topic as the title tag
|
|
206
|
-
- **URL structure:** Short,
|
|
207
|
-
- **
|
|
208
|
-
- **
|
|
209
|
-
- **Heading hierarchy:** H1
|
|
210
|
-
- **
|
|
231
|
+
- **Title tag:** 50-60 characters, primary keyword near the front, written for the searcher not the engine.
|
|
232
|
+
- **Meta description:** 120-160 characters, action-oriented, includes target keyword or close variant.
|
|
233
|
+
- **H1:** Exactly one per page, must address the same topic as the title tag.
|
|
234
|
+
- **URL structure:** Short, lowercase, hyphen-separated, includes primary keyword; no query strings for indexable content.
|
|
235
|
+
- **Canonical:** Specified on every indexable page; self-referencing is the default, cross-referencing only when consolidating duplicates.
|
|
236
|
+
- **Hreflang:** Required for any site serving more than one locale; bidirectional and self-referencing.
|
|
237
|
+
- **Heading hierarchy:** H1 → H2 → H3 in order, no skipped levels. Each H2 answers a sub-question of the query.
|
|
238
|
+
- **Image metadata:** Explicit width/height attributes required; descriptive alt text; WebP/AVIF preferred over PNG/JPEG; lazy-load below the fold.
|
|
239
|
+
- **Schema markup:** Article minimum for blog/pillar; FAQPage when Q&A is present; HowTo when ordered steps are present; LocalBusiness for location pages. Entity properties (`author`, `publisher`, `sameAs`) must be populated, not just declared.
|
|
240
|
+
- **Internal links:** 3-6 contextual links per 1000 words, descriptive anchors that name the destination topic.
|
|
211
241
|
|
|
212
242
|
---
|
|
213
243
|
|
|
214
244
|
## Examples
|
|
215
245
|
|
|
216
|
-
### Good
|
|
246
|
+
### Good — Strategic blog post with 3-Layer linkage
|
|
217
247
|
|
|
218
248
|
```
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
249
|
+
Brief declares:
|
|
250
|
+
- Business outcome: free-trial signup from "how to optimize Core Web Vitals" reader
|
|
251
|
+
- Journey step: awareness → consideration; CTA routes to the CWV-audit tool page
|
|
252
|
+
- Layer assignment: moving Layer 1 (Presence). Layer 2 (Readiness) confirmed:
|
|
253
|
+
page is SSR, schema present, hreflang correct. Layer 3 (Business Impact)
|
|
254
|
+
tracked via UTM-tagged CTA + GA4 conversion event.
|
|
255
|
+
|
|
256
|
+
Title (52 chars): "Optimize Core Web Vitals: A 2026 Engineer's Guide"
|
|
257
|
+
H1: "Optimize Core Web Vitals: A 2026 Engineer's Guide"
|
|
258
|
+
First 120 words: Names the three CWV metrics, who this guide is for,
|
|
259
|
+
and what the reader will be able to do at the end.
|
|
260
|
+
Schema: HowTo with 6 steps + Article with named author and publisher.
|
|
261
|
+
Entities cited: Google, Chrome UX Report, web.dev, three named tools.
|
|
262
|
+
Internal links: 5 contextual links to related performance posts and the
|
|
263
|
+
CWV-audit tool, descriptive anchors throughout.
|
|
264
|
+
Measurement: GSC for impressions/clicks (high confidence), GA4 for
|
|
265
|
+
CTA-click-through (high), AI Overview citation tracker (medium).
|
|
224
266
|
```
|
|
225
267
|
|
|
226
|
-
### Good
|
|
268
|
+
### Good — Programmatic page with audit-driven prioritization
|
|
269
|
+
|
|
270
|
+
See `references/pseo-page-anatomy.md` for the page structure. The strategic layer:
|
|
227
271
|
|
|
228
272
|
```
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
273
|
+
Audit found: 8,400 templated pages indexed; only 1,200 have unique data;
|
|
274
|
+
6,200 are thin variants ranking nowhere and cannibalizing the strong 1,200.
|
|
275
|
+
Decision (audit-first): noindex the 6,200 thin pages, redirect 1,000 to
|
|
276
|
+
the strongest variant, keep 1,200 indexed.
|
|
277
|
+
Result expectation: traffic stays flat or grows on the kept pages because
|
|
278
|
+
internal equity consolidates. Layer 2 (Readiness) improves; Layer 1
|
|
279
|
+
(Presence) on the survivors improves as cannibalization ends.
|
|
234
280
|
```
|
|
235
281
|
|
|
236
|
-
### Bad
|
|
282
|
+
### Bad — Tactic without strategy
|
|
237
283
|
|
|
238
284
|
```
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
285
|
+
Brief: "Write a blog post on 'best CRM for startups' to rank for that
|
|
286
|
+
keyword."
|
|
287
|
+
Problems:
|
|
288
|
+
- No business outcome declared. Ranking is not a goal; it is a means.
|
|
289
|
+
- No SERP audit done. The current top results are all listicles by
|
|
290
|
+
comparison sites with deep domain authority — outranking them in
|
|
291
|
+
one post is implausible.
|
|
292
|
+
- No layer assignment. Cannot tell which of Presence/Readiness/Business
|
|
293
|
+
Impact this asset moves.
|
|
294
|
+
- No technical-floor check. The /blog/ subdomain is client-rendered;
|
|
295
|
+
Googlebot sees an empty shell.
|
|
296
|
+
Verdict: produce the technical-floor fix first; this post would be wasted
|
|
297
|
+
on an unrenderable template.
|
|
243
298
|
```
|
|
244
299
|
|
|
245
|
-
### Bad
|
|
300
|
+
### Bad — Single-score dashboard
|
|
246
301
|
|
|
247
302
|
```
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
303
|
+
Dashboard shows: "SEO Health Score: 72/100"
|
|
304
|
+
Problem: collapses Presence, Readiness, and Business Impact into one
|
|
305
|
+
number. A site can have 90 Readiness, 60 Presence, and 0 Business
|
|
306
|
+
Impact (vanity traffic) and score 72 — masking the fact that no
|
|
307
|
+
revenue is being generated. Layered metrics with confidence labels
|
|
308
|
+
beat composite scores.
|
|
252
309
|
```
|
|
253
310
|
|
|
254
311
|
---
|
|
255
312
|
|
|
256
313
|
## Anti-Patterns
|
|
257
314
|
|
|
258
|
-
1. **
|
|
315
|
+
1. **Tactics without strategy** — Writing posts, adding schema, building links without a business outcome and 3-Layer assignment. Tactical work compounds only inside a strategy; outside one, it produces motion without progress.
|
|
259
316
|
|
|
260
|
-
2. **
|
|
317
|
+
2. **Rank-tracking as the goal** — Treating rankings or impressions as the success metric. Rankings are a Layer 1 (Presence) signal; the goal is always Layer 3 (Business Impact). Optimizing for rank divorced from revenue produces vanity sites.
|
|
261
318
|
|
|
262
|
-
3. **
|
|
319
|
+
3. **Single-score dashboards** — Collapsing Presence, Readiness, and Business Impact into one composite score. Hides which layer is broken and creates false confidence. Always report layered metrics with confidence labels.
|
|
263
320
|
|
|
264
|
-
4. **
|
|
321
|
+
4. **AI search treated as a separate channel** — Building "AEO content" as if it lives in a different department from SEO. AI Overviews are a continuum of SERP, not a separate surface. Discoverability and citability optimization happen together.
|
|
265
322
|
|
|
266
|
-
5. **
|
|
323
|
+
5. **Skipping the technical floor** — Producing content on sites that are not crawlable, not renderable, or not indexable. No content strategy survives a broken technical foundation; fix the floor first.
|
|
267
324
|
|
|
268
|
-
6. **
|
|
325
|
+
6. **Keyword-density mythology** — Repeating the target keyword to hit a "density target". Keyword stuffing was deprecated by Google over 15 years ago. Entity coverage and topical depth replaced it.
|
|
269
326
|
|
|
270
|
-
7. **
|
|
327
|
+
7. **Link buying / black-hat shortcuts** — Purchasing links, PBN tactics, sneaky redirects. Explicit anti-recommendation: shortcuts compound risk, not equity. Earn links through cited research, named-entity authority, and genuinely linkable assets.
|
|
328
|
+
|
|
329
|
+
8. **International afterthought** — Building English-only without hreflang scaffolding. Adding international SEO later costs 10x more than building locale-aware from day one.
|
|
330
|
+
|
|
331
|
+
9. **Cannibalization through volume** — Publishing multiple pages on overlapping intent because "more pages = more SEO". Internal competition splits equity. Audit and consolidate before producing.
|
|
332
|
+
|
|
333
|
+
10. **Render-blind production** — Drafting beautifully for a JavaScript-rendered SPA that Googlebot sees as an empty `<div>`. Verify SSR/SSG parity before drafting a single page.
|
|
271
334
|
|
|
272
335
|
---
|
|
273
336
|
|
|
274
337
|
## Metrics
|
|
275
338
|
|
|
276
|
-
Track
|
|
339
|
+
Track per the 3-Layer Measurement Model. Every metric carries a source and a confidence label.
|
|
340
|
+
|
|
341
|
+
### Layer 1 — Presence
|
|
342
|
+
|
|
343
|
+
- **Organic impressions and clicks** — Source: Google Search Console. Confidence: high. Weekly for first 90 days.
|
|
344
|
+
- **Average position for target keyword cluster** — Source: GSC. Confidence: medium (averaged, sampled). 30/60/90 day windows.
|
|
345
|
+
- **AI Overview / AI answer engine citations** — Source: AI-citation tracker (Profound, Otterly, manual sampling). Confidence: low-medium. Sample weekly.
|
|
346
|
+
- **Brand SERP coverage** — Source: manual brand SERP audit. Confidence: medium. Monthly.
|
|
347
|
+
|
|
348
|
+
### Layer 2 — Readiness
|
|
349
|
+
|
|
350
|
+
- **Indexed status** — Source: GSC Coverage report. Confidence: high. Confirm within 7 days of publication.
|
|
351
|
+
- **Render parity check** — Source: View-source vs. rendered DOM diff, or URL Inspection in GSC. Confidence: high. Per template, per release.
|
|
352
|
+
- **Core Web Vitals pass rate** — Source: PageSpeed Insights, CrUX. Confidence: high (CrUX) or medium (PSI single-run). Must maintain "Good" threshold per template family.
|
|
353
|
+
- **Schema validity** — Source: Schema.org validator, GSC Rich Results report. Confidence: high. Per template.
|
|
354
|
+
- **Crawl error volume** — Source: GSC, server logs. Confidence: high. Weekly trend.
|
|
355
|
+
|
|
356
|
+
### Layer 3 — Business Impact
|
|
357
|
+
|
|
358
|
+
- **Organic-attributed signups / trials / leads** — Source: GA4 with UTM tagging, or product analytics with referrer capture. Confidence: medium (last-click attribution carries known bias). Track per asset and per cluster.
|
|
359
|
+
- **Organic-attributed revenue or pipeline** — Source: CRM joined to web analytics. Confidence: medium. Monthly.
|
|
360
|
+
- **Activation rate from organic-acquired users** — Source: product analytics. Confidence: high (deterministic event). Compare against paid-acquired cohort.
|
|
361
|
+
|
|
362
|
+
### Reporting discipline
|
|
363
|
+
|
|
364
|
+
- Never present a Layer 1 metric without the corresponding Layer 3 read.
|
|
365
|
+
- Never present a composite "SEO score". Report each layer separately with its confidence label.
|
|
366
|
+
- When a metric source is unknown or sampled, say so. False precision beats no metric only when both layers know it is false.
|
|
367
|
+
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
## Sources
|
|
277
371
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
- **Indexed status** -- Confirm page is indexed within 7 days of publication via GSC
|
|
372
|
+
1. **Aleyda Solis — 3-Layer Framework for AI Search Measurement** — https://www.aleydasolis.com/en/ai-search/a-3-layer-framework-to-measure-ai-presence-readiness-and-business-impact-redefining-metrics-for-the-ai-search-era/
|
|
373
|
+
2. **LearningSEO.io — open-source SEO roadmap** — https://learningseo.io/
|
|
374
|
+
3. **Aleyda Solis — main site and newsletter (SEOFOMO, Crawling Mondays)** — https://www.aleydaseotips.com/
|
|
375
|
+
4. **Aleyda Solis — Orainti consultancy** — https://www.aleydasolis.com/en/
|
|
376
|
+
5. **Yoast podcast — Aleyda Solis on strategic SEO** — https://yoast.com/podcast/aleyda-solis/
|
|
377
|
+
6. **Search Engine Journal — International SEO with Aleyda Solis** — https://www.searchenginejournal.com/international-seo-considerations-with-aleyda-solis-podcast/282461/
|