@growthub/cli 0.3.52 → 0.3.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/worker-kits/growthub-geo-seo-v1/.env.example +12 -0
- package/assets/worker-kits/growthub-geo-seo-v1/QUICKSTART.md +138 -0
- package/assets/worker-kits/growthub-geo-seo-v1/brands/NEW-CLIENT.md +104 -0
- package/assets/worker-kits/growthub-geo-seo-v1/brands/_template/brand-kit.md +116 -0
- package/assets/worker-kits/growthub-geo-seo-v1/brands/growthub/brand-kit.md +117 -0
- package/assets/worker-kits/growthub-geo-seo-v1/bundles/growthub-geo-seo-v1.json +54 -0
- package/assets/worker-kits/growthub-geo-seo-v1/docs/geo-seo-fork-integration.md +244 -0
- package/assets/worker-kits/growthub-geo-seo-v1/docs/pdf-report-layer.md +139 -0
- package/assets/worker-kits/growthub-geo-seo-v1/docs/scoring-methodology.md +230 -0
- package/assets/worker-kits/growthub-geo-seo-v1/docs/subagent-dispatch.md +273 -0
- package/assets/worker-kits/growthub-geo-seo-v1/examples/citability-sample.md +155 -0
- package/assets/worker-kits/growthub-geo-seo-v1/examples/geo-audit-sample.md +126 -0
- package/assets/worker-kits/growthub-geo-seo-v1/examples/pdf-report-sample.md +207 -0
- package/assets/worker-kits/growthub-geo-seo-v1/examples/prospect-proposal-sample.md +184 -0
- package/assets/worker-kits/growthub-geo-seo-v1/growthub-meta/README.md +124 -0
- package/assets/worker-kits/growthub-geo-seo-v1/growthub-meta/kit-standard.md +116 -0
- package/assets/worker-kits/growthub-geo-seo-v1/kit.json +102 -0
- package/assets/worker-kits/growthub-geo-seo-v1/output/README.md +114 -0
- package/assets/worker-kits/growthub-geo-seo-v1/output-standards.md +143 -0
- package/assets/worker-kits/growthub-geo-seo-v1/runtime-assumptions.md +175 -0
- package/assets/worker-kits/growthub-geo-seo-v1/setup/check-deps.sh +80 -0
- package/assets/worker-kits/growthub-geo-seo-v1/setup/clone-fork.sh +56 -0
- package/assets/worker-kits/growthub-geo-seo-v1/setup/verify-env.mjs +152 -0
- package/assets/worker-kits/growthub-geo-seo-v1/skills.md +359 -0
- package/assets/worker-kits/growthub-geo-seo-v1/templates/brand-visibility-report.md +101 -0
- package/assets/worker-kits/growthub-geo-seo-v1/templates/citability-analysis.md +131 -0
- package/assets/worker-kits/growthub-geo-seo-v1/templates/client-proposal.md +172 -0
- package/assets/worker-kits/growthub-geo-seo-v1/templates/content-analysis.md +136 -0
- package/assets/worker-kits/growthub-geo-seo-v1/templates/crawler-access-report.md +115 -0
- package/assets/worker-kits/growthub-geo-seo-v1/templates/geo-audit-brief.md +114 -0
- package/assets/worker-kits/growthub-geo-seo-v1/templates/geo-score-summary.md +113 -0
- package/assets/worker-kits/growthub-geo-seo-v1/templates/llmstxt-plan.md +173 -0
- package/assets/worker-kits/growthub-geo-seo-v1/templates/remediation-roadmap.md +150 -0
- package/assets/worker-kits/growthub-geo-seo-v1/templates/schema-validation.md +177 -0
- package/assets/worker-kits/growthub-geo-seo-v1/templates/technical-foundations.md +108 -0
- package/assets/worker-kits/growthub-geo-seo-v1/validation-checklist.md +139 -0
- package/assets/worker-kits/growthub-geo-seo-v1/workers/geo-seo-operator/CLAUDE.md +320 -0
- package/package.json +1 -1
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# Subagent Dispatch — 5-Parallel Orchestration
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Phase 2 of the GEO audit runs 5 specialized subagents in parallel. Each subagent receives the Phase 1 fetch data as input and returns a component score (0–100) plus a findings list. The operator synthesizes all 5 results into the composite GEO Score.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## When Phase 2 Triggers
|
|
12
|
+
|
|
13
|
+
Phase 2 begins after Phase 1 fetch completes successfully.
|
|
14
|
+
|
|
15
|
+
**Phase 1 required outputs (all must be present before dispatching):**
|
|
16
|
+
|
|
17
|
+
- robots.txt contents (or confirmed 404)
|
|
18
|
+
- llms.txt status (present/missing/malformed)
|
|
19
|
+
- Rendered page HTML
|
|
20
|
+
- HTTP response headers
|
|
21
|
+
- Page word count and heading structure
|
|
22
|
+
- JSON-LD structured data (or confirmed absent)
|
|
23
|
+
|
|
24
|
+
If Phase 1 fails to fetch the target URL entirely (connection refused, server error), stop and report the error. Do not dispatch Phase 2 with no data.
|
|
25
|
+
|
|
26
|
+
If Phase 1 produces partial data (e.g., llms.txt returns 404), dispatch Phase 2 anyway and note the missing data in the relevant subagent's output.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Subagent Definitions
|
|
31
|
+
|
|
32
|
+
### 1. geo-ai-visibility
|
|
33
|
+
|
|
34
|
+
**File:** `agents/geo-ai-visibility.md` (in fork)
|
|
35
|
+
**Scope:** AI crawler access and citation format quality
|
|
36
|
+
**GEO Score weight:** 25%
|
|
37
|
+
|
|
38
|
+
**Inputs from Phase 1:**
|
|
39
|
+
- robots.txt full text
|
|
40
|
+
- llms.txt full text (or `null` if missing)
|
|
41
|
+
- llms-full.txt status
|
|
42
|
+
- X-Robots-Tag header value
|
|
43
|
+
- Page canonical URL
|
|
44
|
+
|
|
45
|
+
**What it evaluates:**
|
|
46
|
+
|
|
47
|
+
| Signal | Method | Score Contribution |
|
|
48
|
+
|---|---|---|
|
|
49
|
+
| GPTBot access | Parse `User-agent: GPTBot` in robots.txt | High |
|
|
50
|
+
| ClaudeBot access | Parse `User-agent: ClaudeBot` | High |
|
|
51
|
+
| PerplexityBot access | Parse `User-agent: PerplexityBot` | High |
|
|
52
|
+
| Google-Extended access | Parse `User-agent: Google-Extended` | High |
|
|
53
|
+
| Bingbot access | Parse `User-agent: Bingbot` | Medium |
|
|
54
|
+
| Applebot-Extended access | Parse `User-agent: Applebot-Extended` | Medium |
|
|
55
|
+
| Anthropic-AI access | Parse `User-agent: anthropic-ai` | Medium |
|
|
56
|
+
| cohere-ai access | Parse `User-agent: cohere-ai` | Medium |
|
|
57
|
+
| Meta-ExternalFetcher access | Parse `User-agent: meta-externalagent` | Low |
|
|
58
|
+
| YouBot access | Parse `User-agent: YouBot` | Low |
|
|
59
|
+
| DuckAssistBot access | Parse `User-agent: DuckAssistBot` | Low |
|
|
60
|
+
| Scrapy access | Parse `User-agent: Scrapy` | Low |
|
|
61
|
+
| CCBot access | Parse `User-agent: CCBot` | Low |
|
|
62
|
+
| ia_archiver access | Parse `User-agent: ia_archiver` | Low |
|
|
63
|
+
| llms.txt present | File exists and returns 200 | High |
|
|
64
|
+
| llms.txt valid format | No parsing errors | Medium |
|
|
65
|
+
| llms-full.txt present | File exists | Medium |
|
|
66
|
+
| Citation format quality | Clean canonical, no JS-only content walls | High |
|
|
67
|
+
| X-Robots-Tag noai | Penalize heavily if present | Critical |
|
|
68
|
+
|
|
69
|
+
**Output format:**
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"subagent": "geo-ai-visibility",
|
|
73
|
+
"score": 0-100,
|
|
74
|
+
"crawler_results": { "GPTBot": "allowed|blocked|partial", ... },
|
|
75
|
+
"llms_txt_present": true|false,
|
|
76
|
+
"llms_full_txt_present": true|false,
|
|
77
|
+
"top_findings": ["finding 1", "finding 2", "finding 3"]
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
### 2. geo-content
|
|
84
|
+
|
|
85
|
+
**File:** `agents/geo-content.md` (in fork)
|
|
86
|
+
**Scope:** E-E-A-T signals, answer block quality, content self-containment
|
|
87
|
+
**GEO Score weight:** 20%
|
|
88
|
+
|
|
89
|
+
**Inputs from Phase 1:**
|
|
90
|
+
- Rendered page HTML (full text)
|
|
91
|
+
- Page word count
|
|
92
|
+
- Heading hierarchy (H1, H2, H3 counts)
|
|
93
|
+
- Any author markup found
|
|
94
|
+
|
|
95
|
+
**What it evaluates:**
|
|
96
|
+
- Experience signals (case studies, original data, first-person examples)
|
|
97
|
+
- Expertise signals (author bylines, credentials, domain terminology depth)
|
|
98
|
+
- Authoritativeness signals (external citations, authority domain references)
|
|
99
|
+
- Trustworthiness signals (HTTPS confirmed in Phase 1, contact info, privacy policy presence)
|
|
100
|
+
- Answer block quality (5-metric citability algorithm — see `docs/scoring-methodology.md`)
|
|
101
|
+
|
|
102
|
+
**Output format:**
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"subagent": "geo-content",
|
|
106
|
+
"score": 0-100,
|
|
107
|
+
"eeat_scores": { "experience": 0-10, "expertise": 0-10, "authoritativeness": 0-10, "trustworthiness": 0-10 },
|
|
108
|
+
"citability_score": 0-100,
|
|
109
|
+
"top_findings": ["finding 1", "finding 2", "finding 3"]
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
### 3. geo-platform-analysis
|
|
116
|
+
|
|
117
|
+
**File:** `agents/geo-platform-analysis.md` (in fork)
|
|
118
|
+
**Scope:** Readiness for 4 major AI search platforms
|
|
119
|
+
**GEO Score weight:** 10%
|
|
120
|
+
|
|
121
|
+
**Inputs from Phase 1:**
|
|
122
|
+
- Page HTML structure
|
|
123
|
+
- Schema markup found
|
|
124
|
+
- llms.txt status (from geo-ai-visibility)
|
|
125
|
+
- Content signals (from geo-content)
|
|
126
|
+
|
|
127
|
+
**What it evaluates:**
|
|
128
|
+
|
|
129
|
+
| Platform | Key Signals Checked |
|
|
130
|
+
|---|---|
|
|
131
|
+
| ChatGPT (Browse mode) | Clean URL, no crawler block, answer-block format, Bing indexability |
|
|
132
|
+
| Perplexity AI | Direct URL crawlability, self-contained paragraphs, citation format |
|
|
133
|
+
| Google AI Overviews | FAQPage schema, E-E-A-T signals, featured snippet optimization, structured data |
|
|
134
|
+
| Gemini | Google entity graph signals, Knowledge Panel readiness, broad schema coverage |
|
|
135
|
+
|
|
136
|
+
**Output format:**
|
|
137
|
+
```json
|
|
138
|
+
{
|
|
139
|
+
"subagent": "geo-platform-analysis",
|
|
140
|
+
"score": 0-100,
|
|
141
|
+
"platform_scores": {
|
|
142
|
+
"chatgpt": 0-100,
|
|
143
|
+
"perplexity": 0-100,
|
|
144
|
+
"google_ai_overviews": 0-100,
|
|
145
|
+
"gemini": 0-100
|
|
146
|
+
},
|
|
147
|
+
"top_findings": ["finding 1", "finding 2", "finding 3"]
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
### 4. geo-schema
|
|
154
|
+
|
|
155
|
+
**File:** `agents/geo-schema.md` (in fork)
|
|
156
|
+
**Scope:** Structured data coverage and validation
|
|
157
|
+
**GEO Score weight:** 10%
|
|
158
|
+
|
|
159
|
+
**Inputs from Phase 1:**
|
|
160
|
+
- All JSON-LD blocks from page source
|
|
161
|
+
- Microdata and RDFa markup (if present)
|
|
162
|
+
- Page type determination
|
|
163
|
+
|
|
164
|
+
**What it evaluates:**
|
|
165
|
+
- Which schema types are present
|
|
166
|
+
- Required property completeness for each type
|
|
167
|
+
- Validation errors (missing required fields, incorrect value types)
|
|
168
|
+
- Missing recommended schema types for the detected page type
|
|
169
|
+
- Schema richness score (types × completeness)
|
|
170
|
+
|
|
171
|
+
**Output format:**
|
|
172
|
+
```json
|
|
173
|
+
{
|
|
174
|
+
"subagent": "geo-schema",
|
|
175
|
+
"score": 0-100,
|
|
176
|
+
"types_found": ["Organization", "WebSite"],
|
|
177
|
+
"types_missing": ["FAQPage", "Article", "BreadcrumbList"],
|
|
178
|
+
"validation_errors": [
|
|
179
|
+
{ "type": "Organization", "property": "contactPoint", "error": "missing required property" }
|
|
180
|
+
],
|
|
181
|
+
"top_findings": ["finding 1", "finding 2", "finding 3"]
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
### 5. geo-technical
|
|
188
|
+
|
|
189
|
+
**File:** `agents/geo-technical.md` (in fork)
|
|
190
|
+
**Scope:** Technical SEO and server health
|
|
191
|
+
**GEO Score weight:** 15%
|
|
192
|
+
|
|
193
|
+
**Inputs from Phase 1:**
|
|
194
|
+
- Full HTTP response headers
|
|
195
|
+
- HTTPS status
|
|
196
|
+
- robots.txt validity
|
|
197
|
+
- sitemap.xml accessibility
|
|
198
|
+
- Page HTML (for Core Web Vitals structural signals)
|
|
199
|
+
|
|
200
|
+
**What it evaluates:**
|
|
201
|
+
|
|
202
|
+
| Signal | Check Method | Weight |
|
|
203
|
+
|---|---|---|
|
|
204
|
+
| HTTPS enforced | HTTP→HTTPS redirect + HSTS header | High |
|
|
205
|
+
| HSTS present | `Strict-Transport-Security` header | Medium |
|
|
206
|
+
| Mobile viewport | `<meta name="viewport">` present | Medium |
|
|
207
|
+
| robots.txt valid syntax | Parser runs without errors | High |
|
|
208
|
+
| Sitemap in robots.txt | `Sitemap:` directive present | Medium |
|
|
209
|
+
| sitemap.xml accessible | HTTP 200 response | Medium |
|
|
210
|
+
| llms.txt accessible | HTTP 200 response | High |
|
|
211
|
+
| Canonical tag present | `<link rel="canonical">` in source | Medium |
|
|
212
|
+
| Render-blocking scripts | `<script>` in `<head>` without defer/async | Medium |
|
|
213
|
+
| Images have dimensions | `width` and `height` attributes | Low |
|
|
214
|
+
| Content-Encoding | gzip or brotli present | Low |
|
|
215
|
+
| Cache-Control | public caching enabled | Low |
|
|
216
|
+
|
|
217
|
+
**Output format:**
|
|
218
|
+
```json
|
|
219
|
+
{
|
|
220
|
+
"subagent": "geo-technical",
|
|
221
|
+
"score": 0-100,
|
|
222
|
+
"https_enforced": true|false,
|
|
223
|
+
"hsts_present": true|false,
|
|
224
|
+
"mobile_ready": true|false,
|
|
225
|
+
"robots_valid": true|false,
|
|
226
|
+
"sitemap_accessible": true|false,
|
|
227
|
+
"critical_issues": ["issue 1", "issue 2"],
|
|
228
|
+
"top_findings": ["finding 1", "finding 2", "finding 3"]
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Collecting Results
|
|
235
|
+
|
|
236
|
+
After all 5 subagents return, the operator:
|
|
237
|
+
|
|
238
|
+
1. Validates that all 5 responses are present
|
|
239
|
+
2. Extracts the `score` from each response
|
|
240
|
+
3. Applies the GEO Score formula (see `docs/scoring-methodology.md`)
|
|
241
|
+
4. Collects all `top_findings` arrays into a unified findings list
|
|
242
|
+
5. Ranks findings by impact for the Remediation Roadmap
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Error Handling
|
|
247
|
+
|
|
248
|
+
If a subagent fails or returns incomplete data:
|
|
249
|
+
|
|
250
|
+
| Scenario | Action |
|
|
251
|
+
|---|---|
|
|
252
|
+
| Subagent returns no score | Use 50 as neutral default. Flag component as `data-gap` in GeoScoreSummary. |
|
|
253
|
+
| robots.txt fetch fails (404/500) | Mark all crawler statuses as "unknown (robots.txt inaccessible)". Do not assume blocked or allowed. |
|
|
254
|
+
| llms.txt returns 500 error | Treat as "missing" rather than "blocked". Note the error in CrawlerAccessReport. |
|
|
255
|
+
| Page fetch fails entirely | Stop Phase 2. Report to user. Do not produce scores. |
|
|
256
|
+
| One subagent times out | Log the timeout. Use 50 as default for that component. Note in output. |
|
|
257
|
+
|
|
258
|
+
Never invent scores. A `data-gap` flag is more useful than a fabricated number.
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## Brand Authority (Separate Pass)
|
|
263
|
+
|
|
264
|
+
Brand Authority (20% weight) is not a Phase 2 parallel subagent — it is a separate `/geo brands` command pass that runs `scripts/brand_scanner.py` against the 8 target platforms.
|
|
265
|
+
|
|
266
|
+
Run it after Phase 2 completes:
|
|
267
|
+
```bash
|
|
268
|
+
python scripts/brand_scanner.py --brand "Client Name" --domain example.com
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
Or trigger it via: `/geo brands`
|
|
272
|
+
|
|
273
|
+
The Brand Authority score is then incorporated into the final GEO Score calculation.
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# Citability Analysis — Sample (GrowthHub.com)
|
|
2
|
+
|
|
3
|
+
> Example: `examples/citability-sample.md`
|
|
4
|
+
> This is a filled sample based on a fictitious citability analysis of thegrowthub.com.
|
|
5
|
+
> Use this as a reference for what a completed CitabilityAnalysis looks like in production.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## URL Audited
|
|
10
|
+
|
|
11
|
+
| Field | Value |
|
|
12
|
+
|---|---|
|
|
13
|
+
| Target URL | https://thegrowthub.com |
|
|
14
|
+
| Client | Growthub |
|
|
15
|
+
| Analysis Date | 2026-04-14 |
|
|
16
|
+
| Execution Mode | local-fork |
|
|
17
|
+
| Script Used | scripts/citability_scorer.py |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Citability Score
|
|
22
|
+
|
|
23
|
+
| Metric | Value |
|
|
24
|
+
|---|---|
|
|
25
|
+
| Raw Score | **71 / 100** |
|
|
26
|
+
| Letter Grade | **B** |
|
|
27
|
+
| Percentile Estimate | Top 33% of audited pages |
|
|
28
|
+
| Score Date | 2026-04-14 |
|
|
29
|
+
| Previous Score | N/A (first audit) |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Component Breakdown
|
|
34
|
+
|
|
35
|
+
| Metric | Raw Score (0–100) | Weight | Weighted Score | Status |
|
|
36
|
+
|---|---|---|---|---|
|
|
37
|
+
| Answer Block Quality | 82 | 30% | 24.6 | Strong |
|
|
38
|
+
| Self-Containment | 74 | 25% | 18.5 | Adequate |
|
|
39
|
+
| Structural Readability | 79 | 20% | 15.8 | Strong |
|
|
40
|
+
| Statistical Density | 47 | 15% | 7.05 | Weak |
|
|
41
|
+
| Uniqueness Signals | 52 | 10% | 5.2 | Adequate |
|
|
42
|
+
| **TOTAL** | | **100%** | **71.15** | **B** |
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Answer Block Quality Detail
|
|
47
|
+
|
|
48
|
+
**Score: 82 / 100**
|
|
49
|
+
|
|
50
|
+
Paragraphs evaluated: 24
|
|
51
|
+
|
|
52
|
+
| Paragraph # | Subject Clear | Evidence Present | No Unresolved Pronouns | Score |
|
|
53
|
+
|---|---|---|---|---|
|
|
54
|
+
| 1 (Hero intro) | Yes | No | Yes | 7 |
|
|
55
|
+
| 2 (Problem statement) | Yes | Yes | Yes | 9 |
|
|
56
|
+
| 3 (Solution description) | Yes | Yes | No | 7 |
|
|
57
|
+
| 4 (Feature 1) | Yes | Yes | Yes | 9 |
|
|
58
|
+
| 5 (Feature 2) | Yes | No | No | 5 |
|
|
59
|
+
| 6 (Social proof) | Yes | Yes | Yes | 10 |
|
|
60
|
+
|
|
61
|
+
Average across 24 paragraphs: 8.2 / 10 (normalized to 82 / 100)
|
|
62
|
+
|
|
63
|
+
**Best answerable paragraph:**
|
|
64
|
+
> "GrowthHub's AI-enabled worker kits reduce campaign production time by 65% — from 12 hours of manual brief-writing and asset coordination to 4 hours of structured operator execution. Each kit ships with pre-built templates, brand kit integration, and a step-by-step workflow that any team member can follow without prior AI training."
|
|
65
|
+
|
|
66
|
+
**Weakest paragraph (needs rewrite):**
|
|
67
|
+
> "It integrates seamlessly with your existing tools. This means you don't have to change how you work — it just makes everything faster and more consistent for your team."
|
|
68
|
+
|
|
69
|
+
*Problem: "It" and "This" in the opening sentences are unresolved. What does "it" refer to? AI systems cannot cleanly cite this paragraph.*
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Self-Containment Check
|
|
74
|
+
|
|
75
|
+
| Signal | Value | Status |
|
|
76
|
+
|---|---|---|
|
|
77
|
+
| Total word count | 1,847 words | Good (within 800–2,500 range) |
|
|
78
|
+
| Pronoun count | 94 instances | |
|
|
79
|
+
| Noun count | 412 instances | |
|
|
80
|
+
| Pronoun-to-noun ratio | 0.23 : 1 | Good (< 0.3) |
|
|
81
|
+
| Optimal word count range | 800–2,500 words | On target |
|
|
82
|
+
| Contextual dependency score | 27 / 100 | Low dependency — good |
|
|
83
|
+
|
|
84
|
+
**Self-containment score: 74 / 100**
|
|
85
|
+
|
|
86
|
+
Primary drag: 11 paragraphs open with "This," "It," or "They" without a prior noun anchor in the same sentence. These are individually readable but drop the raw self-containment score.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Structural Readability Check
|
|
91
|
+
|
|
92
|
+
| Signal | Status | Notes |
|
|
93
|
+
|---|---|---|
|
|
94
|
+
| H1 present | Yes | "Growthub — AI-Enabled Growth Infrastructure" |
|
|
95
|
+
| H2 count | 7 | Well-structured — above the ≥2 minimum |
|
|
96
|
+
| H3 count | 12 | Good depth |
|
|
97
|
+
| Numbered lists | Yes | 3 numbered lists found |
|
|
98
|
+
| Bulleted lists | Yes | 8 bulleted lists found |
|
|
99
|
+
| Average paragraph length | 77 words | Well within the ≤150 word target |
|
|
100
|
+
| Wall-of-text sections | No | Longest unbroken block is 134 words (acceptable) |
|
|
101
|
+
|
|
102
|
+
**Structural readability score: 79 / 100**
|
|
103
|
+
|
|
104
|
+
Strong performance. Minor deduction: 2 of the 7 H2 sections have only a single H3 child — slight structural thinness.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Statistical Density Check
|
|
109
|
+
|
|
110
|
+
| Signal | Value | Status |
|
|
111
|
+
|---|---|---|
|
|
112
|
+
| Percentage references | 4 instances | Low |
|
|
113
|
+
| Numbered data points | 6 instances | Low |
|
|
114
|
+
| Dollar/currency figures | 0 instances | Missing |
|
|
115
|
+
| Year/date references | 3 instances | |
|
|
116
|
+
| Data points per 1,000 words | 7.0 | Slightly below optimal (8–15) |
|
|
117
|
+
| Statistical density score | 47 / 100 | Weak |
|
|
118
|
+
|
|
119
|
+
**Key finding:** Statistical density is the weakest component. The homepage copy is benefit-focused but lacks specific performance numbers, client results, or category statistics. Adding 6–8 concrete data points (e.g., "reduces production time by 65%," "used by 120+ agencies") would push this score above 70.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Uniqueness Signals Check
|
|
124
|
+
|
|
125
|
+
| Signal | Present | Example |
|
|
126
|
+
|---|---|---|
|
|
127
|
+
| First-party study or research | No | — |
|
|
128
|
+
| Proprietary data references | No | — |
|
|
129
|
+
| Original methodology | Yes | "Worker kit architecture" is a proprietary concept defined on the page |
|
|
130
|
+
| Unique terminology | Yes | "operator execution," "worker kit," "GEO Score" — distinctive phrasing |
|
|
131
|
+
| Non-generic claims | Partial | "AI-enabled growth infrastructure" is specific but unquantified |
|
|
132
|
+
|
|
133
|
+
**Uniqueness score: 52 / 100**
|
|
134
|
+
|
|
135
|
+
Growthub has genuine intellectual property in its worker kit architecture. The terminology is distinctive. The score is limited by the absence of original research or first-party data claims.
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Key Findings
|
|
140
|
+
|
|
141
|
+
1. **Answer Block Quality is the standout strength.** The homepage copy is well-structured for AI citation — paragraphs are clear, evidence-backed, and readable. The top 40% of paragraphs score 9–10/10 individually.
|
|
142
|
+
|
|
143
|
+
2. **Statistical Density is the primary drag on the citability score.** With 7.0 data points per 1,000 words (target: 8–15), the page is slightly data-thin. Adding quantified client results or performance benchmarks would be the highest-leverage single edit.
|
|
144
|
+
|
|
145
|
+
3. **Self-containment is solid but improvable.** The pronoun-to-noun ratio of 0.23 is healthy, but 11 paragraphs open with unresolved pronoun references. Fixing these 11 opening sentences would add approximately 5–6 points to the self-containment score.
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Top 3 Improvements
|
|
150
|
+
|
|
151
|
+
| Priority | Action | Expected Score Gain | Effort |
|
|
152
|
+
|---|---|---|---|
|
|
153
|
+
| 1 | Add 6 quantified performance claims (%, numbers, client results) throughout the homepage | +8 to +12 points (Statistical Density) | Medium — 2–3 hours of content editing |
|
|
154
|
+
| 2 | Rewrite 11 paragraph openers that begin with "It," "This," or "They" to use explicit noun subjects | +5 to +7 points (Self-Containment + Answer Block Quality) | Low — 45 minutes |
|
|
155
|
+
| 3 | Publish one original data report or methodology explainer (e.g., "Worker Kit Performance Report Q1 2026") | +4 to +6 points (Uniqueness Signals) | High — 1–2 weeks of content production |
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# GEO Audit Brief — Sample (GrowthHub.com)
|
|
2
|
+
|
|
3
|
+
> Example: `examples/geo-audit-sample.md`
|
|
4
|
+
> This is a filled sample based on a fictitious full audit run of thegrowthub.com.
|
|
5
|
+
> Use this as a reference for what a completed GeoAuditBrief looks like in production.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Project Overview
|
|
10
|
+
|
|
11
|
+
| Field | Value |
|
|
12
|
+
|---|---|
|
|
13
|
+
| Client | Growthub |
|
|
14
|
+
| Target URL | https://thegrowthub.com |
|
|
15
|
+
| Audit Scope | Full audit — all 6 GEO components |
|
|
16
|
+
| Execution Mode | local-fork |
|
|
17
|
+
| Primary Command | `/geo audit` |
|
|
18
|
+
| Requested By | Antonio |
|
|
19
|
+
| Date | 2026-04-14 |
|
|
20
|
+
| Brand Kit | brands/growthub/brand-kit.md |
|
|
21
|
+
| Project Slug | studio-launch-reference |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Audit Objective
|
|
26
|
+
|
|
27
|
+
Establish a baseline GEO Score for thegrowthub.com as the studio launch reference audit. Determine which AI search platforms can currently access and cite Growthub content, identify the top structural barriers to AI citability, and produce a complete remediation roadmap that can serve as both an internal reference and a client-facing demo of the GEO SEO Studio kit.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Current Visibility Context
|
|
32
|
+
|
|
33
|
+
**Known strengths:**
|
|
34
|
+
- Site is on HTTPS with a valid SSL certificate
|
|
35
|
+
- robots.txt exists and has valid syntax
|
|
36
|
+
- Core Web Vitals signals are healthy based on PageSpeed data from March 2026
|
|
37
|
+
- Homepage has basic Organization schema in JSON-LD
|
|
38
|
+
|
|
39
|
+
**Known concerns:**
|
|
40
|
+
- llms.txt has never been created — AI crawlers have no explicit content guidance
|
|
41
|
+
- GPTBot and ClaudeBot were found to be implicitly allowed but not explicitly listed in robots.txt
|
|
42
|
+
- No FAQPage or Article schema on blog posts
|
|
43
|
+
- Content citability has not been measured previously — pronoun density unknown
|
|
44
|
+
|
|
45
|
+
**Prior audit outputs:**
|
|
46
|
+
| Date | Audit Type | Output Location |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| N/A | First audit | N/A |
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Competitor Reference URLs
|
|
53
|
+
|
|
54
|
+
| Competitor | URL | Notes |
|
|
55
|
+
|---|---|---|
|
|
56
|
+
| Jasper.ai | https://jasper.ai | AI content tool competitor — strong brand authority |
|
|
57
|
+
| Copy.ai | https://copy.ai | High GEO Score expected — large content library |
|
|
58
|
+
| Writesonic | https://writesonic.com | Active blog with strong E-E-A-T signals |
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Existing Assets
|
|
63
|
+
|
|
64
|
+
| Asset | Status | Location |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| robots.txt | Present | https://thegrowthub.com/robots.txt |
|
|
67
|
+
| sitemap.xml | Present | https://thegrowthub.com/sitemap.xml |
|
|
68
|
+
| llms.txt | Missing | https://thegrowthub.com/llms.txt (404) |
|
|
69
|
+
| llms-full.txt | Missing | https://thegrowthub.com/llms-full.txt (404) |
|
|
70
|
+
| Existing schema markup | JSON-LD (Organization only) | Homepage `<head>` |
|
|
71
|
+
| Previous GEO report | No | N/A |
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Command Selection Plan
|
|
76
|
+
|
|
77
|
+
**Primary command:** `/geo audit`
|
|
78
|
+
|
|
79
|
+
**Rationale:** Full audit selected because this is the baseline reference run for the studio kit. All 6 components must be scored, all 14 crawlers must be checked, and the full remediation roadmap must be produced. A quick scan would not produce the depth required for a reference example.
|
|
80
|
+
|
|
81
|
+
**Secondary commands (full audit sequence):**
|
|
82
|
+
|
|
83
|
+
| Command | Purpose | Sequence |
|
|
84
|
+
|---|---|---|
|
|
85
|
+
| `/geo audit` | Full composite audit entrypoint | 1 |
|
|
86
|
+
| `/geo crawlers` | AI crawler permission check — verify robots.txt rules per crawler | 2 |
|
|
87
|
+
| `/geo brands` | Brand authority scan — 8 platforms | 3 |
|
|
88
|
+
| `/geo schema` | Structured data validation — full JSON-LD review | 4 |
|
|
89
|
+
| `/geo technical` | Technical health check — headers, HTTPS, Core Web Vitals signals | 5 |
|
|
90
|
+
| `/geo llmstxt` | llms.txt generation plan — file does not exist | 6 |
|
|
91
|
+
| `/geo report` | Final Markdown report compilation | 7 |
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Delivery Requirements
|
|
96
|
+
|
|
97
|
+
| Requirement | Value |
|
|
98
|
+
|---|---|
|
|
99
|
+
| Delivery format | Both (Markdown + PDF) |
|
|
100
|
+
| PDF report needed | Yes — branded PDF for internal stakeholder reference |
|
|
101
|
+
| Client-facing proposal | No — internal reference only |
|
|
102
|
+
| Output deadline | Same-day (reference run) |
|
|
103
|
+
| Stakeholder recipient | Antonio |
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Success Criteria
|
|
108
|
+
|
|
109
|
+
- [x] GEO Score composite produced with all 6 components scored
|
|
110
|
+
- [x] Crawler access status confirmed for all 14 AI crawlers
|
|
111
|
+
- [x] Citability analysis completed with letter grade assigned
|
|
112
|
+
- [x] At least 5 actionable remediation items identified and prioritized
|
|
113
|
+
- [x] llms.txt plan produced — file does not exist, full plan required
|
|
114
|
+
- [x] Remediation roadmap covers 4-week sprint with owner assignments
|
|
115
|
+
- [x] All output files saved to `output/growthub/studio-launch-reference/`
|
|
116
|
+
- [x] Brand kit DELIVERABLES LOG updated
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Audit Notes (Operator)
|
|
121
|
+
|
|
122
|
+
This audit was run in local-fork mode with geo-seo-claude cloned at `~/geo-seo-claude`. Python 3.11 was used. All 14 /geo skills confirmed present in `skills/` directory. Playwright chromium installed and verified. `fetch_page.py` ran successfully against thegrowthub.com — page renders fully in Playwright (no JS rendering issues detected).
|
|
123
|
+
|
|
124
|
+
Phase 2 subagents dispatched in parallel at 14:03:22. All 5 subagents returned results within 90 seconds. Brand authority scan (`/geo brands`) run separately as sequential command — completed in 45 seconds using `brand_scanner.py`.
|
|
125
|
+
|
|
126
|
+
PDF generation triggered at end of session using `python scripts/generate_pdf_report.py --input output/growthub/studio-launch-reference/geo_score_data.json`.
|