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.
Files changed (181) hide show
  1. package/.claude-plugin/marketplace.json +13 -17
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/README.md +35 -12
  4. package/bin/lib/campaign.cjs +12 -8
  5. package/bin/lib/codebase-scan.cjs +86 -0
  6. package/bin/lib/config.cjs +129 -0
  7. package/bin/lib/deploy.cjs +36 -0
  8. package/bin/lib/deviation.cjs +1 -1
  9. package/bin/lib/drift-log.cjs +4 -4
  10. package/bin/lib/health.cjs +32 -31
  11. package/bin/lib/install-detect.cjs +62 -0
  12. package/bin/lib/legacy-folder.cjs +100 -0
  13. package/bin/lib/playwright-check.cjs +26 -0
  14. package/bin/lib/site-location.cjs +22 -0
  15. package/bin/lib/state.cjs +3 -3
  16. package/bin/lib/svg-render.cjs +42 -0
  17. package/bin/ttm-tools.cjs +136 -4
  18. package/gates/base-gates.md +8 -8
  19. package/gates/gate-evaluation.md +8 -8
  20. package/install.js +37 -3
  21. package/package.json +10 -6
  22. package/playbooks/aeo.md +218 -114
  23. package/playbooks/affiliate.md +225 -160
  24. package/playbooks/email.md +236 -174
  25. package/playbooks/events.md +303 -213
  26. package/playbooks/landing-pages.md +309 -0
  27. package/playbooks/linkedin.md +264 -142
  28. package/playbooks/manifesto.md +322 -0
  29. package/playbooks/paid-ads.md +240 -189
  30. package/playbooks/positioning.md +340 -0
  31. package/playbooks/pr-media.md +308 -168
  32. package/playbooks/pseo.md +426 -0
  33. package/playbooks/seo.md +251 -158
  34. package/playbooks/social.md +253 -182
  35. package/playbooks/youtube.md +286 -181
  36. package/references/brand-color-theory.md +48 -0
  37. package/references/codex-image-gen-research.md +58 -0
  38. package/references/context-loading.md +6 -6
  39. package/references/humanizer-patterns.md +433 -0
  40. package/references/inline-education-blurbs.md +461 -0
  41. package/references/landing-page-anatomy.md +65 -0
  42. package/references/landing-page-headline-examples.md +190 -0
  43. package/references/linkedin-post-patterns.md +174 -0
  44. package/references/logo-design-principles.md +55 -0
  45. package/references/meta-gate-evaluation.md +3 -3
  46. package/references/obra-superpowers-conventions.md +170 -0
  47. package/references/playbook-leaders.md +472 -0
  48. package/references/playwright-mcp-setup.md +164 -0
  49. package/references/positioning-check-report.md +2 -2
  50. package/references/pseo-page-anatomy.md +56 -0
  51. package/references/pseo-templates/alternative-anatomy.md +31 -0
  52. package/references/pseo-templates/alternative-content-playbook.md +32 -0
  53. package/references/pseo-templates/blog-anatomy.md +28 -0
  54. package/references/pseo-templates/blog-content-playbook.md +36 -0
  55. package/references/pseo-templates/comparison-anatomy.md +29 -0
  56. package/references/pseo-templates/comparison-content-playbook.md +35 -0
  57. package/references/pseo-templates/use-case-anatomy.md +28 -0
  58. package/references/pseo-templates/use-case-content-playbook.md +30 -0
  59. package/skills/ttm-101/SKILL.md +25 -0
  60. package/skills/ttm-aeo-check/SKILL.md +17 -12
  61. package/skills/ttm-affiliate-kit/SKILL.md +5 -0
  62. package/skills/ttm-archive/SKILL.md +5 -0
  63. package/skills/ttm-brand-refresh/SKILL.md +5 -0
  64. package/skills/ttm-brief/SKILL.md +5 -0
  65. package/skills/ttm-competitor-scan/SKILL.md +5 -0
  66. package/skills/ttm-deploy/SKILL.md +22 -0
  67. package/skills/ttm-discover/SKILL.md +17 -0
  68. package/skills/ttm-email-check/SKILL.md +17 -0
  69. package/skills/ttm-email-preflight/SKILL.md +17 -11
  70. package/skills/ttm-fix/SKILL.md +5 -0
  71. package/skills/ttm-health/SKILL.md +6 -1
  72. package/skills/ttm-humanize/SKILL.md +33 -0
  73. package/skills/ttm-icp-refresh/SKILL.md +5 -0
  74. package/skills/ttm-improve-skill/SKILL.md +18 -0
  75. package/skills/ttm-init/SKILL.md +10 -3
  76. package/skills/ttm-keyword-map/SKILL.md +17 -11
  77. package/skills/ttm-landing/SKILL.md +19 -0
  78. package/skills/ttm-learn/SKILL.md +5 -0
  79. package/skills/ttm-linkedin-post/SKILL.md +26 -0
  80. package/skills/ttm-measure/SKILL.md +5 -0
  81. package/skills/ttm-new-campaign/SKILL.md +5 -0
  82. package/skills/ttm-next/SKILL.md +5 -0
  83. package/skills/ttm-playwright-setup/SKILL.md +18 -0
  84. package/skills/ttm-positioning-check/SKILL.md +5 -0
  85. package/skills/ttm-positioning-shift/SKILL.md +5 -0
  86. package/skills/ttm-produce/SKILL.md +5 -0
  87. package/skills/ttm-pseo/SKILL.md +26 -0
  88. package/skills/ttm-repurpose/SKILL.md +5 -0
  89. package/skills/ttm-request-skill/SKILL.md +18 -0
  90. package/skills/ttm-research/SKILL.md +18 -6
  91. package/skills/ttm-resume/SKILL.md +5 -0
  92. package/skills/ttm-review/SKILL.md +5 -0
  93. package/skills/ttm-seo/SKILL.md +64 -0
  94. package/skills/ttm-seo-audit/SKILL.md +17 -12
  95. package/skills/ttm-ship/SKILL.md +5 -0
  96. package/skills/ttm-state/SKILL.md +5 -0
  97. package/skills/ttm-update/SKILL.md +152 -4
  98. package/skills/ttm-verify/SKILL.md +5 -0
  99. package/templates/agents-md.md +14 -4
  100. package/templates/campaign-research.md +6 -6
  101. package/templates/campaign-state.md +1 -1
  102. package/templates/claude-md.md +14 -4
  103. package/templates/linkedin-base-template.md +48 -0
  104. package/templates/next-step-footer.md +13 -0
  105. package/templates/production-manifest.json +4 -4
  106. package/templates/pseo/alternative-cms-schema.json +65 -0
  107. package/templates/pseo/blog-cms-schema.json +55 -0
  108. package/templates/pseo/comparison-cms-schema.json +56 -0
  109. package/templates/pseo/use-case-cms-schema.json +62 -0
  110. package/templates/reference-files/brand.md +51 -0
  111. package/templates/reference-files/product-dna.md +73 -0
  112. package/templates/site-scaffold/app/globals.css +2 -0
  113. package/templates/site-scaffold/app/layout.tsx +17 -0
  114. package/templates/site-scaffold/app/page.tsx +33 -0
  115. package/templates/site-scaffold/app/robots.ts +8 -0
  116. package/templates/site-scaffold/app/sitemap.ts +10 -0
  117. package/templates/site-scaffold/app/tokens.css +21 -0
  118. package/templates/site-scaffold/components/Comparison.tsx +14 -0
  119. package/templates/site-scaffold/components/Faq.tsx +14 -0
  120. package/templates/site-scaffold/components/Features.tsx +14 -0
  121. package/templates/site-scaffold/components/FinalCta.tsx +17 -0
  122. package/templates/site-scaffold/components/Footer.tsx +12 -0
  123. package/templates/site-scaffold/components/Hero.tsx +22 -0
  124. package/templates/site-scaffold/components/HowItWorks.tsx +14 -0
  125. package/templates/site-scaffold/components/PricingTeaser.tsx +14 -0
  126. package/templates/site-scaffold/components/Problem.tsx +14 -0
  127. package/templates/site-scaffold/components/SocialProof.tsx +14 -0
  128. package/templates/site-scaffold/components/Solution.tsx +14 -0
  129. package/templates/site-scaffold/components/Testimonials.tsx +14 -0
  130. package/templates/site-scaffold/components/UseCases.tsx +14 -0
  131. package/templates/site-scaffold/content/.gitkeep +0 -0
  132. package/templates/site-scaffold/lib/.gitkeep +0 -0
  133. package/templates/site-scaffold/next.config.mjs +10 -0
  134. package/templates/site-scaffold/package.json +25 -0
  135. package/templates/site-scaffold/postcss.config.mjs +3 -0
  136. package/templates/site-scaffold/public/llms.txt +9 -0
  137. package/templates/site-scaffold/tsconfig.json +21 -0
  138. package/templates/verification-report.md +1 -1
  139. package/workflows/channel/linkedin-post.md +178 -0
  140. package/workflows/discipline/affiliate-kit.md +65 -6
  141. package/workflows/discipline/{email-preflight.md → email-check.md} +39 -4
  142. package/workflows/discipline/repurpose.md +82 -31
  143. package/workflows/discipline/{aeo-check.md → seo/aeo.md} +13 -6
  144. package/workflows/discipline/{seo-audit.md → seo/audit.md} +13 -6
  145. package/workflows/discipline/{keyword-map.md → seo/keyword-map.md} +13 -6
  146. package/workflows/education/ttm-101.md +114 -0
  147. package/workflows/lifecycle/brief-positioning-check.md +1 -1
  148. package/workflows/lifecycle/brief.md +64 -28
  149. package/workflows/lifecycle/{research.md → discover.md} +61 -19
  150. package/workflows/lifecycle/fix.md +72 -37
  151. package/workflows/lifecycle/humanize.md +280 -0
  152. package/workflows/lifecycle/learn.md +72 -35
  153. package/workflows/lifecycle/measure.md +54 -18
  154. package/workflows/lifecycle/produce.md +88 -37
  155. package/workflows/lifecycle/review.md +71 -25
  156. package/workflows/lifecycle/ship.md +62 -18
  157. package/workflows/lifecycle/verify.md +72 -26
  158. package/workflows/reference-mgmt/brand-refresh.md +50 -13
  159. package/workflows/reference-mgmt/competitor-scan.md +51 -15
  160. package/workflows/reference-mgmt/icp-refresh.md +48 -12
  161. package/workflows/reference-mgmt/positioning-check.md +55 -20
  162. package/workflows/reference-mgmt/positioning-shift.md +53 -17
  163. package/workflows/setup/init-brand-colors.md +75 -0
  164. package/workflows/setup/init-logo.md +113 -0
  165. package/workflows/setup/init-product-dna.md +83 -0
  166. package/workflows/setup/init-questions.md +166 -30
  167. package/workflows/setup/init-validation.md +22 -0
  168. package/workflows/setup/init.md +144 -39
  169. package/workflows/setup/new-campaign.md +48 -12
  170. package/workflows/site/deploy.md +98 -0
  171. package/workflows/site/landing.md +156 -0
  172. package/workflows/site/pseo.md +96 -0
  173. package/workflows/site/quality-gates.md +88 -0
  174. package/workflows/utility/archive.md +45 -9
  175. package/workflows/utility/health.md +77 -3
  176. package/workflows/utility/improve-skill.md +233 -0
  177. package/workflows/utility/next.md +38 -2
  178. package/workflows/utility/playwright-setup.md +128 -0
  179. package/workflows/utility/request-skill.md +218 -0
  180. package/workflows/utility/resume.md +40 -3
  181. 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: "1.0"
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
- ### Search Intent First
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
- Identify whether the target query is informational, commercial, navigational, or transactional. Match the content format to the intent:
37
+ ### SEO maturity model start at the floor
18
38
 
19
- - **Informational** ("how to X", "what is X"): long-form guide or explainer
20
- - **Commercial** ("best X", "X vs Y"): comparison, listicle, or review
21
- - **Navigational** ("brand X login", "X pricing"): direct landing page
22
- - **Transactional** ("buy X", "X free trial"): conversion-focused landing page with CTA
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
- If the content format does not match the dominant intent in top-ranking results, the asset will underperform regardless of quality.
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
- ### Keyword Placement
48
+ Do not skip levels. A pillar page on an unrenderable subdomain is worth nothing.
27
49
 
28
- Place the target keyword in:
50
+ ### Audit-driven prioritization
29
51
 
30
- - Title tag (near the front)
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
- Do NOT stuff keywords. Maintain 1-2% keyword density maximum. Keyword variants and synonyms count toward topical coverage but not density.
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
- ### Content Structure
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
- Use H2/H3 hierarchy logically. Every H2 should answer a sub-question of the main query. Avoid skipping heading levels (H1 to H3). Each H2 section should be 150-400 words -- long enough for substance, short enough for scannability.
63
+ ### Intent-modeled content
40
64
 
41
- ### Internal Linking
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
- Weave 3-6 contextual internal links per 1000 words to related content. Use descriptive anchor text that tells the reader what they will find. Avoid generic anchors like "click here" or "read more."
67
+ ### International-first reflex
44
68
 
45
- ### Schema Markup
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
- Include Article schema at minimum for blog posts and pillar pages. Add FAQ schema if the content contains question-answer pairs. Add HowTo schema if the content has step-by-step instructions. Specify required fields (headline, author, datePublished for Article; name, acceptedAnswer for FAQ).
71
+ ### Discoverable AND citable
48
72
 
49
- ### Entity-Based SEO
73
+ In the AI-search era, the page has two jobs:
50
74
 
51
- Reference known entities (people, organizations, concepts, products) that search engines associate with the topic. Build topical authority by connecting to established knowledge graph entities rather than relying on keyword repetition alone.
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
- ### Performance Awareness
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
- Content decisions impact Core Web Vitals. Follow these rules:
80
+ ### Cross-reference the operational layers
56
81
 
57
- - Use optimized image formats (WebP/AVIF) with explicit width/height attributes
58
- - Lazy-load images below the fold
59
- - Avoid render-blocking embeds (video players, social widgets) above the fold
60
- - Reserve space for ad slots and dynamic content to prevent layout shift
61
- - Prefer native HTML elements (details/summary for accordions) over heavy JavaScript widgets
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: Title/H1 Alignment -- Tier 1
95
+ ### DISC-SEO-01: Business-Outcome Linkage Tier 1
68
96
 
69
- **Checks:** Title tag and H1 heading convey the same primary topic
70
- **Against:** Asset content structure
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. **Title-H1 topic match**
75
- - PASS: Title tag and H1 contain the same primary keyword and address the same topic
76
- - WARN: Title and H1 address the same topic but use different keyword phrasing
77
- - FAIL: Title and H1 address different topics or target different keywords
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. **Title length**
80
- - PASS: Title tag is 50-60 characters
81
- - WARN: Title tag is 45-49 or 61-70 characters
82
- - FAIL: Title tag is under 30 or over 70 characters
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: Search Intent Match -- Tier 1
112
+ ### DISC-SEO-02: Technical Floor Precondition Tier 1
85
113
 
86
- **Checks:** Content matches the search intent of the target query
87
- **Against:** Brief's target keyword and declared intent type
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. **Intent alignment**
92
- - PASS: First 100-150 words directly address the target query and match the declared intent
93
- - WARN: Content addresses the query but the direct answer is buried below introductory context
94
- - FAIL: Content does not match the declared intent type (e.g., informational content for a transactional query)
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. **Content format match**
97
- - PASS: Content format matches intent -- listicle for "best X", how-to guide for "how to X", comparison for "X vs Y"
98
- - WARN: Content partially matches the expected format but includes mixed intent signals
99
- - FAIL: Content format contradicts the search intent (e.g., a product page for an informational query)
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: Schema Markup -- Tier 2
129
+ ### DISC-SEO-03: Search Intent & SERP-Format Match — Tier 1
102
130
 
103
- **Checks:** Structured data presence and correctness
104
- **Against:** schema.org specification for the applicable type (Article, FAQPage, HowTo)
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. **Schema presence**
109
- - PASS: Appropriate schema type (Article, FAQ, or HowTo) is specified in the asset with required fields populated
110
- - WARN: Schema type is mentioned but one or more required fields are missing or incomplete
111
- - FAIL: No schema markup specified for content that qualifies for structured data
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. **Schema accuracy**
114
- - PASS: All required fields present and correctly typed (e.g., datePublished is ISO 8601, author has name)
115
- - WARN: Required fields present but optional fields (image, dateModified) are missing
116
- - FAIL: Required fields missing, incorrect field types, or wrong schema type for the content
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: Internal Link Density -- Tier 2
146
+ ### DISC-SEO-04: Cannibalization Check Tier 1
119
147
 
120
- **Checks:** Contextual internal link quantity and anchor text quality
121
- **Against:** Asset content (self-contained check)
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. **Link count**
126
- - PASS: 3-6 contextual internal links per 1000 words of content
127
- - WARN: 1-2 internal links per 1000 words
128
- - FAIL: 0 internal links in the asset
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
- 2. **Anchor text quality**
131
- - PASS: All internal links use descriptive anchor text that indicates the destination content
132
- - WARN: Some links use generic anchors ("click here", "read more", "learn more")
133
- - FAIL: N/A -- linked to link count result
158
+ ### DISC-SEO-05: Citability & Entity Coverage — Tier 2
134
159
 
135
- ### DISC-SEO-05: Thin Content Detection -- Tier 1
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. **Word count**
143
- - PASS: 800+ words for standard pages (blog-post, landing-page, pillar-page); 300+ words for programmatic-seo variants
144
- - WARN: 500-799 words for standard pages
145
- - FAIL: Under 500 words for standard pages or under 300 words for programmatic-seo
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
- 2. **Unique substance**
148
- - PASS: Content provides original analysis, proprietary data, unique perspective, or first-party research
149
- - WARN: Content summarizes existing publicly available information with minor original commentary
150
- - FAIL: Content is mostly boilerplate, template-generated text with only location/variable swaps, or restates common knowledge without adding value
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: Meta Description -- Tier 2
180
+ ### DISC-SEO-06: Confidence-Labelled Metrics Tier 2
153
181
 
154
- **Checks:** Meta description presence, length, and keyword inclusion
155
- **Against:** Asset metadata fields
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. **Presence and length**
160
- - PASS: Meta description is present and 120-160 characters in length
161
- - WARN: Meta description is present but under 120 or over 160 characters
162
- - FAIL: No meta description provided
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. **Keyword inclusion**
165
- - PASS: Target keyword appears naturally within the meta description
166
- - WARN: A keyword variant or close synonym is used instead of the exact target keyword
167
- - FAIL: Neither the target keyword nor any recognizable variant appears in the meta description
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: Core Web Vitals Budget -- Tier 1
197
+ ### DISC-SEO-07: On-Page Format Integrity Tier 1
170
198
 
171
- **Checks:** Content structure for Core Web Vitals impact -- whether the asset's content design stays within performance budgets
172
- **Against:** Google Core Web Vitals thresholds (LCP < 2.5s, CLS < 0.1, INP < 200ms)
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. **LCP risk**
177
- - PASS: Hero/above-fold content uses optimized image formats (WebP/AVIF) with explicit width/height, lazy-loads below-fold images, no render-blocking embeds above fold
178
- - WARN: Images present above fold but missing explicit dimensions or using unoptimized formats (PNG/uncompressed JPEG)
179
- - FAIL: Above-fold content depends on heavy unoptimized media (>200KB hero image without dimensions), multiple render-blocking third-party embeds, or auto-playing video without poster frame
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. **CLS risk**
182
- - PASS: All images and embeds have explicit width/height or aspect-ratio CSS, no dynamically injected content above fold, ad slots have reserved space
183
- - WARN: Most media has dimensions but 1-2 elements are missing explicit sizing
184
- - FAIL: Images/embeds without dimensions that will cause layout shift, dynamically inserted banners or CTAs above existing content
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. **INP risk**
187
- - PASS: No heavy inline JavaScript or click handlers that would block interaction -- content relies on standard links and native form elements
188
- - WARN: Interactive elements present (accordions, tabs) but use standard HTML patterns or lightweight JS
189
- - FAIL: Content specifies complex interactive widgets, heavy carousels, or inline calculators without performance notes
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 search rankings; structural errors (missing H1, broken title tag) prevent proper indexing and SERP display |
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, target keyword placed near the front
204
- - **Meta description:** 120-160 characters, action-oriented with target keyword included
205
- - **H1:** Exactly one per page, must address the same topic as the title tag
206
- - **URL structure:** Short, hyphenated, includes primary keyword (e.g., `/seo-content-guide` not `/page?id=123`)
207
- - **Image alt text:** Descriptive of the image content, includes target keyword where naturally appropriate
208
- - **Images:** Explicit width/height attributes required, WebP/AVIF format preferred, lazy-load attribute on below-fold images
209
- - **Heading hierarchy:** H1 > H2 > H3 in order, no skipped levels
210
- - **Canonical URL:** Specified for every page to prevent duplicate content issues
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: Intent-Matching Blog Post Structure
246
+ ### Good Strategic blog post with 3-Layer linkage
217
247
 
218
248
  ```
219
- Title: "How to Optimize Core Web Vitals in 2024" (48 chars)
220
- H1: "How to Optimize Core Web Vitals: A Step-by-Step Guide"
221
- First 100 words: Directly explains what CWV optimization involves and why it matters.
222
- Schema: HowTo with 6 numbered steps.
223
- Internal links: 4 links to related performance articles with descriptive anchors.
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: Programmatic SEO with Sufficient Depth
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
- Title: "Best Coffee Shops in Austin, TX" (33 chars -- variant page)
230
- H1: "Best Coffee Shops in Austin, Texas"
231
- Content: 450 words with 3 unique reviews, local entity references, original ratings.
232
- Schema: Article with LocalBusiness references.
233
- Unique content ratio: 70%+ original text beyond the template.
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: Keyword-Stuffed Landing Page
282
+ ### Bad Tactic without strategy
237
283
 
238
284
  ```
239
- Title: "Best SEO Tools | SEO Tools Reviews | Top SEO Tools 2024"
240
- Problem: Title is 56 chars but keyword "SEO Tools" appears 3 times (stuffing).
241
- H1: "SEO Tools" -- does not match the multi-topic title.
242
- Body: "SEO tools" appears every other sentence (4%+ density).
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: Thin Programmatic SEO Template
300
+ ### Bad Single-score dashboard
246
301
 
247
302
  ```
248
- Title: "Best Coffee Shops in [City], [State]"
249
- Content: 120 words. Only the city name changes between variants.
250
- Unique content: Template boilerplate with location swap only.
251
- No schema, no internal links, no original substance.
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. **Keyword stuffing** -- Keyword density exceeding 2%. Search engines penalize unnatural repetition. Use synonyms and topical variants instead.
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. **Title/H1 mismatch** -- Title tag targeting one keyword while H1 targets a different topic. This confuses search engines about the page's primary topic.
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. **Missing schema markup** -- Publishing content that qualifies for Article, FAQ, or HowTo structured data without specifying the schema. Missed opportunity for rich results.
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. **Generic internal link anchors** -- Using "click here", "read more", or "learn more" as anchor text. Descriptive anchors help search engines understand link relationships.
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. **Duplicate/thin programmatic pages** -- Generating hundreds of pages where only a location or variable name changes. Each page must contain substantive unique content (300+ words unique).
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. **Ignoring search intent** -- Serving informational content for a transactional query, or a product page for an informational query. Match the dominant intent visible in current SERP results.
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. **Hero images without explicit dimensions** -- Placing large images above the fold without width/height attributes causes Cumulative Layout Shift (CLS), degrading Core Web Vitals scores and user experience.
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 these indicators for SEO content after shipping:
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
- - **Organic impressions and clicks** -- Google Search Console, measured weekly for first 90 days
279
- - **Average position for target keyword** -- GSC, track trend over 30/60/90 day windows
280
- - **Click-through rate (CTR) from SERP** -- GSC, compare against position-adjusted benchmarks
281
- - **Time on page / scroll depth** -- Analytics platform, indicates content engagement
282
- - **Internal link click-through** -- Track clicks on internal links within the asset
283
- - **Core Web Vitals pass rate** -- PageSpeed Insights or CrUX data, must maintain "Good" threshold
284
- - **Indexed status** -- Confirm page is indexed within 7 days of publication via GSC
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/