aiseo-audit 1.4.2 → 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 CHANGED
@@ -21,6 +21,7 @@ Deterministic CLI that audits web pages for **AI search readiness**. Think Light
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.2" : "0.0.0";
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 : 5;
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);
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.2" : "0.0.0";
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 : 5;
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);
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 : 5;
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.2" : "0.0.0";
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({
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 : 5;
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.2" : "0.0.0";
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({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aiseo-audit",
3
- "version": "1.4.2",
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",