aiseo-audit 1.4.1 → 1.4.3
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 +26 -18
- package/dist/cli.js +15 -13
- package/dist/cli.mjs +15 -13
- package/dist/index.d.mts +4 -2
- package/dist/index.d.ts +4 -2
- package/dist/index.js +15 -13
- package/dist/index.mjs +15 -13
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -16,11 +16,12 @@
|
|
|
16
16
|
Deterministic CLI that audits web pages for **AI search readiness**. Think Lighthouse, but for how well AI engines can fetch, extract, understand, and cite your content.
|
|
17
17
|
|
|
18
18
|
> [!TIP]
|
|
19
|
-
> Run `aiseo-audit https://www.aiseo-audit.com` to see a 100/100 [A
|
|
19
|
+
> Run `aiseo-audit https://www.aiseo-audit.com` to see a 100/100 [A Score](https://www.aiseo-audit.com/).
|
|
20
20
|
|
|
21
21
|
**AI SEO measures how reusable your content is for generative engines, not traditional search rankings.**
|
|
22
22
|
|
|
23
23
|
- [Quick Start](#quick-start)
|
|
24
|
+
- [CI/CD](#cicd)
|
|
24
25
|
- [CLI Options](#cli-options)
|
|
25
26
|
- [Site-Wide Auditing](#site-wide-auditing)
|
|
26
27
|
- [Local Development](#local-development)
|
|
@@ -51,6 +52,11 @@ aiseo-audit goes deeper:
|
|
|
51
52
|
|
|
52
53
|
## Quick Start
|
|
53
54
|
|
|
55
|
+
```bash
|
|
56
|
+
# Try it instantly — no install required
|
|
57
|
+
npx aiseo-audit https://yoursite.com
|
|
58
|
+
```
|
|
59
|
+
|
|
54
60
|
```bash
|
|
55
61
|
# As a project dependency
|
|
56
62
|
npm install aiseo-audit
|
|
@@ -95,6 +101,25 @@ aiseo-audit https://example.com --user-agent "MyBot/1.0"
|
|
|
95
101
|
aiseo-audit https://example.com --config aiseo.config.json
|
|
96
102
|
```
|
|
97
103
|
|
|
104
|
+
## CI/CD
|
|
105
|
+
|
|
106
|
+
Drop this into any GitHub Actions workflow to gate PRs on AI search readiness:
|
|
107
|
+
|
|
108
|
+
```yaml
|
|
109
|
+
# .github/workflows/aiseo-audit.yml
|
|
110
|
+
name: AI SEO Audit
|
|
111
|
+
on:
|
|
112
|
+
pull_request:
|
|
113
|
+
push:
|
|
114
|
+
branches: [main]
|
|
115
|
+
|
|
116
|
+
jobs:
|
|
117
|
+
audit:
|
|
118
|
+
runs-on: ubuntu-latest
|
|
119
|
+
steps:
|
|
120
|
+
- run: npx aiseo-audit https://yoursite.com --fail-under 70
|
|
121
|
+
```
|
|
122
|
+
|
|
98
123
|
## CLI Options
|
|
99
124
|
|
|
100
125
|
| Option | Description | Default |
|
|
@@ -155,23 +180,6 @@ aiseo-audit --sitemap https://example.com/projects/sitemap.xml --signals-base ht
|
|
|
155
180
|
|
|
156
181
|
Every report format explicitly shows which URL domain signals were fetched from, so there is no guesswork about where `robots.txt`, `llms.txt`, and `llms-full.txt` were checked.
|
|
157
182
|
|
|
158
|
-
## CI/CD
|
|
159
|
-
|
|
160
|
-
```yaml
|
|
161
|
-
# .github/workflows/aiseo-audit.yml
|
|
162
|
-
name: AI SEO Audit
|
|
163
|
-
on:
|
|
164
|
-
pull_request:
|
|
165
|
-
push:
|
|
166
|
-
branches: [main]
|
|
167
|
-
|
|
168
|
-
jobs:
|
|
169
|
-
audit:
|
|
170
|
-
runs-on: ubuntu-latest
|
|
171
|
-
steps:
|
|
172
|
-
- run: npx aiseo-audit https://yoursite.com --fail-under 70
|
|
173
|
-
```
|
|
174
|
-
|
|
175
183
|
## User Agent
|
|
176
184
|
|
|
177
185
|
By default, all HTTP requests (page fetch, `robots.txt`, `llms.txt`) are sent with the header `User-Agent: AISEOAudit/<version>`. This is intentional. If a site blocks unknown bots, that is a meaningful negative signal for AI search readiness, and the audit should surface it as a failing "Fetch Success" score.
|
package/dist/cli.js
CHANGED
|
@@ -28,7 +28,7 @@ var import_zod3 = require("zod");
|
|
|
28
28
|
|
|
29
29
|
// src/modules/analyzer/constants.ts
|
|
30
30
|
var DOMAIN_SIGNAL_TIMEOUT_CAP = 5e3;
|
|
31
|
-
var VERSION = true ? "1.4.
|
|
31
|
+
var VERSION = true ? "1.4.3" : "0.0.0";
|
|
32
32
|
|
|
33
33
|
// src/modules/fetcher/constants.ts
|
|
34
34
|
var MAX_RESPONSE_SIZE = 10 * 1024 * 1024;
|
|
@@ -1136,13 +1136,14 @@ function auditEntityClarity(page) {
|
|
|
1136
1136
|
}
|
|
1137
1137
|
}
|
|
1138
1138
|
const consistencyRatio = keyWords.length > 0 ? topicOverlap / keyWords.length : 0;
|
|
1139
|
-
const consistencyScore = consistencyRatio >= 0.5 ? 25 : consistencyRatio > 0 ? 15 :
|
|
1139
|
+
const consistencyScore = keyWords.length === 0 ? 0 : consistencyRatio >= 0.5 ? 25 : consistencyRatio > 0 ? 15 : 0;
|
|
1140
1140
|
factors.push(
|
|
1141
1141
|
makeFactor(
|
|
1142
1142
|
"Topic Consistency",
|
|
1143
1143
|
consistencyScore,
|
|
1144
1144
|
25,
|
|
1145
|
-
`${topicOverlap}/${keyWords.length} title keywords align with content topics
|
|
1145
|
+
`${topicOverlap}/${keyWords.length} title keywords align with content topics`,
|
|
1146
|
+
keyWords.length === 0 ? "neutral" : void 0
|
|
1146
1147
|
)
|
|
1147
1148
|
);
|
|
1148
1149
|
const wordCount = countWords(text);
|
|
@@ -1855,16 +1856,17 @@ function generateRecommendations(auditResult) {
|
|
|
1855
1856
|
|
|
1856
1857
|
// src/modules/scoring/constants.ts
|
|
1857
1858
|
var GRADE_THRESHOLDS = [
|
|
1858
|
-
[
|
|
1859
|
-
[90, "A"],
|
|
1860
|
-
[
|
|
1861
|
-
[
|
|
1862
|
-
[
|
|
1863
|
-
[
|
|
1864
|
-
[
|
|
1865
|
-
[
|
|
1866
|
-
[
|
|
1867
|
-
[
|
|
1859
|
+
[93, "A"],
|
|
1860
|
+
[90, "A-"],
|
|
1861
|
+
[87, "B+"],
|
|
1862
|
+
[83, "B"],
|
|
1863
|
+
[80, "B-"],
|
|
1864
|
+
[77, "C+"],
|
|
1865
|
+
[73, "C"],
|
|
1866
|
+
[70, "C-"],
|
|
1867
|
+
[67, "D+"],
|
|
1868
|
+
[63, "D"],
|
|
1869
|
+
[60, "D-"],
|
|
1868
1870
|
[0, "F"]
|
|
1869
1871
|
];
|
|
1870
1872
|
|
package/dist/cli.mjs
CHANGED
|
@@ -4,7 +4,7 @@ import { z as z3 } from "zod";
|
|
|
4
4
|
|
|
5
5
|
// src/modules/analyzer/constants.ts
|
|
6
6
|
var DOMAIN_SIGNAL_TIMEOUT_CAP = 5e3;
|
|
7
|
-
var VERSION = true ? "1.4.
|
|
7
|
+
var VERSION = true ? "1.4.3" : "0.0.0";
|
|
8
8
|
|
|
9
9
|
// src/modules/fetcher/constants.ts
|
|
10
10
|
var MAX_RESPONSE_SIZE = 10 * 1024 * 1024;
|
|
@@ -1112,13 +1112,14 @@ function auditEntityClarity(page) {
|
|
|
1112
1112
|
}
|
|
1113
1113
|
}
|
|
1114
1114
|
const consistencyRatio = keyWords.length > 0 ? topicOverlap / keyWords.length : 0;
|
|
1115
|
-
const consistencyScore = consistencyRatio >= 0.5 ? 25 : consistencyRatio > 0 ? 15 :
|
|
1115
|
+
const consistencyScore = keyWords.length === 0 ? 0 : consistencyRatio >= 0.5 ? 25 : consistencyRatio > 0 ? 15 : 0;
|
|
1116
1116
|
factors.push(
|
|
1117
1117
|
makeFactor(
|
|
1118
1118
|
"Topic Consistency",
|
|
1119
1119
|
consistencyScore,
|
|
1120
1120
|
25,
|
|
1121
|
-
`${topicOverlap}/${keyWords.length} title keywords align with content topics
|
|
1121
|
+
`${topicOverlap}/${keyWords.length} title keywords align with content topics`,
|
|
1122
|
+
keyWords.length === 0 ? "neutral" : void 0
|
|
1122
1123
|
)
|
|
1123
1124
|
);
|
|
1124
1125
|
const wordCount = countWords(text);
|
|
@@ -1831,16 +1832,17 @@ function generateRecommendations(auditResult) {
|
|
|
1831
1832
|
|
|
1832
1833
|
// src/modules/scoring/constants.ts
|
|
1833
1834
|
var GRADE_THRESHOLDS = [
|
|
1834
|
-
[
|
|
1835
|
-
[90, "A"],
|
|
1836
|
-
[
|
|
1837
|
-
[
|
|
1838
|
-
[
|
|
1839
|
-
[
|
|
1840
|
-
[
|
|
1841
|
-
[
|
|
1842
|
-
[
|
|
1843
|
-
[
|
|
1835
|
+
[93, "A"],
|
|
1836
|
+
[90, "A-"],
|
|
1837
|
+
[87, "B+"],
|
|
1838
|
+
[83, "B"],
|
|
1839
|
+
[80, "B-"],
|
|
1840
|
+
[77, "C+"],
|
|
1841
|
+
[73, "C"],
|
|
1842
|
+
[70, "C-"],
|
|
1843
|
+
[67, "D+"],
|
|
1844
|
+
[63, "D"],
|
|
1845
|
+
[60, "D-"],
|
|
1844
1846
|
[0, "F"]
|
|
1845
1847
|
];
|
|
1846
1848
|
|
package/dist/index.d.mts
CHANGED
|
@@ -703,12 +703,13 @@ declare const GradeSchema: z.ZodEnum<{
|
|
|
703
703
|
C: "C";
|
|
704
704
|
D: "D";
|
|
705
705
|
F: "F";
|
|
706
|
-
"A+": "A+";
|
|
707
706
|
"A-": "A-";
|
|
708
707
|
"B+": "B+";
|
|
709
708
|
"B-": "B-";
|
|
710
709
|
"C+": "C+";
|
|
711
710
|
"C-": "C-";
|
|
711
|
+
"D+": "D+";
|
|
712
|
+
"D-": "D-";
|
|
712
713
|
}>;
|
|
713
714
|
declare const ScoreSummarySchema: z.ZodObject<{
|
|
714
715
|
overallScore: z.ZodNumber;
|
|
@@ -718,12 +719,13 @@ declare const ScoreSummarySchema: z.ZodObject<{
|
|
|
718
719
|
C: "C";
|
|
719
720
|
D: "D";
|
|
720
721
|
F: "F";
|
|
721
|
-
"A+": "A+";
|
|
722
722
|
"A-": "A-";
|
|
723
723
|
"B+": "B+";
|
|
724
724
|
"B-": "B-";
|
|
725
725
|
"C+": "C+";
|
|
726
726
|
"C-": "C-";
|
|
727
|
+
"D+": "D+";
|
|
728
|
+
"D-": "D-";
|
|
727
729
|
}>;
|
|
728
730
|
totalPoints: z.ZodNumber;
|
|
729
731
|
maxPoints: z.ZodNumber;
|
package/dist/index.d.ts
CHANGED
|
@@ -703,12 +703,13 @@ declare const GradeSchema: z.ZodEnum<{
|
|
|
703
703
|
C: "C";
|
|
704
704
|
D: "D";
|
|
705
705
|
F: "F";
|
|
706
|
-
"A+": "A+";
|
|
707
706
|
"A-": "A-";
|
|
708
707
|
"B+": "B+";
|
|
709
708
|
"B-": "B-";
|
|
710
709
|
"C+": "C+";
|
|
711
710
|
"C-": "C-";
|
|
711
|
+
"D+": "D+";
|
|
712
|
+
"D-": "D-";
|
|
712
713
|
}>;
|
|
713
714
|
declare const ScoreSummarySchema: z.ZodObject<{
|
|
714
715
|
overallScore: z.ZodNumber;
|
|
@@ -718,12 +719,13 @@ declare const ScoreSummarySchema: z.ZodObject<{
|
|
|
718
719
|
C: "C";
|
|
719
720
|
D: "D";
|
|
720
721
|
F: "F";
|
|
721
|
-
"A+": "A+";
|
|
722
722
|
"A-": "A-";
|
|
723
723
|
"B+": "B+";
|
|
724
724
|
"B-": "B-";
|
|
725
725
|
"C+": "C+";
|
|
726
726
|
"C-": "C-";
|
|
727
|
+
"D+": "D+";
|
|
728
|
+
"D-": "D-";
|
|
727
729
|
}>;
|
|
728
730
|
totalPoints: z.ZodNumber;
|
|
729
731
|
maxPoints: z.ZodNumber;
|
package/dist/index.js
CHANGED
|
@@ -1135,13 +1135,14 @@ function auditEntityClarity(page) {
|
|
|
1135
1135
|
}
|
|
1136
1136
|
}
|
|
1137
1137
|
const consistencyRatio = keyWords.length > 0 ? topicOverlap / keyWords.length : 0;
|
|
1138
|
-
const consistencyScore = consistencyRatio >= 0.5 ? 25 : consistencyRatio > 0 ? 15 :
|
|
1138
|
+
const consistencyScore = keyWords.length === 0 ? 0 : consistencyRatio >= 0.5 ? 25 : consistencyRatio > 0 ? 15 : 0;
|
|
1139
1139
|
factors.push(
|
|
1140
1140
|
makeFactor(
|
|
1141
1141
|
"Topic Consistency",
|
|
1142
1142
|
consistencyScore,
|
|
1143
1143
|
25,
|
|
1144
|
-
`${topicOverlap}/${keyWords.length} title keywords align with content topics
|
|
1144
|
+
`${topicOverlap}/${keyWords.length} title keywords align with content topics`,
|
|
1145
|
+
keyWords.length === 0 ? "neutral" : void 0
|
|
1145
1146
|
)
|
|
1146
1147
|
);
|
|
1147
1148
|
const wordCount = countWords(text);
|
|
@@ -1527,7 +1528,7 @@ var import_zod = require("zod");
|
|
|
1527
1528
|
|
|
1528
1529
|
// src/modules/analyzer/constants.ts
|
|
1529
1530
|
var DOMAIN_SIGNAL_TIMEOUT_CAP = 5e3;
|
|
1530
|
-
var VERSION = true ? "1.4.
|
|
1531
|
+
var VERSION = true ? "1.4.3" : "0.0.0";
|
|
1531
1532
|
|
|
1532
1533
|
// src/modules/fetcher/schema.ts
|
|
1533
1534
|
var FetchOptionsSchema = import_zod.z.object({
|
|
@@ -1860,16 +1861,17 @@ function generateRecommendations(auditResult) {
|
|
|
1860
1861
|
|
|
1861
1862
|
// src/modules/scoring/constants.ts
|
|
1862
1863
|
var GRADE_THRESHOLDS = [
|
|
1863
|
-
[
|
|
1864
|
-
[90, "A"],
|
|
1865
|
-
[
|
|
1866
|
-
[
|
|
1867
|
-
[
|
|
1868
|
-
[
|
|
1869
|
-
[
|
|
1870
|
-
[
|
|
1871
|
-
[
|
|
1872
|
-
[
|
|
1864
|
+
[93, "A"],
|
|
1865
|
+
[90, "A-"],
|
|
1866
|
+
[87, "B+"],
|
|
1867
|
+
[83, "B"],
|
|
1868
|
+
[80, "B-"],
|
|
1869
|
+
[77, "C+"],
|
|
1870
|
+
[73, "C"],
|
|
1871
|
+
[70, "C-"],
|
|
1872
|
+
[67, "D+"],
|
|
1873
|
+
[63, "D"],
|
|
1874
|
+
[60, "D-"],
|
|
1873
1875
|
[0, "F"]
|
|
1874
1876
|
];
|
|
1875
1877
|
|
package/dist/index.mjs
CHANGED
|
@@ -1095,13 +1095,14 @@ function auditEntityClarity(page) {
|
|
|
1095
1095
|
}
|
|
1096
1096
|
}
|
|
1097
1097
|
const consistencyRatio = keyWords.length > 0 ? topicOverlap / keyWords.length : 0;
|
|
1098
|
-
const consistencyScore = consistencyRatio >= 0.5 ? 25 : consistencyRatio > 0 ? 15 :
|
|
1098
|
+
const consistencyScore = keyWords.length === 0 ? 0 : consistencyRatio >= 0.5 ? 25 : consistencyRatio > 0 ? 15 : 0;
|
|
1099
1099
|
factors.push(
|
|
1100
1100
|
makeFactor(
|
|
1101
1101
|
"Topic Consistency",
|
|
1102
1102
|
consistencyScore,
|
|
1103
1103
|
25,
|
|
1104
|
-
`${topicOverlap}/${keyWords.length} title keywords align with content topics
|
|
1104
|
+
`${topicOverlap}/${keyWords.length} title keywords align with content topics`,
|
|
1105
|
+
keyWords.length === 0 ? "neutral" : void 0
|
|
1105
1106
|
)
|
|
1106
1107
|
);
|
|
1107
1108
|
const wordCount = countWords(text);
|
|
@@ -1487,7 +1488,7 @@ import { z } from "zod";
|
|
|
1487
1488
|
|
|
1488
1489
|
// src/modules/analyzer/constants.ts
|
|
1489
1490
|
var DOMAIN_SIGNAL_TIMEOUT_CAP = 5e3;
|
|
1490
|
-
var VERSION = true ? "1.4.
|
|
1491
|
+
var VERSION = true ? "1.4.3" : "0.0.0";
|
|
1491
1492
|
|
|
1492
1493
|
// src/modules/fetcher/schema.ts
|
|
1493
1494
|
var FetchOptionsSchema = z.object({
|
|
@@ -1820,16 +1821,17 @@ function generateRecommendations(auditResult) {
|
|
|
1820
1821
|
|
|
1821
1822
|
// src/modules/scoring/constants.ts
|
|
1822
1823
|
var GRADE_THRESHOLDS = [
|
|
1823
|
-
[
|
|
1824
|
-
[90, "A"],
|
|
1825
|
-
[
|
|
1826
|
-
[
|
|
1827
|
-
[
|
|
1828
|
-
[
|
|
1829
|
-
[
|
|
1830
|
-
[
|
|
1831
|
-
[
|
|
1832
|
-
[
|
|
1824
|
+
[93, "A"],
|
|
1825
|
+
[90, "A-"],
|
|
1826
|
+
[87, "B+"],
|
|
1827
|
+
[83, "B"],
|
|
1828
|
+
[80, "B-"],
|
|
1829
|
+
[77, "C+"],
|
|
1830
|
+
[73, "C"],
|
|
1831
|
+
[70, "C-"],
|
|
1832
|
+
[67, "D+"],
|
|
1833
|
+
[63, "D"],
|
|
1834
|
+
[60, "D-"],
|
|
1833
1835
|
[0, "F"]
|
|
1834
1836
|
];
|
|
1835
1837
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aiseo-audit",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.3",
|
|
4
4
|
"description": "Lighthouse for AI SEO. Audit any webpage for AI search readiness. 7 categories, 30+ factors, research-backed scoring. Deterministic, engine-agnostic, zero API keys.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|