@automatelab/ai-seo-mcp 0.6.1 → 1.0.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/README.md +21 -21
- package/dist/index.js +93 -74
- package/dist/index.js.map +1 -1
- package/dist/lib/agentic.d.ts +1 -1
- package/dist/lib/agentic.d.ts.map +1 -1
- package/dist/lib/agentic.js +8 -5
- package/dist/lib/agentic.js.map +1 -1
- package/dist/lib/deprecated-schema-types.json +10 -0
- package/dist/lib/fetch.d.ts.map +1 -1
- package/dist/lib/fetch.js +18 -0
- package/dist/lib/fetch.js.map +1 -1
- package/dist/lib/schema-types.json +38 -1
- package/dist/lib/schema.d.ts +2 -0
- package/dist/lib/schema.d.ts.map +1 -1
- package/dist/lib/schema.js +16 -4
- package/dist/lib/schema.js.map +1 -1
- package/dist/lib/score-citability.d.ts +9 -0
- package/dist/lib/score-citability.d.ts.map +1 -0
- package/dist/lib/score-citability.js +94 -0
- package/dist/lib/score-citability.js.map +1 -0
- package/dist/lib/score-content.d.ts +8 -0
- package/dist/lib/score-content.d.ts.map +1 -0
- package/dist/lib/score-content.js +52 -0
- package/dist/lib/score-content.js.map +1 -0
- package/dist/lib/score-eeat.d.ts +16 -0
- package/dist/lib/score-eeat.d.ts.map +1 -0
- package/dist/lib/score-eeat.js +149 -0
- package/dist/lib/score-eeat.js.map +1 -0
- package/dist/lib/score-evidence.d.ts +10 -0
- package/dist/lib/score-evidence.d.ts.map +1 -0
- package/dist/lib/score-evidence.js +84 -0
- package/dist/lib/score-evidence.js.map +1 -0
- package/dist/lib/score.d.ts +48 -7
- package/dist/lib/score.d.ts.map +1 -1
- package/dist/lib/score.js +46 -10
- package/dist/lib/score.js.map +1 -1
- package/dist/lib/ssrf.d.ts +6 -0
- package/dist/lib/ssrf.d.ts.map +1 -0
- package/dist/lib/ssrf.js +71 -0
- package/dist/lib/ssrf.js.map +1 -0
- package/dist/output-schemas.d.ts +211 -30
- package/dist/output-schemas.d.ts.map +1 -1
- package/dist/output-schemas.js +30 -1
- package/dist/output-schemas.js.map +1 -1
- package/dist/tools/audit-page.d.ts +6 -10
- package/dist/tools/audit-page.d.ts.map +1 -1
- package/dist/tools/audit-page.js +59 -4
- package/dist/tools/audit-page.js.map +1 -1
- package/dist/tools/generate-pricing-md.d.ts +24 -0
- package/dist/tools/generate-pricing-md.d.ts.map +1 -0
- package/dist/tools/generate-pricing-md.js +167 -0
- package/dist/tools/generate-pricing-md.js.map +1 -0
- package/dist/tools/save-audit-report.js +1 -1
- package/dist/tools/validate-llms-txt.d.ts +4 -4
- package/dist/types.d.ts +9 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/lib/schema-types.json +38 -1
package/dist/lib/agentic.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export interface AgenticFactor {
|
|
|
7
7
|
detail: string;
|
|
8
8
|
}
|
|
9
9
|
export interface AgenticBrowsingResult {
|
|
10
|
-
/** Weighted 0-100 composite (
|
|
10
|
+
/** Weighted 0-100 composite (accessibility 40%, layout 35%, webmcp 15%, llms.txt 10%). */
|
|
11
11
|
score: number;
|
|
12
12
|
grade: Grade;
|
|
13
13
|
factors: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentic.d.ts","sourceRoot":"","sources":["../../src/lib/agentic.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,
|
|
1
|
+
{"version":3,"file":"agentic.d.ts","sourceRoot":"","sources":["../../src/lib/agentic.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,0FAA0F;IAC1F,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE;QACP,QAAQ,EAAE,aAAa,CAAC;QACxB,MAAM,EAAE,aAAa,CAAC;QACtB,kBAAkB,EAAE,aAAa,CAAC;QAClC,gBAAgB,EAAE,aAAa,CAAC;KACjC,CAAC;IACF,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAUD,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,sFAAsF;IACtF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAqID,uEAAuE;AACvE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,qBAAqB,CA8D/F"}
|
package/dist/lib/agentic.js
CHANGED
|
@@ -159,10 +159,13 @@ export function scoreAgenticBrowsing(html, llmsTxt) {
|
|
|
159
159
|
accessibility_tree: scoreAccessibilityTree($, html),
|
|
160
160
|
layout_stability: scoreLayoutStability($),
|
|
161
161
|
};
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
162
|
+
// llms.txt is downweighted: primary-source evidence shows it is a discovery
|
|
163
|
+
// aid, not a proven citation lever. The accessibility tree and layout
|
|
164
|
+
// stability are what agents actually rely on to read and act on a page.
|
|
165
|
+
const score = Math.round(factors.llms_txt.score * 0.1 +
|
|
166
|
+
factors.webmcp.score * 0.15 +
|
|
167
|
+
factors.accessibility_tree.score * 0.4 +
|
|
168
|
+
factors.layout_stability.score * 0.35);
|
|
166
169
|
const findings = [];
|
|
167
170
|
if (factors.llms_txt.score < 100) {
|
|
168
171
|
findings.push({
|
|
@@ -170,7 +173,7 @@ export function scoreAgenticBrowsing(html, llmsTxt) {
|
|
|
170
173
|
category: "llms_txt",
|
|
171
174
|
where: "/llms.txt",
|
|
172
175
|
message: factors.llms_txt.detail,
|
|
173
|
-
fix: "Publish a spec-compliant llms.txt at the site root listing your key pages.
|
|
176
|
+
fix: "Publish a spec-compliant llms.txt at the site root listing your key pages. Note: llms.txt is a discovery aid (Lighthouse checks for it), not a proven citation lever — don't expect a ranking/citation boost from it alone.",
|
|
174
177
|
estimated_impact: "low",
|
|
175
178
|
});
|
|
176
179
|
}
|
package/dist/lib/agentic.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentic.js","sourceRoot":"","sources":["../../src/lib/agentic.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agentic.js","sourceRoot":"","sources":["../../src/lib/agentic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"HowTo": "Google removed HowTo rich results (June 2025). The type is still valid Schema.org but no longer yields rich results.",
|
|
3
|
+
"FAQPage": "Google restricts FAQ rich results to authoritative government/health sites (Aug 2023). Still valid and useful for AI extraction, but expect no SERP rich result.",
|
|
4
|
+
"ClaimReview": "ClaimReview rich results were deprecated for most sites (June 2025). Still valid Schema.org; no rich result for non-allowlisted publishers.",
|
|
5
|
+
"SpecialAnnouncement": "COVID-era SpecialAnnouncement rich results were retired (June 2025).",
|
|
6
|
+
"EstimatedSalary": "EstimatedSalary rich results were retired (June 2025).",
|
|
7
|
+
"LearningVideo": "LearningVideo rich results were retired (June 2025).",
|
|
8
|
+
"VehicleListing": "VehicleListing rich results were retired (June 2025).",
|
|
9
|
+
"Course": "Course Info carousel rich result was narrowed (June 2025); the Course type stays valid for AI extraction."
|
|
10
|
+
}
|
package/dist/lib/fetch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/lib/fetch.ts"],"names":[],"mappings":"AAMA,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/lib/fetch.ts"],"names":[],"mappings":"AAMA,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAGjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,kEAAkE;IAClE,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sDAAsD;IACtD,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,cAAe,SAAQ,KAAK;aACX,SAAS,EAAE,SAAS;gBAApB,SAAS,EAAE,SAAS;CAOjD;AAeD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,WAAW,CAAC,CAiMtB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgCxB"}
|
package/dist/lib/fetch.js
CHANGED
|
@@ -5,6 +5,7 @@ import { POLITE_FETCH } from "./config.js";
|
|
|
5
5
|
import { checkRobotsAllowed, fetchRobotsTxt } from "./robots.js";
|
|
6
6
|
import { cacheGet, cacheSet } from "./cache.js";
|
|
7
7
|
import { renderHeadless, HeadlessUnavailableError } from "./headless.js";
|
|
8
|
+
import { ssrfBlockReason } from "./ssrf.js";
|
|
8
9
|
export class ToolFetchError extends Error {
|
|
9
10
|
toolError;
|
|
10
11
|
constructor(toolError) {
|
|
@@ -42,7 +43,21 @@ export async function politeFetch(url, opts = {}) {
|
|
|
42
43
|
message: `Invalid URL: ${url}`,
|
|
43
44
|
});
|
|
44
45
|
}
|
|
46
|
+
// Protocol allow-list: only http(s). Blocks file:, ftp:, gopher:, data:, etc.
|
|
47
|
+
if (parsedUrl.protocol !== "http:" && parsedUrl.protocol !== "https:") {
|
|
48
|
+
throw new ToolFetchError({
|
|
49
|
+
type: "blocked_host",
|
|
50
|
+
url,
|
|
51
|
+
reason: `unsupported protocol "${parsedUrl.protocol}" (only http/https allowed)`,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
45
54
|
const hostname = parsedUrl.hostname;
|
|
55
|
+
// SSRF guard: block private/loopback/link-local/reserved targets, including
|
|
56
|
+
// hostnames that resolve to private IPs (DNS rebinding).
|
|
57
|
+
const blockReason = await ssrfBlockReason(hostname);
|
|
58
|
+
if (blockReason) {
|
|
59
|
+
throw new ToolFetchError({ type: "blocked_host", url, reason: blockReason });
|
|
60
|
+
}
|
|
46
61
|
const respectRobots = opts.respectRobots !== undefined ? opts.respectRobots : POLITE_FETCH.RESPECT_ROBOTS;
|
|
47
62
|
const renderMode = opts.renderMode ?? "static";
|
|
48
63
|
// Cache lookup. Cached entries bypass robots check, rate limiting, and the network call.
|
|
@@ -201,6 +216,9 @@ export async function politeHead(url, opts = {}) {
|
|
|
201
216
|
const hostname = getHostname(url);
|
|
202
217
|
if (!hostname)
|
|
203
218
|
return null;
|
|
219
|
+
// SSRF guard for HEAD checks too (link-health probes hit arbitrary URLs).
|
|
220
|
+
if (await ssrfBlockReason(hostname))
|
|
221
|
+
return null;
|
|
204
222
|
if (opts.hostDelays) {
|
|
205
223
|
const lastRequest = opts.hostDelays.get(hostname);
|
|
206
224
|
if (lastRequest !== undefined) {
|
package/dist/lib/fetch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/lib/fetch.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,uFAAuF;AAEvF,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAmB,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/lib/fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,5 +52,42 @@
|
|
|
52
52
|
"Brand",
|
|
53
53
|
"Intangible",
|
|
54
54
|
"Thing",
|
|
55
|
-
"Place"
|
|
55
|
+
"Place",
|
|
56
|
+
"ItemList",
|
|
57
|
+
"CollectionPage",
|
|
58
|
+
"ProfilePage",
|
|
59
|
+
"QAPage",
|
|
60
|
+
"Service",
|
|
61
|
+
"OfferCatalog",
|
|
62
|
+
"WebPageElement",
|
|
63
|
+
"SiteNavigationElement",
|
|
64
|
+
"Table",
|
|
65
|
+
"Comment",
|
|
66
|
+
"DiscussionForumPosting",
|
|
67
|
+
"SocialMediaPosting",
|
|
68
|
+
"DefinedTerm",
|
|
69
|
+
"DefinedTermSet",
|
|
70
|
+
"PropertyValue",
|
|
71
|
+
"Quotation",
|
|
72
|
+
"HowToDirection",
|
|
73
|
+
"MenuItem",
|
|
74
|
+
"Menu",
|
|
75
|
+
"JobPosting",
|
|
76
|
+
"VideoGame",
|
|
77
|
+
"Episode",
|
|
78
|
+
"PodcastEpisode",
|
|
79
|
+
"Movie",
|
|
80
|
+
"TVSeries",
|
|
81
|
+
"MusicRecording",
|
|
82
|
+
"GeoShape",
|
|
83
|
+
"Country",
|
|
84
|
+
"AdministrativeArea",
|
|
85
|
+
"EducationalOccupationalCredential",
|
|
86
|
+
"Occupation",
|
|
87
|
+
"Audience",
|
|
88
|
+
"FinancialProduct",
|
|
89
|
+
"Vehicle",
|
|
90
|
+
"RealEstateListing",
|
|
91
|
+
"Apartment",
|
|
92
|
+
"House"
|
|
56
93
|
]
|
package/dist/lib/schema.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { Finding } from "../types.js";
|
|
2
2
|
export declare const KNOWN_SCHEMA_TYPES: Set<string>;
|
|
3
|
+
/** Types still valid in Schema.org but whose Google rich result was retired/narrowed. */
|
|
4
|
+
export declare const DEPRECATED_SCHEMA_TYPES: Record<string, string>;
|
|
3
5
|
export interface ParsedJsonLd {
|
|
4
6
|
raw: string;
|
|
5
7
|
parsed: Record<string, unknown>;
|
package/dist/lib/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/lib/schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/lib/schema.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,eAAO,MAAM,kBAAkB,aAA2C,CAAC;AAC3E,yFAAyF;AACzF,eAAO,MAAM,uBAAuB,EAAsB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEjF,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAWD,qDAAqD;AACrD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAMnE;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAmBxD;AAED,uDAAuD;AACvD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAMlE;AAKD,yCAAyC;AACzC,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAiBtE;AAED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,EAAE,CAsOhE;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAQ9D"}
|
package/dist/lib/schema.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
// JSON-LD extractor and Schema.org validator.
|
|
2
2
|
import { extractJsonLdBlocks } from "./html.js";
|
|
3
3
|
import schemaTypes from "./schema-types.json" with { type: "json" };
|
|
4
|
+
import deprecatedTypes from "./deprecated-schema-types.json" with { type: "json" };
|
|
4
5
|
export const KNOWN_SCHEMA_TYPES = new Set(schemaTypes);
|
|
6
|
+
/** Types still valid in Schema.org but whose Google rich result was retired/narrowed. */
|
|
7
|
+
export const DEPRECATED_SCHEMA_TYPES = deprecatedTypes;
|
|
5
8
|
/** Flatten @graph arrays into individual objects. */
|
|
6
9
|
function flattenGraph(obj) {
|
|
7
10
|
const graph = obj["@graph"];
|
|
@@ -279,15 +282,24 @@ export function validateJsonLd(blocks) {
|
|
|
279
282
|
});
|
|
280
283
|
}
|
|
281
284
|
}
|
|
282
|
-
// Unknown type
|
|
285
|
+
// Unknown / deprecated type checks
|
|
283
286
|
for (const t of block.types) {
|
|
284
|
-
if (
|
|
287
|
+
if (DEPRECATED_SCHEMA_TYPES[t]) {
|
|
285
288
|
findings.push({
|
|
286
|
-
severity: "
|
|
289
|
+
severity: "info",
|
|
290
|
+
category: "schema",
|
|
291
|
+
where: "@type",
|
|
292
|
+
message: `Schema.org type "${t}" no longer yields a Google rich result.`,
|
|
293
|
+
fix: DEPRECATED_SCHEMA_TYPES[t],
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
else if (!KNOWN_SCHEMA_TYPES.has(t)) {
|
|
297
|
+
findings.push({
|
|
298
|
+
severity: "info",
|
|
287
299
|
category: "schema",
|
|
288
300
|
where: "@type",
|
|
289
301
|
message: `Unrecognized Schema.org type: "${t}".`,
|
|
290
|
-
fix: "Verify the type name at schema.org
|
|
302
|
+
fix: "Verify the type name at schema.org; correct any typo. If it is a valid but uncommon type, this is safe to ignore.",
|
|
291
303
|
estimated_impact: "low",
|
|
292
304
|
});
|
|
293
305
|
}
|
package/dist/lib/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/lib/schema.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,WAAW,MAAM,qBAAqB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/lib/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Finding } from "../types.js";
|
|
2
|
+
export interface CitabilityResult {
|
|
3
|
+
score: number;
|
|
4
|
+
passages_analyzed: number;
|
|
5
|
+
optimal_passages: number;
|
|
6
|
+
findings: Finding[];
|
|
7
|
+
}
|
|
8
|
+
export declare function scoreCitability(html: string): CitabilityResult;
|
|
9
|
+
//# sourceMappingURL=score-citability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"score-citability.d.ts","sourceRoot":"","sources":["../../src/lib/score-citability.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAW3C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAMD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CA8E9D"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// Passage-level citability (GEO).
|
|
2
|
+
//
|
|
3
|
+
// Convergent finding across independent GEO research (Princeton GEO, and two public
|
|
4
|
+
// GEO audit toolkits): AI engines lift CLEAN, SELF-CONTAINED answer passages of
|
|
5
|
+
// roughly 134-167 words. Sections far outside that band (giant walls of text, or
|
|
6
|
+
// one-line stubs) are cited far less reliably. This module splits the page into
|
|
7
|
+
// heading-delimited sections and scores how many are in the citable band.
|
|
8
|
+
import { extractSections } from "./html.js";
|
|
9
|
+
const OPTIMAL_MIN = 120; // a little wider than 134-167 to avoid false negatives
|
|
10
|
+
const OPTIMAL_MAX = 180;
|
|
11
|
+
const TOO_LONG = 280;
|
|
12
|
+
const TOO_SHORT = 40;
|
|
13
|
+
// Sections that open with a dangling reference can't be lifted as a standalone
|
|
14
|
+
// answer — the AI would have to pull surrounding context it may not cite.
|
|
15
|
+
const DANGLING_OPENERS = /^(this|that|these|those|it|they|he|she|here|there|such|which)\b/i;
|
|
16
|
+
function wordCount(text) {
|
|
17
|
+
return text.split(/\s+/).filter((w) => w.length > 0).length;
|
|
18
|
+
}
|
|
19
|
+
export function scoreCitability(html) {
|
|
20
|
+
const sections = extractSections(html).filter((s) => s.heading.length > 0 && s.text.length > 0);
|
|
21
|
+
const findings = [];
|
|
22
|
+
if (sections.length === 0) {
|
|
23
|
+
// No heading-delimited prose to lift. One finding, neutral-low score.
|
|
24
|
+
findings.push({
|
|
25
|
+
severity: "warning",
|
|
26
|
+
category: "citation",
|
|
27
|
+
where: "<body>",
|
|
28
|
+
message: "No heading-delimited answer passages found; AI engines have nothing self-contained to lift.",
|
|
29
|
+
fix: "Structure content under descriptive H2/H3 headings, each followed by a 120-170 word self-contained answer.",
|
|
30
|
+
estimated_impact: "high",
|
|
31
|
+
failure_signal: "Re-audit still reports 0 heading-delimited passages.",
|
|
32
|
+
leading_indicator: "Number of H2/H3 sections each carrying a standalone answer paragraph.",
|
|
33
|
+
});
|
|
34
|
+
return { score: 30, passages_analyzed: 0, optimal_passages: 0, findings };
|
|
35
|
+
}
|
|
36
|
+
let optimal = 0;
|
|
37
|
+
let tooLong = 0;
|
|
38
|
+
let tooShort = 0;
|
|
39
|
+
let dangling = 0;
|
|
40
|
+
const longSamples = [];
|
|
41
|
+
for (const s of sections) {
|
|
42
|
+
const wc = wordCount(s.text);
|
|
43
|
+
if (wc >= OPTIMAL_MIN && wc <= OPTIMAL_MAX)
|
|
44
|
+
optimal++;
|
|
45
|
+
if (wc > TOO_LONG) {
|
|
46
|
+
tooLong++;
|
|
47
|
+
if (longSamples.length < 3)
|
|
48
|
+
longSamples.push(`"${s.heading.slice(0, 40)}" (${wc}w)`);
|
|
49
|
+
}
|
|
50
|
+
if (wc < TOO_SHORT)
|
|
51
|
+
tooShort++;
|
|
52
|
+
if (DANGLING_OPENERS.test(s.text.trim()))
|
|
53
|
+
dangling++;
|
|
54
|
+
}
|
|
55
|
+
// Score: share of sections in the citable band, with partial credit for
|
|
56
|
+
// near-band sections, minus a penalty for dangling openers.
|
|
57
|
+
const inBandRatio = optimal / sections.length;
|
|
58
|
+
const longPenalty = Math.min(0.3, tooLong / sections.length);
|
|
59
|
+
const danglingPenalty = Math.min(0.2, dangling / sections.length);
|
|
60
|
+
const score = Math.round(Math.max(0, Math.min(100, (inBandRatio * 0.7 + 0.3 - longPenalty - danglingPenalty) * 100)));
|
|
61
|
+
if (tooLong >= 2 || (tooLong >= 1 && sections.length <= 3)) {
|
|
62
|
+
findings.push({
|
|
63
|
+
severity: "warning",
|
|
64
|
+
category: "citation",
|
|
65
|
+
where: "page-level",
|
|
66
|
+
message: `${tooLong} section${tooLong === 1 ? " is" : "s are"} too long to cite cleanly (${longSamples.join(", ")}).`,
|
|
67
|
+
fix: "Split each long section into 120-170 word self-contained passages under their own H3 so an AI can lift one answer.",
|
|
68
|
+
estimated_impact: "high",
|
|
69
|
+
failure_signal: "Sections still exceed ~280 words on re-audit.",
|
|
70
|
+
leading_indicator: "Median words-per-section trending toward the 134-167 band.",
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (optimal === 0 && sections.length >= 2) {
|
|
74
|
+
findings.push({
|
|
75
|
+
severity: "warning",
|
|
76
|
+
category: "citation",
|
|
77
|
+
where: "page-level",
|
|
78
|
+
message: `None of ${sections.length} sections fall in the 134-167 word citable band.`,
|
|
79
|
+
fix: "Rework answers so each H2/H3 section is a self-contained 120-170 word passage that answers one question.",
|
|
80
|
+
estimated_impact: "high",
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
if (dangling >= 2) {
|
|
84
|
+
findings.push({
|
|
85
|
+
severity: "info",
|
|
86
|
+
category: "citation",
|
|
87
|
+
where: "page-level",
|
|
88
|
+
message: `${dangling} sections open with a dangling reference (this/it/they), so they can't be lifted standalone.`,
|
|
89
|
+
fix: "Start each section with a self-contained sentence that names its subject explicitly.",
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return { score, passages_analyzed: sections.length, optimal_passages: optimal, findings };
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=score-citability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"score-citability.js","sourceRoot":"","sources":["../../src/lib/score-citability.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Finding } from "../types.js";
|
|
2
|
+
export interface ContentResult {
|
|
3
|
+
score: number;
|
|
4
|
+
filler_hits: number;
|
|
5
|
+
findings: Finding[];
|
|
6
|
+
}
|
|
7
|
+
export declare function scoreContent(bodyText: string, wordCount: number): ContentResult;
|
|
8
|
+
//# sourceMappingURL=score-content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"score-content.d.ts","sourceRoot":"","sources":["../../src/lib/score-content.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAe3C,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,aAAa,CAkC/E"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// AI-content / filler heuristic (#10).
|
|
2
|
+
//
|
|
3
|
+
// Generative-engine guidelines (Google QRG §4.6.5/4.6.6 on "filler") and the
|
|
4
|
+
// GEO toolkits flag low-information, hedging, AI-pattern prose. This is a cheap
|
|
5
|
+
// lexical heuristic — it flags density of known filler/hedging phrases and the
|
|
6
|
+
// "delve into / tapestry / ever-evolving" cluster that signals unedited LLM
|
|
7
|
+
// output. It is a DIAGNOSTIC (info-level), never a hard score killer.
|
|
8
|
+
const FILLER_PHRASES = [
|
|
9
|
+
"in today's world", "in today's fast-paced", "it is important to note",
|
|
10
|
+
"it's important to note", "it is worth noting", "it's worth noting",
|
|
11
|
+
"when it comes to", "at the end of the day", "needless to say",
|
|
12
|
+
"as we all know", "in the realm of", "in the world of", "navigating the",
|
|
13
|
+
"plays a crucial role", "plays a vital role", "plays a pivotal role",
|
|
14
|
+
"in order to", "a testament to", "the ever-evolving", "ever-changing landscape",
|
|
15
|
+
"unlock the", "unleash the", "delve into", "dive into the world",
|
|
16
|
+
"rich tapestry", "tapestry of", "game-changer", "game changer",
|
|
17
|
+
"in conclusion", "in summary", "last but not least", "first and foremost",
|
|
18
|
+
"it goes without saying", "the power of", "harness the power",
|
|
19
|
+
];
|
|
20
|
+
export function scoreContent(bodyText, wordCount) {
|
|
21
|
+
const findings = [];
|
|
22
|
+
if (wordCount < 200) {
|
|
23
|
+
return { score: 100, filler_hits: 0, findings };
|
|
24
|
+
}
|
|
25
|
+
const lower = bodyText.toLowerCase();
|
|
26
|
+
const samples = [];
|
|
27
|
+
let hits = 0;
|
|
28
|
+
for (const p of FILLER_PHRASES) {
|
|
29
|
+
let idx = lower.indexOf(p);
|
|
30
|
+
while (idx !== -1) {
|
|
31
|
+
hits++;
|
|
32
|
+
if (samples.length < 3 && !samples.includes(p))
|
|
33
|
+
samples.push(p);
|
|
34
|
+
idx = lower.indexOf(p, idx + p.length);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Density per 1,000 words.
|
|
38
|
+
const density = hits / (wordCount / 1000);
|
|
39
|
+
// 0 hits -> 100; ramps down as density climbs. ~6+ filler phrases / 1k words is heavy.
|
|
40
|
+
const score = Math.round(Math.max(0, Math.min(100, 100 - density * 10)));
|
|
41
|
+
if (density >= 3) {
|
|
42
|
+
findings.push({
|
|
43
|
+
severity: "info",
|
|
44
|
+
category: "content",
|
|
45
|
+
where: "page-level",
|
|
46
|
+
message: `Content shows AI-filler patterns (${hits} filler phrases, e.g. ${samples.map((s) => `"${s}"`).join(", ")}).`,
|
|
47
|
+
fix: "Cut hedging/filler phrasing and lead each section with a concrete, specific claim. Filler dilutes the extractable answer AI engines cite.",
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
return { score, filler_hits: hits, findings };
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=score-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"score-content.js","sourceRoot":"","sources":["../../src/lib/score-content.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,EAAE;AACF,6EAA6E;AAC7E,gFAAgF;AAChF,+EAA+E;AAC/E,4EAA4E;AAC5E,sEAAsE;AAItE,MAAM,cAAc,GAAG;IACrB,kBAAkB,EAAE,uBAAuB,EAAE,yBAAyB;IACtE,wBAAwB,EAAE,oBAAoB,EAAE,mBAAmB;IACnE,kBAAkB,EAAE,uBAAuB,EAAE,iBAAiB;IAC9D,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB;IACxE,sBAAsB,EAAE,oBAAoB,EAAE,sBAAsB;IACpE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,yBAAyB;IAC/E,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,qBAAqB;IAChE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc;IAC9D,eAAe,EAAE,YAAY,EAAE,oBAAoB,EAAE,oBAAoB;IACzE,wBAAwB,EAAE,cAAc,EAAE,mBAAmB;CAC9D,CAAC;AAQF,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,SAAiB;IAC9D,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC;QACpB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;QAC/B,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YAClB,IAAI,EAAE,CAAC;YACP,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChE,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC1C,uFAAuF;IACvF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAEzE,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,qCAAqC,IAAI,yBAAyB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YACtH,GAAG,EAAE,2IAA2I;SACjJ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Finding } from "../types.js";
|
|
2
|
+
import type { ParsedJsonLd } from "./schema.js";
|
|
3
|
+
export interface EeatResult {
|
|
4
|
+
trust_score: number;
|
|
5
|
+
entity_score: number;
|
|
6
|
+
findings: Finding[];
|
|
7
|
+
}
|
|
8
|
+
export declare function scoreEeatEntity(args: {
|
|
9
|
+
html: string;
|
|
10
|
+
url: string;
|
|
11
|
+
foundTypes: string[];
|
|
12
|
+
jsonLdBlocks: ParsedJsonLd[];
|
|
13
|
+
internalLinks: string[];
|
|
14
|
+
externalLinks: string[];
|
|
15
|
+
}): EeatResult;
|
|
16
|
+
//# sourceMappingURL=score-eeat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"score-eeat.d.ts","sourceRoot":"","sources":["../../src/lib/score-eeat.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAShD,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB,GAAG,UAAU,CAoIb"}
|