@rivi-software/agentic-seo-check 0.1.0 → 0.2.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/LICENSE +1 -1
- package/README.md +124 -18
- package/dist/brand.d.ts +11 -0
- package/dist/brand.js +22 -0
- package/dist/brand.js.map +1 -0
- package/dist/cli.js +174 -86
- package/dist/cli.js.map +1 -1
- package/dist/core/aeo/audit.d.ts +44 -0
- package/dist/core/aeo/audit.js +310 -0
- package/dist/core/aeo/audit.js.map +1 -0
- package/dist/core/aeo/bots.d.ts +30 -0
- package/dist/core/aeo/bots.js +299 -0
- package/dist/core/aeo/bots.js.map +1 -0
- package/dist/core/aeo/llms-txt.d.ts +8 -0
- package/dist/core/aeo/llms-txt.js +88 -0
- package/dist/core/aeo/llms-txt.js.map +1 -0
- package/dist/core/aeo/page.d.ts +53 -0
- package/dist/core/aeo/page.js +312 -0
- package/dist/core/aeo/page.js.map +1 -0
- package/dist/core/aeo/probe.d.ts +10 -0
- package/dist/core/aeo/probe.js +53 -0
- package/dist/core/aeo/probe.js.map +1 -0
- package/dist/core/aeo/site-rules.d.ts +13 -0
- package/dist/core/aeo/site-rules.js +178 -0
- package/dist/core/aeo/site-rules.js.map +1 -0
- package/dist/core/audit.d.ts +37 -16
- package/dist/core/audit.js +389 -249
- 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 +9 -5
- package/dist/core/crawl.js +271 -123
- 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/answer.d.ts +4 -0
- package/dist/core/html/answer.js +198 -0
- package/dist/core/html/answer.js.map +1 -0
- package/dist/core/html/dom.d.ts +17 -0
- package/dist/core/html/dom.js +83 -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 +102 -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 +4 -2
- package/dist/core/report/markdown.js +210 -129
- package/dist/core/report/markdown.js.map +1 -1
- package/dist/core/robots.d.ts +12 -5
- package/dist/core/robots.js +43 -17
- package/dist/core/robots.js.map +1 -1
- package/dist/core/rules/aeo.d.ts +11 -0
- package/dist/core/rules/aeo.js +423 -0
- package/dist/core/rules/aeo.js.map +1 -0
- 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 +10 -6
- package/dist/core/rules/index.js +43 -36
- 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 +5 -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 +210 -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 +189 -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 +15 -11
- package/dist/index.js +11 -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 +437 -121
- 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 +32 -10
- package/skills/seo-audit/SKILL.md +8 -2
package/dist/core/rules/title.js
CHANGED
|
@@ -1,59 +1,74 @@
|
|
|
1
|
-
import { isGenericTitle } from
|
|
2
|
-
import { defineRule, GOOGLE_DOCS } from
|
|
1
|
+
import { isGenericTitle } from "../html/text.js";
|
|
2
|
+
import { defineRule, GOOGLE_DOCS } from "./rule.js";
|
|
3
3
|
export const titleRules = [
|
|
4
4
|
defineRule({
|
|
5
|
-
id:
|
|
6
|
-
category:
|
|
7
|
-
severity:
|
|
8
|
-
description:
|
|
9
|
-
recommendation:
|
|
5
|
+
id: "title.missing",
|
|
6
|
+
category: "title",
|
|
7
|
+
severity: "error",
|
|
8
|
+
description: "The page has no <title> element or it is empty.",
|
|
9
|
+
recommendation: "Add a unique, descriptive <title> in <head> (about 30-60 characters) that states what the page is about.",
|
|
10
10
|
docs: GOOGLE_DOCS.titles,
|
|
11
|
-
}, ({ page }, make) =>
|
|
11
|
+
}, ({ page }, make) => page.title
|
|
12
|
+
? null
|
|
13
|
+
: make("Page has no <title> or the title is empty.", {
|
|
14
|
+
selector: "head > title",
|
|
15
|
+
})),
|
|
12
16
|
defineRule({
|
|
13
|
-
id:
|
|
14
|
-
category:
|
|
15
|
-
severity:
|
|
16
|
-
description:
|
|
17
|
-
recommendation:
|
|
17
|
+
id: "title.multiple",
|
|
18
|
+
category: "title",
|
|
19
|
+
severity: "warning",
|
|
20
|
+
description: "More than one <title> element is present.",
|
|
21
|
+
recommendation: "Keep exactly one <title>. Browsers and crawlers may pick different ones when several exist.",
|
|
18
22
|
docs: GOOGLE_DOCS.titles,
|
|
19
23
|
}, ({ page }, make) => page.titles.length > 1
|
|
20
|
-
? make(`Page has ${page.titles.length} <title> elements.`, {
|
|
24
|
+
? make(`Page has ${page.titles.length} <title> elements.`, {
|
|
25
|
+
selector: "title",
|
|
26
|
+
evidence: { titles: page.titles },
|
|
27
|
+
})
|
|
21
28
|
: null),
|
|
22
29
|
defineRule({
|
|
23
|
-
id:
|
|
24
|
-
category:
|
|
25
|
-
severity:
|
|
26
|
-
description:
|
|
27
|
-
recommendation:
|
|
30
|
+
id: "title.too-long",
|
|
31
|
+
category: "title",
|
|
32
|
+
severity: "warning",
|
|
33
|
+
description: "Title is longer than the configured maximum (default 60 characters) and will be truncated in search results.",
|
|
34
|
+
recommendation: "Shorten the title to roughly 60 characters or fewer, keeping the most important words first.",
|
|
28
35
|
docs: GOOGLE_DOCS.titles,
|
|
29
36
|
}, ({ page, thresholds }, make) => page.title && page.title.length > thresholds.titleMaxChars
|
|
30
37
|
? make(`Title is ${page.title.length} characters (max ${thresholds.titleMaxChars}).`, {
|
|
31
|
-
selector:
|
|
32
|
-
evidence: {
|
|
38
|
+
selector: "head > title",
|
|
39
|
+
evidence: {
|
|
40
|
+
title: page.title,
|
|
41
|
+
length: page.title.length,
|
|
42
|
+
max: thresholds.titleMaxChars,
|
|
43
|
+
},
|
|
33
44
|
})
|
|
34
45
|
: null),
|
|
35
46
|
defineRule({
|
|
36
|
-
id:
|
|
37
|
-
category:
|
|
38
|
-
severity:
|
|
39
|
-
description:
|
|
40
|
-
recommendation:
|
|
47
|
+
id: "title.too-short",
|
|
48
|
+
category: "title",
|
|
49
|
+
severity: "info",
|
|
50
|
+
description: "Title is shorter than the configured minimum (default 30 characters).",
|
|
51
|
+
recommendation: "Consider a more descriptive title that includes the page topic and, where sensible, the brand.",
|
|
41
52
|
docs: GOOGLE_DOCS.titles,
|
|
42
53
|
}, ({ page, thresholds }, make) => page.title && page.title.length < thresholds.titleMinChars
|
|
43
54
|
? make(`Title is only ${page.title.length} characters (recommended at least ${thresholds.titleMinChars}).`, {
|
|
44
|
-
selector:
|
|
45
|
-
evidence: {
|
|
55
|
+
selector: "head > title",
|
|
56
|
+
evidence: {
|
|
57
|
+
title: page.title,
|
|
58
|
+
length: page.title.length,
|
|
59
|
+
min: thresholds.titleMinChars,
|
|
60
|
+
},
|
|
46
61
|
})
|
|
47
62
|
: null),
|
|
48
63
|
defineRule({
|
|
49
|
-
id:
|
|
50
|
-
category:
|
|
51
|
-
severity:
|
|
64
|
+
id: "title.generic",
|
|
65
|
+
category: "title",
|
|
66
|
+
severity: "warning",
|
|
52
67
|
description: 'Title is a framework default or placeholder such as "React App", "Create Next App", "Home" or "Untitled".',
|
|
53
|
-
recommendation:
|
|
68
|
+
recommendation: "Replace the placeholder with a title that describes this page. In frameworks, set it per route (metadata export, <Head>, useHead, <svelte:head>, etc.).",
|
|
54
69
|
docs: GOOGLE_DOCS.titles,
|
|
55
70
|
}, ({ page }, make) => page.title && isGenericTitle(page.title)
|
|
56
|
-
? make(`Title "${page.title}" looks like a placeholder or framework default.`, { selector:
|
|
71
|
+
? make(`Title "${page.title}" looks like a placeholder or framework default.`, { selector: "head > title", evidence: { title: page.title } })
|
|
57
72
|
: null),
|
|
58
73
|
];
|
|
59
74
|
//# sourceMappingURL=title.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"title.js","sourceRoot":"","sources":["../../../src/core/rules/title.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAEpD,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,UAAU,CACR;QACE,EAAE,EAAE,eAAe;QACnB,QAAQ,EAAE,OAAO;QACjB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,iDAAiD;QAC9D,cAAc,
|
|
1
|
+
{"version":3,"file":"title.js","sourceRoot":"","sources":["../../../src/core/rules/title.ts"],"names":[],"mappings":"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"}
|
package/dist/core/score.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
import type { Finding,
|
|
2
|
-
export declare
|
|
3
|
-
export declare
|
|
1
|
+
import type { Finding, SeverityCounts } from "./types.js";
|
|
2
|
+
export declare const pageScore: (counts: SeverityCounts) => number;
|
|
3
|
+
export declare const siteScore: (pages: {
|
|
4
|
+
score: number;
|
|
5
|
+
}[], siteFindings: Finding[]) => number;
|
package/dist/core/score.js
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
const PAGE_WEIGHTS = { error: 15, warning: 5, info: 1 };
|
|
2
2
|
const SITE_WEIGHTS = { error: 10, warning: 3, info: 0.5 };
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
const clamp = (n) => Math.max(0, Math.min(100, n));
|
|
4
|
+
export const pageScore = (counts) => {
|
|
5
|
+
const deduction = counts.error * PAGE_WEIGHTS.error +
|
|
6
|
+
counts.warning * PAGE_WEIGHTS.warning +
|
|
7
|
+
counts.info * PAGE_WEIGHTS.info;
|
|
5
8
|
return clamp(Math.round(100 - deduction));
|
|
6
|
-
}
|
|
7
|
-
export
|
|
8
|
-
const avg = pages.length
|
|
9
|
+
};
|
|
10
|
+
export const siteScore = (pages, siteFindings) => {
|
|
11
|
+
const avg = pages.length
|
|
12
|
+
? pages.reduce((sum, p) => sum + p.score, 0) / pages.length
|
|
13
|
+
: 100;
|
|
9
14
|
const deduction = siteFindings.reduce((sum, f) => sum + SITE_WEIGHTS[f.severity], 0);
|
|
10
15
|
return clamp(Math.round(avg - deduction));
|
|
11
|
-
}
|
|
12
|
-
function clamp(n) {
|
|
13
|
-
return Math.max(0, Math.min(100, n));
|
|
14
|
-
}
|
|
16
|
+
};
|
|
15
17
|
//# sourceMappingURL=score.js.map
|
package/dist/core/score.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"score.js","sourceRoot":"","sources":["../../src/core/score.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAW,CAAC;AACjE,MAAM,YAAY,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAW,CAAC;AAEnE,MAAM,
|
|
1
|
+
{"version":3,"file":"score.js","sourceRoot":"","sources":["../../src/core/score.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAW,CAAC;AACjE,MAAM,YAAY,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAW,CAAC;AAEnE,MAAM,KAAK,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAEnE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAsB,EAAU,EAAE;IAC1D,MAAM,SAAS,GACb,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK;QACjC,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO;QACrC,MAAM,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;IAElC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,KAA0B,EAC1B,YAAuB,EACf,EAAE;IACV,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM;QACtB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM;QAC3D,CAAC,CAAC,GAAG,CAAC;IAER,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CACnC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,EAC1C,CAAC,CACF,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ExtractedPage, Finding, ResponseInfo, RobotsTxtInfo, RuleMeta, SitemapInfo, Thresholds, CrawlStats } from
|
|
1
|
+
import type { ExtractedPage, Finding, ResponseInfo, RobotsTxtInfo, RuleMeta, SitemapInfo, Thresholds, CrawlStats } from "./types.js";
|
|
2
2
|
export declare const SITE_RULES: RuleMeta[];
|
|
3
3
|
export interface PageRecord {
|
|
4
4
|
/** Normalized final URL (or synthetic URL for files). */
|
|
@@ -40,7 +40,7 @@ export interface ProbeResults {
|
|
|
40
40
|
}
|
|
41
41
|
export interface SiteContext {
|
|
42
42
|
startUrl: string;
|
|
43
|
-
source:
|
|
43
|
+
source: "crawl" | "directory";
|
|
44
44
|
pages: PageRecord[];
|
|
45
45
|
/** Status of every internal URL that was fetched or probed, keyed by normalized URL. */
|
|
46
46
|
linkChecks: Map<string, LinkCheck>;
|
|
@@ -61,4 +61,4 @@ export interface SiteContext {
|
|
|
61
61
|
/** Directory audits: HTML files nobody links to. */
|
|
62
62
|
unlinkedPages?: string[];
|
|
63
63
|
}
|
|
64
|
-
export declare
|
|
64
|
+
export declare const runSiteRules: (ctx: SiteContext) => Finding[];
|