@rivi-software/agentic-seo-check 0.4.0 → 0.6.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 (131) hide show
  1. package/README.md +49 -7
  2. package/dist/cli.js +28 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/core/aeo/audit.d.ts +8 -0
  5. package/dist/core/aeo/audit.js +101 -17
  6. package/dist/core/aeo/audit.js.map +1 -1
  7. package/dist/core/aeo/bots.d.ts +48 -0
  8. package/dist/core/aeo/bots.js +151 -5
  9. package/dist/core/aeo/bots.js.map +1 -1
  10. package/dist/core/aeo/fixes.d.ts +38 -0
  11. package/dist/core/aeo/fixes.js +111 -0
  12. package/dist/core/aeo/fixes.js.map +1 -0
  13. package/dist/core/aeo/site-rules.d.ts +5 -0
  14. package/dist/core/aeo/site-rules.js +293 -10
  15. package/dist/core/aeo/site-rules.js.map +1 -1
  16. package/dist/core/audit.d.ts +8 -0
  17. package/dist/core/audit.js +144 -25
  18. package/dist/core/audit.js.map +1 -1
  19. package/dist/core/crawl.js +43 -4
  20. package/dist/core/crawl.js.map +1 -1
  21. package/dist/core/html/answer.d.ts +5 -2
  22. package/dist/core/html/answer.js +25 -7
  23. package/dist/core/html/answer.js.map +1 -1
  24. package/dist/core/html/dom.d.ts +13 -1
  25. package/dist/core/html/dom.js +30 -2
  26. package/dist/core/html/dom.js.map +1 -1
  27. package/dist/core/html/extract.js +122 -30
  28. package/dist/core/html/extract.js.map +1 -1
  29. package/dist/core/html/head.js +114 -19
  30. package/dist/core/html/head.js.map +1 -1
  31. package/dist/core/html/resources.js +15 -7
  32. package/dist/core/html/resources.js.map +1 -1
  33. package/dist/core/html/structured-data.js +21 -5
  34. package/dist/core/html/structured-data.js.map +1 -1
  35. package/dist/core/lighthouse.d.ts +5 -6
  36. package/dist/core/lighthouse.js +297 -7
  37. package/dist/core/lighthouse.js.map +1 -1
  38. package/dist/core/performance-fixes.d.ts +25 -0
  39. package/dist/core/performance-fixes.js +446 -0
  40. package/dist/core/performance-fixes.js.map +1 -0
  41. package/dist/core/performance-rules.js +56 -8
  42. package/dist/core/performance-rules.js.map +1 -1
  43. package/dist/core/recheck.d.ts +68 -0
  44. package/dist/core/recheck.js +247 -0
  45. package/dist/core/recheck.js.map +1 -0
  46. package/dist/core/render-fixes.d.ts +27 -0
  47. package/dist/core/render-fixes.js +164 -0
  48. package/dist/core/render-fixes.js.map +1 -0
  49. package/dist/core/render-rules.js +60 -21
  50. package/dist/core/render-rules.js.map +1 -1
  51. package/dist/core/render.d.ts +9 -1
  52. package/dist/core/render.js +36 -2
  53. package/dist/core/render.js.map +1 -1
  54. package/dist/core/report/markdown.js +68 -1
  55. package/dist/core/report/markdown.js.map +1 -1
  56. package/dist/core/robots.d.ts +5 -0
  57. package/dist/core/robots.js +8 -0
  58. package/dist/core/robots.js.map +1 -1
  59. package/dist/core/rules/aeo.js +339 -25
  60. package/dist/core/rules/aeo.js.map +1 -1
  61. package/dist/core/rules/canonical.js +107 -11
  62. package/dist/core/rules/canonical.js.map +1 -1
  63. package/dist/core/rules/content.js +65 -7
  64. package/dist/core/rules/content.js.map +1 -1
  65. package/dist/core/rules/document.js +73 -8
  66. package/dist/core/rules/document.js.map +1 -1
  67. package/dist/core/rules/fix.d.ts +55 -0
  68. package/dist/core/rules/fix.js +159 -0
  69. package/dist/core/rules/fix.js.map +1 -0
  70. package/dist/core/rules/head.js +81 -4
  71. package/dist/core/rules/head.js.map +1 -1
  72. package/dist/core/rules/headings.js +92 -9
  73. package/dist/core/rules/headings.js.map +1 -1
  74. package/dist/core/rules/hreflang.js +79 -9
  75. package/dist/core/rules/hreflang.js.map +1 -1
  76. package/dist/core/rules/images.js +49 -0
  77. package/dist/core/rules/images.js.map +1 -1
  78. package/dist/core/rules/index.d.ts +11 -0
  79. package/dist/core/rules/index.js +21 -1
  80. package/dist/core/rules/index.js.map +1 -1
  81. package/dist/core/rules/indexing.js +108 -1
  82. package/dist/core/rules/indexing.js.map +1 -1
  83. package/dist/core/rules/keyword.js +91 -1
  84. package/dist/core/rules/keyword.js.map +1 -1
  85. package/dist/core/rules/links.js +42 -0
  86. package/dist/core/rules/links.js.map +1 -1
  87. package/dist/core/rules/loading.js +54 -1
  88. package/dist/core/rules/loading.js.map +1 -1
  89. package/dist/core/rules/meta.js +36 -5
  90. package/dist/core/rules/meta.js.map +1 -1
  91. package/dist/core/rules/page-fixes.d.ts +39 -0
  92. package/dist/core/rules/page-fixes.js +107 -0
  93. package/dist/core/rules/page-fixes.js.map +1 -0
  94. package/dist/core/rules/quoted-tags.d.ts +23 -0
  95. package/dist/core/rules/quoted-tags.js +79 -0
  96. package/dist/core/rules/quoted-tags.js.map +1 -0
  97. package/dist/core/rules/response.js +71 -7
  98. package/dist/core/rules/response.js.map +1 -1
  99. package/dist/core/rules/rule.d.ts +17 -4
  100. package/dist/core/rules/rule.js +11 -2
  101. package/dist/core/rules/rule.js.map +1 -1
  102. package/dist/core/rules/social.js +101 -10
  103. package/dist/core/rules/social.js.map +1 -1
  104. package/dist/core/rules/structured-data-fixes.d.ts +33 -0
  105. package/dist/core/rules/structured-data-fixes.js +469 -0
  106. package/dist/core/rules/structured-data-fixes.js.map +1 -0
  107. package/dist/core/rules/structured-data-values.js +242 -31
  108. package/dist/core/rules/structured-data-values.js.map +1 -1
  109. package/dist/core/rules/structured-data.js +171 -4
  110. package/dist/core/rules/structured-data.js.map +1 -1
  111. package/dist/core/rules/title.js +39 -5
  112. package/dist/core/rules/title.js.map +1 -1
  113. package/dist/core/rules/urls.js +166 -0
  114. package/dist/core/rules/urls.js.map +1 -1
  115. package/dist/core/site-fixes.d.ts +111 -0
  116. package/dist/core/site-fixes.js +650 -0
  117. package/dist/core/site-fixes.js.map +1 -0
  118. package/dist/core/site-rules.js +474 -53
  119. package/dist/core/site-rules.js.map +1 -1
  120. package/dist/core/sitemap.d.ts +16 -0
  121. package/dist/core/sitemap.js +34 -0
  122. package/dist/core/sitemap.js.map +1 -1
  123. package/dist/core/types.d.ts +223 -3
  124. package/dist/core/types.js.map +1 -1
  125. package/dist/index.d.ts +2 -0
  126. package/dist/index.js +1 -0
  127. package/dist/index.js.map +1 -1
  128. package/dist/mcp.js +16 -2
  129. package/dist/mcp.js.map +1 -1
  130. package/package.json +5 -7
  131. package/skills/seo-audit/SKILL.md +23 -6
@@ -1,4 +1,4 @@
1
- import { agentMatcher } from "../robots.js";
1
+ import { agentMatcher, ruleLineMatcher } from "../robots.js";
2
2
  const OPENAI_DOCS = "https://developers.openai.com/api/docs/bots";
3
3
  const ANTHROPIC_DOCS = "https://support.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler";
4
4
  const PERPLEXITY_DOCS = "https://docs.perplexity.ai/guides/bots";
@@ -151,12 +151,21 @@ const readGroups = (text) => {
151
151
  const named = new Set();
152
152
  const lines = [];
153
153
  let agents = [];
154
+ let agentLines = [];
154
155
  let inAgentRun = false;
155
- for (const raw of text.split(/\r\n|\r|\n/u)) {
156
+ // The first line break the file uses, to quote a run of lines as it is written.
157
+ const eol = /\r\n|\r|\n/u.exec(text)?.[0] ?? "\n";
158
+ let run = { lines: [], eol };
159
+ // Comment and blank lines after a user-agent line: part of the run if another one follows.
160
+ let between = [];
161
+ for (const [index, raw] of text.split(/\r\n|\r|\n/u).entries()) {
156
162
  const hash = raw.indexOf("#");
157
163
  const line = (hash === -1 ? raw : raw.slice(0, hash)).trim();
158
164
  const colon = line.indexOf(":");
159
165
  if (colon === -1) {
166
+ if (inAgentRun) {
167
+ between.push({ text: raw, token: null });
168
+ }
160
169
  continue;
161
170
  }
162
171
  const key = line.slice(0, colon).trim().toLowerCase();
@@ -165,19 +174,40 @@ const readGroups = (text) => {
165
174
  // Consecutive user-agent lines share one group; a rule line in between starts a new one.
166
175
  if (!inAgentRun) {
167
176
  agents = [];
177
+ agentLines = [];
178
+ run = { lines: [], eol };
179
+ between = [];
168
180
  }
181
+ run.lines.push(...between, {
182
+ text: raw,
183
+ token: value ? productToken(value) : null,
184
+ });
185
+ between = [];
169
186
  if (value) {
170
187
  agents.push(value);
188
+ agentLines.push(line);
171
189
  named.add(productToken(value));
172
190
  }
173
191
  inAgentRun = true;
174
192
  continue;
175
193
  }
176
194
  inAgentRun = false;
177
- lines.push({ agents, key, value });
195
+ between = [];
196
+ lines.push({
197
+ agents,
198
+ agentLines,
199
+ run,
200
+ key,
201
+ value,
202
+ raw: line,
203
+ number: index + 1,
204
+ });
178
205
  }
179
206
  return { named, lines };
180
207
  };
208
+ const signalSources = new WeakMap();
209
+ /** The robots.txt line a Content-Signal entry was read from, when `contentSignals` read it. */
210
+ export const signalSourceOf = (signal) => signalSources.get(signal);
181
211
  /**
182
212
  * Content-Signal lines: `Content-Signal: search=yes, ai-input=no` or, for one path,
183
213
  * `Content-Signal: /blog/ ai-train=no`.
@@ -209,7 +239,9 @@ export const contentSignals = (text) => readGroups(text)
209
239
  .toLowerCase();
210
240
  }
211
241
  }
212
- return { userAgents: l.agents, path, signals };
242
+ const signal = { userAgents: l.agents, path, signals };
243
+ signalSources.set(signal, { raw: l.raw, group: l.agentLines[0] ?? null });
244
+ return signal;
213
245
  });
214
246
  /** Signals in a Content-Signal line that the policy does not define, or values other than yes and no. */
215
247
  export const invalidSignals = (signal) => Object.entries(signal.signals).flatMap(([name, value]) => {
@@ -220,6 +252,99 @@ export const invalidSignals = (signal) => Object.entries(signal.signals).flatMap
220
252
  ? [`${name}=${value}`]
221
253
  : [];
222
254
  });
255
+ /** `%xx` escapes in upper case, as robots-parser compares them. */
256
+ const upperEscapes = (text) => text.replaceAll(/%[\da-f]{2}/giu, (m) => m.toUpperCase());
257
+ /**
258
+ * A pattern percent-encoded the way robots-parser reads it, so `Disallow: /blog/café` matches
259
+ * `/blog/caf%C3%A9` here as it does when robots-parser decides the bot is blocked.
260
+ */
261
+ const encodedPattern = (pattern) => {
262
+ try {
263
+ return upperEscapes(encodeURI(pattern).replaceAll("%25", "%"));
264
+ }
265
+ catch {
266
+ // encodeURI throws on a lone surrogate; robots-parser then keeps the pattern as written.
267
+ return pattern;
268
+ }
269
+ };
270
+ /**
271
+ * Whether a robots.txt path pattern matches `path` (path and query): `*` stands for any characters
272
+ * and a final `$` anchors the end. Both sides are percent-encoded as robots-parser encodes them.
273
+ * Each piece between stars is found with indexOf, left to right, so a pattern of many stars costs
274
+ * one pass over the path, never a backtracking search.
275
+ */
276
+ export const pathMatches = (rawPattern, rawPath) => {
277
+ const pattern = encodedPattern(rawPattern);
278
+ const path = upperEscapes(rawPath);
279
+ const anchored = pattern.endsWith("$");
280
+ const parts = (anchored ? pattern.slice(0, -1) : pattern).split("*");
281
+ const [first = "", ...rest] = parts;
282
+ if (!path.startsWith(first)) {
283
+ return false;
284
+ }
285
+ let pos = first.length;
286
+ for (const [i, part] of rest.entries()) {
287
+ if (anchored && i === rest.length - 1) {
288
+ return path.length - part.length >= pos && path.endsWith(part);
289
+ }
290
+ const at = path.indexOf(part, pos);
291
+ if (at === -1) {
292
+ return false;
293
+ }
294
+ pos = at + part.length;
295
+ }
296
+ return !anchored || pos === path.length;
297
+ };
298
+ const robotsBlocks = new WeakMap();
299
+ /** For each bot robots.txt keeps out, the lines that do it; set by `crawlerAccess`. */
300
+ export const robotsBlocksOf = (report) => robotsBlocks.get(report);
301
+ const pathOf = (url) => {
302
+ try {
303
+ const u = new URL(url);
304
+ return `${u.pathname}${u.search}`;
305
+ }
306
+ catch {
307
+ return null;
308
+ }
309
+ };
310
+ const ruleLine = (l) => ({
311
+ raw: l.raw,
312
+ agentLines: l.agentLines,
313
+ run: l.run,
314
+ tokens: l.agents.map(productToken),
315
+ });
316
+ /** The lines a group of its own for a bot keeps from the group it followed. */
317
+ const COPIED_KEYS = new Set(["allow", "disallow", "content-signal"]);
318
+ /** The product token of the group a bot follows. */
319
+ const groupToken = (bot) => {
320
+ if (bot.robotsGroup === "named") {
321
+ return productToken(bot.name);
322
+ }
323
+ return bot.robotsGroup === "googlebot" ? "googlebot" : "*";
324
+ };
325
+ /**
326
+ * The lines of the group a bot follows that keep it from `blocked`, and the group's other rules.
327
+ * `lineOf` gives the line robots-parser blocked each URL with, for a pattern `pathMatches` misses.
328
+ */
329
+ const blockOf = (lines, token, group, blocked, lineOf) => {
330
+ // One object per line, so `blocking` holds the very lines `rules` lists.
331
+ const own = lines.flatMap((l) => l.agents.some((a) => productToken(a) === token)
332
+ ? [{ line: l, rule: ruleLine(l) }]
333
+ : []);
334
+ const paths = blocked.flatMap((u) => pathOf(u) ?? []);
335
+ const disallows = own.filter(({ line }) => line.key === "disallow" && line.value !== "");
336
+ let blocking = disallows.filter(({ line }) => paths.some((p) => pathMatches(line.value, p)));
337
+ // Without the blocking line a fix would add a group of its own that cannot lift the block.
338
+ if (!blocking.length) {
339
+ const numbers = new Set(blocked.map(lineOf));
340
+ blocking = disallows.filter(({ line }) => numbers.has(line.number));
341
+ }
342
+ return {
343
+ group,
344
+ blocking: blocking.map(({ rule }) => rule),
345
+ rules: own.flatMap(({ line, rule }) => COPIED_KEYS.has(line.key) ? [rule] : []),
346
+ };
347
+ };
223
348
  /**
224
349
  * robots.txt as RFC 9309 has crawlers read it: a file is "found" with status 200, "missing" with a
225
350
  * 4xx (crawl everything), "unreachable" with a 5xx or no answer (crawl nothing).
@@ -239,6 +364,7 @@ export const crawlerAccess = (robots, text, startUrl, pageUrls) => {
239
364
  const found = status === "found" && text !== null;
240
365
  const groups = found ? readGroups(text) : null;
241
366
  const allows = found ? agentMatcher(robots.url, text) : null;
367
+ const lineOf = found ? ruleLineMatcher(robots.url, text) : null;
242
368
  const urls = pageUrls.length ? pageUrls : [startUrl];
243
369
  const bots = AI_BOTS.map((bot) => {
244
370
  const token = productToken(bot.name);
@@ -280,6 +406,24 @@ export const crawlerAccess = (robots, text, startUrl, pageUrls) => {
280
406
  : 0,
281
407
  };
282
408
  });
409
+ const blocks = new Map();
410
+ if (allows && groups) {
411
+ for (const bot of bots) {
412
+ if (bot.robotsGroup === "none") {
413
+ continue;
414
+ }
415
+ const token = groupToken(bot);
416
+ const agent = bot.robotsGroup === "googlebot" ? "Googlebot" : bot.name;
417
+ // The pages the AEO rules report this bot blocked on: the start page, and pages only it is kept from.
418
+ const blocked = [
419
+ ...(bot.allowed ? [] : [startUrl]),
420
+ ...urls.filter((u) => !allows(u, agent) && allows(u, "*")),
421
+ ];
422
+ if (blocked.length) {
423
+ blocks.set(bot.name, blockOf(groups.lines, token, bot.robotsGroup, blocked, (u) => lineOf ? lineOf(u, agent) : -1));
424
+ }
425
+ }
426
+ }
283
427
  let trainingPreference = "none";
284
428
  // `User-agent: *` never speaks for the policy token, so only a group that names it counts.
285
429
  if (allows && groups?.named.has(TRAINING_PREFERENCE_TOKEN)) {
@@ -287,7 +431,7 @@ export const crawlerAccess = (robots, text, startUrl, pageUrls) => {
287
431
  ? "allowed"
288
432
  : "disallowed";
289
433
  }
290
- return {
434
+ const report = {
291
435
  robotsTxt: robots.url,
292
436
  status,
293
437
  httpStatus: robots.status,
@@ -295,5 +439,7 @@ export const crawlerAccess = (robots, text, startUrl, pageUrls) => {
295
439
  contentSignals: found ? contentSignals(text) : [],
296
440
  bots,
297
441
  };
442
+ robotsBlocks.set(report, blocks);
443
+ return report;
298
444
  };
299
445
  //# sourceMappingURL=bots.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bots.js","sourceRoot":"","sources":["../../../src/core/aeo/bots.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bots.js","sourceRoot":"","sources":["../../../src/core/aeo/bots.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { ExtractedPage, FixEdit, ResponseInfo } from "../types.js";
2
+ /** `HTTP/1.1 403 Forbidden`: a status as a response's first line. */
3
+ export declare const statusLine: (status: number) => string;
4
+ /** How one rule rewrites robots directives. */
5
+ export interface DirectiveChange {
6
+ /** Robots meta tag names to rewrite (robots, googlebot, bingbot, ...); null for all of them. */
7
+ metaNames: ReadonlySet<string> | null;
8
+ /** X-Robots-Tag scopes to rewrite: null stands for directives for every crawler, else an agent. */
9
+ headerAgents: ReadonlySet<string | null> | null;
10
+ /** The directive to write instead, null to drop it; returning it unchanged keeps it. */
11
+ change: (directive: string) => string | null;
12
+ }
13
+ /**
14
+ * The edits that rewrite the robots directives a rule is about, in every meta tag and X-Robots-Tag
15
+ * header that states them: the tag or header rewritten, or removed when nothing is left in it.
16
+ */
17
+ export declare const directiveFixes: (page: ExtractedPage, response: ResponseInfo | undefined, spec: DirectiveChange, write: string) => FixEdit[];
18
+ /** A structured data object a fix adds to: its type, its name when it has one, and how it is written. */
19
+ export interface MarkupTarget {
20
+ type: string;
21
+ name?: string | null;
22
+ /** The object is microdata (itemscope), not JSON-LD. */
23
+ microdata: boolean;
24
+ /** A property of the object to add to instead of the object itself (`author`). */
25
+ within?: string;
26
+ }
27
+ /** Where an edit of a structured data object goes: `BlogPosting (JSON-LD) > author`, or a microdata selector. */
28
+ export declare const markupAt: (target: MarkupTarget) => string;
29
+ /**
30
+ * The edit that adds a property to a structured data object: a JSON-LD property, or for microdata
31
+ * the element that states it.
32
+ */
33
+ export declare const addProperty: (target: MarkupTarget, property: {
34
+ json: string;
35
+ microdata: string;
36
+ }, write: string) => FixEdit;
37
+ /** A JSON string safe inside a <script> element: `<` is escaped, so the text cannot close it. */
38
+ export declare const scriptJson: (value: string) => string;
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Edits the AEO rules share: robots directives rewritten in the meta tags and the X-Robots-Tag
3
+ * header that state them, status lines, and properties added to structured data.
4
+ */
5
+ import { STATUS_CODES } from "node:http";
6
+ import { addHtml, removeEdit, replaceEdit, setAttributeEdit, } from "../rules/fix.js";
7
+ import { parseRobotsHeader } from "../rules/indexing.js";
8
+ /** `HTTP/1.1 403 Forbidden`: a status as a response's first line. */
9
+ export const statusLine = (status) => {
10
+ const reason = STATUS_CODES[status];
11
+ return `HTTP/1.1 ${status}${reason ? ` ${reason}` : ""}`;
12
+ };
13
+ /** Robots directives compare without whitespace: "max-snippet: 50" is "max-snippet:50". */
14
+ const squash = (directive) => directive.replaceAll(/\s+/gu, "");
15
+ const rewrite = (directives, change) => {
16
+ const kept = [];
17
+ let changed = false;
18
+ for (const d of directives) {
19
+ const next = change(d);
20
+ if (next !== d) {
21
+ changed = true;
22
+ }
23
+ if (next && !kept.includes(next)) {
24
+ kept.push(next);
25
+ }
26
+ }
27
+ return { kept, changed };
28
+ };
29
+ /** The X-Robots-Tag lines that state `directives`, one line per agent they are scoped to. */
30
+ const headerLines = (directives) => {
31
+ const runs = [];
32
+ for (const d of directives) {
33
+ const last = runs.at(-1);
34
+ if (last?.agent === d.agent) {
35
+ last.directives.push(d.directive);
36
+ }
37
+ else {
38
+ runs.push({ agent: d.agent, directives: [d.directive] });
39
+ }
40
+ }
41
+ return runs
42
+ .map((r) => `X-Robots-Tag: ${r.agent === null ? "" : `${r.agent}: `}${r.directives.join(", ")}`)
43
+ .join("\n");
44
+ };
45
+ const headerEdit = (header, spec, write) => {
46
+ let changed = false;
47
+ const kept = parseRobotsHeader(header).flatMap((d) => {
48
+ if (spec.headerAgents && !spec.headerAgents.has(d.agent)) {
49
+ return [d];
50
+ }
51
+ const next = spec.change(d.directive);
52
+ if (next !== d.directive) {
53
+ changed = true;
54
+ }
55
+ return next ? [{ agent: d.agent, directive: next }] : [];
56
+ });
57
+ if (!changed) {
58
+ return null;
59
+ }
60
+ const current = `X-Robots-Tag: ${header}`;
61
+ return kept.length
62
+ ? replaceEdit("http", current, headerLines(kept), {
63
+ at: "X-Robots-Tag",
64
+ write,
65
+ })
66
+ : removeEdit("http", current, { at: "X-Robots-Tag", write });
67
+ };
68
+ /**
69
+ * The edits that rewrite the robots directives a rule is about, in every meta tag and X-Robots-Tag
70
+ * header that states them: the tag or header rewritten, or removed when nothing is left in it.
71
+ */
72
+ export const directiveFixes = (page, response, spec, write) => {
73
+ const edits = [];
74
+ for (const meta of page.answer.robotsMeta) {
75
+ const tag = page.markup.metaRobots[meta.index];
76
+ if (!tag || (spec.metaNames && !spec.metaNames.has(meta.name))) {
77
+ continue;
78
+ }
79
+ const directives = meta.content.split(",").map(squash).filter(Boolean);
80
+ const { kept, changed } = rewrite(directives, spec.change);
81
+ if (!changed) {
82
+ continue;
83
+ }
84
+ const at = `head > meta[name="${meta.name}"]`;
85
+ edits.push(kept.length
86
+ ? setAttributeEdit(tag, at, "content", kept.join(", "), write)
87
+ : removeEdit("html", tag, { at, write }));
88
+ }
89
+ const header = response?.headers["x-robots-tag"];
90
+ const edit = header ? headerEdit(header, spec, write) : null;
91
+ if (edit) {
92
+ edits.push(edit);
93
+ }
94
+ return edits;
95
+ };
96
+ /** Where an edit of a structured data object goes: `BlogPosting (JSON-LD) > author`, or a microdata selector. */
97
+ export const markupAt = (target) => {
98
+ if (target.microdata) {
99
+ return `[itemtype$="/${target.type}"]${target.within ? ` [itemprop="${target.within}"]` : ""}`;
100
+ }
101
+ const named = target.name ? ` ${JSON.stringify(target.name)}` : "";
102
+ return `${target.type}${named} (JSON-LD)${target.within ? ` > ${target.within}` : ""}`;
103
+ };
104
+ /**
105
+ * The edit that adds a property to a structured data object: a JSON-LD property, or for microdata
106
+ * the element that states it.
107
+ */
108
+ export const addProperty = (target, property, write) => addHtml(markupAt(target), target.microdata ? property.microdata : property.json, write);
109
+ /** A JSON string safe inside a <script> element: `<` is escaped, so the text cannot close it. */
110
+ export const scriptJson = (value) => JSON.stringify(value).replaceAll("<", "\\u003c");
111
+ //# sourceMappingURL=fixes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixes.js","sourceRoot":"","sources":["../../../src/core/aeo/fixes.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,11 @@ export declare const AEO_SITE_RULES: RuleMeta[];
4
4
  export interface AeoSiteContext {
5
5
  crawlers: AiCrawlerReport | null;
6
6
  llmsTxt: LlmsTxtInfo | null;
7
+ /** The audited pages, which a fix for a missing or empty llms.txt lists. */
8
+ pages?: {
9
+ url: string;
10
+ title: string | null;
11
+ }[];
7
12
  /** Pages audited, for "blocked from N of M pages". */
8
13
  pageCount: number;
9
14
  /** Set when the caller asked for the bot probe but it could not run. */