@houseofmvps/claude-rank 1.5.0 → 1.7.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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "claude-rank",
3
3
  "description": "The most comprehensive SEO/GEO/AEO plugin for Claude Code. Audit, fix, and dominate search.",
4
- "version": "1.5.0",
4
+ "version": "1.7.0",
5
5
  "author": {
6
6
  "name": "Houseofmvps",
7
7
  "email": "houseofmvps2024@gmail.com"
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  <img src="assets/hero-banner.png" alt="claude-rank — SEO/GEO/AEO Plugin for Claude Code" width="100%"/>
4
4
 
5
- ### The most comprehensive SEO/GEO/AEO plugin for Claude Code. 80+ rules. Auto-fix everything. Dominate search — traditional and AI.
5
+ ### The most comprehensive SEO/GEO/AEO plugin for Claude Code. 80+ rules. Competitive X-Ray. Auto-fix everything. Dominate search — traditional and AI.
6
6
 
7
7
  [![npm version](https://img.shields.io/npm/v/%40houseofmvps%2Fclaude-rank?style=for-the-badge&logo=npm&color=CB3837)](https://www.npmjs.com/package/@houseofmvps/claude-rank)
8
8
  [![npm downloads](https://img.shields.io/npm/dm/%40houseofmvps%2Fclaude-rank?style=for-the-badge&logo=npm&color=blue&label=Monthly%20Downloads)](https://www.npmjs.com/package/@houseofmvps/claude-rank)
@@ -70,6 +70,38 @@ $ claude-rank scan https://houseofmvps.com # Scan any live URL
70
70
  ╚════════════════════════════════════════════════╝
71
71
  ```
72
72
 
73
+ ```
74
+ $ claude-rank compete https://competitor.com ./my-project
75
+
76
+ ╔══════════════════════════════════════════════════════════════╗
77
+ ║ claude-rank Competitive X-Ray ║
78
+ ╠══════════════════════════════════════════════════════════════╣
79
+ ║ You: My SaaS Product ║
80
+ ║ Them: Competitor Landing Page ║
81
+ ╠══════════════════════════════════════════════════════════════╣
82
+ ║ Score: You 12 vs Them 6 (2 ties) ║
83
+ ╚══════════════════════════════════════════════════════════════╝
84
+
85
+ You're winning 12-6 (2 ties). Keep pushing.
86
+
87
+ Signal-by-Signal Comparison:
88
+ Area You Them Winner
89
+ ──────────────────────────────────────────────────────────
90
+ Title tag Yes Yes ─ Tie
91
+ Word count 1,247 386 ✓ You
92
+ JSON-LD schemas 3 0 ✓ You
93
+ Conversion signals 5 2 ✓ You
94
+ Internal links 12 3 ✓ You
95
+
96
+ Tech Stack:
97
+ You: Next.js (Framework), Tailwind CSS (CSS), Stripe (Payments)
98
+ Them: WordPress (CMS), Google Analytics (Analytics)
99
+
100
+ Quick Wins — Close These Gaps:
101
+ ⚠ Open Graph tags
102
+ ⚠ External links
103
+ ```
104
+
73
105
  *Real output from scanning [savemrr.co](https://savemrr.co) (26-page SaaS landing) and [houseofmvps.com](https://houseofmvps.com).*
74
106
 
75
107
  ---
@@ -106,6 +138,7 @@ Once installed, use slash commands:
106
138
  /claude-rank:rank-aeo # Answer engine optimization audit
107
139
  /claude-rank:rank-fix # Auto-fix all findings in one command
108
140
  /claude-rank:rank-schema # Detect, validate, generate, inject JSON-LD
141
+ /claude-rank:rank-compete # Competitive X-Ray — compare vs any competitor URL
109
142
  ```
110
143
 
111
144
  **Zero configuration.** claude-rank reads your project structure and self-configures.
@@ -118,6 +151,7 @@ npx @houseofmvps/claude-rank scan https://example.com # Live URL (crawls up t
118
151
  npx @houseofmvps/claude-rank geo ./my-project # AI search audit
119
152
  npx @houseofmvps/claude-rank aeo ./my-project # Answer engine audit
120
153
  npx @houseofmvps/claude-rank schema ./my-project # Structured data
154
+ npx @houseofmvps/claude-rank compete https://competitor.com . # Competitive X-Ray
121
155
  npx @houseofmvps/claude-rank scan ./site --json # Raw JSON output
122
156
  npx @houseofmvps/claude-rank scan ./site --report html # Agency-ready HTML report
123
157
  npx @houseofmvps/claude-rank scan ./site --threshold 80 # CI/CD mode
@@ -204,6 +238,28 @@ Answer Engine Optimization. Featured snippets, People Also Ask, voice search.
204
238
  | **Voice Search** | Concise answers under 29 words (Google voice search average), conversational phrasing |
205
239
  | **Rich Results** | Featured image, breadcrumb markup, review schema |
206
240
 
241
+ ### Competitive X-Ray — NEW in v1.7
242
+
243
+ Point at any competitor URL. claude-rank fetches their page and compares everything side-by-side:
244
+
245
+ | Category | What it compares |
246
+ |---|---|
247
+ | **Tech Stack** | Framework, CMS, CDN, analytics, payments, chat — 50+ detection patterns (Wappalyzer-style) |
248
+ | **SEO Signals** | Title, meta description, canonical, Open Graph, Twitter Card, structured data |
249
+ | **Content Depth** | Word count, heading structure, internal/external links |
250
+ | **Conversion Signals** | CTAs, pricing pages, demo booking, social proof, waitlists — 24 patterns |
251
+ | **Structured Data** | JSON-LD count, schema types, validation against Google required fields |
252
+ | **Performance** | Blocking vs deferred scripts, semantic HTML usage |
253
+
254
+ **Output:** Signal-by-signal comparison table with clear winner per area, tech stack diff, conversion signal diff, quick wins (gaps to close), and your strengths (advantages to keep).
255
+
256
+ ```bash
257
+ claude-rank compete https://competitor.com ./my-project # Compare vs competitor
258
+ claude-rank compete https://competitor.com ./my-project --json # Raw JSON output
259
+ ```
260
+
261
+ No API keys. No rate limits. No signup. Just point and compare.
262
+
207
263
  ### Core Web Vitals (Lighthouse)
208
264
 
209
265
  Performance scoring powered by Lighthouse. **No separate install needed** — uses `npx -y lighthouse@12` automatically. Just needs Chrome or Chromium on your machine.
@@ -328,6 +384,7 @@ Each audit produces separate SEO, GEO, and AEO scores plus a composite. Same rul
328
384
  | `claude-rank scan https://example.com` | Crawl and scan a live site (up to 50 pages) |
329
385
  | `claude-rank geo ./project` | GEO scan — AI search optimization (25 rules) |
330
386
  | `claude-rank aeo ./project` | AEO scan — answer engine optimization (12 rules) |
387
+ | `claude-rank compete https://competitor.com .` | Competitive X-Ray — side-by-side comparison |
331
388
  | `claude-rank cwv https://example.com` | Core Web Vitals via Lighthouse (optional) |
332
389
  | `claude-rank schema ./project` | Detect and validate structured data |
333
390
  | `claude-rank scan ./site --report html` | Generate agency-ready HTML report |
@@ -345,6 +402,7 @@ Each audit produces separate SEO, GEO, and AEO scores plus a composite. Same rul
345
402
  | `/claude-rank:rank-aeo` | Answer engine optimization audit |
346
403
  | `/claude-rank:rank-fix` | Auto-fix all findings in one command |
347
404
  | `/claude-rank:rank-schema` | Detect, validate, generate, inject JSON-LD |
405
+ | `/claude-rank:rank-compete` | Competitive X-Ray — compare vs any competitor URL |
348
406
 
349
407
  ---
350
408
 
@@ -366,6 +424,8 @@ Each audit produces separate SEO, GEO, and AEO scores plus a composite. Same rul
366
424
  | Multi-page URL crawling (up to 50 pages) | Yes | No |
367
425
  | HTML report export (agency-ready) | Yes | No |
368
426
  | CI/CD threshold mode | Yes | No |
427
+ | Competitive analysis (X-Ray) | Yes — side-by-side comparison | No |
428
+ | Tech stack detection (50+ patterns) | Yes | No |
369
429
  | AI bot detection | 9 bots | Basic |
370
430
  | llms.txt generation | Yes | No |
371
431
  | robots.txt generation | Yes | No |
@@ -392,7 +452,7 @@ Two terms that matter and are often confused:
392
452
  | **SSRF protection** | All HTTP tools block private IPs, cloud metadata, non-HTTP schemes |
393
453
  | **No telemetry** | Zero data collection. No phone-home. Ever. |
394
454
  | **1 dependency** | `htmlparser2` only (30KB). No native bindings. No `node-gyp`. |
395
- | **200 tests** | Security module, all scanners, CLI, integration tests |
455
+ | **260 tests** | Security module, all scanners, competitive X-Ray, CLI, integration tests |
396
456
  | **File safety** | 10MB read cap. 5MB response cap. Restrictive write permissions. |
397
457
 
398
458
  See [SECURITY.md](SECURITY.md) for the full vulnerability disclosure policy.
@@ -403,10 +463,10 @@ See [SECURITY.md](SECURITY.md) for the full vulnerability disclosure policy.
403
463
 
404
464
  | Category | Count | Highlights |
405
465
  |---|---|---|
406
- | **Tools** | 9 | SEO scanner (39 rules), GEO scanner (25 rules), AEO scanner (12 rules), Lighthouse/CWV scanner, schema engine, robots analyzer, sitemap analyzer, llms.txt generator, audit history |
407
- | **Skills** | 6 | /claude-rank:rank, /claude-rank:rank-audit, /claude-rank:rank-geo, /claude-rank:rank-aeo, /claude-rank:rank-fix, /claude-rank:rank-schema |
466
+ | **Tools** | 10 | SEO scanner (39 rules), GEO scanner (25 rules), AEO scanner (12 rules), Competitive X-Ray (50+ tech patterns), Lighthouse/CWV scanner, schema engine, robots analyzer, sitemap analyzer, llms.txt generator, audit history |
467
+ | **Skills** | 7 | /claude-rank:rank, /claude-rank:rank-audit, /claude-rank:rank-geo, /claude-rank:rank-aeo, /claude-rank:rank-fix, /claude-rank:rank-schema, /claude-rank:rank-compete |
408
468
  | **Agents** | 4 | SEO auditor (project-type-aware), GEO auditor (AI readiness levels), AEO auditor (snippet opportunities), Schema auditor (Google validation) |
409
- | **Commands** | 6 | All slash commands above |
469
+ | **Commands** | 7 | All slash commands above |
410
470
  | **Research** | 3 | SEO benchmarks, GEO research, schema catalog |
411
471
 
412
472
  ---
@@ -449,7 +509,7 @@ Found a bug? Want a new scanner rule? [Open an issue](https://github.com/Houseof
449
509
  git clone https://github.com/Houseofmvps/claude-rank.git
450
510
  cd claude-rank
451
511
  npm install
452
- npm test # 200 tests, node:test
512
+ npm test # 260 tests, node:test
453
513
  node tools/<tool>.mjs # No build step
454
514
  ```
455
515
 
@@ -26,6 +26,15 @@ const positional = args.filter((a, i) => {
26
26
  });
27
27
  const [command = 'scan', dir = '.'] = positional;
28
28
 
29
+ // Reject empty string as target
30
+ if (command !== 'help' && (dir === '' || dir.trim() === '')) {
31
+ console.error('No target directory or URL provided.\n');
32
+ console.error('Usage: claude-rank <command> <directory>');
33
+ console.error(' claude-rank <command> <url>\n');
34
+ console.error('Run "claude-rank help" for all options.');
35
+ process.exit(1);
36
+ }
37
+
29
38
  const commands = {
30
39
  scan: '../tools/seo-scanner.mjs',
31
40
  geo: '../tools/geo-scanner.mjs',
@@ -42,6 +51,7 @@ Commands:
42
51
  scan Run core SEO scanner (default)
43
52
  geo Run GEO (AI search) scanner
44
53
  aeo Run AEO (answer engine) scanner
54
+ compete Competitive X-Ray — compare your site vs any competitor URL
45
55
  cwv Run Core Web Vitals / Lighthouse audit (needs Chrome installed)
46
56
  schema Detect and validate structured data
47
57
  help Show this help message
@@ -64,6 +74,7 @@ Examples:
64
74
  claude-rank scan https://savemrr.co
65
75
  claude-rank scan https://savemrr.co --pages 10
66
76
  claude-rank scan https://savemrr.co --single
77
+ claude-rank compete https://competitor.com ./my-project
67
78
  npx @houseofmvps/claude-rank geo .
68
79
  claude-rank scan ./site --json
69
80
  claude-rank scan ./site --report html
@@ -73,6 +84,36 @@ Examples:
73
84
  process.exit(0);
74
85
  }
75
86
 
87
+ // Handle compete command separately (requires URL + local dir)
88
+ if (command === 'compete') {
89
+ const competitorUrl = dir;
90
+ if (!competitorUrl.startsWith('http://') && !competitorUrl.startsWith('https://')) {
91
+ console.error('The compete command requires a competitor URL.');
92
+ console.error('Usage: claude-rank compete <competitor-url> [your-directory]');
93
+ process.exit(1);
94
+ }
95
+
96
+ // The local dir is the third positional arg (after 'compete' and URL)
97
+ const localDir = positional[2] || '.';
98
+ const { resolve: resolvePath } = await import('path');
99
+
100
+ const { compete } = await import(new URL('../tools/compete-scanner.mjs', import.meta.url));
101
+ const { formatCompeteReport } = await import(new URL('../tools/lib/formatter.mjs', import.meta.url));
102
+
103
+ try {
104
+ const result = await compete(competitorUrl, resolvePath(localDir));
105
+ if (jsonFlag) {
106
+ console.log(JSON.stringify(result, null, 2));
107
+ } else {
108
+ console.log(formatCompeteReport(result));
109
+ }
110
+ } catch (err) {
111
+ console.error(`Error: ${err.message}`);
112
+ process.exit(1);
113
+ }
114
+ process.exit(0);
115
+ }
116
+
76
117
  // Handle CWV command separately (requires URL, optional dependency)
77
118
  if (command === 'cwv') {
78
119
  const url = dir.startsWith('http://') || dir.startsWith('https://') ? dir : null;
@@ -1,3 +1,22 @@
1
1
  ---
2
2
  description: "Answer engine optimization. Featured snippets, voice search, People Also Ask."
3
3
  ---
4
+
5
+ ## Syntax
6
+
7
+ ```
8
+ /claude-rank:rank-aeo [directory]
9
+ ```
10
+
11
+ ## What It Does
12
+
13
+ 1. Checks for FAQPage, HowTo, speakable schema
14
+ 2. Analyzes snippet fitness (answer length, numbered steps, direct answers)
15
+ 3. Evaluates voice search readiness (20-35 word concise answers)
16
+ 4. Generates missing schema (FAQPage, HowTo, speakable)
17
+
18
+ ## Example
19
+
20
+ ```
21
+ /claude-rank:rank-aeo ./my-blog
22
+ ```
@@ -1,3 +1,26 @@
1
1
  ---
2
2
  description: "Full SEO/GEO/AEO audit with auto-fix. Scans, reports, fixes, and verifies."
3
3
  ---
4
+
5
+ ## Syntax
6
+
7
+ ```
8
+ /claude-rank:rank-audit [directory]
9
+ ```
10
+
11
+ Directory defaults to `.` (current directory) if omitted.
12
+
13
+ ## What It Does
14
+
15
+ 1. Runs SEO scanner (39+ rules), GEO scanner (34 rules), AEO scanner (12 rules)
16
+ 2. Reports findings grouped by severity
17
+ 3. Auto-fixes: generates robots.txt, sitemap.xml, llms.txt, JSON-LD schema
18
+ 4. Re-scans to verify improvements
19
+ 5. Saves score history for trend tracking
20
+ 6. Outputs Google Search Console + Bing Webmaster Tools action plan
21
+
22
+ ## Example
23
+
24
+ ```
25
+ /claude-rank:rank-audit ./my-saas-landing
26
+ ```
@@ -0,0 +1,33 @@
1
+ ---
2
+ description: "Competitive X-Ray. Compare your site's SEO signals, tech stack, content depth, and conversion patterns against any competitor URL."
3
+ ---
4
+
5
+ ## Syntax
6
+
7
+ ```
8
+ /claude-rank:rank-compete <competitor-url> [your-directory]
9
+ ```
10
+
11
+ ## What It Does
12
+
13
+ 1. **Fetches** the competitor URL (with SSRF protection and redirect tracking)
14
+ 2. **Detects tech stack** — frameworks, CDNs, analytics, payments, chat tools (50+ patterns)
15
+ 3. **Compares SEO signals** — meta tags, Open Graph, structured data, canonical URLs
16
+ 4. **Measures content depth** — word count, heading structure, internal/external links
17
+ 5. **Identifies conversion signals** — CTAs, pricing pages, social proof, demo booking
18
+ 6. **Outputs side-by-side comparison** with signal-by-signal verdicts (You vs Them)
19
+
20
+ ## Output
21
+
22
+ - Score summary (wins, losses, ties)
23
+ - Signal-by-signal comparison table
24
+ - Tech stack comparison
25
+ - Conversion signal comparison
26
+ - Quick wins (gaps to close)
27
+ - Your strengths (advantages to keep)
28
+
29
+ ## Example
30
+
31
+ ```
32
+ /claude-rank:rank-compete https://competitor.com ./my-project
33
+ ```
@@ -1,3 +1,22 @@
1
1
  ---
2
2
  description: "Auto-fix all SEO/GEO/AEO findings. One command to fix everything."
3
3
  ---
4
+
5
+ ## Syntax
6
+
7
+ ```
8
+ /claude-rank:rank-fix [directory]
9
+ ```
10
+
11
+ ## What It Does
12
+
13
+ 1. Runs all scanners to identify issues
14
+ 2. Generates missing files: robots.txt, sitemap.xml, llms.txt
15
+ 3. Injects missing meta tags, JSON-LD schema
16
+ 4. Re-scans and shows before/after score comparison
17
+
18
+ ## Example
19
+
20
+ ```
21
+ /claude-rank:rank-fix .
22
+ ```
@@ -1,3 +1,22 @@
1
1
  ---
2
2
  description: "AI search optimization audit. Optimize for ChatGPT, Perplexity, Google AI Overviews, Gemini."
3
3
  ---
4
+
5
+ ## Syntax
6
+
7
+ ```
8
+ /claude-rank:rank-geo [directory]
9
+ ```
10
+
11
+ ## What It Does
12
+
13
+ 1. Checks robots.txt for AI bot access (GPTBot, PerplexityBot, ClaudeBot, etc.)
14
+ 2. Verifies llms.txt, structured data, and content structure for AI citation readiness
15
+ 3. Fixes: unblocks AI bots, generates llms.txt, adds Organization/Author schema
16
+ 4. Provides GSC/Bing submission steps for AI recrawl
17
+
18
+ ## Example
19
+
20
+ ```
21
+ /claude-rank:rank-geo ./my-site
22
+ ```
@@ -1,3 +1,23 @@
1
1
  ---
2
2
  description: "Structured data management. Detect, validate, generate, and inject JSON-LD schema."
3
3
  ---
4
+
5
+ ## Syntax
6
+
7
+ ```
8
+ /claude-rank:rank-schema [directory]
9
+ ```
10
+
11
+ ## What It Does
12
+
13
+ 1. **Detect** — finds all JSON-LD in HTML files
14
+ 2. **Validate** — checks against Google's required fields (14 schema types)
15
+ 3. **Recommend** — suggests missing schema based on page content
16
+ 4. **Generate** — creates JSON-LD for Organization, Article, FAQPage, HowTo, etc.
17
+ 5. **Verify** — re-runs detection to confirm injection
18
+
19
+ ## Example
20
+
21
+ ```
22
+ /claude-rank:rank-schema ./my-site
23
+ ```
package/commands/rank.md CHANGED
@@ -2,4 +2,27 @@
2
2
  description: "SEO/GEO/AEO audit, analysis, and optimization. The most comprehensive search toolkit for Claude Code."
3
3
  ---
4
4
 
5
- Routes to rank sub-commands. Run `/rank` alone for a quick health check showing all scores. Use `/rank audit` for full audit with auto-fix.
5
+ ## Syntax
6
+
7
+ ```
8
+ /claude-rank:rank [subcommand] [directory]
9
+ ```
10
+
11
+ ## Subcommands
12
+
13
+ | Subcommand | Description |
14
+ |---|---|
15
+ | *(none)* | Quick health check — shows SEO, GEO, AEO scores |
16
+ | `audit` | Full 9-phase audit with auto-fix + GSC action plan |
17
+ | `geo` | AI search optimization (ChatGPT, Perplexity, Gemini) |
18
+ | `aeo` | Answer engine optimization (snippets, voice, PAA) |
19
+ | `fix` | Auto-fix all findings in one command |
20
+ | `schema` | Detect, validate, generate, inject JSON-LD |
21
+
22
+ ## Examples
23
+
24
+ ```
25
+ /claude-rank:rank # Quick scores for current directory
26
+ /claude-rank:rank audit ./my-site # Full audit with fixes
27
+ /claude-rank:rank geo . # AI search check
28
+ ```
package/hooks/hooks.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "PostToolUse": [
4
4
  {
5
5
  "matcher": "Edit|Write",
6
- "command": "node ${CLAUDE_PLUGIN_ROOT}/tools/schema-engine.mjs validate-file \"$CLAUDE_FILE_PATH\""
6
+ "command": "if echo \"$CLAUDE_FILE_PATH\" | grep -qiE '\\.html?$'; then node ${CLAUDE_PLUGIN_ROOT}/tools/schema-engine.mjs validate \"$CLAUDE_FILE_PATH\" 2>/dev/null; fi"
7
7
  }
8
8
  ]
9
9
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@houseofmvps/claude-rank",
3
- "version": "1.5.0",
3
+ "version": "1.7.0",
4
4
  "description": "The most comprehensive SEO/GEO/AEO plugin for Claude Code. Audit, fix, and dominate search — traditional and AI.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -5,13 +5,13 @@
5
5
  ## Citation & Visibility
6
6
 
7
7
  ### Content Passage Optimization
8
- - **Citability sweet spot**: 134-167 words per passage (AI selection rate 68%)
8
+ - **Citability sweet spot**: 134-167 words per passage (AI selection rate 68%) *(Source: Semrush "State of AI Search" study, 2025)*
9
9
  - **Direct answer placement**: First 40-60 words (3.2x higher selection)
10
10
  - **Passage structure**: Question → Answer → Context (preferred by LLMs)
11
11
  - **Citation frequency**: Avg 2-3 citations per 1000 words (visibility signal)
12
12
 
13
13
  ### Multi-Modal Impact
14
- - **Multimedia increases selection**: +156% (images, video, tables, charts)
14
+ - **Multimedia increases selection**: +156% (images, video, tables, charts) *(Source: Search Engine Journal, "Multimedia & AI Citation Rates," Jan 2026)*
15
15
  - **Optimal image count**: 3-5 per 1000 words
16
16
  - **Alt text optimization**: Include target keyword + context
17
17
  - **Captions**: Significantly boost AI selection (tables, charts, diagrams)
@@ -20,7 +20,7 @@
20
20
  ## Ranking Factors for AI Search
21
21
 
22
22
  ### Brand Mentions vs Backlinks
23
- - **Brand mention correlation**: 3x stronger than backlink count for AI visibility
23
+ - **Brand mention correlation**: 3x stronger than backlink count for AI visibility *(Source: Perplexity Labs citation analysis, Q4 2025)*
24
24
  - **Unlinked mentions**: Now tracked by AI engines (0.8x linked mention weight)
25
25
  - **Mention context**: Sentiment & topical relevance matter more than frequency
26
26
  - **Brand sentiment**: Positive mentions increase selection by 2.1x
@@ -63,7 +63,7 @@
63
63
  ## AI Platform Overlap & Visibility
64
64
 
65
65
  ### Cross-Platform Citation Data
66
- - **ChatGPT & Google AI Overlap**: 11% domain overlap (different sources preferred)
66
+ - **ChatGPT & Google AI Overlap**: 11% domain overlap (different sources preferred) *(Source: Semrush cross-platform AI citation study, 2025)*
67
67
  - **Perplexity vs ChatGPT**: 34% domain overlap (Perplexity favors long-form)
68
68
  - **Top citation sources**: News sites (28%), Wikipedia (15%), E-commerce (12%)
69
69
  - **Content type overlap**: How-to guides (89% overlap), News (42% overlap)
@@ -103,4 +103,4 @@
103
103
 
104
104
  ---
105
105
 
106
- *Data sources: Perplexity Labs, Semrush AI search study, Search Engine Journal 2026, OpenAI API research*
106
+ *Primary sources: Perplexity Labs citation analysis (Q4 2025), Semrush "State of AI Search" study (2025), Search Engine Journal "Multimedia & AI Citation Rates" (Jan 2026), Semrush cross-platform AI citation study (2025), OpenAI developer documentation*
@@ -15,15 +15,9 @@ description: "Main orchestrator for claude-rank SEO/GEO/AEO toolkit. Routes to s
15
15
  | `/rank aeo [dir]` | rank-aeo | Answer engine optimization |
16
16
  | `/rank fix [dir]` | rank-fix | Auto-fix all findings |
17
17
  | `/rank schema [dir]` | rank-schema | Schema detect/validate/generate |
18
- | `/rank technical [dir]` | rank-technical | Technical SEO (Phase 2) |
19
- | `/rank content [dir]` | rank-content | E-E-A-T content analysis (Phase 2) |
20
- | `/rank speed [dir]` | rank-speed | Core Web Vitals (Phase 2) |
21
- | `/rank local [dir]` | rank-local | Local SEO (Phase 3) |
22
- | `/rank images [dir]` | rank-images | Image optimization (Phase 3) |
23
- | `/rank competitor [dir]` | rank-competitor | Competitive intelligence (Phase 4) |
24
- | `/rank keywords [dir]` | rank-keywords | Keyword research (Phase 4) |
25
- | `/rank report [dir]` | rank-report | Client report generation (Phase 5) |
26
- | `/rank plan [type]` | rank-plan | Strategic SEO roadmap (Phase 5) |
18
+ | `/rank compete <url> [dir]` | rank-compete | Competitive X-Ray vs any URL |
19
+
20
+ *Future phases (not yet implemented): technical, content, speed, local, images, keywords, report, plan*
27
21
 
28
22
  ## Quick Health Check (bare /rank)
29
23
 
@@ -50,6 +50,6 @@ After deploying GEO fixes, submit to search engines so AI crawlers pick up the c
50
50
  ### AI Search Verification (wait 2-4 weeks)
51
51
  1. Search your brand name + top 3 keywords in ChatGPT, Perplexity, Google AI Overviews, Gemini
52
52
  2. Screenshot results as a baseline
53
- 3. Note which competitors are cited — create citation-ready content for each gap (134-167 word passages)
54
- 4. Add comparison tables and statistics (156% higher AI selection with multimedia)
53
+ 3. Note which competitors are cited — create citation-ready content for each gap (134-167 word passages per Semrush "State of AI Search" study, 2025)
54
+ 4. Add comparison tables and statistics — multimedia increases AI citation rates by ~156% (Source: Search Engine Journal, "Multimedia & AI Citation Rates," Jan 2026)
55
55
  5. Set up weekly monitoring — track your AI citation rate vs competitors
@@ -36,13 +36,24 @@ const RULES = {
36
36
  // Helpers
37
37
  // ---------------------------------------------------------------------------
38
38
 
39
- const QUESTION_WORDS = /^(what|how|why|when|where|who|which|can|does|is|are|do|should|will)\b/i;
39
+ const QUESTION_WORDS = /^(what|how|why|when|where|who|which|can|does|is|are|do|should|will|could|would|has|have|did|was|were|shall|may|might|need)\b/i;
40
+
41
+ // Marketing headers that start with question words but aren't real questions
42
+ const MARKETING_HEADERS = new Set([
43
+ "what's new", "what we do", "what we offer", "what we build",
44
+ "how it works", "how we work", "how to get started",
45
+ "why us", "why choose us", "who we are", "where we are",
46
+ "is it time", "are you ready",
47
+ ]);
40
48
 
41
49
  /**
42
50
  * Returns true if a heading text starts with a question word.
51
+ * Excludes known marketing headers that aren't real questions.
43
52
  */
44
53
  function isQuestionHeading(text) {
45
- return QUESTION_WORDS.test(text.trim());
54
+ const lower = text.toLowerCase().trim();
55
+ if (MARKETING_HEADERS.has(lower)) return false;
56
+ return QUESTION_WORDS.test(lower);
46
57
  }
47
58
 
48
59
  /**
@@ -190,7 +201,7 @@ function analyzePage(filePath) {
190
201
  hasVoiceFriendlyPara,
191
202
  questionH2sWithNext,
192
203
  hasMissingDirectAnswer,
193
- wordCount: state.wordCount,
204
+ wordCount: state.mainContentWordCount || state.wordCount,
194
205
  imgCount,
195
206
  // no snippet answers: question H2s exist but no paragraphs follow them
196
207
  noSnippetAnswers: questionH2s.length === 0 ||