@hanzlaa/rcode 4.3.2 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/AGENTS.md +1 -1
  2. package/CONTRIBUTING.md +2 -1
  3. package/README.md +45 -10
  4. package/cli/doctor.js +21 -3
  5. package/cli/index.js +5 -1
  6. package/cli/install.js +16 -2
  7. package/cli/postinstall.js +1 -1
  8. package/cli/uninstall.js +48 -6
  9. package/dist/rcode.js +178 -174
  10. package/package.json +12 -22
  11. package/rcode/agents/rcode-codebase-mapper.md +12 -0
  12. package/rcode/agents/rcode-phase-researcher.md +13 -0
  13. package/rcode/agents/rcode-project-researcher.md +32 -0
  14. package/rcode/agents/rcode-roadmapper.md +15 -0
  15. package/rcode/agents/rules/planner/common-patterns.md +40 -0
  16. package/rcode/bin/lib/roadmap.cjs +184 -11
  17. package/rcode/bin/rcode-hooks.cjs +303 -14
  18. package/rcode/bin/rcode-tools.cjs +669 -55
  19. package/rcode/commands/lens-audit.md +8 -6
  20. package/rcode/data/intent-table.json +87 -0
  21. package/rcode/modules/seo.yaml +22 -0
  22. package/rcode/references/project-types.yaml +75 -0
  23. package/rcode/skills/SKILLS_INDEX.md +20 -2
  24. package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/SKILL.md +16 -21
  25. package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/rules/backlog-building.md +13 -0
  26. package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/rules/merge-strategy.md +17 -0
  27. package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/rules/orchestrator-rhythm.md +9 -0
  28. package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/rules/wave-design.md +21 -0
  29. package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/templates/heartbeat.sh +0 -0
  30. package/rcode/skills/actions/4-implementation/rcode-scaffold-project/SKILL.md +60 -1
  31. package/rcode/skills/core/rcode-lazy/SKILL.md +149 -0
  32. package/rcode/skills/seo/module.yaml +20 -0
  33. package/rcode/skills/seo/on-page-seo-auditor/SKILL.md +308 -0
  34. package/rcode/skills/seo/on-page-seo-auditor/references/audit-example.md +109 -0
  35. package/rcode/skills/seo/on-page-seo-auditor/references/audit-templates.md +427 -0
  36. package/rcode/skills/seo/on-page-seo-auditor/references/bulk-audit-playbook.md +116 -0
  37. package/rcode/skills/seo/on-page-seo-auditor/references/scoring-rubric.md +525 -0
  38. package/rcode/skills/seo/rank-and-rent-local-seo/SKILL.md +94 -0
  39. package/rcode/skills/seo/rank-and-rent-local-seo/rules/city-matrix-and-pages.md +76 -0
  40. package/rcode/skills/seo/rank-and-rent-local-seo/rules/monetization.md +70 -0
  41. package/rcode/skills/seo/rank-and-rent-local-seo/rules/niche-selection.md +60 -0
  42. package/rcode/skills/seo/rank-and-rent-local-seo/rules/subniche-discovery.md +66 -0
  43. package/rcode/skills/seo/rank-and-rent-local-seo/templates/service-city-page.md +36 -0
  44. package/rcode/skills/seo/rank-and-rent-local-seo/templates/subniche-research-prompt.md +34 -0
  45. package/rcode/skills/seo/seo-audit/SKILL.md +412 -0
  46. package/rcode/skills/seo/seo-audit/evals/evals.json +136 -0
  47. package/rcode/skills/seo/seo-audit/references/ai-writing-detection.md +200 -0
  48. package/rcode/skills/seo/seo-content-factory/SKILL.md +130 -0
  49. package/rcode/skills/seo/seo-content-factory/rules/agents.md +80 -0
  50. package/rcode/skills/seo/seo-content-factory/rules/herdr-wave-mapping.md +80 -0
  51. package/rcode/skills/seo/seo-content-factory/rules/pipeline.md +102 -0
  52. package/rcode/skills/seo/seo-content-factory/rules/programmatic-pages.md +107 -0
  53. package/rcode/skills/seo/seo-content-factory/rules/quality-gates.md +68 -0
  54. package/rcode/skills/seo/seo-content-factory/rules/weekly-cadence.md +61 -0
  55. package/rcode/skills/seo/seo-content-factory/templates/BACKLOG.md +23 -0
  56. package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/01-funnel-A1-A4.md +63 -0
  57. package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/02-fanout-editorial-A5-A6-A8.md +28 -0
  58. package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/03-fanout-programmatic-A7-A6-A8.md +25 -0
  59. package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/04-loop-A9-A10.md +34 -0
  60. package/rcode/skills/seo/seo-content-factory/templates/article.mdx +39 -0
  61. package/rcode/skills/seo/seo-content-factory/templates/cluster.schema.json +52 -0
  62. package/rcode/skills/seo/seo-content-factory/templates/content-brief.md +51 -0
  63. package/rcode/skills/seo/seo-content-factory/templates/jsonld-builders.ts +49 -0
  64. package/rcode/skills/seo/seo-content-factory/templates/keywords.csv +13 -0
  65. package/rcode/skills/seo/seo-content-factory/templates/programmatic-page.tsx +58 -0
  66. package/rcode/skills/seo/seo-content-writer/SKILL.md +263 -0
  67. package/rcode/skills/seo/seo-content-writer/references/content-structure-templates.md +875 -0
  68. package/rcode/skills/seo/seo-content-writer/references/instructions-detail.md +239 -0
  69. package/rcode/skills/seo/seo-content-writer/references/seo-writing-checklist.md +250 -0
  70. package/rcode/skills/seo/seo-content-writer/references/title-formulas.md +339 -0
  71. package/rcode/skills/seo/seo-growth-orchestrator/SKILL.md +79 -0
  72. package/rcode/skills/seo/seo-growth-orchestrator/rules/backlinks.md +29 -0
  73. package/rcode/skills/seo/seo-growth-orchestrator/rules/content-engine.md +27 -0
  74. package/rcode/skills/seo/seo-growth-orchestrator/rules/dos-and-donts.md +40 -0
  75. package/rcode/skills/seo/seo-growth-orchestrator/rules/goals-protocol.md +34 -0
  76. package/rcode/skills/seo/seo-growth-orchestrator/rules/local-seo-stack.md +35 -0
  77. package/rcode/skills/seo/seo-growth-orchestrator/rules/mrr-sprint.md +27 -0
  78. package/rcode/skills/seo/seo-growth-orchestrator/rules/tools.md +19 -0
  79. package/rcode/skills/seo/seo-growth-orchestrator/templates/backlink-research.md +29 -0
  80. package/rcode/skills/seo/seo-growth-orchestrator/templates/goal-protocol.md +35 -0
  81. package/rcode/skills/seo/seo-growth-orchestrator/templates/local-citations.md +24 -0
  82. package/rcode/skills/seo/seo-growth-orchestrator/templates/local-city-pages.md +27 -0
  83. package/rcode/skills/seo/seo-growth-orchestrator/templates/local-gbp-categories.md +23 -0
  84. package/rcode/skills/seo/seo-growth-orchestrator/templates/local-gsc-goldmine.md +27 -0
  85. package/rcode/skills/seo/seo-growth-orchestrator/templates/local-review-mining.md +26 -0
  86. package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-30day-plan.md +19 -0
  87. package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-cut.md +13 -0
  88. package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-opportunity-finder.md +17 -0
  89. package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-role-model.md +18 -0
  90. package/rcode/skills/seo/seo-site-builder/SKILL.md +149 -0
  91. package/rcode/skills/seo/seo-site-builder/rules/01-niche-discovery.md +64 -0
  92. package/rcode/skills/seo/seo-site-builder/rules/02-deep-research.md +164 -0
  93. package/rcode/skills/seo/seo-site-builder/rules/03-keyword-strategy.md +82 -0
  94. package/rcode/skills/seo/seo-site-builder/rules/04-content-plan.md +173 -0
  95. package/rcode/skills/seo/seo-site-builder/rules/05-site-build.md +187 -0
  96. package/rcode/skills/seo/seo-site-builder/rules/06-yolo.md +127 -0
  97. package/rcode/skills/seo/seo-site-builder/templates/article-stub.mdx +62 -0
  98. package/rcode/skills/seo/seo-site-builder/templates/image-prompt.md +97 -0
  99. package/rcode/skills/seo/seo-site-builder/templates/keyword-export.md +45 -0
  100. package/rcode/skills/seo/seo-site-builder/templates/niche-scorecard.md +28 -0
  101. package/rcode/skills/seo/technical-seo-checker/SKILL.md +329 -0
  102. package/rcode/skills/seo/technical-seo-checker/references/bulk-audit-playbook.md +118 -0
  103. package/rcode/skills/seo/technical-seo-checker/references/ecommerce-platform-patterns.md +166 -0
  104. package/rcode/skills/seo/technical-seo-checker/references/http-status-codes.md +705 -0
  105. package/rcode/skills/seo/technical-seo-checker/references/llm-crawler-handling.md +257 -0
  106. package/rcode/skills/seo/technical-seo-checker/references/pre-migration-playbook.md +137 -0
  107. package/rcode/skills/seo/technical-seo-checker/references/robots-txt-reference.md +717 -0
  108. package/rcode/skills/seo/technical-seo-checker/references/technical-audit-example.md +169 -0
  109. package/rcode/skills/seo/technical-seo-checker/references/technical-audit-templates.md +436 -0
  110. package/rcode/templates/settings-hooks.json +16 -1
  111. package/rcode/workflows/do.md +17 -0
  112. package/rcode/workflows/enable-hooks.md +3 -2
  113. package/rcode/workflows/execute-sprint.md +22 -0
  114. package/rcode/workflows/execute.md +17 -3
  115. package/rcode/workflows/lens-audit.md +49 -8
  116. package/rcode/workflows/new-milestone.md +21 -9
  117. package/rcode/workflows/new-project-create-roadmap.md +2 -0
  118. package/rcode/workflows/new-project-roadmap.md +2 -0
  119. package/rcode/workflows/new-project.md +3 -0
  120. package/rcode/workflows/plan.md +15 -2
  121. package/server/dashboard.js +6 -2
  122. package/server/lib/api.js +35 -20
  123. package/server/lib/html/client/components/OrchPanel.js +43 -2
  124. package/server/lib/html/client/components/dashboard/InProgress.js +5 -4
  125. package/server/lib/html/client/components/shared.js +14 -0
  126. package/server/lib/html/client/orchestrator.js +13 -0
  127. package/server/lib/html/client/views/KanbanView.js +33 -4
  128. package/server/lib/html/css.js +57 -3
  129. package/server/lib/scanner.js +40 -4
  130. package/server/orchestrator.js +42 -0
@@ -0,0 +1,525 @@
1
+ # On-Page SEO Scoring Rubric
2
+
3
+ Detailed scoring criteria for each of the 8 audit sections. Use this rubric to ensure consistent, objective scoring across audits.
4
+
5
+ ## How to Use This Rubric
6
+
7
+ 1. Score each section independently using the criteria below
8
+ 2. Apply the section weight to calculate the weighted score
9
+ 3. Sum all weighted scores for the overall page score (out of 100)
10
+ 4. Use calibration examples to verify your scoring is consistent
11
+
12
+ ## Section 1: Title Tag (Weight: 15%, Max: 15 points)
13
+
14
+ ### Scoring Criteria
15
+
16
+ | Criterion | Points | Requirement |
17
+ |-----------|--------|-------------|
18
+ | Keyword presence | 3 | Primary keyword appears in title |
19
+ | Keyword position | 2 | Primary keyword in first half of title |
20
+ | Length optimization | 2 | Between 50-60 characters |
21
+ | Uniqueness | 2 | Title is unique across the site |
22
+ | Compelling copy | 2 | Includes benefit, modifier, or hook |
23
+ | Intent match | 2 | Title matches search intent accurately |
24
+ | Brand inclusion | 1 | Brand name present (at end) |
25
+ | No truncation risk | 1 | Displays fully in SERP without cutoff |
26
+
27
+ ### Calibration Examples
28
+
29
+ **Score 15/15 (Excellent)**:
30
+ - Title: "Keyword Research: 7 Proven Methods to Find Low-Competition Keywords | Brand"
31
+ - 58 characters, keyword at front, benefit-driven, unique, brand at end
32
+
33
+ **Score 11/15 (Good)**:
34
+ - Title: "The Complete Guide to Keyword Research for Beginners"
35
+ - 52 characters, keyword present but not at front, no brand, still compelling
36
+
37
+ **Score 7/15 (Needs Work)**:
38
+ - Title: "Keyword Research"
39
+ - Too short (16 chars), no benefit, no brand, not compelling, generic
40
+
41
+ **Score 3/15 (Poor)**:
42
+ - Title: "Blog Post #47 - Untitled"
43
+ - No keyword, no benefit, not descriptive, not unique
44
+
45
+ **Score 0/15 (Missing)**:
46
+ - No title tag present, or title tag is empty
47
+
48
+ ## Section 2: Meta Description (Weight: 5%, Max: 5 points)
49
+
50
+ ### Scoring Criteria
51
+
52
+ | Criterion | Points | Requirement |
53
+ |-----------|--------|-------------|
54
+ | Keyword inclusion | 1 | Primary keyword appears naturally |
55
+ | Length optimization | 1 | Between 150-160 characters |
56
+ | Call-to-action | 1 | Contains explicit or implicit CTA |
57
+ | Unique description | 1 | Not duplicated from other pages |
58
+ | Accurate summary | 1 | Accurately describes page content |
59
+
60
+ ### Calibration Examples
61
+
62
+ **Score 5/5 (Excellent)**:
63
+ - Description: "Learn 7 proven keyword research methods that top SEOs use to find low-competition opportunities. Includes free templates, real examples, and step-by-step walkthroughs. Get started today."
64
+ - 155 chars, keyword present, CTA ("Get started"), accurate, unique
65
+
66
+ **Score 3/5 (Needs Work)**:
67
+ - Description: "This page talks about keyword research and some tips you might find useful for SEO."
68
+ - 83 chars (too short), weak copy, no CTA, vague
69
+
70
+ **Score 0/5 (Missing)**:
71
+ - No meta description set; search engine generates snippet automatically
72
+
73
+ ## Section 3: Header Structure (Weight: 10%, Max: 10 points)
74
+
75
+ ### Scoring Criteria
76
+
77
+ | Criterion | Points | Requirement |
78
+ |-----------|--------|-------------|
79
+ | Single H1 present | 2 | Exactly one H1 on the page |
80
+ | H1 contains keyword | 2 | Primary keyword in H1 text |
81
+ | Logical hierarchy | 2 | No skipped levels (H1→H2→H3, not H1→H3) |
82
+ | H2s cover key subtopics | 2 | H2s address main topic facets |
83
+ | Descriptive headers | 1 | Headers describe section content clearly |
84
+ | Keyword variations in H2s | 1 | Secondary keywords or LSI terms in subheadings |
85
+
86
+ ### Calibration Examples
87
+
88
+ **Score 10/10 (Excellent)**:
89
+ ```
90
+ H1: How to Do Keyword Research: A Step-by-Step Guide
91
+ H2: What Is Keyword Research and Why Does It Matter?
92
+ H2: 7 Keyword Research Methods That Work
93
+ H3: Method 1: Seed Keyword Brainstorming
94
+ H3: Method 2: Competitor Keyword Analysis
95
+ H3: Method 3: Google Autocomplete Mining
96
+ H2: Free Keyword Research Tools Compared
97
+ H2: How to Prioritize Keywords by Difficulty
98
+ H2: Keyword Research FAQ
99
+ ```
100
+ - Single H1 with keyword, logical hierarchy, descriptive H2s with variations
101
+
102
+ **Score 6/10 (Needs Work)**:
103
+ ```
104
+ H1: Keyword Research
105
+ H2: Introduction
106
+ H2: Methods
107
+ H2: Tools
108
+ H2: Conclusion
109
+ ```
110
+ - Single H1 but generic, H2s are vague, no keyword variations
111
+
112
+ **Score 2/10 (Poor)**:
113
+ ```
114
+ H1: Welcome to Our Blog
115
+ H1: Keyword Research Guide
116
+ H3: Some Tips
117
+ H2: More Information
118
+ ```
119
+ - Multiple H1s, skipped levels, generic, no keyword strategy
120
+
121
+ ## Section 4: Content Quality (Weight: 25%, Max: 25 points)
122
+
123
+ ### Scoring Criteria
124
+
125
+ | Criterion | Points | Requirement |
126
+ |-----------|--------|-------------|
127
+ | Sufficient length | 4 | Meets minimum for query type (see benchmarks) |
128
+ | Comprehensive coverage | 4 | Covers all major subtopics that top-ranking pages cover |
129
+ | Unique value | 4 | Original insights, data, or perspective not found elsewhere |
130
+ | Up-to-date information | 3 | Statistics, dates, and references are current |
131
+ | Proper formatting | 3 | Uses lists, tables, bold, images to improve readability |
132
+ | Readability | 3 | Appropriate reading level for target audience |
133
+ | E-E-A-T signals | 4 | Author byline, credentials, first-person experience, cited sources |
134
+
135
+ ### Content Length Benchmarks (for "Sufficient length" criterion)
136
+
137
+ | Query Type | Minimum for 4/4 | Minimum for 3/4 | Minimum for 2/4 | Below 1/4 |
138
+ |-----------|-----------------|-----------------|-----------------|-----------|
139
+ | Informational | 1,500+ words | 1,000-1,499 | 500-999 | <500 |
140
+ | Commercial | 1,200+ words | 800-1,199 | 400-799 | <400 |
141
+ | Transactional | 500+ words | 350-499 | 200-349 | <200 |
142
+ | Local | 400+ words | 250-399 | 150-249 | <150 |
143
+
144
+ ### Calibration Examples
145
+
146
+ **Score 25/25 (Excellent)**:
147
+ - 2,400-word guide on keyword research
148
+ - Covers all subtopics competitors cover plus unique methods
149
+ - Contains original data from author's experiments
150
+ - All statistics from the last 12 months
151
+ - Well-formatted with tables, lists, images, code examples
152
+ - Written at appropriate level for target audience
153
+ - Author byline with SEO credentials, first-person "I tested" language
154
+
155
+ **Score 16/25 (Good)**:
156
+ - 1,600-word guide, covers main subtopics
157
+ - Some unique insights but mostly curated information
158
+ - Most statistics current, a few outdated
159
+ - Good formatting but could use more visual elements
160
+ - Author byline present but limited credentials
161
+
162
+ **Score 8/25 (Needs Work)**:
163
+ - 700-word article on an informational query (too thin)
164
+ - Missing several subtopics competitors cover
165
+ - No original data or insights
166
+ - Several outdated statistics
167
+ - Wall of text with minimal formatting
168
+ - No author byline or E-E-A-T signals
169
+
170
+ ## Section 5: Keyword Optimization (Weight: 15%, Max: 15 points)
171
+
172
+ ### Scoring Criteria
173
+
174
+ | Criterion | Points | Requirement |
175
+ |-----------|--------|-------------|
176
+ | Keyword in title | 2 | Primary keyword in title tag |
177
+ | Keyword in H1 | 2 | Primary keyword in H1 |
178
+ | Keyword in first 100 words | 2 | Primary keyword appears early in content |
179
+ | Keyword density (0.5-2.5%) | 2 | Natural density, not stuffed, not too sparse |
180
+ | Secondary keywords present | 2 | 2-3 secondary/related keywords used |
181
+ | LSI/semantic terms | 2 | Related terms and synonyms present |
182
+ | Keyword in URL | 1 | Primary keyword in URL slug |
183
+ | Keyword in image alt text | 1 | At least one image alt contains keyword naturally |
184
+ | Keyword in meta description | 1 | Primary keyword in meta description |
185
+
186
+ ### Keyword Density Guidelines
187
+
188
+ | Density | Score Impact | Assessment |
189
+ |---------|-------------|-----------|
190
+ | 0.5-1.0% | Full points | Natural, well-integrated |
191
+ | 1.0-2.0% | Full points | Acceptable, slightly keyword-focused |
192
+ | 2.0-2.5% | -1 point | Borderline, review for naturalness |
193
+ | 2.5-3.0% | -2 points | Over-optimized, needs reduction |
194
+ | >3.0% | 0 points for density | Keyword stuffing, immediate fix needed |
195
+ | <0.5% | -1 point | Under-optimized, add more natural usage |
196
+
197
+ ### Calibration Examples
198
+
199
+ **Score 15/15 (Excellent)**:
200
+ - "keyword research" in title (position 1), H1, first sentence, URL slug, 1 image alt
201
+ - Density: 1.2% across 2,000 words (24 occurrences, well-distributed)
202
+ - Secondary keywords: "keyword tool", "search volume", "keyword difficulty" all present
203
+ - LSI terms: "SEO", "search terms", "Google", "organic traffic", "SERP" present
204
+
205
+ **Score 9/15 (Needs Work)**:
206
+ - Keyword in title and H1, but not in first 100 words
207
+ - Density: 0.3% (too sparse for a 2,000-word article)
208
+ - Missing secondary keywords
209
+ - No LSI/semantic terms beyond the primary keyword
210
+
211
+ ## Section 6: Internal/External Links (Weight: 10%, Max: 10 points)
212
+
213
+ ### Scoring Criteria
214
+
215
+ | Criterion | Points | Requirement |
216
+ |-----------|--------|-------------|
217
+ | Internal link count | 2 | 3-5+ contextual internal links (per 1,000 words) |
218
+ | Internal link relevance | 2 | Links point to topically related pages |
219
+ | Descriptive anchor text | 2 | Anchors describe destination, not "click here" |
220
+ | External link quality | 2 | Links to authoritative, relevant external sources |
221
+ | No broken links | 1 | All links return 200 status |
222
+ | Link placement | 1 | Links placed naturally within content flow |
223
+
224
+ ### Internal Link Count Guidelines
225
+
226
+ | Content Length | Minimum Links | Ideal Range | Too Many |
227
+ |---------------|--------------|-------------|---------|
228
+ | <500 words | 2 | 2-4 | >8 |
229
+ | 500-1,000 words | 3 | 3-6 | >12 |
230
+ | 1,000-2,000 words | 4 | 5-10 | >20 |
231
+ | 2,000+ words | 5 | 8-15 | >25 |
232
+
233
+ ### Calibration Examples
234
+
235
+ **Score 10/10 (Excellent)**:
236
+ - 8 internal links in a 2,000-word article
237
+ - All link to relevant related content
238
+ - Anchor text like "learn about keyword difficulty scoring" (descriptive)
239
+ - 3 external links to authoritative sources (Google documentation, industry studies)
240
+ - Zero broken links
241
+
242
+ **Score 5/10 (Needs Work)**:
243
+ - 2 internal links in a 2,000-word article (too few)
244
+ - One link uses "click here" anchor text
245
+ - No external links to sources
246
+ - One broken link found
247
+
248
+ ## Section 7: Image Optimization (Weight: 10%, Max: 10 points)
249
+
250
+ ### Scoring Criteria
251
+
252
+ #### Image alt text (WCAG 1.1.1 primary, SEO secondary)
253
+
254
+ **Primary requirement (WCAG 1.1.1)**: every non-decorative image has alt text that is a **functional description** of the image content. A screen-reader user must get equivalent information.
255
+
256
+ **Secondary (SEO)**: if the image relates to the page's primary keyword and the keyword appears naturally in a functional description, good. Never stuff.
257
+
258
+ **Scoring**:
259
+ - PASS: descriptive alt present on all content images; natural keyword inclusion where relevant
260
+ - PARTIAL: descriptive alt present but some images missing alt; OR all alt present but some are keyword-stuffed
261
+ - FAIL: missing alt on content images, OR alt text is just "image of X" / keyword list / decorative filler
262
+
263
+ Never (regardless of SEO benefit): keyword stuffing, generic "image", missing alt on informational images.
264
+
265
+ Reference: [WCAG 2.2 Success Criterion 1.1.1](https://www.w3.org/WAI/WCAG22/Understanding/non-text-content).
266
+
267
+ | Criterion | Points | Requirement |
268
+ |-----------|--------|-------------|
269
+ | Descriptive file names | 1 | Files named descriptively (keyword-research-tool.webp, not IMG_4532.jpg) |
270
+ | Optimized file sizes | 2 | Images compressed appropriately (<200KB for photos, <50KB for graphics) |
271
+ | Modern formats | 1 | Uses WebP or AVIF where supported |
272
+ | Lazy loading | 1 | Below-fold images use loading="lazy" |
273
+
274
+ ### Image Size Guidelines
275
+
276
+ | Image Type | Target Size | Format | Notes |
277
+ |-----------|------------|--------|-------|
278
+ | Hero/banner | <200KB | WebP | Resize to actual display dimensions |
279
+ | Content photos | <150KB | WebP | Compress at 80% quality |
280
+ | Screenshots | <100KB | WebP/PNG | Use PNG only if text clarity critical |
281
+ | Icons/graphics | <30KB | SVG/WebP | SVG preferred for vector graphics |
282
+ | Thumbnails | <50KB | WebP | Generate at actual thumbnail dimensions |
283
+
284
+ ### Calibration Examples
285
+
286
+ **Score 10/10 (Excellent)**:
287
+ - 5 images, all with descriptive alt text
288
+ - Alt text: "screenshot of Ahrefs keyword research tool showing difficulty score"
289
+ - Files named: keyword-research-tool-ahrefs.webp
290
+ - All images <150KB, WebP format, lazy loading on below-fold images
291
+
292
+ **Score 4/10 (Needs Work)**:
293
+ - 3 images, 1 missing alt text
294
+ - Alt text on others: "image1", "screenshot" (not descriptive)
295
+ - Files named: IMG_3421.jpg, photo.png
296
+ - One image is 1.2MB uncompressed JPEG
297
+
298
+ ## Section 8: Page-Level Technical (Weight: 10%, Max: 10 points)
299
+
300
+ ### Scoring Criteria
301
+
302
+ | Criterion | Points | Requirement |
303
+ |-----------|--------|-------------|
304
+ | Clean URL structure | 2 | Short, descriptive, keyword-containing URL |
305
+ | Correct canonical tag | 2 | Self-referencing canonical or appropriate cross-domain canonical |
306
+ | Mobile-friendly | 2 | Passes mobile-friendly test, responsive layout |
307
+ | Page speed (LCP) | 2 | LCP ≤2.5s on mobile |
308
+ | HTTPS | 1 | Page served over HTTPS with valid certificate |
309
+ | Schema markup | 1 | Appropriate schema type implemented (Article, FAQ, HowTo, etc.) |
310
+
311
+ ### URL Quality Guidelines
312
+
313
+ | Aspect | Good | Bad |
314
+ |--------|------|-----|
315
+ | Length | /blog/keyword-research-guide | /blog/2024/01/15/the-complete-ultimate-guide-to-keyword-research-for-beginners-and-experts |
316
+ | Keywords | /services/seo-audit | /services/page-id-4532 |
317
+ | Characters | lowercase, hyphens | UPPERCASE, underscores, special chars |
318
+ | Parameters | /products/shoes (clean) | /products?id=432&color=red&size=9 |
319
+
320
+ ### Calibration Examples
321
+
322
+ **Score 10/10 (Excellent)**:
323
+ - URL: /blog/keyword-research-guide (clean, keyword-present)
324
+ - Self-referencing canonical tag present
325
+ - Fully responsive, passes mobile-friendly test
326
+ - LCP: 1.8s on mobile
327
+ - HTTPS with valid certificate
328
+ - Article + FAQ schema implemented
329
+
330
+ **Score 5/10 (Needs Work)**:
331
+ - URL: /blog/?p=4532 (not descriptive)
332
+ - No canonical tag
333
+ - Mobile-friendly but some tap targets too small
334
+ - LCP: 3.2s (needs improvement)
335
+ - HTTPS present
336
+ - No schema markup
337
+
338
+ ## Overall Score Calculation
339
+
340
+ ### Formula
341
+
342
+ ```
343
+ Overall Score = Sum of (Section Score / Section Max * Section Weight * 100)
344
+ ```
345
+
346
+ ### Example Calculation
347
+
348
+ | Section | Raw Score | Max | Weight | Weighted Score |
349
+ |---------|-----------|-----|--------|---------------|
350
+ | Title Tag | 12 | 15 | 15% | 12.0 |
351
+ | Meta Description | 4 | 5 | 5% | 4.0 |
352
+ | Header Structure | 8 | 10 | 10% | 8.0 |
353
+ | Content Quality | 20 | 25 | 25% | 20.0 |
354
+ | Keyword Optimization | 11 | 15 | 15% | 11.0 |
355
+ | Internal/External Links | 7 | 10 | 10% | 7.0 |
356
+ | Image Optimization | 6 | 10 | 10% | 6.0 |
357
+ | Page-Level Technical | 8 | 10 | 10% | 8.0 |
358
+ | **Total** | | | **100%** | **76.0/100** |
359
+
360
+ ### Overall Score Interpretation
361
+
362
+ | Score Range | Grade | Assessment |
363
+ |------------|-------|-----------|
364
+ | 90-100 | A+ | Exceptional — minor tweaks only |
365
+ | 80-89 | A | Strong — a few optimization opportunities |
366
+ | 70-79 | B | Good — several areas need attention |
367
+ | 60-69 | C | Average — significant improvements needed |
368
+ | 50-59 | D | Below average — major issues present |
369
+ | <50 | F | Poor — comprehensive overhaul required |
370
+
371
+ ## Calibration Guidance
372
+
373
+ ### Avoiding Common Scoring Errors
374
+
375
+ 1. **Halo effect**: A great title does not mean great content. Score each section independently.
376
+ 2. **Recency bias**: Do not inflate scores for recently published content. Freshness is one factor among many.
377
+ 3. **Tool dependency**: If you cannot verify a metric (e.g., page speed without tool access), note it as "unverified" rather than guessing.
378
+ 4. **Competitor anchoring**: Score against the rubric criteria, not relative to competitors. Competitor comparison is a separate analysis step.
379
+ 5. **Intent mismatch**: A page with perfect technical SEO but wrong intent alignment should still score low on Content Quality.
380
+
381
+ ### When to Adjust Weights
382
+
383
+ The default weights suit most content pages. Consider adjusting for:
384
+
385
+ | Page Type | Increase Weight | Decrease Weight | Reason |
386
+ |-----------|----------------|----------------|--------|
387
+ | E-commerce product | Image Optimization, Technical | Content Quality | Products need visuals and speed more than long-form |
388
+ | Long-form guide | Content Quality, Keywords | Image Optimization | Content depth matters most |
389
+ | Landing page | Technical, Title | Content Quality | Speed and CTR drive conversions |
390
+ | Local service page | Technical, Links | Keywords | NAP consistency and local signals matter more |
391
+
392
+ Always document weight adjustments and the reasoning in the audit report.
393
+
394
+ ---
395
+
396
+ ## Scoring Rubric
397
+
398
+ ### Section Weight Distribution
399
+
400
+ | Audit Section | Weight | Max Score | Rationale |
401
+ |--------------|--------|-----------|-----------|
402
+ | Title Tag | 15% | 15 | Strongest single ranking signal |
403
+ | Meta Description | 5% | 5 | CTR impact, not direct ranking factor |
404
+ | Header Structure | 10% | 10 | Content organization, semantic signals |
405
+ | Content Quality | 25% | 25 | Strongest holistic ranking factor |
406
+ | Keyword Optimization | 15% | 15 | Relevance signals |
407
+ | Internal/External Links | 10% | 10 | Authority flow, context signals |
408
+ | Image Optimization | 10% | 10 | Accessibility + image search opportunity |
409
+ | Page-Level Technical | 10% | 10 | Core Web Vitals, mobile, security |
410
+
411
+ ### Scoring Scale per Factor
412
+
413
+ | Score | Meaning | Action Required |
414
+ |-------|---------|-----------------|
415
+ | 10/10 | Excellent — follows all best practices | None |
416
+ | 7-9/10 | Good — minor improvements possible | Optional optimization |
417
+ | 4-6/10 | Needs work — notable issues | Fix within this week |
418
+ | 1-3/10 | Poor — significant problems | Fix immediately (Critical) |
419
+ | 0/10 | Missing or broken | Fix immediately (Blocking) |
420
+
421
+ ### Scoring Conversion Formula
422
+
423
+ Each section is scored out of 10, then converted to the 100-point overall score using section weights:
424
+
425
+ ```
426
+ Overall Score = Sum of (section_score x section_weight) x 10
427
+ ```
428
+
429
+ Where section weights are: Title 0.15, Meta 0.05, Headers 0.10, Content 0.25, Keywords 0.15, Links 0.10, Images 0.10, Technical 0.10.
430
+
431
+ **Worked example:**
432
+
433
+ | Section | Score /10 | Weight | Weighted |
434
+ |---------|-----------|--------|----------|
435
+ | Title Tag | 8 | 0.15 | 1.20 |
436
+ | Meta Description | 6 | 0.05 | 0.30 |
437
+ | Header Structure | 9 | 0.10 | 0.90 |
438
+ | Content Quality | 7 | 0.25 | 1.75 |
439
+ | Keyword Optimization | 8 | 0.15 | 1.20 |
440
+ | Internal/External Links | 5 | 0.10 | 0.50 |
441
+ | Image Optimization | 6 | 0.10 | 0.60 |
442
+ | Page-Level Technical | 7 | 0.10 | 0.70 |
443
+ | **Total** | | **1.00** | **7.15** |
444
+
445
+ **Overall Score** = 7.15 x 10 = **71 / 100**
446
+
447
+ ## Common Issue Resolution Playbook
448
+
449
+ ### Title Tag Issues
450
+
451
+ | Issue | Impact | Quick Fix Template |
452
+ |-------|--------|-------------------|
453
+ | Missing title | Critical | Add: "[Primary Keyword]: [Benefit] | [Brand]" |
454
+ | Too long (>60 chars) | Medium | Shorten: move brand to end, remove filler words |
455
+ | Too short (<30 chars) | Medium | Expand: add modifier, benefit, or year |
456
+ | Missing keyword | High | Rewrite to include primary keyword in first half |
457
+ | Duplicate title | High | Make each page title unique; add page-specific modifier |
458
+
459
+ ### Meta Description Issues
460
+
461
+ | Issue | Impact | Quick Fix Template |
462
+ |-------|--------|-------------------|
463
+ | Missing description | Medium | Write: "[What this page covers]. [Key benefit]. [CTA]." (150-160 chars) |
464
+ | Too long (>160 chars) | Low | Trim from end; ensure core message fits in 150 chars |
465
+ | Missing keyword | Low | Naturally incorporate primary keyword |
466
+ | No CTA | Low | Add: "Learn more", "Discover", "Find out", "Get started" |
467
+ | Duplicated across pages | Medium | Write unique description for each page |
468
+
469
+ ### Header Issues
470
+
471
+ | Issue | Impact | Quick Fix |
472
+ |-------|--------|-----------|
473
+ | Missing H1 | Critical | Add one H1 per page containing primary keyword |
474
+ | Multiple H1s | High | Keep one H1, convert others to H2 |
475
+ | Skipped heading levels | Medium | Use sequential hierarchy: H1→H2→H3 |
476
+ | Headers not descriptive | Medium | Rewrite to include keyword variations |
477
+ | No H2s (single long block) | Medium | Break content into sections with descriptive H2s every 200-300 words |
478
+
479
+ ### Content Issues
480
+
481
+ | Issue | Impact | Quick Fix |
482
+ |-------|--------|-----------|
483
+ | Thin content (<300 words) | Critical | Expand with subtopics, FAQ, examples |
484
+ | Keyword stuffing (>3%) | High | Reduce usage, use synonyms and related terms |
485
+ | No structured data | Medium | Add relevant schema (FAQ, HowTo, Article) |
486
+ | Missing internal links | Medium | Add 3-5 contextual internal links |
487
+ | No images | Low | Add 2-3 relevant images with alt text |
488
+
489
+ ## Industry Benchmark Data
490
+
491
+ ### Content Length Benchmarks by Query Type
492
+
493
+ | Query Type | Top 10 Average Word Count | Recommended Minimum |
494
+ |-----------|--------------------------|-------------------|
495
+ | Informational (guides) | 2,200 words | 1,500 words |
496
+ | Commercial (reviews) | 1,800 words | 1,200 words |
497
+ | Transactional (product) | 800 words | 500 words |
498
+ | Local (service pages) | 600 words | 400 words |
499
+ | Definition queries | 1,200 words | 800 words |
500
+
501
+ ### Page Speed Benchmarks
502
+
503
+ | Metric | Good | Needs Improvement | Poor |
504
+ |--------|------|-------------------|------|
505
+ | LCP | ≤2.5s | 2.5-4.0s | >4.0s |
506
+ | FID/INP | ≤100ms/200ms | 100-300ms | >300ms |
507
+ | CLS | ≤0.1 | 0.1-0.25 | >0.25 |
508
+ | TTFB | ≤800ms | 800-1800ms | >1800ms |
509
+
510
+ ## Accessibility requirements (WCAG 2.2 AA)
511
+
512
+ > U.S. private commercial websites face ADA Title III web-accessibility exposure that remains circuit-split at the federal level; DOJ's 2024 Title II rule binds state/local government sites, not private commercial sites. WCAG 2.2 AA is the de-facto conformance target cited in most settlements and consent decrees. EU sites face EN 301 549 / European Accessibility Act (2025) obligations. **Not legal advice.** The criteria below reflect audit practice and observable enforcement patterns (UsableNet 2024: 4,605 web accessibility lawsuits), not a federal bright-line rule.
513
+
514
+ The following WCAG 2.2 AA criteria are in-scope for on-page SEO audits:
515
+
516
+ | Criterion | Check |
517
+ |---|---|
518
+ | 1.1.1 Non-text content | All images have functional alt text |
519
+ | 1.3.1 Info and relationships | Headings nested logically (no skipped H1→H3), no empty headings |
520
+ | 1.4.3 Contrast (minimum) | Normal text ≥ 4.5:1 contrast with background; large text ≥ 3:1 |
521
+ | 2.4.7 Focus visible | Keyboard focus indicator visible on all interactive elements |
522
+ | 4.1.2 Name, role, value | ARIA labels on custom controls; form fields have accessible names |
523
+
524
+ Failing these items is both an SEO signal (Google uses a11y signals in rankings) AND a legal risk. Flag as HIGH priority.
525
+
@@ -0,0 +1,94 @@
1
+ ---
2
+ name: rank-and-rent-local-seo
3
+ description: Playbook for building rank-and-rent "digital real estate" — pick a high-CPC local service niche, mine the long-tail subniches bigger companies ignore, mass-produce subniche×city pages, rank them, and monetize the calls/leads. Orchestrates the existing SEO skill set rather than re-doing it. Use when the user wants to start a local lead-gen / rank-and-rent site, find an SEO money niche, or systematically build out a local service vertical.
4
+ ---
5
+
6
+ # Rank-and-Rent Local SEO
7
+
8
+ **Build it once, rank it, rent the leads. A repeatable system for turning a high-value local service niche into recurring income — without paying per click.**
9
+
10
+ ## Description
11
+ This is a *strategy* skill (an SOP), not a new tool. The mechanics — keyword research, competitor analysis, content generation, programmatic pages, schema, internal linking — already live in dedicated skills. This skill encodes the **business playbook** that decides *which niche, which keywords, which pages, and how to get paid*, then chains the existing skills to execute it.
12
+
13
+ The core insight from the field: don't fight every agency for the head term (`water damage restoration <city>`). Go after the **middle and long-tail subniches** the big players ignore (`basement flooding cleanup`, `sewage backup cleanup`, `burst pipe water damage`), multiplied across many cities. High CPC on the head term proves the lead is valuable; the long-tail is where it's actually winnable.
14
+
15
+ ## When to Use
16
+ - The user wants to start a rank-and-rent / "digital real estate" site or local lead-gen business.
17
+ - The user is evaluating an SEO money niche (water damage, mold, roofing, towing, locksmith, personal injury, etc.).
18
+ - The user wants to systematically build out a local service vertical across many cities.
19
+ - The user asks "what subniches should I target" or "how do I monetize local SEO calls".
20
+
21
+ ## Core Concepts
22
+
23
+ ### Digital real estate
24
+ You own/rank a property (the site). You rent it out — sell the calls/leads it generates to a local business, or run it as your own lead-gen asset. No inventory, no per-click cost once ranked.
25
+
26
+ ### CPC is a value signal, not a target
27
+ A `$320` cost-per-click on `water remediation near me` means businesses pay ~$1,000 to acquire one call via ads. That same call has the same value when it comes from *your* ranked page — for free. High CPC = pick this niche. It does **not** mean chase that exact keyword.
28
+
29
+ ### Head vs. long-tail (the funnel)
30
+ - **Head / top-of-funnel** (`water damage restoration <city>`): highest volume, brutal competition, everyone's there. Avoid as the entry point.
31
+ - **Middle / long-tail subniches** (`basement flooding cleanup`, `appliance leak cleanup`, `ceiling water damage from upstairs leak`): lower volume each, high intent, ignored by big players, often with **available exact-match domains**. This is the wedge.
32
+
33
+ ### Subniche × city matrix
34
+ One subniche × 100 cities = 100 pages. Pick winnable subniches, build them out across cities. The math compounds: even 10 calls/month at ~$300/call = ~$3k/month from one built-out niche.
35
+
36
+ ### The 90/91 rule
37
+ Pick one niche and one subniche, then focus for 90 days without chasing shiny objects. Most failures are abandonment, not bad niches.
38
+
39
+ ## Workflow
40
+
41
+ ### Phase 1 — Niche selection (is the money here?)
42
+ 1. List candidate local-service niches with **emergency / high-ticket** demand.
43
+ 2. Use `keyword-research` + Google Keyword Planner to pull CPC and volume for the head terms.
44
+ 3. Keep niches where head-term CPC is high (lead value high) — see `rules/niche-selection.md`.
45
+
46
+ ### Phase 2 — Subniche discovery (where is it winnable?)
47
+ 1. Scoop the full keyword universe for the seed niche (Keyword Planner → 800+ ideas; download).
48
+ 2. Mine competitor **service-page menus**, People Also Ask, People Also Search, Reddit/forum threads with `competitor-analysis` + `serp-analysis`.
49
+ 3. Run the AI subniche prompt (`templates/subniche-research-prompt.md`) and reconcile with `content-gap-analysis` to find subniches **ignored by the big players**.
50
+ 4. Output: a ranked list of 5–10 target subniches. See `rules/subniche-discovery.md`.
51
+
52
+ ### Phase 3 — Build the matrix (mass pages)
53
+ 1. Choose the target cities (start with the cities a buyer already wants calls in).
54
+ 2. Generate subniche × city pages with `seo-site-builder` + `seo-content-factory`.
55
+ 3. Localize with `geo-content-optimizer` / `entity-optimizer`, add `schema-markup-generator` (LocalBusiness/Service), silo with `internal-linking-optimizer`.
56
+ 4. QA every page with `on-page-seo-auditor` + `technical-seo-checker`. See `rules/city-matrix-and-pages.md`.
57
+
58
+ ### Phase 4 — Rank & monetize
59
+ 1. Secure exact-match domains where cheap/available; consider GBP where the niche allows (see caveats).
60
+ 2. Track with `rank-tracker`; build authority with `backlink-analyzer` / `domain-authority-auditor`.
61
+ 3. Convert calls → income: rent the site, sell leads per-call, or flat monthly. See `rules/monetization.md`.
62
+
63
+ ## Quick Reference
64
+
65
+ ### Skills this playbook orchestrates
66
+ | Skill | Used for |
67
+ |-------|----------|
68
+ | `keyword-research` | Seed keywords, CPC/volume, Keyword Planner scoop |
69
+ | `competitor-analysis`, `serp-analysis` | Competitor service pages, SERP/PAA mining |
70
+ | `content-gap-analysis` | Finding subniches the big players ignore |
71
+ | `seo-site-builder`, `seo-content-factory` | Programmatic subniche×city pages |
72
+ | `geo-content-optimizer`, `entity-optimizer` | Local relevance, NAP, "near me" intent |
73
+ | `schema-markup-generator` | LocalBusiness / Service structured data |
74
+ | `internal-linking-optimizer` | City/subniche silo structure |
75
+ | `on-page-seo-auditor`, `technical-seo-checker` | Per-page QA |
76
+ | `rank-tracker`, `backlink-analyzer`, `domain-authority-auditor` | Ranking + off-page |
77
+
78
+ ## File References
79
+ - **Niche selection**: `rules/niche-selection.md`
80
+ - **Subniche discovery**: `rules/subniche-discovery.md`
81
+ - **City matrix & pages**: `rules/city-matrix-and-pages.md`
82
+ - **Monetization**: `rules/monetization.md`
83
+
84
+ ## Integration
85
+ - **Related Skills**: keyword-research, competitor-analysis, content-gap-analysis, seo-site-builder, seo-content-factory, geo-content-optimizer, schema-markup-generator, internal-linking-optimizer, rank-tracker, seo-growth-orchestrator
86
+ - **Templates**: `templates/subniche-research-prompt.md`, `templates/service-city-page.md`
87
+
88
+ ## Validation Checklist
89
+ - [ ] Niche chosen on lead-value evidence (CPC/volume), not gut feel
90
+ - [ ] 5–10 long-tail subniches identified that big competitors ignore
91
+ - [ ] Target city list defined (ideally backed by a real buyer)
92
+ - [ ] Pages built via existing skills, not hand-rolled, and QA'd
93
+ - [ ] A concrete monetization path chosen before scaling pages
94
+ - [ ] Focus committed for 90 days on one niche/subniche (90/91 rule)