@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.
- package/AGENTS.md +1 -1
- package/CONTRIBUTING.md +2 -1
- package/README.md +45 -10
- package/cli/doctor.js +21 -3
- package/cli/index.js +5 -1
- package/cli/install.js +16 -2
- package/cli/postinstall.js +1 -1
- package/cli/uninstall.js +48 -6
- package/dist/rcode.js +178 -174
- package/package.json +12 -22
- package/rcode/agents/rcode-codebase-mapper.md +12 -0
- package/rcode/agents/rcode-phase-researcher.md +13 -0
- package/rcode/agents/rcode-project-researcher.md +32 -0
- package/rcode/agents/rcode-roadmapper.md +15 -0
- package/rcode/agents/rules/planner/common-patterns.md +40 -0
- package/rcode/bin/lib/roadmap.cjs +184 -11
- package/rcode/bin/rcode-hooks.cjs +303 -14
- package/rcode/bin/rcode-tools.cjs +669 -55
- package/rcode/commands/lens-audit.md +8 -6
- package/rcode/data/intent-table.json +87 -0
- package/rcode/modules/seo.yaml +22 -0
- package/rcode/references/project-types.yaml +75 -0
- package/rcode/skills/SKILLS_INDEX.md +20 -2
- package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/SKILL.md +16 -21
- package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/rules/backlog-building.md +13 -0
- package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/rules/merge-strategy.md +17 -0
- package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/rules/orchestrator-rhythm.md +9 -0
- package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/rules/wave-design.md +21 -0
- package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/templates/heartbeat.sh +0 -0
- package/rcode/skills/actions/4-implementation/rcode-scaffold-project/SKILL.md +60 -1
- package/rcode/skills/core/rcode-lazy/SKILL.md +149 -0
- package/rcode/skills/seo/module.yaml +20 -0
- package/rcode/skills/seo/on-page-seo-auditor/SKILL.md +308 -0
- package/rcode/skills/seo/on-page-seo-auditor/references/audit-example.md +109 -0
- package/rcode/skills/seo/on-page-seo-auditor/references/audit-templates.md +427 -0
- package/rcode/skills/seo/on-page-seo-auditor/references/bulk-audit-playbook.md +116 -0
- package/rcode/skills/seo/on-page-seo-auditor/references/scoring-rubric.md +525 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/SKILL.md +94 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/rules/city-matrix-and-pages.md +76 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/rules/monetization.md +70 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/rules/niche-selection.md +60 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/rules/subniche-discovery.md +66 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/templates/service-city-page.md +36 -0
- package/rcode/skills/seo/rank-and-rent-local-seo/templates/subniche-research-prompt.md +34 -0
- package/rcode/skills/seo/seo-audit/SKILL.md +412 -0
- package/rcode/skills/seo/seo-audit/evals/evals.json +136 -0
- package/rcode/skills/seo/seo-audit/references/ai-writing-detection.md +200 -0
- package/rcode/skills/seo/seo-content-factory/SKILL.md +130 -0
- package/rcode/skills/seo/seo-content-factory/rules/agents.md +80 -0
- package/rcode/skills/seo/seo-content-factory/rules/herdr-wave-mapping.md +80 -0
- package/rcode/skills/seo/seo-content-factory/rules/pipeline.md +102 -0
- package/rcode/skills/seo/seo-content-factory/rules/programmatic-pages.md +107 -0
- package/rcode/skills/seo/seo-content-factory/rules/quality-gates.md +68 -0
- package/rcode/skills/seo/seo-content-factory/rules/weekly-cadence.md +61 -0
- package/rcode/skills/seo/seo-content-factory/templates/BACKLOG.md +23 -0
- package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/01-funnel-A1-A4.md +63 -0
- package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/02-fanout-editorial-A5-A6-A8.md +28 -0
- package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/03-fanout-programmatic-A7-A6-A8.md +25 -0
- package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/04-loop-A9-A10.md +34 -0
- package/rcode/skills/seo/seo-content-factory/templates/article.mdx +39 -0
- package/rcode/skills/seo/seo-content-factory/templates/cluster.schema.json +52 -0
- package/rcode/skills/seo/seo-content-factory/templates/content-brief.md +51 -0
- package/rcode/skills/seo/seo-content-factory/templates/jsonld-builders.ts +49 -0
- package/rcode/skills/seo/seo-content-factory/templates/keywords.csv +13 -0
- package/rcode/skills/seo/seo-content-factory/templates/programmatic-page.tsx +58 -0
- package/rcode/skills/seo/seo-content-writer/SKILL.md +263 -0
- package/rcode/skills/seo/seo-content-writer/references/content-structure-templates.md +875 -0
- package/rcode/skills/seo/seo-content-writer/references/instructions-detail.md +239 -0
- package/rcode/skills/seo/seo-content-writer/references/seo-writing-checklist.md +250 -0
- package/rcode/skills/seo/seo-content-writer/references/title-formulas.md +339 -0
- package/rcode/skills/seo/seo-growth-orchestrator/SKILL.md +79 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/backlinks.md +29 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/content-engine.md +27 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/dos-and-donts.md +40 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/goals-protocol.md +34 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/local-seo-stack.md +35 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/mrr-sprint.md +27 -0
- package/rcode/skills/seo/seo-growth-orchestrator/rules/tools.md +19 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/backlink-research.md +29 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/goal-protocol.md +35 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/local-citations.md +24 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/local-city-pages.md +27 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/local-gbp-categories.md +23 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/local-gsc-goldmine.md +27 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/local-review-mining.md +26 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-30day-plan.md +19 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-cut.md +13 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-opportunity-finder.md +17 -0
- package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-role-model.md +18 -0
- package/rcode/skills/seo/seo-site-builder/SKILL.md +149 -0
- package/rcode/skills/seo/seo-site-builder/rules/01-niche-discovery.md +64 -0
- package/rcode/skills/seo/seo-site-builder/rules/02-deep-research.md +164 -0
- package/rcode/skills/seo/seo-site-builder/rules/03-keyword-strategy.md +82 -0
- package/rcode/skills/seo/seo-site-builder/rules/04-content-plan.md +173 -0
- package/rcode/skills/seo/seo-site-builder/rules/05-site-build.md +187 -0
- package/rcode/skills/seo/seo-site-builder/rules/06-yolo.md +127 -0
- package/rcode/skills/seo/seo-site-builder/templates/article-stub.mdx +62 -0
- package/rcode/skills/seo/seo-site-builder/templates/image-prompt.md +97 -0
- package/rcode/skills/seo/seo-site-builder/templates/keyword-export.md +45 -0
- package/rcode/skills/seo/seo-site-builder/templates/niche-scorecard.md +28 -0
- package/rcode/skills/seo/technical-seo-checker/SKILL.md +329 -0
- package/rcode/skills/seo/technical-seo-checker/references/bulk-audit-playbook.md +118 -0
- package/rcode/skills/seo/technical-seo-checker/references/ecommerce-platform-patterns.md +166 -0
- package/rcode/skills/seo/technical-seo-checker/references/http-status-codes.md +705 -0
- package/rcode/skills/seo/technical-seo-checker/references/llm-crawler-handling.md +257 -0
- package/rcode/skills/seo/technical-seo-checker/references/pre-migration-playbook.md +137 -0
- package/rcode/skills/seo/technical-seo-checker/references/robots-txt-reference.md +717 -0
- package/rcode/skills/seo/technical-seo-checker/references/technical-audit-example.md +169 -0
- package/rcode/skills/seo/technical-seo-checker/references/technical-audit-templates.md +436 -0
- package/rcode/templates/settings-hooks.json +16 -1
- package/rcode/workflows/do.md +17 -0
- package/rcode/workflows/enable-hooks.md +3 -2
- package/rcode/workflows/execute-sprint.md +22 -0
- package/rcode/workflows/execute.md +17 -3
- package/rcode/workflows/lens-audit.md +49 -8
- package/rcode/workflows/new-milestone.md +21 -9
- package/rcode/workflows/new-project-create-roadmap.md +2 -0
- package/rcode/workflows/new-project-roadmap.md +2 -0
- package/rcode/workflows/new-project.md +3 -0
- package/rcode/workflows/plan.md +15 -2
- package/server/dashboard.js +6 -2
- package/server/lib/api.js +35 -20
- package/server/lib/html/client/components/OrchPanel.js +43 -2
- package/server/lib/html/client/components/dashboard/InProgress.js +5 -4
- package/server/lib/html/client/components/shared.js +14 -0
- package/server/lib/html/client/orchestrator.js +13 -0
- package/server/lib/html/client/views/KanbanView.js +33 -4
- package/server/lib/html/css.js +57 -3
- package/server/lib/scanner.js +40 -4
- 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)
|