@rivi-software/agentic-seo-check 0.4.0 → 0.5.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 (128) hide show
  1. package/README.md +29 -5
  2. package/dist/cli.js +20 -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 +2 -5
  36. package/dist/core/lighthouse.js +290 -5
  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/report/markdown.js +68 -1
  52. package/dist/core/report/markdown.js.map +1 -1
  53. package/dist/core/robots.d.ts +5 -0
  54. package/dist/core/robots.js +8 -0
  55. package/dist/core/robots.js.map +1 -1
  56. package/dist/core/rules/aeo.js +339 -25
  57. package/dist/core/rules/aeo.js.map +1 -1
  58. package/dist/core/rules/canonical.js +107 -11
  59. package/dist/core/rules/canonical.js.map +1 -1
  60. package/dist/core/rules/content.js +65 -7
  61. package/dist/core/rules/content.js.map +1 -1
  62. package/dist/core/rules/document.js +73 -8
  63. package/dist/core/rules/document.js.map +1 -1
  64. package/dist/core/rules/fix.d.ts +55 -0
  65. package/dist/core/rules/fix.js +159 -0
  66. package/dist/core/rules/fix.js.map +1 -0
  67. package/dist/core/rules/head.js +81 -4
  68. package/dist/core/rules/head.js.map +1 -1
  69. package/dist/core/rules/headings.js +92 -9
  70. package/dist/core/rules/headings.js.map +1 -1
  71. package/dist/core/rules/hreflang.js +79 -9
  72. package/dist/core/rules/hreflang.js.map +1 -1
  73. package/dist/core/rules/images.js +49 -0
  74. package/dist/core/rules/images.js.map +1 -1
  75. package/dist/core/rules/index.d.ts +11 -0
  76. package/dist/core/rules/index.js +21 -1
  77. package/dist/core/rules/index.js.map +1 -1
  78. package/dist/core/rules/indexing.js +108 -1
  79. package/dist/core/rules/indexing.js.map +1 -1
  80. package/dist/core/rules/keyword.js +91 -1
  81. package/dist/core/rules/keyword.js.map +1 -1
  82. package/dist/core/rules/links.js +42 -0
  83. package/dist/core/rules/links.js.map +1 -1
  84. package/dist/core/rules/loading.js +54 -1
  85. package/dist/core/rules/loading.js.map +1 -1
  86. package/dist/core/rules/meta.js +36 -5
  87. package/dist/core/rules/meta.js.map +1 -1
  88. package/dist/core/rules/page-fixes.d.ts +39 -0
  89. package/dist/core/rules/page-fixes.js +107 -0
  90. package/dist/core/rules/page-fixes.js.map +1 -0
  91. package/dist/core/rules/quoted-tags.d.ts +23 -0
  92. package/dist/core/rules/quoted-tags.js +79 -0
  93. package/dist/core/rules/quoted-tags.js.map +1 -0
  94. package/dist/core/rules/response.js +71 -7
  95. package/dist/core/rules/response.js.map +1 -1
  96. package/dist/core/rules/rule.d.ts +17 -4
  97. package/dist/core/rules/rule.js +11 -2
  98. package/dist/core/rules/rule.js.map +1 -1
  99. package/dist/core/rules/social.js +101 -10
  100. package/dist/core/rules/social.js.map +1 -1
  101. package/dist/core/rules/structured-data-fixes.d.ts +33 -0
  102. package/dist/core/rules/structured-data-fixes.js +469 -0
  103. package/dist/core/rules/structured-data-fixes.js.map +1 -0
  104. package/dist/core/rules/structured-data-values.js +242 -31
  105. package/dist/core/rules/structured-data-values.js.map +1 -1
  106. package/dist/core/rules/structured-data.js +171 -4
  107. package/dist/core/rules/structured-data.js.map +1 -1
  108. package/dist/core/rules/title.js +39 -5
  109. package/dist/core/rules/title.js.map +1 -1
  110. package/dist/core/rules/urls.js +166 -0
  111. package/dist/core/rules/urls.js.map +1 -1
  112. package/dist/core/site-fixes.d.ts +111 -0
  113. package/dist/core/site-fixes.js +650 -0
  114. package/dist/core/site-fixes.js.map +1 -0
  115. package/dist/core/site-rules.js +474 -53
  116. package/dist/core/site-rules.js.map +1 -1
  117. package/dist/core/sitemap.d.ts +16 -0
  118. package/dist/core/sitemap.js +34 -0
  119. package/dist/core/sitemap.js.map +1 -1
  120. package/dist/core/types.d.ts +223 -3
  121. package/dist/core/types.js.map +1 -1
  122. package/dist/index.d.ts +2 -0
  123. package/dist/index.js +1 -0
  124. package/dist/index.js.map +1 -1
  125. package/dist/mcp.js +16 -2
  126. package/dist/mcp.js.map +1 -1
  127. package/package.json +1 -1
  128. package/skills/seo-audit/SKILL.md +22 -5
@@ -1,6 +1,10 @@
1
1
  import { hostOf, resolveUrl } from "../url.js";
2
2
  import { isLocalHost } from "./canonical.js";
3
+ import { addEdit, addHtml, escapeAttribute, replaceHtml, setAttributeEdit, slot, } from "./fix.js";
4
+ import { ORIGIN_SLOT_WRITE, permanentRedirect, withoutParameters, } from "./page-fixes.js";
3
5
  import { cap, defineRule, GOOGLE_DOCS } from "./rule.js";
6
+ /** A CSS attribute value in double quotes. */
7
+ const cssString = (value) => `"${value.replaceAll("\\", "\\\\").replaceAll('"', String.raw `\"`)}"`;
4
8
  /** Query parameters that only tell analytics where a click came from. */
5
9
  const TRACKING_PARAMETERS = new Set([
6
10
  "gclid",
@@ -85,6 +89,48 @@ const pathWithoutLocales = (path) => path
85
89
  .split("/")
86
90
  .filter((segment) => !LOCALE_SEGMENT.test(segment))
87
91
  .join("/");
92
+ /**
93
+ * The page's URL with each path segment respelled (locale segments as they are), as the page names
94
+ * itself: absolute on a live site, a path for files and dev servers.
95
+ */
96
+ const respelled = (page, source, respell) => {
97
+ let url;
98
+ try {
99
+ url = new URL(page.url);
100
+ }
101
+ catch {
102
+ return null;
103
+ }
104
+ const path = url.pathname
105
+ .split("/")
106
+ .map((segment) => LOCALE_SEGMENT.test(segment) ? segment : respell(segment))
107
+ .join("/");
108
+ const absolute = source === "url" && !isLocalHost(page.url);
109
+ const variant = `${absolute ? url.origin : ""}${path}${url.search}`;
110
+ const target = `${absolute ? url.origin : ""}${url.pathname}${url.search}`;
111
+ return { variant, target };
112
+ };
113
+ /**
114
+ * The redirect that sends another spelling of the page's path to the page. The page keeps its URL:
115
+ * renaming an indexed URL costs more than the spelling.
116
+ */
117
+ const spellingRedirect = (page, source, respell, write) => {
118
+ const spelling = respelled(page, source, respell);
119
+ return spelling
120
+ ? [
121
+ addEdit("http", "status line", permanentRedirect(spelling.target), {
122
+ url: spelling.variant,
123
+ write,
124
+ }),
125
+ ]
126
+ : [];
127
+ };
128
+ /** A path segment in lowercase, its percent-escapes kept uppercase as they are written. */
129
+ const lowercaseSegment = (segment) => segment.toLowerCase().replaceAll(/%[\da-f]{2}/gu, (m) => m.toUpperCase());
130
+ /** A path segment with hyphens where underscores join words. */
131
+ const hyphenatedSegment = (segment) => segment.replaceAll(/(?<=[\p{L}\p{N}])_(?=[\p{L}\p{N}])/gu, "-");
132
+ /** The edit that rewrites a link's href without the parameters `drop` selects. */
133
+ const cleanLinkEdit = (page, link, drop, write) => setAttributeEdit(link.tag, `a[href=${cssString(link.href)}]`, "href", escapeAttribute(withoutParameters(link.href, page.url, drop)), write);
88
134
  const KEEP_EXISTING_URLS = "Do not rename URLs that are already indexed or linked to only for this: a rename needs a 301 redirect from every old URL and resets what search engines know about the page. Apply it to new URLs.";
89
135
  /** Private networks: an address there resolves only inside one office or one machine. */
90
136
  const isPrivateAddress = (host) => /^(?:10|127)\.\d{1,3}\.\d{1,3}\.\d{1,3}$/u.test(host) ||
@@ -120,6 +166,96 @@ const urlsOnPage = (page) => {
120
166
  }
121
167
  return [...out].map(([url, where]) => ({ url, where }));
122
168
  };
169
+ /** The origin of a development-host URL, to swap for the production one. */
170
+ const devOrigin = (raw) => {
171
+ const match = /^(?:https?:)?\/\/[^/?#]+/iu.exec(raw.trim());
172
+ return match ? match[0] : null;
173
+ };
174
+ /**
175
+ * Edits that move every URL on a development host to the production origin: the canonical, the
176
+ * hreflang links, og:url and og:image, links, images and resources, each in the tag that has it.
177
+ */
178
+ const localHostEdits = (page) => {
179
+ const origin = slot("https://www.example.com");
180
+ const edits = [];
181
+ const seen = new Set();
182
+ const add = (raw, tag, at, attribute) => {
183
+ const from = raw ? devOrigin(raw) : null;
184
+ const absolute = raw ? resolveUrl(raw, page.url) : null;
185
+ if (!raw || !from || !absolute || !isDevHost(absolute)) {
186
+ return;
187
+ }
188
+ // A URL quoted on its own stops before any "&", which the source may write as "&amp;".
189
+ const quoted = tag ? raw : (raw.split("&")[0] ?? raw);
190
+ const moved = `${origin}${quoted.trim().slice(from.length)}`;
191
+ const key = `${at}|${raw}`;
192
+ if (seen.has(key)) {
193
+ return;
194
+ }
195
+ seen.add(key);
196
+ if (tag === undefined) {
197
+ edits.push(replaceHtml(quoted, moved, { at, write: ORIGIN_SLOT_WRITE }));
198
+ return;
199
+ }
200
+ edits.push(tag.includes(raw)
201
+ ? replaceHtml(tag, tag.replace(raw, () => moved), {
202
+ at,
203
+ write: ORIGIN_SLOT_WRITE,
204
+ })
205
+ : setAttributeEdit(tag, at, attribute, moved, ORIGIN_SLOT_WRITE));
206
+ };
207
+ for (const [i, raw] of page.canonicals.entries()) {
208
+ add(raw, page.markup.canonicals[i], 'head > link[rel="canonical"]', "href");
209
+ }
210
+ for (const h of page.hreflang) {
211
+ add(h.href, h.tag, `link[hreflang=${cssString(h.lang)}]`, "href");
212
+ }
213
+ for (const property of ["url", "image"]) {
214
+ add(page.og[property], page.markup.social[`og:${property}`], `head > meta[property="og:${property}"]`, "content");
215
+ }
216
+ for (const resource of page.resources) {
217
+ add(resource.raw, undefined, `${resource.element}[${resource.attribute}*=${cssString(resource.raw)}]`, resource.attribute);
218
+ }
219
+ for (const link of page.links) {
220
+ add(link.href, link.tag, `a[href=${cssString(link.href)}]`, "href");
221
+ }
222
+ return edits;
223
+ };
224
+ /**
225
+ * `url`, which `raw` resolves to, cut where `raw` is cut at its first "&": the query after it is
226
+ * the same in both, while a <base href> before it may hold an "&" of its own.
227
+ */
228
+ const cutLikeRaw = (url, raw) => {
229
+ let cut = url.length;
230
+ for (let n = raw.split("&").length - 1; n > 0 && cut > 0; n -= 1) {
231
+ cut = url.lastIndexOf("&", cut - 1);
232
+ }
233
+ return cut > 0 ? url.slice(0, cut) : url;
234
+ };
235
+ /**
236
+ * Edits that load each insecure resource over https, once per URL as the page writes it. Only the
237
+ * scheme changes, so the quote stops before any "&", which the source may write as "&amp;".
238
+ */
239
+ const httpsEdits = (resources) => {
240
+ const seen = new Set();
241
+ const edits = [];
242
+ for (const r of resources) {
243
+ const quoted = r.raw.split("&")[0] ?? r.raw;
244
+ if (seen.has(quoted)) {
245
+ continue;
246
+ }
247
+ seen.add(quoted);
248
+ const at = `${r.element}[${r.attribute}*=${cssString(quoted)}]`;
249
+ // A relative URL is http:// only through an http <base href>: it is written out in full.
250
+ edits.push(/^http:/iu.test(quoted)
251
+ ? replaceHtml(quoted, quoted.replace(/^http:/iu, "https:"), { at })
252
+ : replaceHtml(quoted, cutLikeRaw(r.url, r.raw).replace(/^http:/iu, "https:"), {
253
+ at,
254
+ write: "The page's <base href> is on http://; make it https:// too, and check that the https URL exists.",
255
+ }));
256
+ }
257
+ return edits;
258
+ };
123
259
  export const urlRules = [
124
260
  defineRule({
125
261
  id: "url.uppercase",
@@ -134,6 +270,7 @@ export const urlRules = [
134
270
  return path &&
135
271
  /[A-Z]/u.test(pathWithoutLocales(path).replaceAll(/%[\dA-F]{2}/giu, ""))
136
272
  ? make(`The URL path ${path} has uppercase letters.`, {
273
+ fix: spellingRedirect(page, source, lowercaseSegment, "Have the lowercase spelling of the path redirect to this page, so links that differ in case reach it; whatever it answers now (404 or a copy of the page). For new pages, use lowercase paths from the start."),
137
274
  evidence: { path },
138
275
  })
139
276
  : null;
@@ -150,6 +287,7 @@ export const urlRules = [
150
287
  // Underscores in a word (/blue_widgets), not as a leading marker (/_next/, /_assets/).
151
288
  return path && /[\p{L}\p{N}]_[\p{L}\p{N}]/u.test(pathWithoutLocales(path))
152
289
  ? make(`The URL path ${path} uses underscores between words.`, {
290
+ fix: spellingRedirect(page, source, hyphenatedSegment, "Have the hyphenated spelling of the path redirect to this page, in case links use it. For new pages, separate words with hyphens from the start; keep this indexed URL as it is."),
153
291
  evidence: { path },
154
292
  })
155
293
  : null;
@@ -168,9 +306,28 @@ export const urlRules = [
168
306
  return null;
169
307
  }
170
308
  const parameter = own ?? (links[0]?.url ? sessionParameter(links[0].url) : null);
309
+ const isSession = (name) => name.toLowerCase() === parameter?.toLowerCase() ||
310
+ name.toLowerCase() === "jsessionid";
311
+ const serverSetting = "Then keep the session in a cookie: in a Java servlet container, <tracking-mode>COOKIE</tracking-mode> in web.xml's <session-config>; in PHP, session.use_trans_sid=0 and session.use_only_cookies=1.";
312
+ // The page names its clean URL as canonical, so the session spelling folds into it.
313
+ const [canonicalTag] = page.markup.canonicals;
314
+ const clean = own
315
+ ? withoutParameters(page.url, page.url, isSession)
316
+ : null;
317
+ const ownEdit = clean
318
+ ? [
319
+ canonicalTag
320
+ ? setAttributeEdit(canonicalTag, 'head > link[rel="canonical"]', "href", escapeAttribute(clean), serverSetting)
321
+ : addHtml("head", `<link rel="canonical" href="${escapeAttribute(clean)}">`, serverSetting),
322
+ ]
323
+ : [];
171
324
  return make(own
172
325
  ? `The page URL carries a session id (${own}).`
173
326
  : `${links.length} internal link(s) carry a session id (${parameter}).`, {
327
+ fix: [
328
+ ...ownEdit,
329
+ ...links.map((link, i) => cleanLinkEdit(page, link, isSession, i === 0 && ownEdit.length === 0 ? serverSetting : undefined)),
330
+ ],
174
331
  evidence: {
175
332
  parameter,
176
333
  pageUrl: own ? page.url : null,
@@ -200,6 +357,7 @@ export const urlRules = [
200
357
  });
201
358
  return tagged.length > 0
202
359
  ? make(`${tagged.length} internal link(s) carry tracking parameters.`, {
360
+ fix: tagged.map((link) => cleanLinkEdit(page, link, isTrackingParameter)),
203
361
  evidence: {
204
362
  count: tagged.length,
205
363
  examples: cap(tagged.map((l) => l.url)),
@@ -222,6 +380,7 @@ export const urlRules = [
222
380
  return null;
223
381
  }
224
382
  const places = [...new Set(local.map((u) => u.where))];
383
+ const fix = localHostEdits(page);
225
384
  // A tutorial may link to http://localhost:3000 on purpose, for the reader's own machine.
226
385
  const onlyAnchors = places.every((w) => w === "<a href>");
227
386
  return make(`${local.length} URL(s) on the page point to a development host (${cap(places, 4).join(", ")}).`, {
@@ -229,6 +388,7 @@ export const urlRules = [
229
388
  recommendation: onlyAnchors
230
389
  ? "If these links are meant for the reader's own machine (a setup guide), leave them. Otherwise build them from the production site URL or make them relative."
231
390
  : undefined,
391
+ fix,
232
392
  evidence: {
233
393
  count: local.length,
234
394
  examples: cap(local.map((u) => `${u.where}: ${u.url}`)),
@@ -243,6 +403,7 @@ export const urlRules = [
243
403
  recommendation: 'Give the target element the id the link names, or fix the link. If JavaScript handles the click (a menu or modal toggle), use a <button> instead of <a href="#...">.',
244
404
  }, ({ page }, make) => page.missingFragments.length > 0
245
405
  ? make(`${page.missingFragments.length} same-page link(s) point to ids that are not on the page: ${cap(page.missingFragments, 5).join(", ")}.`, {
406
+ fix: page.missingFragments.map((href) => addHtml(`the element ${href} should scroll to`, `id="${escapeAttribute(href.slice(1))}"`, `Put this id on the section or heading the link ${href} means. If a script handles the click instead (a menu or modal toggle), make the link a <button type="button">.`)),
246
407
  selector: cap(page.missingFragments, 5)
247
408
  .map((href) => `a[href="${href.replaceAll('"', '\\"')}"]`)
248
409
  .join(", "),
@@ -269,9 +430,12 @@ export const urlRules = [
269
430
  const blocked = insecure.filter((r) => !isUpgraded(r));
270
431
  const upgraded = insecure.filter(isUpgraded);
271
432
  const examples = (list) => cap(list.map((r) => `${r.kind}: ${r.url}`));
433
+ const fixOf = (list) => httpsEdits(list);
272
434
  return [
273
435
  blocked.length > 0
274
436
  ? make(`Browsers block ${blocked.length} resource(s) the page loads over http (${[...new Set(blocked.map((r) => r.kind))].join(", ")}).`, {
437
+ fix: fixOf(blocked),
438
+ key: "blocked",
275
439
  evidence: {
276
440
  count: blocked.length,
277
441
  examples: examples(blocked),
@@ -281,6 +445,8 @@ export const urlRules = [
281
445
  upgraded.length > 0
282
446
  ? make(`${upgraded.length} resource URL(s) use http; browsers upgrade them to https, which fails where the https URL does not exist.`, {
283
447
  severity: "info",
448
+ fix: fixOf(upgraded),
449
+ key: "upgraded",
284
450
  evidence: {
285
451
  count: upgraded.length,
286
452
  examples: examples(upgraded),
@@ -1 +1 @@
1
- {"version":3,"file":"urls.js","sourceRoot":"","sources":["../../../src/core/rules/urls.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"urls.js","sourceRoot":"","sources":["../../../src/core/rules/urls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ import type { PageRecord } from "./site-rules.js";
2
+ import type { SitemapLayout } from "./sitemap.js";
3
+ import type { FixEdit, ImageInfo, LinkInfo } from "./types.js";
4
+ /**
5
+ * The most edits a site fix builds. `finding()` keeps the first 10 of any longer list, but a fix
6
+ * that reads a site's robots.txt or every crawled page could build thousands first.
7
+ */
8
+ export declare const MAX_EDITS = 10;
9
+ /** `e` with `url` set, in the key order an edit reads in. */
10
+ export declare const onUrl: (e: FixEdit, url: string) => FixEdit;
11
+ /** An HTTP status line, or what happened when there was no response. */
12
+ export declare const statusLine: (status: number | null, error?: string) => string;
13
+ /** A permanent redirect to `location`; 308 keeps the method, for a redirect that was 307 or 308. */
14
+ export declare const redirectTo: (location: string, keepMethod?: boolean) => string;
15
+ /** Text for an XML element, such as a sitemap <loc>. */
16
+ export declare const xmlText: (value: string) => string;
17
+ /** A sitemap <loc> element, as a generator writes it. */
18
+ export declare const locOf: (url: string) => string;
19
+ /** The path, query and fragment of `url`: how a page links to its own site. */
20
+ export declare const pathOf: (url: string) => string;
21
+ /**
22
+ * `target` written the way `original` was: absolute when the page wrote an absolute URL, else from
23
+ * the root. A fragment the page wrote is kept.
24
+ */
25
+ export declare const hrefLike: (original: string, target: string, pageUrl: string) => string;
26
+ /** A CSS selector for a link, by the href the page wrote. */
27
+ export declare const linkSelector: (link: LinkInfo) => string;
28
+ /** The edit that points the link `link` on page `pageUrl` at `href` (exact, or a `{{…}}` slot). */
29
+ export declare const relinkEdit: (pageUrl: string, link: LinkInfo, href: string, write?: string) => FixEdit;
30
+ /** The edit that adds a link to `target` on page `from`, in its navigation or footer. */
31
+ export declare const addLinkEdit: (from: string, target: string, write: string) => FixEdit;
32
+ /**
33
+ * robots.txt split into lines, each without its line ending. A lone CR ends a line too, as in
34
+ * robots-parser, so line numbers match the ones it reports.
35
+ */
36
+ export declare const linesOf: (text: string) => string[];
37
+ /**
38
+ * The first `User-agent:` line of the group that holds line `index` (0-based): the line an agent
39
+ * finds the group by.
40
+ */
41
+ export declare const groupHeader: (lines: string[], index: number) => string | null;
42
+ export declare const robotsMissingFix: (robotsUrl: string, sitemapUrl: string) => FixEdit[];
43
+ export declare const robotsErrorFix: (robotsUrl: string, status: number | null, error?: string) => FixEdit[];
44
+ /** Replaces the rule that blocks the start URL with an empty Disallow, which allows everything. */
45
+ export declare const robotsBlocksAllFix: (robotsUrl: string, text: string, startUrl: string) => FixEdit[];
46
+ /** The Disallow line that blocks `target` for this crawler, quoted for a `write`. */
47
+ export declare const blockingRule: (robotsUrl: string, text: string, target: string) => string | null;
48
+ /**
49
+ * Cuts robots.txt at the last line Google reads: the rules after it are ignored, so the file should
50
+ * end there once the ones that matter are folded in above.
51
+ */
52
+ export declare const robotsTooLargeFix: (robotsUrl: string, text: string, bytes: number) => FixEdit[];
53
+ /** Removes noindex:, nofollow: and crawl-delay: lines; a noindex path gets an X-Robots-Tag header instead. */
54
+ export declare const robotsUnsupportedFix: (robotsUrl: string, text: string) => FixEdit[];
55
+ /**
56
+ * Allow lines for the scripts and stylesheets robots.txt keeps from Googlebot, added to the group
57
+ * that blocks them: a longer Allow pattern wins over the Disallow that matched.
58
+ */
59
+ export declare const blockedResourcesFix: (robotsUrl: string, text: string, resources: string[]) => FixEdit[];
60
+ /** The sitemap file that lists `loc`, or the only one there is. */
61
+ export declare const sitemapFileOf: (layout: SitemapLayout, loc: string) => string | undefined;
62
+ /** Removes the sitemap entry of `loc`. */
63
+ export declare const removeFromSitemap: (layout: SitemapLayout, loc: string, why: string) => FixEdit;
64
+ /** Points the sitemap entry of `loc` at `to`. */
65
+ export declare const replaceInSitemap: (layout: SitemapLayout, loc: string, to: string) => FixEdit;
66
+ /** A sitemap of the indexable pages, and the robots.txt line that names it. */
67
+ export declare const sitemapMissingFix: (sitemapUrl: string, pages: string[], robotsUrl: string | null) => FixEdit[];
68
+ /** Adds the pages a sitemap misses to the sitemap that lists the site's pages. */
69
+ export declare const addToSitemapFix: (layout: SitemapLayout, urls: string[]) => FixEdit[];
70
+ /** What serves a sitemap that answers with an error, HTML or something that is not XML. */
71
+ export declare const sitemapErrorFix: (errors: string[], origin: string) => FixEdit[];
72
+ /**
73
+ * A sitemap index of `parts` files, served where the one large sitemap was. `parts` can come from
74
+ * the Content-Length the site declares, so only the first ones are written out.
75
+ */
76
+ export declare const splitSitemapFix: (sitemap: string, parts: number, write: string) => FixEdit;
77
+ /** Lists a nested index's sitemaps in the index above it, in place of the nested index. */
78
+ export declare const nestedIndexFix: (layout: SitemapLayout, nested: string) => FixEdit;
79
+ /**
80
+ * A lastmod value in W3C Datetime, when it says unambiguously which moment it means: a date and
81
+ * time with a space instead of the T, a zone without its colon, a date written another way
82
+ * (14 March 2026, 14/03/2026), or a date and time with a month name and a zone. Null for the rest:
83
+ * 03/04/2026 could be March or April, and a time without a zone is a moment in the site's time
84
+ * zone, which the audit does not know.
85
+ */
86
+ export declare const toW3cDatetime: (value: string) => string | null;
87
+ /** Rewrites <lastmod> values that are not W3C Datetime, or lie in the future. */
88
+ export declare const lastmodFix: (layout: SitemapLayout, examples: string[], kind: "invalid" | "future", today: string) => FixEdit[];
89
+ /**
90
+ * URLs on another host: the www or bare-domain spelling of the site's own host is a slip, written
91
+ * as the site's host; another host may list them when its own robots.txt names the sitemap.
92
+ */
93
+ export declare const otherHostFix: (layout: SitemapLayout, examples: string[], siteOrigin: string) => FixEdit[];
94
+ /** Where a page lives for an agent: its file in a directory audit, else its URL. */
95
+ export declare const locationOf: (record: PageRecord) => string;
96
+ /** The links on `record` whose target has the key `targetKey`. */
97
+ export declare const linksTo: (record: PageRecord, targetKey: string, key: (url: string) => string) => LinkInfo[];
98
+ /** Gives a page that shares its title with others a title of its own. */
99
+ export declare const retitleEdit: (record: PageRecord) => FixEdit | null;
100
+ /** Gives a page that shares its meta description with others one of its own. */
101
+ export declare const redescribeEdit: (record: PageRecord) => FixEdit | null;
102
+ /** Gives a page that shares its <h1> with others one of its own. */
103
+ export declare const reheadEdit: (record: PageRecord) => FixEdit | null;
104
+ /** Sets the canonical of `record` to `href`: rewrites its canonical link, or adds one. */
105
+ export declare const canonicalEdit: (record: PageRecord, href: string, write?: string) => FixEdit;
106
+ /** The hreflang link that lists `alternate` on `record`, on the page that does not link back. */
107
+ export declare const returnLinkEdit: (target: PageRecord, page: PageRecord, key: (url: string) => string) => FixEdit;
108
+ /** The edits that take noindex off a page: its robots meta tags, or its X-Robots-Tag header. */
109
+ export declare const removeNoindexEdits: (record: PageRecord, write: string) => FixEdit[];
110
+ /** The `<img>` tags on `record` that show the image at `url`. */
111
+ export declare const imagesOf: (record: PageRecord, url: string) => ImageInfo[];