@rivi-software/agentic-seo-check 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +65 -15
- package/dist/brand.d.ts +11 -0
- package/dist/brand.js +22 -0
- package/dist/brand.js.map +1 -0
- package/dist/cli.js +125 -80
- package/dist/cli.js.map +1 -1
- package/dist/core/audit.d.ts +16 -16
- package/dist/core/audit.js +363 -248
- package/dist/core/audit.js.map +1 -1
- package/dist/core/concurrency.d.ts +4 -4
- package/dist/core/concurrency.js +33 -23
- package/dist/core/concurrency.js.map +1 -1
- package/dist/core/crawl.d.ts +5 -5
- package/dist/core/crawl.js +250 -121
- package/dist/core/crawl.js.map +1 -1
- package/dist/core/fetch.d.ts +5 -5
- package/dist/core/fetch.js +151 -100
- package/dist/core/fetch.js.map +1 -1
- package/dist/core/html/dom.d.ts +13 -0
- package/dist/core/html/dom.js +17 -0
- package/dist/core/html/dom.js.map +1 -0
- package/dist/core/html/extract.d.ts +2 -2
- package/dist/core/html/extract.js +168 -111
- package/dist/core/html/extract.js.map +1 -1
- package/dist/core/html/structured-data.d.ts +16 -6
- package/dist/core/html/structured-data.js +180 -145
- package/dist/core/html/structured-data.js.map +1 -1
- package/dist/core/html/text.d.ts +14 -14
- package/dist/core/html/text.js +110 -107
- package/dist/core/html/text.js.map +1 -1
- package/dist/core/lighthouse.d.ts +26 -25
- package/dist/core/lighthouse.js +181 -105
- package/dist/core/lighthouse.js.map +1 -1
- package/dist/core/performance-rules.d.ts +2 -2
- package/dist/core/performance-rules.js +105 -33
- package/dist/core/performance-rules.js.map +1 -1
- package/dist/core/render-rules.d.ts +5 -4
- package/dist/core/render-rules.js +129 -62
- package/dist/core/render-rules.js.map +1 -1
- package/dist/core/render.d.ts +2 -2
- package/dist/core/render.js +29 -23
- package/dist/core/render.js.map +1 -1
- package/dist/core/report/markdown.d.ts +2 -2
- package/dist/core/report/markdown.js +110 -131
- package/dist/core/report/markdown.js.map +1 -1
- package/dist/core/robots.d.ts +5 -5
- package/dist/core/robots.js +31 -16
- package/dist/core/robots.js.map +1 -1
- package/dist/core/rules/canonical.d.ts +1 -1
- package/dist/core/rules/canonical.js +93 -57
- package/dist/core/rules/canonical.js.map +1 -1
- package/dist/core/rules/content.js +40 -26
- package/dist/core/rules/content.js.map +1 -1
- package/dist/core/rules/document.js +64 -41
- package/dist/core/rules/document.js.map +1 -1
- package/dist/core/rules/headings.js +58 -38
- package/dist/core/rules/headings.js.map +1 -1
- package/dist/core/rules/hreflang.js +70 -38
- package/dist/core/rules/hreflang.js.map +1 -1
- package/dist/core/rules/images.js +44 -26
- package/dist/core/rules/images.js.map +1 -1
- package/dist/core/rules/index.d.ts +6 -6
- package/dist/core/rules/index.js +36 -35
- package/dist/core/rules/index.js.map +1 -1
- package/dist/core/rules/indexing.d.ts +2 -2
- package/dist/core/rules/indexing.js +48 -26
- package/dist/core/rules/indexing.js.map +1 -1
- package/dist/core/rules/keyword.js +84 -47
- package/dist/core/rules/keyword.js.map +1 -1
- package/dist/core/rules/links.js +72 -37
- package/dist/core/rules/links.js.map +1 -1
- package/dist/core/rules/meta.js +55 -34
- package/dist/core/rules/meta.js.map +1 -1
- package/dist/core/rules/response.js +75 -41
- package/dist/core/rules/response.js.map +1 -1
- package/dist/core/rules/rule.d.ts +6 -6
- package/dist/core/rules/rule.js +36 -36
- package/dist/core/rules/rule.js.map +1 -1
- package/dist/core/rules/social.js +86 -45
- package/dist/core/rules/social.js.map +1 -1
- package/dist/core/rules/structured-data.d.ts +6 -4
- package/dist/core/rules/structured-data.js +314 -102
- package/dist/core/rules/structured-data.js.map +1 -1
- package/dist/core/rules/title.js +48 -33
- package/dist/core/rules/title.js.map +1 -1
- package/dist/core/score.d.ts +3 -3
- package/dist/core/score.js +11 -9
- package/dist/core/score.js.map +1 -1
- package/dist/core/site-rules.d.ts +3 -3
- package/dist/core/site-rules.js +409 -198
- package/dist/core/site-rules.js.map +1 -1
- package/dist/core/sitemap.d.ts +5 -5
- package/dist/core/sitemap.js +109 -64
- package/dist/core/sitemap.js.map +1 -1
- package/dist/core/static.d.ts +2 -2
- package/dist/core/static.js +209 -112
- package/dist/core/static.js.map +1 -1
- package/dist/core/summary.d.ts +2 -2
- package/dist/core/summary.js +11 -6
- package/dist/core/summary.js.map +1 -1
- package/dist/core/types.d.ts +14 -14
- package/dist/core/types.js +15 -8
- package/dist/core/types.js.map +1 -1
- package/dist/core/url.d.ts +11 -11
- package/dist/core/url.js +122 -70
- package/dist/core/url.js.map +1 -1
- package/dist/index.d.ts +11 -11
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/dist/mcp-bin.js +7 -4
- package/dist/mcp-bin.js.map +1 -1
- package/dist/mcp.d.ts +3 -3
- package/dist/mcp.js +312 -122
- package/dist/mcp.js.map +1 -1
- package/dist/version.d.ts +0 -1
- package/dist/version.js +4 -2
- package/dist/version.js.map +1 -1
- package/package.json +27 -9
package/dist/core/html/text.js
CHANGED
|
@@ -1,149 +1,152 @@
|
|
|
1
1
|
/** Text analysis helpers: word counts, readability, placeholder detection. */
|
|
2
2
|
const WORD_RE = /[\p{L}\p{N}][\p{L}\p{N}'’-]*/gu;
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
return text.replace(/\s+/g, ' ').trim();
|
|
11
|
-
}
|
|
12
|
-
export function sentenceCount(text) {
|
|
13
|
-
const parts = text.split(/[.!?]+(?:\s+|$)/).filter((s) => s.trim().length > 0);
|
|
3
|
+
export const words = (text) => text.match(WORD_RE) ?? [];
|
|
4
|
+
export const wordCount = (text) => words(text).length;
|
|
5
|
+
export const collapseWhitespace = (text) => text.replaceAll(/\s+/gu, " ").trim();
|
|
6
|
+
export const sentenceCount = (text) => {
|
|
7
|
+
const parts = text
|
|
8
|
+
.split(/[.!?]+(?:\s+|$)/u)
|
|
9
|
+
.filter((s) => s.trim().length > 0);
|
|
14
10
|
return Math.max(1, parts.length);
|
|
15
|
-
}
|
|
11
|
+
};
|
|
16
12
|
/** English syllable heuristic: vowel groups minus silent trailing e, min 1. */
|
|
17
|
-
export
|
|
18
|
-
const w = word.toLowerCase().
|
|
19
|
-
if (!w)
|
|
13
|
+
export const syllables = (word) => {
|
|
14
|
+
const w = word.toLowerCase().replaceAll(/[^a-z]/gu, "");
|
|
15
|
+
if (!w) {
|
|
20
16
|
return 0;
|
|
21
|
-
|
|
17
|
+
}
|
|
18
|
+
if (w.length <= 3) {
|
|
22
19
|
return 1;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
}
|
|
21
|
+
let count = (w.replace(/e$/u, "").match(/[aeiouy]+/gu) ?? []).length;
|
|
22
|
+
if (w.endsWith("le") && !/[aeiouy]le$/u.test(w)) {
|
|
23
|
+
count += 1;
|
|
24
|
+
}
|
|
26
25
|
return Math.max(1, count);
|
|
27
|
-
}
|
|
26
|
+
};
|
|
28
27
|
/**
|
|
29
28
|
* Flesch Reading Ease (English formula). Returns null when there is not enough text.
|
|
30
29
|
* 90-100 very easy, 60-70 plain English, 30-50 difficult, <30 very difficult.
|
|
31
30
|
*/
|
|
32
|
-
export
|
|
31
|
+
export const fleschReadingEase = (text) => {
|
|
33
32
|
const ws = words(text);
|
|
34
|
-
if (ws.length < 100)
|
|
33
|
+
if (ws.length < 100) {
|
|
35
34
|
return null;
|
|
35
|
+
}
|
|
36
36
|
const sentences = sentenceCount(text);
|
|
37
37
|
const syl = ws.reduce((sum, w) => sum + syllables(w), 0);
|
|
38
38
|
const score = 206.835 - 1.015 * (ws.length / sentences) - 84.6 * (syl / ws.length);
|
|
39
39
|
return Math.round(score * 10) / 10;
|
|
40
|
-
}
|
|
41
|
-
const PLACEHOLDER_RE = /lorem ipsum|dolor sit amet|consectetur adipiscing/
|
|
42
|
-
export
|
|
43
|
-
return PLACEHOLDER_RE.test(text);
|
|
44
|
-
}
|
|
40
|
+
};
|
|
41
|
+
const PLACEHOLDER_RE = /lorem ipsum|dolor sit amet|consectetur adipiscing/iu;
|
|
42
|
+
export const hasPlaceholderText = (text) => PLACEHOLDER_RE.test(text);
|
|
45
43
|
export const GENERIC_TITLES = new Set([
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
44
|
+
"home",
|
|
45
|
+
"homepage",
|
|
46
|
+
"index",
|
|
47
|
+
"untitled",
|
|
48
|
+
"untitled page",
|
|
49
|
+
"untitled document",
|
|
50
|
+
"document",
|
|
51
|
+
"new page",
|
|
52
|
+
"page",
|
|
53
|
+
"title",
|
|
54
|
+
"welcome",
|
|
55
|
+
"react app",
|
|
56
|
+
"vite app",
|
|
57
|
+
"vite + react",
|
|
58
|
+
"vite + react + ts",
|
|
59
|
+
"vite + vue",
|
|
60
|
+
"vite + svelte",
|
|
61
|
+
"create next app",
|
|
62
|
+
"next app",
|
|
63
|
+
"nuxt app",
|
|
64
|
+
"nuxt",
|
|
65
|
+
"astro",
|
|
66
|
+
"my app",
|
|
67
|
+
"my site",
|
|
68
|
+
"my website",
|
|
69
|
+
"website",
|
|
70
|
+
"default",
|
|
71
|
+
"test",
|
|
72
|
+
"hello world",
|
|
73
|
+
"svelte app",
|
|
74
|
+
"angular app",
|
|
75
|
+
"gatsby default starter",
|
|
76
|
+
"remix app",
|
|
77
|
+
"tanstack start starter",
|
|
78
|
+
"example",
|
|
81
79
|
]);
|
|
82
|
-
export
|
|
83
|
-
return GENERIC_TITLES.has(collapseWhitespace(title).toLowerCase());
|
|
84
|
-
}
|
|
80
|
+
export const isGenericTitle = (title) => GENERIC_TITLES.has(collapseWhitespace(title).toLowerCase());
|
|
85
81
|
export const GENERIC_ANCHORS = new Set([
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
82
|
+
"click here",
|
|
83
|
+
"here",
|
|
84
|
+
"read more",
|
|
85
|
+
"learn more",
|
|
86
|
+
"more",
|
|
87
|
+
"link",
|
|
88
|
+
"this",
|
|
89
|
+
"this page",
|
|
90
|
+
"continue",
|
|
91
|
+
"continue reading",
|
|
92
|
+
"details",
|
|
93
|
+
"more info",
|
|
94
|
+
"info",
|
|
95
|
+
"go",
|
|
96
|
+
"page",
|
|
97
|
+
"article",
|
|
98
|
+
"website",
|
|
99
|
+
"url",
|
|
100
|
+
"www",
|
|
105
101
|
]);
|
|
106
|
-
export
|
|
107
|
-
const t = collapseWhitespace(text)
|
|
102
|
+
export const isGenericAnchor = (text) => {
|
|
103
|
+
const t = collapseWhitespace(text)
|
|
104
|
+
.toLowerCase()
|
|
105
|
+
.replace(/[.!…»›>]+$/u, "")
|
|
106
|
+
.trim();
|
|
108
107
|
return GENERIC_ANCHORS.has(t);
|
|
109
|
-
}
|
|
110
|
-
export
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
export function includesKeyword(haystack, keyword) {
|
|
114
|
-
if (!haystack)
|
|
108
|
+
};
|
|
109
|
+
export const normalizeForComparison = (text) => collapseWhitespace(text).toLowerCase();
|
|
110
|
+
export const includesKeyword = (haystack, keyword) => {
|
|
111
|
+
if (!haystack) {
|
|
115
112
|
return false;
|
|
113
|
+
}
|
|
116
114
|
return normalizeForComparison(haystack).includes(normalizeForComparison(keyword));
|
|
117
|
-
}
|
|
118
|
-
export
|
|
115
|
+
};
|
|
116
|
+
export const keywordOccurrences = (text, keyword) => {
|
|
119
117
|
const hay = normalizeForComparison(text);
|
|
120
118
|
const needle = normalizeForComparison(keyword);
|
|
121
|
-
if (!needle)
|
|
119
|
+
if (!needle) {
|
|
122
120
|
return 0;
|
|
121
|
+
}
|
|
123
122
|
let count = 0;
|
|
124
123
|
let idx = hay.indexOf(needle);
|
|
125
124
|
while (idx !== -1) {
|
|
126
|
-
count
|
|
125
|
+
count += 1;
|
|
127
126
|
idx = hay.indexOf(needle, idx + needle.length);
|
|
128
127
|
}
|
|
129
128
|
return count;
|
|
130
|
-
}
|
|
129
|
+
};
|
|
131
130
|
/** 5-word shingles for near-duplicate detection. */
|
|
132
|
-
export
|
|
131
|
+
export const shingles = (text, size = 5) => {
|
|
133
132
|
const ws = words(normalizeForComparison(text));
|
|
134
133
|
const out = new Set();
|
|
135
|
-
for (let i = 0; i + size <= ws.length; i
|
|
136
|
-
out.add(ws.slice(i, i + size).join(
|
|
134
|
+
for (let i = 0; i + size <= ws.length; i += 1) {
|
|
135
|
+
out.add(ws.slice(i, i + size).join(" "));
|
|
136
|
+
}
|
|
137
137
|
return out;
|
|
138
|
-
}
|
|
139
|
-
export
|
|
140
|
-
if (a.size === 0 && b.size === 0)
|
|
138
|
+
};
|
|
139
|
+
export const jaccard = (a, b) => {
|
|
140
|
+
if (a.size === 0 && b.size === 0) {
|
|
141
141
|
return 1;
|
|
142
|
+
}
|
|
142
143
|
let inter = 0;
|
|
143
144
|
const [small, large] = a.size < b.size ? [a, b] : [b, a];
|
|
144
|
-
for (const s of small)
|
|
145
|
-
if (large.has(s))
|
|
146
|
-
inter
|
|
145
|
+
for (const s of small) {
|
|
146
|
+
if (large.has(s)) {
|
|
147
|
+
inter += 1;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
147
150
|
return inter / (a.size + b.size - inter);
|
|
148
|
-
}
|
|
151
|
+
};
|
|
149
152
|
//# sourceMappingURL=text.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/core/html/text.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,MAAM,OAAO,GAAG,gCAAgC,CAAC;AAEjD,MAAM,
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/core/html/text.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,35 +1,24 @@
|
|
|
1
|
-
import type { PerformanceResult } from
|
|
1
|
+
import type { PerformanceResult } from "./types.js";
|
|
2
2
|
export declare class LighthouseUnavailableError extends Error {
|
|
3
3
|
constructor(message: string);
|
|
4
4
|
}
|
|
5
5
|
export interface LighthouseRunOptions {
|
|
6
|
-
formFactor?:
|
|
6
|
+
formFactor?: "mobile" | "desktop";
|
|
7
7
|
timeoutMs?: number;
|
|
8
8
|
chromePath?: string;
|
|
9
9
|
userAgent?: string;
|
|
10
10
|
headers?: Record<string, string>;
|
|
11
11
|
}
|
|
12
12
|
export declare const LIGHTHOUSE_INSTALL_HINT = "Install Lighthouse and a Chrome: `pnpm add -D lighthouse chrome-launcher` plus Google Chrome, or `pnpm exec playwright install chromium` (the Playwright Chromium is used automatically when found).";
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
categories: Record<string, {
|
|
23
|
-
score: number | null;
|
|
24
|
-
auditRefs: {
|
|
25
|
-
id: string;
|
|
26
|
-
weight: number;
|
|
27
|
-
group?: string;
|
|
28
|
-
}[];
|
|
29
|
-
} | undefined>;
|
|
30
|
-
audits: Record<string, LhAudit | undefined>;
|
|
31
|
-
};
|
|
32
|
-
type LhAudit = {
|
|
13
|
+
interface LhCategory {
|
|
14
|
+
score: number | null;
|
|
15
|
+
auditRefs: {
|
|
16
|
+
id: string;
|
|
17
|
+
weight: number;
|
|
18
|
+
group?: string;
|
|
19
|
+
}[];
|
|
20
|
+
}
|
|
21
|
+
interface LhAudit {
|
|
33
22
|
id: string;
|
|
34
23
|
title: string;
|
|
35
24
|
description: string;
|
|
@@ -43,7 +32,19 @@ type LhAudit = {
|
|
|
43
32
|
overallSavingsMs?: number;
|
|
44
33
|
overallSavingsBytes?: number;
|
|
45
34
|
};
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
35
|
+
}
|
|
36
|
+
interface LhrLike {
|
|
37
|
+
lighthouseVersion: string;
|
|
38
|
+
requestedUrl?: string;
|
|
39
|
+
finalDisplayedUrl?: string;
|
|
40
|
+
finalUrl?: string;
|
|
41
|
+
runtimeError?: {
|
|
42
|
+
code: string;
|
|
43
|
+
message: string;
|
|
44
|
+
};
|
|
45
|
+
categories: Record<string, LhCategory | undefined>;
|
|
46
|
+
audits: Record<string, LhAudit | undefined>;
|
|
47
|
+
}
|
|
48
|
+
export declare const summarize: (lhr: LhrLike, requestedUrl: string, formFactor: "mobile" | "desktop") => PerformanceResult;
|
|
49
|
+
export declare const runLighthouse: (url: string, options?: LighthouseRunOptions) => Promise<PerformanceResult>;
|
|
49
50
|
export {};
|