@rivi-software/agentic-seo-check 0.1.1 → 0.3.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.
Files changed (110) hide show
  1. package/README.md +67 -7
  2. package/dist/cli.js +69 -26
  3. package/dist/cli.js.map +1 -1
  4. package/dist/core/aeo/audit.d.ts +44 -0
  5. package/dist/core/aeo/audit.js +310 -0
  6. package/dist/core/aeo/audit.js.map +1 -0
  7. package/dist/core/aeo/bots.d.ts +30 -0
  8. package/dist/core/aeo/bots.js +299 -0
  9. package/dist/core/aeo/bots.js.map +1 -0
  10. package/dist/core/aeo/llms-txt.d.ts +8 -0
  11. package/dist/core/aeo/llms-txt.js +88 -0
  12. package/dist/core/aeo/llms-txt.js.map +1 -0
  13. package/dist/core/aeo/page.d.ts +43 -0
  14. package/dist/core/aeo/page.js +284 -0
  15. package/dist/core/aeo/page.js.map +1 -0
  16. package/dist/core/aeo/probe.d.ts +10 -0
  17. package/dist/core/aeo/probe.js +53 -0
  18. package/dist/core/aeo/probe.js.map +1 -0
  19. package/dist/core/aeo/site-rules.d.ts +13 -0
  20. package/dist/core/aeo/site-rules.js +178 -0
  21. package/dist/core/aeo/site-rules.js.map +1 -0
  22. package/dist/core/audit.d.ts +23 -2
  23. package/dist/core/audit.js +50 -22
  24. package/dist/core/audit.js.map +1 -1
  25. package/dist/core/crawl.d.ts +7 -1
  26. package/dist/core/crawl.js +85 -9
  27. package/dist/core/crawl.js.map +1 -1
  28. package/dist/core/fetch.d.ts +9 -0
  29. package/dist/core/fetch.js +28 -12
  30. package/dist/core/fetch.js.map +1 -1
  31. package/dist/core/html/answer.d.ts +4 -0
  32. package/dist/core/html/answer.js +198 -0
  33. package/dist/core/html/answer.js.map +1 -0
  34. package/dist/core/html/dom.d.ts +6 -0
  35. package/dist/core/html/dom.js +92 -1
  36. package/dist/core/html/dom.js.map +1 -1
  37. package/dist/core/html/extract.js +21 -72
  38. package/dist/core/html/extract.js.map +1 -1
  39. package/dist/core/html/head.d.ts +10 -0
  40. package/dist/core/html/head.js +206 -0
  41. package/dist/core/html/head.js.map +1 -0
  42. package/dist/core/html/resources.d.ts +17 -0
  43. package/dist/core/html/resources.js +172 -0
  44. package/dist/core/html/resources.js.map +1 -0
  45. package/dist/core/html/structured-data.d.ts +2 -0
  46. package/dist/core/html/structured-data.js +2 -0
  47. package/dist/core/html/structured-data.js.map +1 -1
  48. package/dist/core/report/markdown.d.ts +3 -1
  49. package/dist/core/report/markdown.js +102 -0
  50. package/dist/core/report/markdown.js.map +1 -1
  51. package/dist/core/robots.d.ts +7 -0
  52. package/dist/core/robots.js +13 -1
  53. package/dist/core/robots.js.map +1 -1
  54. package/dist/core/rules/aeo.d.ts +11 -0
  55. package/dist/core/rules/aeo.js +423 -0
  56. package/dist/core/rules/aeo.js.map +1 -0
  57. package/dist/core/rules/canonical.d.ts +3 -0
  58. package/dist/core/rules/canonical.js +54 -2
  59. package/dist/core/rules/canonical.js.map +1 -1
  60. package/dist/core/rules/document.js +4 -2
  61. package/dist/core/rules/document.js.map +1 -1
  62. package/dist/core/rules/head.d.ts +1 -0
  63. package/dist/core/rules/head.js +116 -0
  64. package/dist/core/rules/head.js.map +1 -0
  65. package/dist/core/rules/index.d.ts +4 -0
  66. package/dist/core/rules/index.js +15 -1
  67. package/dist/core/rules/index.js.map +1 -1
  68. package/dist/core/rules/indexing.d.ts +10 -0
  69. package/dist/core/rules/indexing.js +171 -9
  70. package/dist/core/rules/indexing.js.map +1 -1
  71. package/dist/core/rules/loading.d.ts +1 -0
  72. package/dist/core/rules/loading.js +138 -0
  73. package/dist/core/rules/loading.js.map +1 -0
  74. package/dist/core/rules/rule.d.ts +2 -0
  75. package/dist/core/rules/rule.js +2 -0
  76. package/dist/core/rules/rule.js.map +1 -1
  77. package/dist/core/rules/structured-data-values.d.ts +3 -0
  78. package/dist/core/rules/structured-data-values.js +316 -0
  79. package/dist/core/rules/structured-data-values.js.map +1 -0
  80. package/dist/core/rules/structured-data.js +50 -20
  81. package/dist/core/rules/structured-data.js.map +1 -1
  82. package/dist/core/rules/urls.d.ts +1 -0
  83. package/dist/core/rules/urls.js +293 -0
  84. package/dist/core/rules/urls.js.map +1 -0
  85. package/dist/core/score.d.ts +4 -2
  86. package/dist/core/score.js.map +1 -1
  87. package/dist/core/site-probes.d.ts +33 -0
  88. package/dist/core/site-probes.js +144 -0
  89. package/dist/core/site-probes.js.map +1 -0
  90. package/dist/core/site-rules.d.ts +18 -0
  91. package/dist/core/site-rules.js +479 -5
  92. package/dist/core/site-rules.js.map +1 -1
  93. package/dist/core/sitemap.d.ts +38 -1
  94. package/dist/core/sitemap.js +177 -43
  95. package/dist/core/sitemap.js.map +1 -1
  96. package/dist/core/static.d.ts +6 -0
  97. package/dist/core/static.js +122 -12
  98. package/dist/core/static.js.map +1 -1
  99. package/dist/core/types.d.ts +268 -2
  100. package/dist/core/types.js.map +1 -1
  101. package/dist/core/url.d.ts +2 -0
  102. package/dist/core/url.js +8 -0
  103. package/dist/core/url.js.map +1 -1
  104. package/dist/index.d.ts +6 -2
  105. package/dist/index.js +4 -2
  106. package/dist/index.js.map +1 -1
  107. package/dist/mcp.js +129 -3
  108. package/dist/mcp.js.map +1 -1
  109. package/package.json +6 -2
  110. package/skills/seo-audit/SKILL.md +9 -2
@@ -0,0 +1,178 @@
1
+ import { cap, finding, GOOGLE_DOCS } from "../rules/rule.js";
2
+ import { AI_BOTS, invalidSignals } from "./bots.js";
3
+ const LLMS_TXT_DOCS = "https://llmstxt.org/";
4
+ const CONTENT_SIGNALS_DOCS = "https://contentsignals.org/";
5
+ const meta = (id, severity, description, recommendation, docs, requires) => {
6
+ const rule = {
7
+ id,
8
+ category: "aeo",
9
+ severity,
10
+ description,
11
+ recommendation,
12
+ };
13
+ if (docs) {
14
+ rule.docs = docs;
15
+ }
16
+ if (requires) {
17
+ rule.requires = requires;
18
+ }
19
+ return rule;
20
+ };
21
+ /** Rules about the site as a whole, which the AEO audit checks once per origin. */
22
+ export const AEO_SITE_RULES = [
23
+ meta("aeo.robots-txt-unreachable", "warning", 'robots.txt answers a server error or does not answer, and crawlers treat that as "crawl nothing" (RFC 9309).', "Make /robots.txt answer 200, or 404 when there is none. A 5xx or a timeout stops well-behaved crawlers, AI crawlers included.", GOOGLE_DOCS.robotsTxt),
24
+ meta("aeo.robots-blocks-search-crawler", "error", "robots.txt blocks a search crawler whose index AI answers draw on: Googlebot (AI Overviews, AI Mode), Bingbot (Copilot) or Applebot (Siri, Spotlight).", "Allow these crawlers in robots.txt: remove the Disallow lines that match the audited pages in their groups, or in `User-agent: *` when they have no group of their own. Applebot follows the Googlebot group when no group names Applebot.", "https://developers.google.com/search/docs/appearance/ai-features"),
25
+ meta("aeo.robots-blocks-answer-bot", "warning", "robots.txt blocks a bot that fetches pages for AI answers or an AI search index (OAI-SearchBot, ChatGPT-User, Claude-SearchBot, Claude-User, PerplexityBot, Perplexity-User, Google-Extended, DuckAssistBot, MistralAI-User).", "Allow the bots listed in evidence if the site should be cited in those answer engines: add a group for each with `Allow: /`, or remove the Disallow lines that match them. Keep a block that is deliberate, and disable this rule.", GOOGLE_DOCS.robotsTxt),
26
+ meta("aeo.robots-blocks-training-bot", "info", "robots.txt blocks a crawler that collects text to train AI models (GPTBot, ClaudeBot, Applebot-Extended, CCBot, meta-externalagent).", "Nothing to change if you mean to opt out of model training: these bots do not decide whether answer engines cite the site. Allow them if you want the content in future models.", GOOGLE_DOCS.robotsTxt),
27
+ meta("aeo.content-signal-blocks-answers", "warning", "A robots.txt Content-Signal line sets ai-input=no or search=no, asking answer engines not to use the pages in AI answers or search.", "Set ai-input=yes and search=yes in the Content-Signal line if answer engines should use the content; ai-train=no can stay to opt out of training. Example: `Content-Signal: search=yes, ai-input=yes, ai-train=no`.", CONTENT_SIGNALS_DOCS),
28
+ meta("aeo.content-signal-invalid", "info", "A robots.txt Content-Signal line has a signal other than search, ai-input or ai-train, or a value other than yes or no.", "Write Content-Signal as comma-separated pairs of search, ai-input or ai-train with yes or no, e.g. `Content-Signal: search=yes, ai-input=yes, ai-train=no`.", CONTENT_SIGNALS_DOCS),
29
+ meta("aeo.llms-txt-missing", "info", "The site has no /llms.txt.", "Optional: publish /llms.txt, a Markdown index of the pages that matter, for AI tools and coding agents that look for one. No major answer engine has said it reads llms.txt, so this is low priority.", LLMS_TXT_DOCS),
30
+ meta("aeo.llms-txt-invalid", "warning", "/llms.txt exists but does not follow the llms.txt format, which requires an H1 title first.", "Start the file with `# Site name`, then an optional `> one-line summary`, then H2 sections with links written as `- [Title](https://...): note`.", LLMS_TXT_DOCS),
31
+ meta("aeo.llms-txt-no-links", "info", "/llms.txt has no Markdown links, so it points AI tools to no pages.", "List the pages that matter under H2 sections, one per line: `- [Title](https://...): what it covers`.", LLMS_TXT_DOCS),
32
+ meta("aeo.server-blocks-answer-bot", "warning", "The server refuses or challenges an AI answer bot's User-Agent (403, 429, a challenge page) while it serves the audit's own request.", "Allow these bots at the CDN, firewall or bot-protection layer (for example the CDN's AI crawler settings or a WAF rule). The probe sent the bots' User-Agent from this machine, not from the bots' own IP ranges, and a CDN that verifies bots may let the real ones through: confirm in the CDN's bot logs before changing rules.", undefined, "ai-bots"),
33
+ meta("aeo.server-blocks-training-bot", "info", "The server refuses or challenges an AI training bot's User-Agent while it serves the audit's own request.", "Nothing to change if you mean to keep training bots out; this does not affect AI answers. The probe came from this machine, not the bots' own IP ranges.", undefined, "ai-bots"),
34
+ meta("aeo.bot-probe-inconclusive", "info", "The AI bot probe could not run: the target is not a URL, or the audit's own request did not get the page.", "Probe a live URL, and make the audit's own request succeed first (status, auth headers, --user-agent); otherwise blocked bots cannot be told apart from a page that fails for everyone.", undefined, "ai-bots"),
35
+ ];
36
+ const byId = new Map(AEO_SITE_RULES.map((r) => [r.id, r]));
37
+ const m = (id) => {
38
+ const rule = byId.get(id);
39
+ if (!rule) {
40
+ throw new Error(`Unknown AEO site rule: ${id}`);
41
+ }
42
+ return rule;
43
+ };
44
+ const ROBOTS_RULES = {
45
+ search: "aeo.robots-blocks-search-crawler",
46
+ answer: "aeo.robots-blocks-answer-bot",
47
+ training: "aeo.robots-blocks-training-bot",
48
+ };
49
+ const SERVER_RULES = {
50
+ answer: "aeo.server-blocks-answer-bot",
51
+ training: "aeo.server-blocks-training-bot",
52
+ };
53
+ const docsFor = (name) => AI_BOTS.find((b) => b.name === name)?.docs;
54
+ const robotsFindings = (crawlers, pageCount) => {
55
+ if (crawlers.status === "unreachable") {
56
+ return [
57
+ finding(m("aeo.robots-txt-unreachable"), `robots.txt at ${crawlers.robotsTxt} ${crawlers.httpStatus === null ? "did not answer" : `answers HTTP ${crawlers.httpStatus}`}, so crawlers that follow RFC 9309, AI crawlers included, treat the whole site as off limits.`, { evidence: { url: crawlers.robotsTxt, status: crawlers.httpStatus } }),
58
+ ];
59
+ }
60
+ const out = [];
61
+ for (const purpose of ["search", "answer", "training"]) {
62
+ const blocked = crawlers.bots.filter((b) => b.purpose === purpose && (!b.allowed || b.blockedPages > 0));
63
+ if (!blocked.length) {
64
+ continue;
65
+ }
66
+ const where = (b) => b.allowed
67
+ ? `${b.blockedPages} of ${pageCount} audited pages, which other crawlers may fetch`
68
+ : "the audited page";
69
+ out.push({
70
+ ...finding(m(ROBOTS_RULES[purpose]), `robots.txt blocks ${blocked.map((b) => b.name).join(", ")}.`, {
71
+ evidence: {
72
+ robotsTxt: crawlers.robotsTxt,
73
+ bots: cap(blocked.map((b) => ({
74
+ name: b.name,
75
+ operator: b.operator,
76
+ usedFor: b.usedFor,
77
+ blocked: pageCount > 1 ? where(b) : "the audited page",
78
+ group: b.robotsGroup,
79
+ docs: docsFor(b.name),
80
+ })), 20),
81
+ },
82
+ }),
83
+ url: crawlers.robotsTxt,
84
+ });
85
+ }
86
+ return out;
87
+ };
88
+ const signalFindings = (crawlers) => {
89
+ const out = [];
90
+ const answerAgents = new Set(AI_BOTS.filter((b) => b.purpose !== "training").map((b) => b.name.toLowerCase()));
91
+ const optOuts = crawlers.contentSignals.filter((s) => (s.signals["ai-input"] === "no" || s.signals["search"] === "no") &&
92
+ s.userAgents.some((a) => a === "*" || answerAgents.has(a.split("/")[0]?.toLowerCase() ?? "")));
93
+ if (optOuts.length) {
94
+ out.push({
95
+ ...finding(m("aeo.content-signal-blocks-answers"), `robots.txt Content-Signal asks ${optOuts
96
+ .map((s) => `${s.userAgents.join(", ") || "all crawlers"} for ${Object.entries(s.signals)
97
+ .map(([k, v]) => `${k}=${v}`)
98
+ .join(", ")}${s.path ? ` on ${s.path}` : ""}`)
99
+ .join("; ")}.`, { evidence: { signals: cap(optOuts) } }),
100
+ url: crawlers.robotsTxt,
101
+ });
102
+ }
103
+ const invalid = crawlers.contentSignals.flatMap(invalidSignals);
104
+ if (invalid.length) {
105
+ out.push({
106
+ ...finding(m("aeo.content-signal-invalid"), `robots.txt Content-Signal has values the policy does not define: ${cap(invalid, 5).join(", ")}.`, { evidence: { values: cap(invalid) } }),
107
+ url: crawlers.robotsTxt,
108
+ });
109
+ }
110
+ return out;
111
+ };
112
+ const llmsTxtFindings = (llms) => {
113
+ const at = { url: llms.url };
114
+ if (llms.status === "missing") {
115
+ return [
116
+ {
117
+ ...finding(m("aeo.llms-txt-missing"), `No llms.txt at ${llms.url}${llms.httpStatus ? ` (HTTP ${llms.httpStatus})` : ""}.`),
118
+ ...at,
119
+ },
120
+ ];
121
+ }
122
+ if (llms.status === "invalid") {
123
+ return [
124
+ {
125
+ ...finding(m("aeo.llms-txt-invalid"), `llms.txt does not follow the format: ${llms.problems.join("; ")}.`, { evidence: { problems: llms.problems, bytes: llms.bytes } }),
126
+ ...at,
127
+ },
128
+ ];
129
+ }
130
+ return llms.links === 0
131
+ ? [
132
+ {
133
+ ...finding(m("aeo.llms-txt-no-links"), `llms.txt "${llms.title ?? ""}" has no Markdown links.`),
134
+ ...at,
135
+ },
136
+ ]
137
+ : [];
138
+ };
139
+ const probeFindings = (crawlers) => {
140
+ const baseline = crawlers.probeBaseline;
141
+ if (!baseline) {
142
+ return [];
143
+ }
144
+ const out = [];
145
+ for (const purpose of ["answer", "training"]) {
146
+ const rule = SERVER_RULES[purpose];
147
+ const blocked = crawlers.bots.filter((b) => b.purpose === purpose && b.probe?.blocked);
148
+ if (!rule || !blocked.length) {
149
+ continue;
150
+ }
151
+ out.push(finding(m(rule), `The server refused or challenged ${blocked.map((b) => `${b.name} (${b.probe?.reason ?? "blocked"})`).join(", ")}, while the audit's own request got HTTP ${baseline.status}. The requests came from this machine with each bot's User-Agent, not from the bots' own IP ranges.`, {
152
+ evidence: {
153
+ baseline,
154
+ bots: cap(blocked.map((b) => ({
155
+ name: b.name,
156
+ status: b.probe?.status ?? null,
157
+ reason: b.probe?.reason ?? null,
158
+ })), 20),
159
+ },
160
+ }));
161
+ }
162
+ return out;
163
+ };
164
+ /** Findings about robots.txt, llms.txt and the bot probe, for the site the audited pages belong to. */
165
+ export const aeoSiteFindings = (ctx) => {
166
+ const out = [];
167
+ if (ctx.crawlers) {
168
+ out.push(...robotsFindings(ctx.crawlers, ctx.pageCount), ...signalFindings(ctx.crawlers), ...probeFindings(ctx.crawlers));
169
+ }
170
+ if (ctx.llmsTxt) {
171
+ out.push(...llmsTxtFindings(ctx.llmsTxt));
172
+ }
173
+ if (ctx.probeSkipped) {
174
+ out.push(finding(m("aeo.bot-probe-inconclusive"), `The AI bot probe did not run: ${ctx.probeSkipped}.`));
175
+ }
176
+ return out;
177
+ };
178
+ //# sourceMappingURL=site-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site-rules.js","sourceRoot":"","sources":["../../../src/core/aeo/site-rules.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { ProgressEvent } from "./crawl.js";
2
2
  import type { FetchOptions } from "./fetch.js";
3
- import type { Audit, IssueRollup, PageAudit, PageSource, ResponseInfo, SiteAudit, Thresholds } from "./types.js";
3
+ import type { Audit, Finding, IssueRollup, PageAudit, PageSource, ResponseInfo, SiteAudit, Thresholds } from "./types.js";
4
4
  export type { ProgressEvent } from "./crawl.js";
5
5
  export interface AuditOptions {
6
6
  /** Target keyword/phrase for the keyword.* rules. */
@@ -48,7 +48,7 @@ export declare const DEFAULT_CRAWL: {
48
48
  readonly delayMs: 0;
49
49
  readonly maxLinkChecks: 200;
50
50
  };
51
- export declare const rollupIssues: (pages: PageAudit[]) => IssueRollup[];
51
+ export declare const rollupIssues: (pages: Pick<PageAudit, "url" | "findings">[]) => IssueRollup[];
52
52
  export declare const recomputeSite: (site: SiteAudit) => void;
53
53
  /** Audit an HTML string. `url` is used to resolve links and for display. */
54
54
  export declare const auditHtml: (html: string, input?: HtmlAuditInput, options?: AuditOptions) => Promise<PageAudit>;
@@ -60,6 +60,25 @@ export declare const auditFile: (filePath: string, options?: AuditOptions) => Pr
60
60
  export declare const auditSite: (startUrl: string, options?: CrawlOptions) => Promise<SiteAudit>;
61
61
  /** Audit a directory of built HTML files (dist/, out/, build/). */
62
62
  export declare const auditDirectory: (dir: string, options?: CrawlOptions) => Promise<SiteAudit>;
63
+ export type ResolvedTarget = {
64
+ kind: "stdin";
65
+ } | {
66
+ kind: "url";
67
+ url: string;
68
+ } | {
69
+ kind: "directory";
70
+ path: string;
71
+ } | {
72
+ kind: "file";
73
+ path: string;
74
+ };
75
+ /**
76
+ * What a target names: "-" for stdin, an http(s) URL, a bare host such as `example.com/page` or
77
+ * `localhost:3000`, a directory or a file.
78
+ */
79
+ export declare const resolveTarget: (target: string) => Promise<ResolvedTarget>;
80
+ /** HTML piped to the process. */
81
+ export declare const readStdin: () => Promise<string>;
63
82
  /**
64
83
  * Auto-detect the target type: http(s) URL, directory, .html file, or "-" for stdin.
65
84
  * `crawl` forces a site crawl for URLs.
@@ -68,5 +87,7 @@ export declare const auditTarget: (target: string, options?: CrawlOptions & {
68
87
  crawl?: boolean;
69
88
  stdinHtml?: string;
70
89
  }) => Promise<Audit>;
90
+ /** Keeps the first three items of every evidence list. */
91
+ export declare const trimFinding: (f: Finding) => Finding;
71
92
  /** Drop bulky, low-value fields to save tokens when the result is consumed by an LLM. */
72
93
  export declare const compactAudit: <T extends Audit>(audit: T) => T;
@@ -202,6 +202,7 @@ const buildSiteAudit = (result, source, target, options) => {
202
202
  externalChecks: result.externalChecks,
203
203
  externalSources: result.externalSources,
204
204
  robots: result.robots,
205
+ robotsText: result.robotsText ?? null,
205
206
  robotsAllows: result.robotsAllows,
206
207
  blockedByRobots: result.blockedByRobots,
207
208
  sitemaps: result.sitemaps,
@@ -210,6 +211,8 @@ const buildSiteAudit = (result, source, target, options) => {
210
211
  thresholds,
211
212
  pathOnly: source === "directory",
212
213
  unlinkedPages: result.unlinkedPages,
214
+ imageChecks: result.imageChecks,
215
+ imageSources: result.imageSources,
213
216
  });
214
217
  const disabled = new Set(options.disableRules);
215
218
  siteFindings = sortFindings(siteFindings.filter((f) => !disabled.has(f.rule)));
@@ -245,13 +248,6 @@ const applyPageDetail = (site, options) => {
245
248
  }
246
249
  return site;
247
250
  };
248
- const readStdin = async () => {
249
- const chunks = [];
250
- for await (const chunk of process.stdin) {
251
- chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
252
- }
253
- return Buffer.concat(chunks).toString("utf-8");
254
- };
255
251
  /** Audit an HTML string. `url` is used to resolve links and for display. */
256
252
  // oxlint-disable-next-line eslint/require-await -- public API: it returns a promise like the other audit functions, so a throw reaches callers as a rejection
257
253
  export const auditHtml = async (html, input = {}, options = {}) => {
@@ -365,35 +361,67 @@ export const auditDirectory = async (dir, options = {}) => {
365
361
  return applyPageDetail(site, options);
366
362
  };
367
363
  /**
368
- * Auto-detect the target type: http(s) URL, directory, .html file, or "-" for stdin.
369
- * `crawl` forces a site crawl for URLs.
364
+ * What a target names: "-" for stdin, an http(s) URL, a bare host such as `example.com/page` or
365
+ * `localhost:3000`, a directory or a file.
370
366
  */
371
- export const auditTarget = async (target, options = {}) => {
372
- if (target === "-" || options.stdinHtml !== undefined) {
373
- const html = options.stdinHtml ?? (await readStdin());
374
- return auditHtml(html, { url: options.baseUrl, source: "html", target: "stdin" }, options);
367
+ export const resolveTarget = async (target) => {
368
+ if (target === "-") {
369
+ return { kind: "stdin" };
375
370
  }
376
371
  if (isHttpUrl(target)) {
377
- return options.crawl
378
- ? auditSite(target, options)
379
- : auditUrl(target, options);
372
+ return { kind: "url", url: target };
380
373
  }
381
374
  if (/^localhost(?::\d+)?(?:\/|$)/iu.test(target) ||
382
375
  /^[\w.-]+\.[a-z]{2,}(?:\/|$)/iu.test(target)) {
383
- const url = `http${/^localhost/iu.test(target) ? "" : "s"}://${target}`;
384
- return options.crawl ? auditSite(url, options) : auditUrl(url, options);
376
+ return {
377
+ kind: "url",
378
+ url: `http${/^localhost/iu.test(target) ? "" : "s"}://${target}`,
379
+ };
385
380
  }
386
381
  const stat = await fs.stat(target).catch(() => null);
387
382
  if (!stat) {
388
383
  throw new Error(`Target "${target}" is not a URL, file or directory.`);
389
384
  }
390
- if (stat.isDirectory()) {
391
- return auditDirectory(target, options);
385
+ return stat.isDirectory()
386
+ ? { kind: "directory", path: target }
387
+ : { kind: "file", path: target };
388
+ };
389
+ /** HTML piped to the process. */
390
+ export const readStdin = async () => {
391
+ const chunks = [];
392
+ for await (const chunk of process.stdin) {
393
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
394
+ }
395
+ return Buffer.concat(chunks).toString("utf-8");
396
+ };
397
+ /**
398
+ * Auto-detect the target type: http(s) URL, directory, .html file, or "-" for stdin.
399
+ * `crawl` forces a site crawl for URLs.
400
+ */
401
+ export const auditTarget = async (target, options = {}) => {
402
+ const resolved = options.stdinHtml === undefined
403
+ ? await resolveTarget(target)
404
+ : { kind: "stdin" };
405
+ switch (resolved.kind) {
406
+ case "stdin": {
407
+ const html = options.stdinHtml ?? (await readStdin());
408
+ return auditHtml(html, { url: options.baseUrl, source: "html", target: "stdin" }, options);
409
+ }
410
+ case "url": {
411
+ return options.crawl
412
+ ? auditSite(resolved.url, options)
413
+ : auditUrl(resolved.url, options);
414
+ }
415
+ case "directory": {
416
+ return auditDirectory(resolved.path, options);
417
+ }
418
+ default: {
419
+ return auditFile(resolved.path, options);
420
+ }
392
421
  }
393
- return auditFile(target, options);
394
422
  };
395
423
  /** Keeps the first three items of every evidence list. */
396
- const trimFinding = (f) => {
424
+ export const trimFinding = (f) => {
397
425
  if (!f.evidence) {
398
426
  return f;
399
427
  }
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/core/audit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/core/audit.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import type { FetchOptions } from "./fetch.js";
2
2
  import type { LinkCheck, PageRecord, ProbeResults } from "./site-rules.js";
3
3
  import type { CrawlStats, RobotsTxtInfo, SitemapInfo } from "./types.js";
4
4
  export interface ProgressEvent {
5
- phase: "robots" | "sitemap" | "crawl" | "links" | "probes" | "rules" | "render" | "lighthouse";
5
+ phase: "robots" | "sitemap" | "crawl" | "links" | "probes" | "rules" | "render" | "lighthouse" | "llms-txt" | "ai-bots";
6
6
  message: string;
7
7
  crawled?: number;
8
8
  discovered?: number;
@@ -21,6 +21,8 @@ export interface CrawlOptions {
21
21
  excludePatterns: RegExp[];
22
22
  fetch: FetchOptions;
23
23
  onProgress?: (event: ProgressEvent) => void;
24
+ /** Fetch sitemaps and probe soft 404s and host redirects (default true); the AEO audit needs neither. */
25
+ siteChecks?: boolean;
24
26
  }
25
27
  export interface CrawlResult {
26
28
  startUrl: string;
@@ -30,11 +32,15 @@ export interface CrawlResult {
30
32
  externalChecks?: Map<string, LinkCheck>;
31
33
  externalSources?: Map<string, Set<string>>;
32
34
  robots: RobotsTxtInfo | null;
35
+ /** The robots.txt text up to 500 KiB (`robots.text` stops at 20,000 characters), for checks per user agent. */
36
+ robotsText?: string | null;
33
37
  robotsAllows: ((url: string) => boolean) | null;
34
38
  blockedByRobots: string[];
35
39
  sitemaps: SitemapInfo;
36
40
  probes: ProbeResults;
37
41
  stats: CrawlStats;
38
42
  unlinkedPages?: string[];
43
+ imageChecks?: Map<string, LinkCheck>;
44
+ imageSources?: Map<string, Set<string>>;
39
45
  }
40
46
  export declare const crawlSite: (startInput: string, options: CrawlOptions) => Promise<CrawlResult>;
@@ -3,8 +3,11 @@ import { DEFAULT_USER_AGENT, fetchPage, isHtmlResponse, probeUrl, toResponseInfo
3
3
  import { extractPage } from "./html/extract.js";
4
4
  import { loadRobotsTxt } from "./robots.js";
5
5
  import { isLocalHost } from "./rules/canonical.js";
6
- import { loadSitemaps } from "./sitemap.js";
6
+ import { checkImages, probeUrlVariants } from "./site-probes.js";
7
+ import { emptySitemapProblems, loadSitemaps } from "./sitemap.js";
7
8
  import { hostOf, isSameSite, looksLikeHtml, normalizeUrl, stripWww, } from "./url.js";
9
+ /** Image URLs a crawl requests at most, the ones shown on most pages first. */
10
+ const MAX_IMAGE_CHECKS = 100;
8
11
  /**
9
12
  * Works through a queue that grows while it runs: each crawled page can add the links it found.
10
13
  * At most `concurrency` items run at once, and with `delayMs` each slot waits that long after its
@@ -86,6 +89,22 @@ const runProbes = async (startUrl, fetchOpts) => {
86
89
  };
87
90
  return probes;
88
91
  };
92
+ /** Same-site URLs the crawled pages name as canonical or as hreflang alternates, normalized. */
93
+ const metadataTargets = (records, startHost, includeSubdomains) => {
94
+ const out = new Set();
95
+ for (const r of records) {
96
+ for (const url of [
97
+ r.page.canonical,
98
+ ...r.page.hreflang.map((h) => h.url),
99
+ ]) {
100
+ const target = url ? normalizeUrl(url) : null;
101
+ if (target && isSameSite(target, startHost, includeSubdomains)) {
102
+ out.add(target);
103
+ }
104
+ }
105
+ }
106
+ return [...out];
107
+ };
89
108
  /** The progress callback of a caller that does not listen for progress. */
90
109
  const ignoreProgress = () => {
91
110
  // Nobody to tell.
@@ -100,17 +119,35 @@ export const crawlSite = async (startInput, options) => {
100
119
  progress({ phase: "robots", message: `Fetching ${origin}/robots.txt` });
101
120
  const robots = await loadRobotsTxt(origin, userAgent, options.fetch);
102
121
  const allows = options.respectRobots ? robots.allows : () => true;
103
- progress({ phase: "sitemap", message: "Fetching sitemaps" });
104
- const sitemapCandidates = [
105
- ...new Set([...robots.info.sitemaps, new URL("/sitemap.xml", origin).href]),
106
- ];
107
- const sitemaps = await loadSitemaps(sitemapCandidates, options.fetch);
122
+ const siteChecks = options.siteChecks ?? true;
123
+ let sitemaps = {
124
+ sources: [],
125
+ urls: [],
126
+ urlCount: 0,
127
+ errors: [],
128
+ problems: emptySitemapProblems(),
129
+ };
130
+ if (siteChecks) {
131
+ progress({ phase: "sitemap", message: "Fetching sitemaps" });
132
+ const sitemapCandidates = [
133
+ ...new Set([
134
+ ...robots.info.sitemaps,
135
+ new URL("/sitemap.xml", origin).href,
136
+ ]),
137
+ ];
138
+ sitemaps = await loadSitemaps(sitemapCandidates, options.fetch, {
139
+ siteHost: startHost,
140
+ includeSubdomains: options.includeSubdomains,
141
+ });
142
+ }
108
143
  const visited = new Set([startUrl]);
109
144
  const discovered = new Set([startUrl]);
110
145
  const linkChecks = new Map();
111
146
  const linkSources = new Map();
112
147
  const externalSources = new Map();
113
148
  const records = [];
149
+ /** Final URLs with a record. A redirect and a link can lead to the same page at once. */
150
+ const recorded = new Set();
114
151
  const blocked = [];
115
152
  let limitSkips = 0;
116
153
  const accepts = (url) => {
@@ -184,6 +221,10 @@ export const crawlSite = async (startInput, options) => {
184
221
  if (isAsset || (item.depth !== 0 && res.status !== null)) {
185
222
  return;
186
223
  }
224
+ if (recorded.has(finalKey)) {
225
+ return;
226
+ }
227
+ recorded.add(finalKey);
187
228
  const page = extractPage(res.body ?? "", {
188
229
  url: res.finalUrl,
189
230
  siteHost: startHost,
@@ -226,6 +267,12 @@ export const crawlSite = async (startInput, options) => {
226
267
  recordUnreadable(item, res, finalKey);
227
268
  return;
228
269
  }
270
+ // Nothing awaits between the fetch ending and this check, so two requests that end at the
271
+ // same page cannot both pass it.
272
+ if (recorded.has(finalKey)) {
273
+ return;
274
+ }
275
+ recorded.add(finalKey);
229
276
  const page = extractPage(res.body, {
230
277
  url: res.finalUrl,
231
278
  siteHost: startHost,
@@ -253,12 +300,19 @@ export const crawlSite = async (startInput, options) => {
253
300
  !toCheck.includes(u) &&
254
301
  allows(u))
255
302
  .slice(0, Math.max(0, options.maxLinkChecks - toCheck.length));
303
+ // Canonical and hreflang targets no link led to: the site rules check where they point.
304
+ const metadataExtra = metadataTargets(records, startHost, options.includeSubdomains)
305
+ .filter((u) => !linkChecks.has(u) &&
306
+ !toCheck.includes(u) &&
307
+ !sitemapExtra.includes(u) &&
308
+ allows(u))
309
+ .slice(0, Math.max(0, options.maxLinkChecks - toCheck.length - sitemapExtra.length));
256
310
  for (const target of [...linkSources.keys()].filter((u) => !allows(u))) {
257
311
  if (!blocked.includes(target)) {
258
312
  blocked.push(target);
259
313
  }
260
314
  }
261
- await mapConcurrent([...toCheck, ...sitemapExtra], options.concurrency, async (u) => {
315
+ await mapConcurrent([...toCheck, ...sitemapExtra, ...metadataExtra], options.concurrency, async (u) => {
262
316
  const res = await probeUrl(u, options.fetch);
263
317
  linkChecks.set(u, {
264
318
  url: u,
@@ -294,8 +348,27 @@ export const crawlSite = async (startInput, options) => {
294
348
  });
295
349
  });
296
350
  }
297
- progress({ phase: "probes", message: "Probing soft-404 and host redirects" });
298
- const probes = await runProbes(startUrl, options.fetch);
351
+ let probes = {};
352
+ let images;
353
+ if (siteChecks) {
354
+ const probeOptions = {
355
+ fetch: options.fetch,
356
+ concurrency: options.concurrency,
357
+ delayMs: options.delayMs,
358
+ allows,
359
+ startUrl,
360
+ includeSubdomains: options.includeSubdomains,
361
+ checkExternal: options.checkExternalLinks,
362
+ };
363
+ progress({ phase: "links", message: "Checking images" });
364
+ images = await checkImages(records, Math.min(MAX_IMAGE_CHECKS, options.maxLinkChecks), probeOptions);
365
+ progress({
366
+ phase: "probes",
367
+ message: "Probing soft-404, host redirects and URL variants",
368
+ });
369
+ probes = await runProbes(startUrl, options.fetch);
370
+ probes.urlVariants = await probeUrlVariants(records, startUrl, probeOptions);
371
+ }
299
372
  const stats = {
300
373
  pagesCrawled: records.length,
301
374
  pagesDiscovered: discovered.size,
@@ -314,11 +387,14 @@ export const crawlSite = async (startInput, options) => {
314
387
  externalChecks,
315
388
  externalSources: options.checkExternalLinks ? externalSources : undefined,
316
389
  robots: robots.info,
390
+ robotsText: robots.text,
317
391
  robotsAllows: robots.info.found ? robots.allows : null,
318
392
  blockedByRobots: blocked,
319
393
  sitemaps,
320
394
  probes,
321
395
  stats,
396
+ imageChecks: images?.imageChecks,
397
+ imageSources: images?.imageSources,
322
398
  };
323
399
  };
324
400
  //# sourceMappingURL=crawl.js.map