@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,7 +1,10 @@
1
1
  import { isHomePage } from "../aeo/page.js";
2
2
  import { isJsonObject, isNumber, isString, typesOf, } from "../html/structured-data.js";
3
3
  import { hostOf, resolveUrl } from "../url.js";
4
+ import { addHtml, replaceHtml, slot } from "./fix.js";
5
+ import { isSlot, json, jsonLdAt, jsonProperty, ORIGIN_SLOT_WRITE, productionOrigin, } from "./page-fixes.js";
4
6
  import { cap, defineRule, GOOGLE_DOCS } from "./rule.js";
7
+ import { currencyCode, plainPrice, STRUCTURED_SLOTS_WRITE, } from "./structured-data-fixes.js";
5
8
  /** Rich results Google no longer shows, keyed by the schema.org type that asked for them. */
6
9
  export const RETIRED_RICH_RESULTS = new Map([
7
10
  ["FAQPage", "Google stopped showing FAQ rich results on May 7, 2026."],
@@ -39,7 +42,7 @@ const eachObject = (items, visit) => {
39
42
  const seen = new Set();
40
43
  let visited = 0;
41
44
  let complete = true;
42
- const walk = (value, path, depth) => {
45
+ const walk = (item, value, path, depth) => {
43
46
  if (value === undefined) {
44
47
  return;
45
48
  }
@@ -53,7 +56,7 @@ const eachObject = (items, visit) => {
53
56
  }
54
57
  if (Array.isArray(value)) {
55
58
  for (const [i, v] of value.entries()) {
56
- walk(v, `${path}[${i}]`, depth);
59
+ walk(item, v, `${path}[${i}]`, depth);
57
60
  }
58
61
  return;
59
62
  }
@@ -62,17 +65,17 @@ const eachObject = (items, visit) => {
62
65
  }
63
66
  seen.add(value);
64
67
  visited += 1;
65
- visit(value, path);
68
+ visit(value, path, item);
66
69
  for (const [key, v] of Object.entries(value)) {
67
70
  if (key !== "@context") {
68
- walk(v, path ? `${path}.${key}` : key, depth + 1);
71
+ walk(item, v, path ? `${path}.${key}` : key, depth + 1);
69
72
  }
70
73
  }
71
74
  };
72
75
  for (const item of items) {
73
76
  if (item.source === "json-ld") {
74
77
  // SAFETY: extractStructuredData builds every item's data from JSON.parse or from microdata, and both hold JSON values alone.
75
- walk(item.data, "", 0);
78
+ walk(item, item.data, "", 0);
76
79
  }
77
80
  }
78
81
  return { complete };
@@ -94,17 +97,65 @@ const priceProblems = (node) => {
94
97
  if (value === undefined || value === null || numeric(value) !== null) {
95
98
  continue;
96
99
  }
97
- problems.push(isString(value) && /^\s*\d+,\d{1,2}\s*$/u.test(value)
98
- ? `${key} ${show(value)} uses a comma for decimals; write it with a dot`
99
- : `${key} ${show(value)} is not a plain number (no currency symbol, no thousands separator)`);
100
+ const plain = isString(value) ? plainPrice(value) : null;
101
+ problems.push({
102
+ text: isString(value) && /^\s*\d+,\d{1,2}\s*$/u.test(value)
103
+ ? `${key} ${show(value)} uses a comma for decimals; write it with a dot`
104
+ : `${key} ${show(value)} is not a plain number (no currency symbol, no thousands separator)`,
105
+ fixes: [
106
+ {
107
+ property: key,
108
+ current: value,
109
+ value: plain === null ? `"${slot("price, e.g. 19.99")}"` : json(plain),
110
+ },
111
+ ],
112
+ });
100
113
  }
101
114
  const currency = node["priceCurrency"];
102
115
  if (currency !== undefined &&
103
116
  !(isString(currency) && /^[a-z]{3}$/iu.test(currency.trim()))) {
104
- problems.push(`priceCurrency ${show(currency)} is not a three-letter ISO 4217 code such as EUR or USD`);
117
+ const code = isString(currency) ? currencyCode(currency) : null;
118
+ problems.push({
119
+ text: `priceCurrency ${show(currency)} is not a three-letter ISO 4217 code such as EUR or USD`,
120
+ fixes: [
121
+ {
122
+ property: "priceCurrency",
123
+ current: currency,
124
+ value: code
125
+ ? json(code)
126
+ : `"${slot("ISO 4217 code, e.g. EUR or USD")}"`,
127
+ },
128
+ ],
129
+ });
105
130
  }
106
131
  return problems;
107
132
  };
133
+ /** The scale a rating out of range most likely uses, when no bestRating names it. */
134
+ const scaleFor = (rating) => {
135
+ if (rating <= 10) {
136
+ return 10;
137
+ }
138
+ return rating <= 100 ? 100 : null;
139
+ };
140
+ /** The fix for a rating outside its scale: name the scale it is on, or correct the rating. */
141
+ const scaleFix = (node, rating, best, worst) => {
142
+ if (rating < worst && node["worstRating"] === undefined && rating >= 0) {
143
+ return { property: "worstRating", value: String(Math.floor(rating)) };
144
+ }
145
+ const scale = rating > best && node["bestRating"] === undefined ? scaleFor(rating) : null;
146
+ return scale === null
147
+ ? {
148
+ property: "ratingValue",
149
+ current: node["ratingValue"],
150
+ value: slot(`rating between ${worst} and ${best}`),
151
+ write: "The rating as the page shows it; if the scale is not what bestRating and worstRating say, correct those instead.",
152
+ }
153
+ : {
154
+ property: "bestRating",
155
+ value: String(scale),
156
+ write: `Only if ratings on this site are out of ${scale}; otherwise set bestRating to the top of the scale they use.`,
157
+ };
158
+ };
108
159
  const ratingProblems = (node, types) => {
109
160
  if (!types.some((t) => t.endsWith("Rating"))) {
110
161
  return [];
@@ -113,55 +164,187 @@ const ratingProblems = (node, types) => {
113
164
  const value = node["ratingValue"];
114
165
  const rating = numeric(value);
115
166
  if (isString(value) && /^\s*\d+,\d+\s*$/u.test(value)) {
116
- problems.push(`ratingValue ${show(value)} uses a comma for decimals; write it with a dot`);
167
+ problems.push({
168
+ text: `ratingValue ${show(value)} uses a comma for decimals; write it with a dot`,
169
+ fixes: [
170
+ {
171
+ property: "ratingValue",
172
+ current: value,
173
+ value: json(value.trim().replace(",", ".")),
174
+ },
175
+ ],
176
+ });
117
177
  }
118
178
  else if (rating !== null) {
119
179
  // Google assumes 5 and 1 when bestRating and worstRating are left out.
120
180
  const best = numeric(node["bestRating"]) ?? 5;
121
181
  const worst = numeric(node["worstRating"]) ?? 1;
122
182
  if (rating > best || rating < worst) {
123
- problems.push(`ratingValue ${rating} is outside ${worst}-${best}${node["bestRating"] === undefined ? " (bestRating defaults to 5; set it when the scale is 10 or 100)" : ""}`);
183
+ problems.push({
184
+ text: `ratingValue ${rating} is outside ${worst}-${best}${node["bestRating"] === undefined ? " (bestRating defaults to 5; set it when the scale is 10 or 100)" : ""}`,
185
+ fixes: [scaleFix(node, rating, best, worst)],
186
+ });
124
187
  }
125
188
  }
126
189
  for (const key of ["ratingCount", "reviewCount"]) {
127
190
  const count = node[key];
128
191
  if (count !== undefined && !/^\d+$/u.test(String(count).trim())) {
129
- problems.push(`${key} ${show(count)} is not a whole number`);
192
+ const digits = String(count).trim();
193
+ problems.push({
194
+ text: `${key} ${show(count)} is not a whole number`,
195
+ fixes: [
196
+ {
197
+ property: key,
198
+ current: count,
199
+ value: /^\d{1,3}(?:[,.\s]\d{3})+$/u.test(digits)
200
+ ? digits.replaceAll(/[,.\s]/gu, "")
201
+ : slot("whole number"),
202
+ },
203
+ ],
204
+ });
130
205
  }
131
206
  }
132
207
  return problems;
133
208
  };
134
- const breadcrumbProblems = (node, types, isHome) => {
209
+ /** A breadcrumb trail's crumbs, each with its index in itemListElement as written. */
210
+ const crumbsOf = (node) => {
211
+ const raw = node["itemListElement"];
212
+ if (Array.isArray(raw)) {
213
+ return raw.flatMap((e, i) => isJsonObject(e) ? [{ e, at: `.itemListElement[${i}]` }] : []);
214
+ }
215
+ return isJsonObject(raw) ? [{ e: raw, at: ".itemListElement" }] : [];
216
+ };
217
+ /** How many times `part` is in `text`. */
218
+ const occurrences = (text, part) => text.split(part).length - 1;
219
+ /**
220
+ * The renumbering fixes, each quoting its crumb's position, in an order that keeps every quote
221
+ * unique while the edits are applied one after another. In trail order, 0, 1, 2 → 1, 2, 3 would
222
+ * write a second `"position": 1` before the next edit quotes it, so an edit waits until no other
223
+ * still quotes what it writes: here, last crumb first. Null when a position is not in the script
224
+ * exactly once as text (`"position": 1` is also the start of `"position": 10`), or the positions
225
+ * go round (2, 1, 5) and no order works.
226
+ */
227
+ const quotedInOrder = (scriptText, renumbers) => {
228
+ const pending = [];
229
+ for (const r of renumbers) {
230
+ const quote = jsonProperty(scriptText, "position", r.from);
231
+ // An agent finds `current` as text, so the script must hold it once as text.
232
+ if (!scriptText || !quote || occurrences(scriptText, quote) !== 1) {
233
+ return null;
234
+ }
235
+ pending.push({ ...r, quote, code: `"position": ${r.fix.value}` });
236
+ }
237
+ const ordered = [];
238
+ while (pending.length > 0) {
239
+ // Writing `code` adds a match for every quote it starts with; the quotes do not overlap.
240
+ const next = pending.findIndex((r) => !pending.some((o) => o !== r && r.code.startsWith(o.quote)));
241
+ if (next === -1) {
242
+ return null;
243
+ }
244
+ const [r] = pending.splice(next, 1);
245
+ if (r) {
246
+ ordered.push({ ...r.fix, quote: r.quote });
247
+ }
248
+ }
249
+ return ordered;
250
+ };
251
+ const breadcrumbProblems = (node, types, isHome, origin, scriptText) => {
135
252
  if (!types.includes("BreadcrumbList")) {
136
253
  return [];
137
254
  }
138
- const raw = node["itemListElement"];
139
- const elements = (Array.isArray(raw) ? raw : [raw]).filter(isJsonObject);
140
- if (elements.length === 0) {
255
+ const crumbs = crumbsOf(node);
256
+ if (crumbs.length === 0) {
141
257
  return [];
142
258
  }
143
259
  const problems = [];
144
260
  // A home page's one-crumb trail (SEO plugins add one) is harmless: no trail is shown for it.
145
- if (elements.length < 2 && !isHome) {
146
- problems.push("Google needs at least two ListItems in a breadcrumb trail");
261
+ if (crumbs.length < 2 && !isHome) {
262
+ problems.push({
263
+ text: "Google needs at least two ListItems in a breadcrumb trail",
264
+ fixes: [
265
+ {
266
+ property: "itemListElement",
267
+ into: "itemListElement",
268
+ value: `{ "@type": "ListItem", "position": 1, "name": "${slot("name of the home page, e.g. Home")}", "item": ${isSlot(origin) ? `"${origin}/"` : json(`${origin}/`)} }`,
269
+ write: `Add this crumb first in the itemListElement array and number the page's own crumb 2 (and any crumbs between them in order). ${STRUCTURED_SLOTS_WRITE}`,
270
+ },
271
+ ],
272
+ });
147
273
  }
148
- const positions = elements.map((e) => numeric(e["position"]));
274
+ const positions = crumbs.map(({ e }) => numeric(e["position"]));
149
275
  const known = positions.filter((p) => p !== null).toSorted((a, b) => a - b);
150
- if (known.length === elements.length && known.some((p, i) => p !== i + 1)) {
151
- problems.push(`positions are ${known.join(", ")}; number them 1, 2, 3 from the start of the trail`);
276
+ if (known.length === crumbs.length && known.some((p, i) => p !== i + 1)) {
277
+ // Numbered in the order the trail lists them, which is the order Google reads. A finding
278
+ // keeps 10 edits, so only those are put in order.
279
+ const renumbers = cap(crumbs.flatMap(({ e, at }, i) => {
280
+ const from = e["position"];
281
+ return positions[i] === i + 1 || from === undefined
282
+ ? []
283
+ : [
284
+ {
285
+ from,
286
+ to: i + 1,
287
+ fix: {
288
+ property: "position",
289
+ current: from,
290
+ value: String(i + 1),
291
+ subPath: at,
292
+ type: "ListItem",
293
+ },
294
+ },
295
+ ];
296
+ }));
297
+ problems.push({
298
+ text: `positions are ${known.join(", ")}; number them 1, 2, 3 from the start of the trail`,
299
+ fixes: quotedInOrder(scriptText, renumbers) ??
300
+ renumbers.map((r) => ({ ...r.fix, quote: null })),
301
+ });
152
302
  }
153
303
  // The last crumb is the page itself and may leave out `item`; every other one needs it.
154
- const ordered = elements
155
- .map((e, i) => ({ e, position: positions[i] ?? i + 1 }))
304
+ const ordered = crumbs
305
+ .map((c, i) => ({ ...c, position: positions[i] ?? i + 1 }))
156
306
  .toSorted((a, b) => a.position - b.position);
157
307
  const withoutItem = ordered
158
308
  .slice(0, -1)
159
309
  .filter(({ e }) => e["item"] === undefined || e["item"] === "");
160
310
  if (withoutItem.length > 0) {
161
- problems.push(`${withoutItem.length} ListItem(s) before the last have no item (the URL of that crumb)`);
311
+ problems.push({
312
+ text: `${withoutItem.length} ListItem(s) before the last have no item (the URL of that crumb)`,
313
+ fixes: withoutItem.map(({ e, at }) => ({
314
+ property: "item",
315
+ current: e["item"] === "" ? "" : undefined,
316
+ value: `"${slot("absolute URL of this crumb's page")}"`,
317
+ subPath: at,
318
+ type: "ListItem",
319
+ })),
320
+ });
162
321
  }
163
322
  return problems;
164
323
  };
324
+ /** The edit that sets one property: in place when the script quotes it as written, else added to its object. */
325
+ const valueEdit = (fix, item, type, path) => {
326
+ const sub = fix.subPath ?? "";
327
+ const full = path ? `${path}${sub}` : sub.replace(/^\./u, "");
328
+ const where = jsonLdAt(fix.type ?? type, full);
329
+ const at = fix.into ? `${where} > ${fix.into}` : where;
330
+ const code = fix.into ? fix.value : `"${fix.property}": ${fix.value}`;
331
+ const slotted = code.includes("{{")
332
+ ? (fix.write ?? STRUCTURED_SLOTS_WRITE)
333
+ : fix.write;
334
+ let current = null;
335
+ if (fix.quote !== undefined) {
336
+ current = fix.quote;
337
+ }
338
+ else if (fix.current !== undefined) {
339
+ current = jsonProperty(item.scriptText, fix.property, fix.current);
340
+ }
341
+ if (current) {
342
+ return replaceHtml(current, code, { at, write: slotted });
343
+ }
344
+ return addHtml(at, code, fix.current === undefined
345
+ ? slotted
346
+ : `${slotted ? `${slotted} ` : ""}This replaces the "${fix.property}" the object has.`);
347
+ };
165
348
  /** Google's page for the rich result a type with invalid values belongs to. */
166
349
  const docsFor = (types) => {
167
350
  if (types.includes("BreadcrumbList")) {
@@ -186,6 +369,21 @@ const isReference = (node) => {
186
369
  const keys = Object.keys(node);
187
370
  return keys.length === 1 && keys[0] === "@id" && isString(node["@id"]);
188
371
  };
372
+ /** The edit that writes a relative JSON-LD URL out in full, from the production origin. */
373
+ const absoluteUrlEdit = (value, key, path, node, item, page, source) => {
374
+ const origin = productionOrigin(page, source);
375
+ const resolved = resolveUrl(value.trim(), page.url);
376
+ const parsed = resolved ? new URL(resolved) : null;
377
+ const tail = parsed ? parsed.pathname + parsed.search + parsed.hash : value;
378
+ const absolute = isSlot(origin) ? `${origin}${tail}` : (resolved ?? value);
379
+ const code = isSlot(absolute) ? `"${absolute}"` : json(absolute);
380
+ const at = jsonLdAt(typesOf(node["@type"])[0] ?? "object", path);
381
+ const write = isSlot(absolute) ? ORIGIN_SLOT_WRITE : undefined;
382
+ const quoted = json(value);
383
+ return item.scriptText?.includes(quoted)
384
+ ? replaceHtml(quoted, code, { at: `${at} > ${key}`, write })
385
+ : addHtml(at, `"${key}": ${code}`, `${write ? `${write} ` : ""}This replaces the relative "${key}" the object has.`);
386
+ };
189
387
  export const structuredDataValueRules = [
190
388
  defineRule({
191
389
  id: "structured-data.retired-type",
@@ -203,7 +401,11 @@ export const structuredDataValueRules = [
203
401
  }
204
402
  }
205
403
  });
404
+ // Nothing on the page needs to change: answer engines and other tools still read this
405
+ // markup (FAQPage feeds AI answers), so the finding informs and has no edit.
206
406
  return [...found].map(([type, count]) => make(`${type} markup: ${RETIRED_RICH_RESULTS.get(type)}`, {
407
+ fix: [],
408
+ key: type,
207
409
  selector: 'script[type="application/ld+json"]',
208
410
  evidence: { type, count },
209
411
  }));
@@ -215,23 +417,28 @@ export const structuredDataValueRules = [
215
417
  description: "A structured data value is in a form Google cannot use: a price with a currency symbol or a decimal comma, a currency that is not an ISO 4217 code, a rating outside its scale, or a breadcrumb trail with fewer than two items, odd positions or crumbs without a URL.",
216
418
  recommendation: 'Write prices as plain numbers with a dot ("19.99") and the currency in priceCurrency ("EUR"); set bestRating when ratings are not out of 5; number breadcrumb positions 1, 2, 3 and give every crumb but the last an item URL.',
217
419
  docs: GOOGLE_DOCS.structuredData,
218
- }, ({ page }, make) => {
420
+ }, ({ page, source }, make) => {
219
421
  const findings = [];
220
- eachObject(page.structuredData, (node, path) => {
422
+ const origin = productionOrigin(page, source);
423
+ eachObject(page.structuredData, (node, path, item) => {
221
424
  const types = typesOf(node["@type"]);
222
425
  const problems = [
223
426
  ...priceProblems(node),
224
427
  ...ratingProblems(node, types),
225
- ...breadcrumbProblems(node, types, isHomePage(page.url)),
428
+ ...breadcrumbProblems(node, types, isHomePage(page.url), origin, item.scriptText),
226
429
  ];
227
430
  if (problems.length > 0) {
228
431
  const type = types[0] ?? "object";
229
- findings.push(make(`${type}: ${problems.join("; ")}.`, {
432
+ findings.push(make(`${type}: ${problems.map((p) => p.text).join("; ")}.`, {
433
+ fix: problems.flatMap((p) => p.fixes.map((f) => valueEdit(f, item, type, path))),
434
+ // What is wrong, not where the object is: an id that holds while other markup is
435
+ // added or removed. Two objects with the same problems share it and are numbered.
436
+ key: `${type} ${path} ${problems.map((p) => p.text).join("; ")}`,
230
437
  selector: 'script[type="application/ld+json"]',
231
438
  evidence: {
232
439
  type,
233
440
  path: path || "(root)",
234
- problems,
441
+ problems: problems.map((p) => p.text),
235
442
  docs: docsFor(types),
236
443
  },
237
444
  }));
@@ -246,21 +453,24 @@ export const structuredDataValueRules = [
246
453
  description: "A URL in JSON-LD (url, image, logo, item, sameAs, ...) is relative. JSON-LD does not resolve these properties against the page URL, and Google documents only absolute URLs.",
247
454
  recommendation: "Write absolute URLs in JSON-LD, built from the site's production URL: https://www.example.com/img/logo.png, not /img/logo.png.",
248
455
  docs: GOOGLE_DOCS.structuredData,
249
- }, ({ page }, make) => {
456
+ }, ({ page, source }, make) => {
250
457
  const relative = [];
251
- eachObject(page.structuredData, (node, path) => {
458
+ const fix = [];
459
+ eachObject(page.structuredData, (node, path, item) => {
252
460
  for (const key of URL_PROPERTIES) {
253
461
  const value = node[key];
254
462
  const values = Array.isArray(value) ? value : [value];
255
463
  for (const v of values) {
256
464
  if (isString(v) && isRelativeUrl(v)) {
257
465
  relative.push(`${path ? `${path}.` : ""}${key}: ${v.slice(0, 120)}`);
466
+ fix.push(absoluteUrlEdit(v, key, path, node, item, page, source));
258
467
  }
259
468
  }
260
469
  }
261
470
  });
262
471
  return relative.length > 0
263
472
  ? make(`${relative.length} URL(s) in JSON-LD are relative.`, {
473
+ fix,
264
474
  selector: 'script[type="application/ld+json"]',
265
475
  evidence: { count: relative.length, examples: cap(relative) },
266
476
  })
@@ -305,6 +515,7 @@ export const structuredDataValueRules = [
305
515
  const dangling = [...referenced].filter(([id]) => !defined.has(id));
306
516
  return dangling.length > 0
307
517
  ? make(`${dangling.length} @id reference(s) point to objects the page does not define: ${cap(dangling.map(([id]) => id), 3).join(", ")}.`, {
518
+ fix: dangling.map(([id]) => addHtml('script[type="application/ld+json"] > @graph', `{ "@id": ${json(id)}, "@type": "${slot("type, e.g. Organization or Person")}", "name": "${slot("name")}" }`, `The object this @id names, defined in the page's @graph (wrap the script's objects in "@graph": [ ... ] if it has none) with its type and the properties Google reads for it: an Organization's name, url and logo, a Person's name and url. ${STRUCTURED_SLOTS_WRITE}`)),
308
519
  selector: 'script[type="application/ld+json"]',
309
520
  evidence: {
310
521
  references: cap(dangling.map(([id, path]) => ({ id, path }))),
@@ -1 +1 @@
1
- {"version":3,"file":"structured-data-values.js","sourceRoot":"","sources":["../../../src/core/rules/structured-data-values.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"structured-data-values.js","sourceRoot":"","sources":["../../../src/core/rules/structured-data-values.ts"],"names":[],"mappings":"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"}