@rivi-software/agentic-seo-check 0.3.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.
- package/README.md +29 -5
- package/dist/cli.js +20 -0
- package/dist/cli.js.map +1 -1
- package/dist/core/aeo/audit.d.ts +8 -0
- package/dist/core/aeo/audit.js +101 -17
- package/dist/core/aeo/audit.js.map +1 -1
- package/dist/core/aeo/bots.d.ts +48 -0
- package/dist/core/aeo/bots.js +151 -5
- package/dist/core/aeo/bots.js.map +1 -1
- package/dist/core/aeo/fixes.d.ts +38 -0
- package/dist/core/aeo/fixes.js +111 -0
- package/dist/core/aeo/fixes.js.map +1 -0
- package/dist/core/aeo/site-rules.d.ts +5 -0
- package/dist/core/aeo/site-rules.js +293 -10
- package/dist/core/aeo/site-rules.js.map +1 -1
- package/dist/core/audit.d.ts +8 -0
- package/dist/core/audit.js +144 -25
- package/dist/core/audit.js.map +1 -1
- package/dist/core/crawl.js +43 -4
- package/dist/core/crawl.js.map +1 -1
- package/dist/core/html/answer.d.ts +5 -2
- package/dist/core/html/answer.js +25 -7
- package/dist/core/html/answer.js.map +1 -1
- package/dist/core/html/dom.d.ts +13 -1
- package/dist/core/html/dom.js +30 -2
- package/dist/core/html/dom.js.map +1 -1
- package/dist/core/html/extract.js +122 -30
- package/dist/core/html/extract.js.map +1 -1
- package/dist/core/html/head.js +114 -19
- package/dist/core/html/head.js.map +1 -1
- package/dist/core/html/resources.js +15 -7
- package/dist/core/html/resources.js.map +1 -1
- package/dist/core/html/structured-data.js +21 -5
- package/dist/core/html/structured-data.js.map +1 -1
- package/dist/core/lighthouse.d.ts +2 -5
- package/dist/core/lighthouse.js +290 -5
- package/dist/core/lighthouse.js.map +1 -1
- package/dist/core/performance-fixes.d.ts +25 -0
- package/dist/core/performance-fixes.js +446 -0
- package/dist/core/performance-fixes.js.map +1 -0
- package/dist/core/performance-rules.js +56 -8
- package/dist/core/performance-rules.js.map +1 -1
- package/dist/core/recheck.d.ts +68 -0
- package/dist/core/recheck.js +247 -0
- package/dist/core/recheck.js.map +1 -0
- package/dist/core/render-fixes.d.ts +27 -0
- package/dist/core/render-fixes.js +164 -0
- package/dist/core/render-fixes.js.map +1 -0
- package/dist/core/render-rules.js +60 -21
- package/dist/core/render-rules.js.map +1 -1
- package/dist/core/report/markdown.js +68 -1
- package/dist/core/report/markdown.js.map +1 -1
- package/dist/core/robots.d.ts +5 -0
- package/dist/core/robots.js +8 -0
- package/dist/core/robots.js.map +1 -1
- package/dist/core/rules/aeo.js +339 -25
- package/dist/core/rules/aeo.js.map +1 -1
- package/dist/core/rules/canonical.js +107 -11
- package/dist/core/rules/canonical.js.map +1 -1
- package/dist/core/rules/content.js +65 -7
- package/dist/core/rules/content.js.map +1 -1
- package/dist/core/rules/document.js +73 -8
- package/dist/core/rules/document.js.map +1 -1
- package/dist/core/rules/fix.d.ts +55 -0
- package/dist/core/rules/fix.js +159 -0
- package/dist/core/rules/fix.js.map +1 -0
- package/dist/core/rules/head.js +81 -4
- package/dist/core/rules/head.js.map +1 -1
- package/dist/core/rules/headings.js +92 -9
- package/dist/core/rules/headings.js.map +1 -1
- package/dist/core/rules/hreflang.js +79 -9
- package/dist/core/rules/hreflang.js.map +1 -1
- package/dist/core/rules/images.js +49 -0
- package/dist/core/rules/images.js.map +1 -1
- package/dist/core/rules/index.d.ts +11 -0
- package/dist/core/rules/index.js +21 -1
- package/dist/core/rules/index.js.map +1 -1
- package/dist/core/rules/indexing.js +108 -1
- package/dist/core/rules/indexing.js.map +1 -1
- package/dist/core/rules/keyword.js +92 -2
- package/dist/core/rules/keyword.js.map +1 -1
- package/dist/core/rules/links.js +42 -0
- package/dist/core/rules/links.js.map +1 -1
- package/dist/core/rules/loading.js +54 -1
- package/dist/core/rules/loading.js.map +1 -1
- package/dist/core/rules/meta.js +40 -6
- package/dist/core/rules/meta.js.map +1 -1
- package/dist/core/rules/page-fixes.d.ts +39 -0
- package/dist/core/rules/page-fixes.js +107 -0
- package/dist/core/rules/page-fixes.js.map +1 -0
- package/dist/core/rules/quoted-tags.d.ts +23 -0
- package/dist/core/rules/quoted-tags.js +79 -0
- package/dist/core/rules/quoted-tags.js.map +1 -0
- package/dist/core/rules/response.js +71 -7
- package/dist/core/rules/response.js.map +1 -1
- package/dist/core/rules/rule.d.ts +17 -4
- package/dist/core/rules/rule.js +11 -2
- package/dist/core/rules/rule.js.map +1 -1
- package/dist/core/rules/social.js +101 -10
- package/dist/core/rules/social.js.map +1 -1
- package/dist/core/rules/structured-data-fixes.d.ts +33 -0
- package/dist/core/rules/structured-data-fixes.js +469 -0
- package/dist/core/rules/structured-data-fixes.js.map +1 -0
- package/dist/core/rules/structured-data-values.js +242 -31
- package/dist/core/rules/structured-data-values.js.map +1 -1
- package/dist/core/rules/structured-data.js +171 -4
- package/dist/core/rules/structured-data.js.map +1 -1
- package/dist/core/rules/title.js +39 -5
- package/dist/core/rules/title.js.map +1 -1
- package/dist/core/rules/urls.js +166 -0
- package/dist/core/rules/urls.js.map +1 -1
- package/dist/core/site-fixes.d.ts +111 -0
- package/dist/core/site-fixes.js +650 -0
- package/dist/core/site-fixes.js.map +1 -0
- package/dist/core/site-rules.js +481 -54
- package/dist/core/site-rules.js.map +1 -1
- package/dist/core/sitemap.d.ts +16 -0
- package/dist/core/sitemap.js +34 -0
- package/dist/core/sitemap.js.map +1 -1
- package/dist/core/types.d.ts +223 -3
- package/dist/core/types.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp.js +16 -2
- package/dist/mcp.js.map +1 -1
- package/package.json +1 -1
- package/skills/seo-audit/SKILL.md +35 -5
|
@@ -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
|
-
|
|
98
|
-
|
|
99
|
-
:
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
139
|
-
|
|
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 (
|
|
146
|
-
problems.push(
|
|
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 =
|
|
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 ===
|
|
151
|
-
|
|
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 =
|
|
155
|
-
.map((
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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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"}
|