ai-search-auditor 0.1.1 → 0.1.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.1.2](https://github.com/a-bibikov/ai-search-audit/compare/v0.1.1...v0.1.2) (2026-11-03)
4
+
5
+
6
+ ### New checks and features
7
+
8
+ * checklist by section at the end of the report ([c43423c](https://github.com/a-bibikov/ai-search-audit/commit/c43423c6f1c522de056552980c39db7cb411b082))
9
+
3
10
  ## [0.1.1](https://github.com/a-bibikov/ai-search-audit/compare/v0.1.0...v0.1.1) (2026-11-03)
4
11
 
5
12
 
package/README.md CHANGED
@@ -68,6 +68,8 @@ Gaps in the numbering are taken by the checks on the [roadmap](#roadmap).
68
68
 
69
69
  Levels: `error` — AI search cannot read the page or reads it wrong; `warn` — lowers the chance of a citation; `info` — a recommendation.
70
70
 
71
+ The report lists the findings with fixes first, then ends with a checklist of every check by group: ✓ OK, ✖ error, ⚠ warning, ℹ note.
72
+
71
73
  **Score:** 100 minus 15 per rule with an error and 5 per rule with a warning. A rule counts once, not per page, so one template bug does not sink a large site. A ≥ 90, B ≥ 80, C ≥ 70, D ≥ 60, F below.
72
74
 
73
75
  ## Usage
package/dist/i18n/en.d.ts CHANGED
@@ -15,8 +15,17 @@ export declare const en: {
15
15
  }) => string;
16
16
  clean: string;
17
17
  fix: string;
18
+ /** Label instead of «Fix» when a rule has only notes: nothing is broken, it is advice. */
19
+ recommendation: string;
18
20
  more: (n: number) => string;
19
- passed: string;
21
+ checklist: string;
22
+ legend: string;
23
+ /** Findings of one rule in the checklist: «2 errors, 1 warning». */
24
+ count: (o: {
25
+ errors: number;
26
+ warnings: number;
27
+ notes: number;
28
+ }) => string;
20
29
  site: string;
21
30
  footer: (pages: number, date: string) => string;
22
31
  groups: {
package/dist/i18n/en.js CHANGED
@@ -8,8 +8,19 @@ export const en = {
8
8
  summary: (o) => `**${o.score}/100 (${o.grade})** · ${o.errors} errors · ${o.warnings} warnings · ${o.notes} notes · ${o.pages} pages`,
9
9
  clean: "Nothing to fix: AI search can read, understand and cite these pages.",
10
10
  fix: "Fix",
11
+ /** Label instead of «Fix» when a rule has only notes: nothing is broken, it is advice. */
12
+ recommendation: "Recommendation",
11
13
  more: (n) => `…and ${n} more`,
12
- passed: "Passed",
14
+ checklist: "Checklist",
15
+ legend: "✓ OK · ✖ error · ⚠ warning · ℹ note",
16
+ /** Findings of one rule in the checklist: «2 errors, 1 warning». */
17
+ count: (o) => [
18
+ o.errors && `${o.errors} ${o.errors === 1 ? "error" : "errors"}`,
19
+ o.warnings && `${o.warnings} ${o.warnings === 1 ? "warning" : "warnings"}`,
20
+ o.notes && `${o.notes} ${o.notes === 1 ? "note" : "notes"}`,
21
+ ]
22
+ .filter(Boolean)
23
+ .join(", "),
13
24
  site: "site",
14
25
  footer: (pages, date) => `Checked ${pages} pages on ${date}. Also check by hand after each deploy: the live CDN and bot protection with real AI agents (A-3), Google Search Console, Bing Webmaster Tools (ChatGPT search uses Bing), Yandex Webmaster.`,
15
26
  groups: {
@@ -15,8 +15,15 @@ export declare const LANGS: {
15
15
  }) => string;
16
16
  clean: string;
17
17
  fix: string;
18
+ recommendation: string;
18
19
  more: (n: number) => string;
19
- passed: string;
20
+ checklist: string;
21
+ legend: string;
22
+ count: (o: {
23
+ errors: number;
24
+ warnings: number;
25
+ notes: number;
26
+ }) => string;
20
27
  site: string;
21
28
  footer: (pages: number, date: string) => string;
22
29
  groups: {
@@ -166,8 +173,15 @@ export declare const LANGS: {
166
173
  }) => string;
167
174
  clean: string;
168
175
  fix: string;
176
+ recommendation: string;
169
177
  more: (n: number) => string;
170
- passed: string;
178
+ checklist: string;
179
+ legend: string;
180
+ count: (o: {
181
+ errors: number;
182
+ warnings: number;
183
+ notes: number;
184
+ }) => string;
171
185
  site: string;
172
186
  footer: (pages: number, date: string) => string;
173
187
  groups: {
package/dist/i18n/ru.js CHANGED
@@ -5,8 +5,11 @@ export const ru = {
5
5
  summary: (o) => `**${o.score}/100 (${o.grade})** · ошибок: ${o.errors} · предупреждений: ${o.warnings} · заметок: ${o.notes} · страниц: ${o.pages}`,
6
6
  clean: "Исправлять нечего: AI-поиск может прочитать, понять и процитировать эти страницы.",
7
7
  fix: "Как исправить",
8
+ recommendation: "Рекомендация",
8
9
  more: (n) => `…и ещё ${n}`,
9
- passed: "Пройдено",
10
+ checklist: "Чек-лист",
11
+ legend: "✓ в порядке · ✖ ошибка · ⚠ предупреждение · ℹ заметка",
12
+ count: (o) => [o.errors && `ошибок: ${o.errors}`, o.warnings && `предупреждений: ${o.warnings}`, o.notes && `заметок: ${o.notes}`].filter(Boolean).join(", "),
10
13
  site: "сайт",
11
14
  footer: (pages, date) => `Проверено страниц: ${pages}, ${date}. После каждого деплоя проверьте вручную: боевой CDN и защиту от ботов с настоящими AI-агентами (A-3), Google Search Console, Bing Webmaster Tools (поиск ChatGPT опирается на Bing), Яндекс Вебмастер.`,
12
15
  groups: {
package/dist/report.js CHANGED
@@ -27,15 +27,21 @@ export function toMarkdown(r) {
27
27
  lines.push(`- ${f.level === worst ? "" : `${ICON[f.level]} `}\`${short(f.where)}\` — ${f.message}`);
28
28
  if (findings.length > MAX_PER_RULE)
29
29
  lines.push(`- ${t.more(findings.length - MAX_PER_RULE)}`);
30
- lines.push("", `**${t.fix}:** ${rule.fix}`, "");
30
+ lines.push("", `**${worst === "info" ? t.recommendation : t.fix}:** ${rule.fix}`, "");
31
31
  }
32
- const passed = r.rules.filter((rule) => !byRule.has(rule.id));
33
- if (passed.length) {
34
- lines.push(`## ✓ ${t.passed}`, "");
35
- for (const g of Object.keys(t.groups)) {
36
- const list = passed.filter((p) => p.group === g);
37
- if (list.length)
38
- lines.push(`- **${t.groups[g]}:** ${list.map((p) => `${p.id} ${p.title}`).join("; ")}`);
32
+ // Every audited check by group, as in the README: what is fine and what is not, at a glance.
33
+ lines.push(`## ${t.checklist}`, "", t.legend, "");
34
+ for (const g of Object.keys(t.groups)) {
35
+ const list = r.rules.filter((rule) => rule.group === g).sort((a, b) => a.id.localeCompare(b.id, "en", { numeric: true }));
36
+ if (!list.length)
37
+ continue;
38
+ lines.push(`**${g}. ${t.groups[g]}**`, "");
39
+ for (const rule of list) {
40
+ const found = byRule.get(rule.id) ?? [];
41
+ const n = (level) => found.filter((f) => f.level === level).length;
42
+ const icon = found.length ? ICON[found.reduce((w, f) => (ORDER[f.level] < ORDER[w] ? f.level : w), "info")] : "✓";
43
+ const count = found.length ? ` — ${t.count({ errors: n("error"), warnings: n("warn"), notes: n("info") })}` : "";
44
+ lines.push(`- ${icon} ${rule.id} ${rule.title}${count}`);
39
45
  }
40
46
  lines.push("");
41
47
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-search-auditor",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Checks whether AI search (ChatGPT, Claude, Perplexity, Google AI Overviews) can read, understand and cite your site: robots.txt for AI agents, text without JavaScript, JSON-LD authorship, llms.txt, freshness.",
5
5
  "keywords": [
6
6
  "ai search audit",