@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
package/dist/core/aeo/bots.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAuB5C,MAAM,WAAW,GAAG,6CAA6C,CAAC;AAElE,MAAM,cAAc,GAClB,iIAAiI,CAAC;AAEpI,MAAM,eAAe,GAAG,wCAAwC,CAAC;AAEjE,MAAM,oBAAoB,GACxB,sFAAsF,CAAC;AAEzF;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAY;IAC9B;QACE,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,yCAAyC;QAClD,IAAI,EAAE,kEAAkE;KACzE;IACD;QACE,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,mCAAmC;QAC5C,IAAI,EAAE,oEAAoE;KAC3E;IACD;QACE,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,mCAAmC;QAC5C,IAAI,EAAE,wCAAwC;KAC/C;IACD;QACE,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,wBAAwB;QACjC,IAAI,EAAE,WAAW;QACjB,SAAS,EACP,kHAAkH;KACrH;IACD;QACE,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,4DAA4D;QACrE,IAAI,EAAE,WAAW;QACjB,SAAS,EACP,2GAA2G;KAC9G;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,yBAAyB;QAClC,IAAI,EAAE,cAAc;QACpB,SAAS,EACP,kHAAkH;KACrH;IACD;QACE,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,4CAA4C;QACrD,IAAI,EAAE,cAAc;QACpB,SAAS,EACP,6GAA6G;KAChH;IACD;QACE,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,2BAA2B;QACpC,IAAI,EAAE,eAAe;QACrB,SAAS,EACP,yHAAyH;KAC5H;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,qCAAqC;QAC9C,IAAI,EAAE,eAAe;QACrB,SAAS,EACP,6HAA6H;KAChI;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,QAAQ;QACjB,OAAO,EACL,oFAAoF;QACtF,IAAI,EAAE,oBAAoB;KAC3B;IACD;QACE,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,kCAAkC;QAC3C,IAAI,EAAE,oEAAoE;QAC1E,SAAS,EAAE,gEAAgE;KAC5E;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,kCAAkC;QAC3C,IAAI,EAAE,gCAAgC;QACtC,SAAS,EACP,qHAAqH;KACxH;IACD;QACE,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,0BAA0B;QACnC,IAAI,EAAE,WAAW;QACjB,SAAS,EACP,wGAAwG;KAC3G;IACD;QACE,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,6BAA6B;QACtC,IAAI,EAAE,cAAc;QACpB,SAAS,EACP,yGAAyG;KAC5G;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,gDAAgD;QACzD,IAAI,EAAE,wCAAwC;KAC/C;IACD;QACE,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,cAAc;QACxB,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,oDAAoD;QAC7D,IAAI,EAAE,+BAA+B;QACrC,SAAS,EAAE,0CAA0C;KACtD;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,0DAA0D;QACnE,IAAI,EAAE,sEAAsE;QAC5E,SAAS,EACP,2FAA2F;KAC9F;CACF,CAAC;AAEF,8GAA8G;AAC9G,MAAM,CAAC,MAAM,yBAAyB,GAAG,qBAAqB,CAAC;AAE/D,wFAAwF;AACxF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;AAEzE,kFAAkF;AAClF,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CAC7C,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;AASlD,qGAAqG;AACrG,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;IAClC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,IAAI,MAAM,GAAa,EAAE,CAAC;IAC1B,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEhC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE3C,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YACzB,yFAAyF;YACzF,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,GAAG,EAAE,CAAC;YACd,CAAC;YAED,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YACjC,CAAC;YAED,UAAU,GAAG,IAAI,CAAC;YAClB,SAAS;QACX,CAAC;QAED,UAAU,GAAG,KAAK,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAmB,EAAE,CAC9D,UAAU,CAAC,IAAI,CAAC;KACb,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,gBAAgB,IAAI,CAAC,CAAC,KAAK,CAAC;KAC1D,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;KACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;IACT,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC;IACnB,IAAI,IAAI,GAAkB,IAAI,CAAC;IAE/B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAClD,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE7B,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;aAChD,IAAI,EAAE;aACN,WAAW,EAAE,CAAC;QAEjB,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,KAAK,CAAC,CAAC;oBACP,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,IAAI;yBACD,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;yBACb,IAAI,EAAE;yBACN,WAAW,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACjD,CAAC,CAAC,CAAC;AAEP,yGAAyG;AACzG,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAqB,EAAY,EAAE,CAChE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;IACvD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI;QACxD,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;QACtB,CAAC,CAAC,EAAE,CAAC;AACT,CAAC,CAAC,CAAC;AAEL;;;GAGG;AACH,MAAM,YAAY,GAAG,CAAC,MAAqB,EAA6B,EAAE;IACxE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;QACnD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,8GAA8G;AAC9G,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,MAAqB,EACrB,IAAmB,EACnB,QAAgB,EAChB,QAAkB,EACD,EAAE;IACnB,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,MAAM,KAAK,OAAO,IAAI,IAAI,KAAK,IAAI,CAAC;IAClD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7D,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAErD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAe,EAAE;QAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,WAAW,GAA+B,MAAM,CAAC;QACrD,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC;QAErB,IAAI,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,WAAW,GAAG,OAAO,CAAC;QACxB,CAAC;aAAM,IAAI,KAAK,KAAK,UAAU,IAAI,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAClE,0EAA0E;YAC1E,WAAW,GAAG,WAAW,CAAC;YAC1B,KAAK,GAAG,WAAW,CAAC;QACtB,CAAC;aAAM,IAAI,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,WAAW,GAAG,UAAU,CAAC;QAC3B,CAAC;QAED,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;YAC7B,OAAO;gBACL,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,WAAW;gBACX,OAAO,EAAE,KAAK;gBACd,YAAY,EAAE,IAAI,CAAC,MAAM;aAC1B,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,WAAW;YACX,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;YAChD,uFAAuF;YACvF,0FAA0F;YAC1F,YAAY,EAAE,MAAM;gBAClB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM;gBAChE,CAAC,CAAC,CAAC;SACN,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,kBAAkB,GAA0C,MAAM,CAAC;IAEvE,2FAA2F;IAC3F,IAAI,MAAM,IAAI,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,CAAC;QAC3D,kBAAkB,GAAG,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC;YAC9D,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,YAAY,CAAC;IACnB,CAAC;IAED,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,GAAG;QACrB,MAAM;QACN,UAAU,EAAE,MAAM,CAAC,MAAM;QACzB,kBAAkB;QAClB,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;QACjD,IAAI;KACL,CAAC;AACJ,CAAC,CAAC"}
|
|
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. */
|