@houtini/seo-audit-console 0.9.0 → 0.10.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 +16 -14
- package/dist/audit/checks.d.ts +0 -7
- package/dist/audit/checks.d.ts.map +1 -1
- package/dist/audit/checks.js +22 -282
- package/dist/audit/checks.js.map +1 -1
- package/dist/audit/drift.d.ts +0 -12
- package/dist/audit/drift.d.ts.map +1 -1
- package/dist/audit/drift.js +0 -15
- package/dist/audit/drift.js.map +1 -1
- package/dist/audit/engine.d.ts +0 -3
- package/dist/audit/engine.d.ts.map +1 -1
- package/dist/audit/engine.js +7 -42
- package/dist/audit/engine.js.map +1 -1
- package/dist/audit/keywordList.d.ts +0 -14
- package/dist/audit/keywordList.d.ts.map +1 -1
- package/dist/audit/keywordList.js +0 -5
- package/dist/audit/keywordList.js.map +1 -1
- package/dist/audit/opportunities.js +3 -26
- package/dist/audit/opportunities.js.map +1 -1
- package/dist/audit/recon.d.ts +0 -31
- package/dist/audit/recon.d.ts.map +1 -1
- package/dist/audit/recon.js +0 -27
- package/dist/audit/recon.js.map +1 -1
- package/dist/audit/report.d.ts +0 -4
- package/dist/audit/report.d.ts.map +1 -1
- package/dist/audit/report.js +0 -7
- package/dist/audit/report.js.map +1 -1
- package/dist/audit/schema-validate.d.ts +0 -26
- package/dist/audit/schema-validate.d.ts.map +1 -1
- package/dist/audit/schema-validate.js +8 -64
- package/dist/audit/schema-validate.js.map +1 -1
- package/dist/audit/templates.d.ts +0 -24
- package/dist/audit/templates.d.ts.map +1 -1
- package/dist/audit/templates.js +1 -21
- package/dist/audit/templates.js.map +1 -1
- package/dist/audit/topicGaps.d.ts +0 -1
- package/dist/audit/topicGaps.d.ts.map +1 -1
- package/dist/audit/topicGaps.js +3 -24
- package/dist/audit/topicGaps.js.map +1 -1
- package/dist/core/AuditDatabase.d.ts +0 -14
- package/dist/core/AuditDatabase.d.ts.map +1 -1
- package/dist/core/AuditDatabase.js +8 -61
- package/dist/core/AuditDatabase.js.map +1 -1
- package/dist/core/Backlinks.d.ts +0 -7
- package/dist/core/Backlinks.d.ts.map +1 -1
- package/dist/core/Backlinks.js +1 -23
- package/dist/core/Backlinks.js.map +1 -1
- package/dist/core/Crawler.d.ts +0 -1
- package/dist/core/Crawler.d.ts.map +1 -1
- package/dist/core/Crawler.js +24 -119
- package/dist/core/Crawler.js.map +1 -1
- package/dist/core/DataForSeoClient.d.ts +25 -74
- package/dist/core/DataForSeoClient.d.ts.map +1 -1
- package/dist/core/DataForSeoClient.js +65 -90
- package/dist/core/DataForSeoClient.js.map +1 -1
- package/dist/core/Entities.d.ts +0 -6
- package/dist/core/Entities.d.ts.map +1 -1
- package/dist/core/Entities.js +0 -8
- package/dist/core/Entities.js.map +1 -1
- package/dist/core/FirecrawlClient.d.ts +0 -18
- package/dist/core/FirecrawlClient.d.ts.map +1 -1
- package/dist/core/FirecrawlClient.js +1 -13
- package/dist/core/FirecrawlClient.js.map +1 -1
- package/dist/core/GscClient.d.ts +0 -7
- package/dist/core/GscClient.d.ts.map +1 -1
- package/dist/core/GscClient.js +1 -10
- package/dist/core/GscClient.js.map +1 -1
- package/dist/core/GscSync.d.ts +0 -4
- package/dist/core/GscSync.d.ts.map +1 -1
- package/dist/core/GscSync.js +2 -33
- package/dist/core/GscSync.js.map +1 -1
- package/dist/core/JobManager.d.ts +0 -5
- package/dist/core/JobManager.d.ts.map +1 -1
- package/dist/core/JobManager.js +0 -8
- package/dist/core/JobManager.js.map +1 -1
- package/dist/core/LinkIntersect.d.ts +0 -1
- package/dist/core/LinkIntersect.d.ts.map +1 -1
- package/dist/core/LinkIntersect.js +1 -37
- package/dist/core/LinkIntersect.js.map +1 -1
- package/dist/core/MajesticClient.d.ts +0 -26
- package/dist/core/MajesticClient.d.ts.map +1 -1
- package/dist/core/MajesticClient.js +0 -15
- package/dist/core/MajesticClient.js.map +1 -1
- package/dist/core/RankTracker.d.ts +0 -4
- package/dist/core/RankTracker.d.ts.map +1 -1
- package/dist/core/RankTracker.js +0 -9
- package/dist/core/RankTracker.js.map +1 -1
- package/dist/core/Refresh.d.ts +0 -6
- package/dist/core/Refresh.d.ts.map +1 -1
- package/dist/core/Refresh.js +0 -6
- package/dist/core/Refresh.js.map +1 -1
- package/dist/core/SupadataClient.d.ts +0 -11
- package/dist/core/SupadataClient.d.ts.map +1 -1
- package/dist/core/SupadataClient.js +0 -5
- package/dist/core/SupadataClient.js.map +1 -1
- package/dist/core/UrlInspector.d.ts +0 -5
- package/dist/core/UrlInspector.d.ts.map +1 -1
- package/dist/core/UrlInspector.js +0 -6
- package/dist/core/UrlInspector.js.map +1 -1
- package/dist/core/WikidataClient.d.ts +0 -2
- package/dist/core/WikidataClient.d.ts.map +1 -1
- package/dist/core/WikidataClient.js +0 -7
- package/dist/core/WikidataClient.js.map +1 -1
- package/dist/core/agentReadiness.d.ts +0 -9
- package/dist/core/agentReadiness.d.ts.map +1 -1
- package/dist/core/agentReadiness.js +0 -13
- package/dist/core/agentReadiness.js.map +1 -1
- package/dist/core/ctrModel.js +0 -3
- package/dist/core/ctrModel.js.map +1 -1
- package/dist/core/dashboardData.d.ts +0 -1
- package/dist/core/dashboardData.d.ts.map +1 -1
- package/dist/core/dashboardData.js +13 -95
- package/dist/core/dashboardData.js.map +1 -1
- package/dist/core/dataStorage.d.ts +0 -2
- package/dist/core/dataStorage.d.ts.map +1 -1
- package/dist/core/dataStorage.js +6 -19
- package/dist/core/dataStorage.js.map +1 -1
- package/dist/core/draftBrief.d.ts +0 -7
- package/dist/core/draftBrief.d.ts.map +1 -1
- package/dist/core/draftBrief.js +0 -10
- package/dist/core/draftBrief.js.map +1 -1
- package/dist/core/extract.d.ts +0 -11
- package/dist/core/extract.d.ts.map +1 -1
- package/dist/core/extract.js +1 -38
- package/dist/core/extract.js.map +1 -1
- package/dist/core/googleNews.d.ts +0 -11
- package/dist/core/googleNews.d.ts.map +1 -1
- package/dist/core/googleNews.js +0 -7
- package/dist/core/googleNews.js.map +1 -1
- package/dist/core/gscFreshness.d.ts +0 -10
- package/dist/core/gscFreshness.d.ts.map +1 -1
- package/dist/core/gscFreshness.js +0 -11
- package/dist/core/gscFreshness.js.map +1 -1
- package/dist/core/linkGraph.d.ts +0 -15
- package/dist/core/linkGraph.d.ts.map +1 -1
- package/dist/core/linkGraph.js +1 -23
- package/dist/core/linkGraph.js.map +1 -1
- package/dist/core/marketSizing.d.ts +0 -13
- package/dist/core/marketSizing.d.ts.map +1 -1
- package/dist/core/marketSizing.js +1 -1
- package/dist/core/marketSizing.js.map +1 -1
- package/dist/core/passageScore.d.ts +0 -13
- package/dist/core/passageScore.d.ts.map +1 -1
- package/dist/core/passageScore.js +1 -16
- package/dist/core/passageScore.js.map +1 -1
- package/dist/core/paths.d.ts +0 -3
- package/dist/core/paths.d.ts.map +1 -1
- package/dist/core/paths.js +0 -0
- package/dist/core/paths.js.map +1 -1
- package/dist/core/queryData.d.ts +0 -1
- package/dist/core/queryData.d.ts.map +1 -1
- package/dist/core/queryData.js +0 -18
- package/dist/core/queryData.js.map +1 -1
- package/dist/core/reconFetch.d.ts +0 -6
- package/dist/core/reconFetch.d.ts.map +1 -1
- package/dist/core/reconFetch.js +1 -4
- package/dist/core/reconFetch.js.map +1 -1
- package/dist/core/reconResearch.d.ts +0 -20
- package/dist/core/reconResearch.d.ts.map +1 -1
- package/dist/core/reconResearch.js +1 -16
- package/dist/core/reconResearch.js.map +1 -1
- package/dist/core/reranker.d.ts +0 -2
- package/dist/core/reranker.d.ts.map +1 -1
- package/dist/core/reranker.js +1 -11
- package/dist/core/reranker.js.map +1 -1
- package/dist/core/robots.d.ts +0 -6
- package/dist/core/robots.d.ts.map +1 -1
- package/dist/core/robots.js +1 -7
- package/dist/core/robots.js.map +1 -1
- package/dist/core/serpFootprint.d.ts +0 -12
- package/dist/core/serpFootprint.d.ts.map +1 -1
- package/dist/core/serpFootprint.js +0 -1
- package/dist/core/serpFootprint.js.map +1 -1
- package/dist/core/serpRecon.d.ts +0 -14
- package/dist/core/serpRecon.d.ts.map +1 -1
- package/dist/core/serpRecon.js +1 -13
- package/dist/core/serpRecon.js.map +1 -1
- package/dist/core/sitemap.js +3 -16
- package/dist/core/sitemap.js.map +1 -1
- package/dist/core/sql.d.ts +0 -4
- package/dist/core/sql.d.ts.map +1 -1
- package/dist/core/sql.js +0 -4
- package/dist/core/sql.js.map +1 -1
- package/dist/core/url-key.d.ts +0 -31
- package/dist/core/url-key.d.ts.map +1 -1
- package/dist/core/url-key.js +1 -38
- package/dist/core/url-key.js.map +1 -1
- package/dist/core/webHandlers.d.ts +0 -6
- package/dist/core/webHandlers.d.ts.map +1 -1
- package/dist/core/webHandlers.js +2 -5
- package/dist/core/webHandlers.js.map +1 -1
- package/dist/core/webServer.d.ts +0 -16
- package/dist/core/webServer.d.ts.map +1 -1
- package/dist/core/webServer.js +3 -17
- package/dist/core/webServer.js.map +1 -1
- package/dist/dashboard.js +0 -23
- package/dist/dashboard.js.map +1 -1
- package/dist/generators/index.d.ts +0 -7
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +1 -26
- package/dist/generators/index.js.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +190 -312
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
- package/server.json +85 -85
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataStorage.js","sourceRoot":"","sources":["../../src/core/dataStorage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dataStorage.js","sourceRoot":"","sources":["../../src/core/dataStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,13 +14,6 @@ export interface DraftBrief {
|
|
|
14
14
|
}[];
|
|
15
15
|
brief: string;
|
|
16
16
|
}
|
|
17
|
-
/**
|
|
18
|
-
* Assemble a GROUNDED writing brief for a page so the host model (Claude) can draft the fix in the
|
|
19
|
-
* author's own voice — no bundled LLM. The page's existing chunks supply both the voice exemplars
|
|
20
|
-
* (match tone/pace/lexicon) and the facts (the reranker picks the most query-relevant ones), so the
|
|
21
|
-
* draft is phrased from the site's own material, never invented. urlKey omitted → the weakest
|
|
22
|
-
* (lowest max_passage_score) page.
|
|
23
|
-
*/
|
|
24
17
|
export declare function buildDraftBrief(dataDir: string, siteUrl: string, urlKey?: string): Promise<DraftBrief | {
|
|
25
18
|
error: string;
|
|
26
19
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draftBrief.d.ts","sourceRoot":"","sources":["../../src/core/draftBrief.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9D,KAAK,EAAE,MAAM,CAAC;CACf;
|
|
1
|
+
{"version":3,"file":"draftBrief.d.ts","sourceRoot":"","sources":["../../src/core/draftBrief.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9D,KAAK,EAAE,MAAM,CAAC;CACf;AASD,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAyDzC"}
|
package/dist/core/draftBrief.js
CHANGED
|
@@ -2,13 +2,6 @@ import { AuditDatabase } from './AuditDatabase.js';
|
|
|
2
2
|
import { dbPathFor } from './paths.js';
|
|
3
3
|
import { gscFreshness } from './gscFreshness.js';
|
|
4
4
|
import { scorePassages } from './reranker.js';
|
|
5
|
-
/**
|
|
6
|
-
* Assemble a GROUNDED writing brief for a page so the host model (Claude) can draft the fix in the
|
|
7
|
-
* author's own voice — no bundled LLM. The page's existing chunks supply both the voice exemplars
|
|
8
|
-
* (match tone/pace/lexicon) and the facts (the reranker picks the most query-relevant ones), so the
|
|
9
|
-
* draft is phrased from the site's own material, never invented. urlKey omitted → the weakest
|
|
10
|
-
* (lowest max_passage_score) page.
|
|
11
|
-
*/
|
|
12
5
|
export async function buildDraftBrief(dataDir, siteUrl, urlKey) {
|
|
13
6
|
const db = new AuditDatabase(dbPathFor(dataDir, siteUrl));
|
|
14
7
|
try {
|
|
@@ -28,7 +21,6 @@ export async function buildDraftBrief(dataDir, siteUrl, urlKey) {
|
|
|
28
21
|
return { error: 'Could not parse body_chunks.' };
|
|
29
22
|
}
|
|
30
23
|
chunks = chunks.filter(c => c.text && c.text.length > 40);
|
|
31
|
-
// Top query: the one the page was scored against; else the highest-impression GSC query.
|
|
32
24
|
let topQuery = page.mpq;
|
|
33
25
|
if (!topQuery) {
|
|
34
26
|
const maxDate = gscFreshness(db.db).effectiveMax;
|
|
@@ -37,7 +29,6 @@ export async function buildDraftBrief(dataDir, siteUrl, urlKey) {
|
|
|
37
29
|
topQuery = q?.query ?? null;
|
|
38
30
|
}
|
|
39
31
|
}
|
|
40
|
-
// Grounding facts — rerank the page's own chunks against the query, keep the most relevant.
|
|
41
32
|
let facts = [];
|
|
42
33
|
if (topQuery && chunks.length) {
|
|
43
34
|
const passages = chunks.map(c => `${c.heading ? `${c.heading}. ` : ''}${c.text}`);
|
|
@@ -48,7 +39,6 @@ export async function buildDraftBrief(dataDir, siteUrl, urlKey) {
|
|
|
48
39
|
else {
|
|
49
40
|
facts = chunks.slice(0, 4).map(c => ({ heading: c.heading ?? '', text: (c.text ?? '').slice(0, 500), relevance: 0 }));
|
|
50
41
|
}
|
|
51
|
-
// Voice exemplars — a couple of the page's substantial passages (tone/pace/lexicon to match).
|
|
52
42
|
const voice = chunks.filter(c => (c.text ?? '').length > 120).slice(0, 2).map(c => ({ heading: c.heading ?? '', text: (c.text ?? '').slice(0, 450) }));
|
|
53
43
|
const gap = page.mps == null ? 'not scored (run score_passages)'
|
|
54
44
|
: page.mps < 3 ? `weak-passage (best passage scores ${page.mps} — no section confidently answers the query)`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draftBrief.js","sourceRoot":"","sources":["../../src/core/draftBrief.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"draftBrief.js","sourceRoot":"","sources":["../../src/core/draftBrief.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAmB9C,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,OAAe,EACf,MAAe;IAEf,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,oGAAoG,CAAC;QACjH,MAAM,IAAI,GAAG,CAAC,MAAM;YAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,GAAG,oBAAoB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;YACvD,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,GAAG,yGAAyG,CAAC,CAAC,GAAG,EAAE,CACvB,CAAC;QAClH,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,KAAK,EAAE,eAAe,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;QAC1E,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,EAAE,KAAK,EAAE,wEAAwE,EAAE,CAAC;QAEzG,IAAI,MAA6C,CAAC;QAClD,IAAI,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC;QAAC,CAAC;QACjG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAG1D,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;QACxB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC;YACjD,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,CACrB,4FAA4F,OAAO,sBAAsB,OAAO,qEAAqE,CACtM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAkC,CAAC;gBACjD,QAAQ,GAAG,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;YAC9B,CAAC;QACH,CAAC;QAGD,IAAI,KAAK,GAAwB,EAAE,CAAC;QACpC,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAClF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACvD,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;iBAClJ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACxH,CAAC;QAGD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAEvJ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,iCAAiC;YAC9D,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,qCAAqC,IAAI,CAAC,GAAG,8CAA8C;gBAC1G,CAAC,CAAC,wCAAwC,IAAI,CAAC,GAAG,0CAA0C,CAAC;QAEjG,MAAM,KAAK,GAAG;YACZ,+DAA+D,QAAQ,IAAI,WAAW,4LAA4L;YAClR,0DAA0D;YAC1D,qNAAqN;YACrN,mKAAmK;YACnK,oNAAoN;SACrN,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEZ,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1F,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
|
package/dist/core/extract.d.ts
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
1
|
import { type UrlKeyOptions } from './url-key.js';
|
|
2
|
-
/**
|
|
3
|
-
* Internal = the seed host or its www/apex twin ONLY — not arbitrary sibling subdomains.
|
|
4
|
-
* accounts./shop./blog. etc. are separate properties; crawling (or following redirects into)
|
|
5
|
-
* them pulls in junk like Shopify's accounts.<domain> OAuth login pages. Shared by the
|
|
6
|
-
* link-classifier here and the crawler's redirect-target guard.
|
|
7
|
-
*/
|
|
8
2
|
export declare const isInternalHost: (targetHost: string, baseHost: string) => boolean;
|
|
9
3
|
export interface ExtractedLink {
|
|
10
4
|
targetUrl: string;
|
|
@@ -58,10 +52,5 @@ export interface ExtractedPage {
|
|
|
58
52
|
links: ExtractedLink[];
|
|
59
53
|
imageSrcs: string[];
|
|
60
54
|
}
|
|
61
|
-
/**
|
|
62
|
-
* Extract the SEO-relevant surface from raw HTML. Pure function of bytes (D).
|
|
63
|
-
* `baseHost` is the seed apex host for internal/external classification;
|
|
64
|
-
* `keyOpts` is the url-key normalisation config for this property.
|
|
65
|
-
*/
|
|
66
55
|
export declare function extractPage(html: string, pageUrl: string, baseHost: string, keyOpts: UrlKeyOptions, xRobotsTag?: string | null): ExtractedPage;
|
|
67
56
|
//# sourceMappingURL=extract.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/core/extract.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/core/extract.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAQ1D,eAAO,MAAM,cAAc,GAAI,YAAY,MAAM,EAAE,UAAU,MAAM,KAAG,OAKrE,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB,EAAE,MAAM,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/D,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAcD,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,EACtB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GACzB,aAAa,CA2Nf"}
|
package/dist/core/extract.js
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
import * as cheerio from 'cheerio';
|
|
2
2
|
import { urlKey } from './url-key.js';
|
|
3
|
-
/**
|
|
4
|
-
* Internal = the seed host or its www/apex twin ONLY — not arbitrary sibling subdomains.
|
|
5
|
-
* accounts./shop./blog. etc. are separate properties; crawling (or following redirects into)
|
|
6
|
-
* them pulls in junk like Shopify's accounts.<domain> OAuth login pages. Shared by the
|
|
7
|
-
* link-classifier here and the crawler's redirect-target guard.
|
|
8
|
-
*/
|
|
9
3
|
export const isInternalHost = (targetHost, baseHost) => {
|
|
10
4
|
const apex = (h) => (h.startsWith('www.') ? h.slice(4) : h);
|
|
11
5
|
const a = apex(baseHost.toLowerCase());
|
|
@@ -20,11 +14,6 @@ function placementOf($, el) {
|
|
|
20
14
|
return 'footer';
|
|
21
15
|
return 'body';
|
|
22
16
|
}
|
|
23
|
-
/**
|
|
24
|
-
* Extract the SEO-relevant surface from raw HTML. Pure function of bytes (D).
|
|
25
|
-
* `baseHost` is the seed apex host for internal/external classification;
|
|
26
|
-
* `keyOpts` is the url-key normalisation config for this property.
|
|
27
|
-
*/
|
|
28
17
|
export function extractPage(html, pageUrl, baseHost, keyOpts, xRobotsTag) {
|
|
29
18
|
const $ = cheerio.load(html);
|
|
30
19
|
const title = $('head > title').first().text().trim() || null;
|
|
@@ -36,8 +25,6 @@ export function extractPage(html, pageUrl, baseHost, keyOpts, xRobotsTag) {
|
|
|
36
25
|
?? ($('meta[http-equiv="Content-Type"]').attr('content')?.match(/charset=([\w-]+)/i)?.[1] ?? null);
|
|
37
26
|
const canonicalEls = $('link[rel="canonical"]');
|
|
38
27
|
const canonicalRaw = canonicalEls.first().attr('href')?.trim() ?? null;
|
|
39
|
-
// A malformed canonical href (e.g. `href="http://"`) must not make the whole page
|
|
40
|
-
// extraction throw — that would record a fine 200 page as a fetch failure.
|
|
41
28
|
const canonicalUrl = canonicalRaw ? (() => { try {
|
|
42
29
|
return new URL(canonicalRaw, pageUrl).toString();
|
|
43
30
|
}
|
|
@@ -48,14 +35,10 @@ export function extractPage(html, pageUrl, baseHost, keyOpts, xRobotsTag) {
|
|
|
48
35
|
const robots = $('meta[name="robots"]').attr('content')?.trim() ?? null;
|
|
49
36
|
const viewport = $('meta[name="viewport"]').attr('content')?.trim() ?? null;
|
|
50
37
|
const noindex = /noindex/i.test(robots ?? '') || /noindex/i.test(xRobotsTag ?? '');
|
|
51
|
-
// word count excluding script/style/noscript/template (fixes inline-script inflation)
|
|
52
38
|
const $body = cheerio.load(html);
|
|
53
39
|
$body('script, style, noscript, template').remove();
|
|
54
40
|
const bodyText = $body('body').text().replace(/\s+/g, ' ').trim();
|
|
55
41
|
const wordCount = bodyText ? bodyText.split(' ').length : 0;
|
|
56
|
-
// Body chunks: visible content segmented by heading, boilerplate stripped — the data layer for the
|
|
57
|
-
// content-cluster checks (phrase gaps, RAG alignment, extractability). Depth-first reading-order
|
|
58
|
-
// walk: a heading starts a new chunk; other text accrues to the current one. No DOM mutation.
|
|
59
42
|
const bodyChunks = [];
|
|
60
43
|
{
|
|
61
44
|
const $c = cheerio.load(html);
|
|
@@ -112,7 +95,6 @@ export function extractPage(html, pageUrl, baseHost, keyOpts, xRobotsTag) {
|
|
|
112
95
|
if (l && href)
|
|
113
96
|
hreflang.push({ lang: l, href });
|
|
114
97
|
});
|
|
115
|
-
// Twitter Card tags (alongside Open Graph) — share-appearance completeness.
|
|
116
98
|
const tw = {};
|
|
117
99
|
$('meta[name^="twitter:"]').each((_, el) => {
|
|
118
100
|
const n = $(el).attr('name');
|
|
@@ -120,7 +102,6 @@ export function extractPage(html, pageUrl, baseHost, keyOpts, xRobotsTag) {
|
|
|
120
102
|
if (n && c)
|
|
121
103
|
tw[n] = c;
|
|
122
104
|
});
|
|
123
|
-
// Heading hierarchy: levels in document order → count skipped jumps (h1→h3 etc.).
|
|
124
105
|
const headingLevels = [];
|
|
125
106
|
$('h1, h2, h3, h4, h5, h6').each((_, el) => {
|
|
126
107
|
const lvl = Number(el.name?.[1]);
|
|
@@ -132,11 +113,9 @@ export function extractPage(html, pageUrl, baseHost, keyOpts, xRobotsTag) {
|
|
|
132
113
|
if (headingLevels[i] - headingLevels[i - 1] > 1)
|
|
133
114
|
headingSkips++;
|
|
134
115
|
const h2Count = headingLevels.filter(l => l === 2).length;
|
|
135
|
-
// rel link relations Google still reads / we don't otherwise capture.
|
|
136
116
|
const relNext = $('link[rel="next"]').length > 0;
|
|
137
117
|
const relPrev = $('link[rel="prev"]').length > 0;
|
|
138
118
|
const relAmphtml = $('link[rel="amphtml"]').attr('href')?.trim() ?? null;
|
|
139
|
-
// Mixed content: insecure (http) subresources on an https page.
|
|
140
119
|
const isHttps = /^https:/i.test(pageUrl);
|
|
141
120
|
let mixedContentCount = 0;
|
|
142
121
|
if (isHttps) {
|
|
@@ -146,23 +125,13 @@ export function extractPage(html, pageUrl, baseHost, keyOpts, xRobotsTag) {
|
|
|
146
125
|
mixedContentCount++;
|
|
147
126
|
});
|
|
148
127
|
}
|
|
149
|
-
// Structured-data formats beyond JSON-LD (RDFa via typeof/vocab, not property — OG meta uses property).
|
|
150
128
|
const hasMicrodata = $('[itemscope]').length > 0;
|
|
151
129
|
const hasRdfa = $('[typeof], [vocab]').length > 0;
|
|
152
|
-
// Favicon: any icon link relation (icon / shortcut icon / apple-touch-icon).
|
|
153
130
|
const hasFavicon = $('link[rel~="icon"], link[rel="shortcut icon"], link[rel="apple-touch-icon"]').length > 0;
|
|
154
|
-
// Client-side analytics: a known snippet/host anywhere in the raw HTML. Deliberately a tight
|
|
155
|
-
// allow-list of real analytics products — absence means "no CLIENT-SIDE analytics detected",
|
|
156
|
-
// not "no analytics" (server-side measurement is invisible to a crawl).
|
|
157
131
|
const hasAnalytics = /googletagmanager\.com|google-analytics\.com|gtag\(|plausible\.io|matomo|_paq\b|usefathom\.com|clarity\.ms|cloudflareinsights\.com|mixpanel|heap-\d|segment\.com\/analytics/i.test(html);
|
|
158
|
-
// Images: count those lacking a non-empty alt (decorative alt="" is intentional, not flagged),
|
|
159
|
-
// and those lacking both width & height attributes (a deterministic CLS signal).
|
|
160
132
|
const imgEls = $('img');
|
|
161
133
|
let imagesWithoutAlt = 0;
|
|
162
134
|
let imagesMissingDimensions = 0;
|
|
163
|
-
// Distinct absolute image URLs, capped per page — the crawler samples their content-length
|
|
164
|
-
// after the crawl for the image-weight report (CDN-hosted images count; SEO cares about
|
|
165
|
-
// what the page loads, not where it's hosted).
|
|
166
135
|
const imageSrcSet = new Set();
|
|
167
136
|
imgEls.each((_, el) => {
|
|
168
137
|
const $e = $(el);
|
|
@@ -177,7 +146,7 @@ export function extractPage(html, pageUrl, baseHost, keyOpts, xRobotsTag) {
|
|
|
177
146
|
if (u.protocol === 'http:' || u.protocol === 'https:')
|
|
178
147
|
imageSrcSet.add(u.toString());
|
|
179
148
|
}
|
|
180
|
-
catch {
|
|
149
|
+
catch { }
|
|
181
150
|
}
|
|
182
151
|
});
|
|
183
152
|
const links = [];
|
|
@@ -196,14 +165,8 @@ export function extractPage(html, pageUrl, baseHost, keyOpts, xRobotsTag) {
|
|
|
196
165
|
}
|
|
197
166
|
if (target.protocol !== 'http:' && target.protocol !== 'https:')
|
|
198
167
|
return;
|
|
199
|
-
// Cloudflare-reserved infrastructure (/cdn-cgi/l/email-protection, rocket-loader, …) —
|
|
200
|
-
// never real content and 404s to bots by design; skip so it's neither crawled nor counted
|
|
201
|
-
// as an internal link (otherwise it shows up as a high-equity "broken link" false positive).
|
|
202
168
|
if (/^\/cdn-cgi\//i.test(target.pathname))
|
|
203
169
|
return;
|
|
204
|
-
// Internal = the seed host or its www/apex twin ONLY — not arbitrary sibling subdomains.
|
|
205
|
-
// (accounts./shop./blog. etc. are separate properties; crawling them pulls in junk like
|
|
206
|
-
// Shopify's accounts.<domain> OAuth login pages — infinite param URLs, no SEO value.)
|
|
207
170
|
const isInternal = isInternalHost(target.hostname, baseHost);
|
|
208
171
|
if (isInternal)
|
|
209
172
|
internalLinks++;
|
package/dist/core/extract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/core/extract.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/core/extract.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Google News — the free, keyless source for news_discovery. Google's old News API was
|
|
3
|
-
* retired long ago; the live endpoint is the Google News RSS *search* feed, which returns
|
|
4
|
-
* recent articles for a query with title, source, link and publish time. No credentials,
|
|
5
|
-
* no cost — so news works even without a DataForSEO key (DataForSEO's Google News SERP
|
|
6
|
-
* stays the richer paid option; this is the always-available fallback / second source).
|
|
7
|
-
*/
|
|
8
1
|
export interface GoogleNewsArticle {
|
|
9
2
|
title: string;
|
|
10
3
|
url: string;
|
|
11
4
|
source: string | null;
|
|
12
5
|
timestamp: string | null;
|
|
13
6
|
}
|
|
14
|
-
/**
|
|
15
|
-
* Fetch recent Google News results for a keyword via the RSS search feed.
|
|
16
|
-
* `hl` = interface language, `gl` = country; `ceid` is derived (country:lang).
|
|
17
|
-
*/
|
|
18
7
|
export declare function fetchGoogleNews(keyword: string, opts?: {
|
|
19
8
|
hl?: string;
|
|
20
9
|
gl?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"googleNews.d.ts","sourceRoot":"","sources":["../../src/core/googleNews.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"googleNews.d.ts","sourceRoot":"","sources":["../../src/core/googleNews.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAMD,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GACtD,OAAO,CAAC;IAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAC,CAsCvE"}
|
package/dist/core/googleNews.js
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import * as cheerio from 'cheerio';
|
|
2
|
-
/**
|
|
3
|
-
* Fetch recent Google News results for a keyword via the RSS search feed.
|
|
4
|
-
* `hl` = interface language, `gl` = country; `ceid` is derived (country:lang).
|
|
5
|
-
*/
|
|
6
2
|
export async function fetchGoogleNews(keyword, opts = {}) {
|
|
7
3
|
const hl = opts.hl ?? 'en-US';
|
|
8
4
|
const gl = opts.gl ?? 'US';
|
|
@@ -15,7 +11,6 @@ export async function fetchGoogleNews(keyword, opts = {}) {
|
|
|
15
11
|
if (!res.ok)
|
|
16
12
|
throw new Error(`Google News RSS ${res.status}`);
|
|
17
13
|
const xml = await res.text();
|
|
18
|
-
// RSS is well-formed XML — parse with cheerio in xmlMode (already a dependency).
|
|
19
14
|
const $ = cheerio.load(xml, { xmlMode: true });
|
|
20
15
|
const limit = Math.min(opts.limit ?? 20, 100);
|
|
21
16
|
const articles = [];
|
|
@@ -26,8 +21,6 @@ export async function fetchGoogleNews(keyword, opts = {}) {
|
|
|
26
21
|
const title = $el.find('title').first().text().trim();
|
|
27
22
|
if (!title)
|
|
28
23
|
return;
|
|
29
|
-
// <source url="...">Publisher</source>. Google News titles are usually "Headline - Publisher";
|
|
30
|
-
// prefer the explicit <source> element, fall back to the trailing " - Publisher".
|
|
31
24
|
let source = $el.find('source').first().text().trim() || null;
|
|
32
25
|
let headline = title;
|
|
33
26
|
if (!source) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"googleNews.js","sourceRoot":"","sources":["../../src/core/googleNews.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"googleNews.js","sourceRoot":"","sources":["../../src/core/googleNews.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAoBnC,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,OAAqD,EAAE;IAEvD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC;IAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC;IAC3B,MAAM,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,MAAM,GAAG,GAAG,wCAAwC,kBAAkB,CAAC,OAAO,CAAC,OAAO,kBAAkB,CAAC,EAAE,CAAC,OAAO,kBAAkB,CAAC,EAAE,CAAC,SAAS,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;IAE7K,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,OAAO,EAAE,EAAE,YAAY,EAAE,2FAA2F,EAAE;QACtH,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;KACnC,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAG7B,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAwB,EAAE,CAAC;IACzC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;QACxB,IAAI,QAAQ,CAAC,MAAM,IAAI,KAAK;YAAE,OAAO;QACrC,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QACtD,IAAI,CAAC,KAAK;YAAE,OAAO;QAGnB,IAAI,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;QAC9D,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC9C,IAAI,CAAC,EAAE,CAAC;gBAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAAC,CAAC;QAC1D,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;YACZ,KAAK,EAAE,QAAQ;YACf,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE;YAC3C,MAAM;YACN,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI;SAC7D,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;AACjD,CAAC"}
|
|
@@ -1,18 +1,8 @@
|
|
|
1
1
|
import type Database from 'better-sqlite3';
|
|
2
2
|
export interface GscFreshness {
|
|
3
|
-
/** Latest date present in search_analytics (may be a partial-data day). */
|
|
4
3
|
rawMax: string | null;
|
|
5
|
-
/** Latest date whose data looks finalised — use this for windows and charts. */
|
|
6
4
|
effectiveMax: string | null;
|
|
7
|
-
/** How many trailing days were trimmed as still-being-finalised. */
|
|
8
5
|
trimmedDays: number;
|
|
9
6
|
}
|
|
10
|
-
/**
|
|
11
|
-
* Google Search Console finalises data ~2–3 days late, so the most recent day(s) in the DB are
|
|
12
|
-
* partial — a sharp downward cliff that reads as "traffic is tanking" and panics SEOs. Detect and
|
|
13
|
-
* trim those trailing partial days *data-drivenly*: drop any trailing day whose impressions fall
|
|
14
|
-
* below 50% of the recent (stable-window) median, capped at 3 days. This catches the crater on
|
|
15
|
-
* busy sites without over-trimming a genuinely low-traffic site whose every day is small.
|
|
16
|
-
*/
|
|
17
7
|
export declare function gscFreshness(db: Database.Database): GscFreshness;
|
|
18
8
|
//# sourceMappingURL=gscFreshness.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gscFreshness.d.ts","sourceRoot":"","sources":["../../src/core/gscFreshness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,YAAY;
|
|
1
|
+
{"version":3,"file":"gscFreshness.d.ts","sourceRoot":"","sources":["../../src/core/gscFreshness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,YAAY;IAE3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B,WAAW,EAAE,MAAM,CAAC;CACrB;AASD,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,YAAY,CA8BhE"}
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Google Search Console finalises data ~2–3 days late, so the most recent day(s) in the DB are
|
|
3
|
-
* partial — a sharp downward cliff that reads as "traffic is tanking" and panics SEOs. Detect and
|
|
4
|
-
* trim those trailing partial days *data-drivenly*: drop any trailing day whose impressions fall
|
|
5
|
-
* below 50% of the recent (stable-window) median, capped at 3 days. This catches the crater on
|
|
6
|
-
* busy sites without over-trimming a genuinely low-traffic site whose every day is small.
|
|
7
|
-
*/
|
|
8
1
|
export function gscFreshness(db) {
|
|
9
2
|
const rows = db
|
|
10
3
|
.prepare(`SELECT date, SUM(impressions) i FROM search_analytics WHERE date IS NOT NULL GROUP BY date ORDER BY date`)
|
|
@@ -12,9 +5,6 @@ export function gscFreshness(db) {
|
|
|
12
5
|
if (rows.length === 0)
|
|
13
6
|
return { rawMax: null, effectiveMax: null, trimmedDays: 0 };
|
|
14
7
|
const rawMax = rows[rows.length - 1].date;
|
|
15
|
-
// Calendar guard first: GSC marks roughly the last two days as not-yet-finalised, and a partial
|
|
16
|
-
// day can still clear the 50%-of-median test below (a 70%-of-normal day reads as a worrying dip,
|
|
17
|
-
// not a crater). Never chart a day within 2 days of now, regardless of its numbers.
|
|
18
8
|
const cutoff = new Date(Date.now() - 2 * 86400_000).toISOString().slice(0, 10);
|
|
19
9
|
let calTrimmed = 0;
|
|
20
10
|
while (rows.length - 1 - calTrimmed >= 0 && rows[rows.length - 1 - calTrimmed].date > cutoff)
|
|
@@ -24,7 +14,6 @@ export function gscFreshness(db) {
|
|
|
24
14
|
const kept = rows.slice(0, rows.length - calTrimmed);
|
|
25
15
|
if (kept.length < 8)
|
|
26
16
|
return { rawMax, effectiveMax: kept[kept.length - 1].date, trimmedDays: calTrimmed };
|
|
27
|
-
// Reference level from a recent stable window (last ~21 days, excluding the last 3 that may be partial).
|
|
28
17
|
const stable = kept.slice(Math.max(0, kept.length - 24), kept.length - 3).map(r => r.i).sort((a, b) => a - b);
|
|
29
18
|
const median = stable.length ? stable[Math.floor(stable.length / 2)] : 0;
|
|
30
19
|
if (median <= 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gscFreshness.js","sourceRoot":"","sources":["../../src/core/gscFreshness.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gscFreshness.js","sourceRoot":"","sources":["../../src/core/gscFreshness.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,YAAY,CAAC,EAAqB;IAChD,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CAAC,0GAA0G,CAAC;SACnH,GAAG,EAAmC,CAAC;IAC1C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IACnF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAK1C,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/E,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,GAAG,MAAM;QAAE,UAAU,EAAE,CAAC;IAC3G,IAAI,UAAU,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IACvF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IAErD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;IAG1G,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9G,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;IAEtG,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzD,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG;YAAE,OAAO,EAAE,CAAC;;YACnC,MAAM;IACb,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC;IAC1D,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,GAAG,OAAO,EAAE,CAAC;AACrE,CAAC"}
|
package/dist/core/linkGraph.d.ts
CHANGED
|
@@ -1,19 +1,4 @@
|
|
|
1
1
|
import type Database from 'better-sqlite3';
|
|
2
|
-
/**
|
|
3
|
-
* Post-crawl link-graph metrics, computed in-process from the `links` table (no new infra):
|
|
4
|
-
* - **iPR** — internal PageRank (weighted: nav/footer links count ×0.2, body ×1), log-
|
|
5
|
-
* normalised to 0–100. Surfaces where internal authority concentrates (research/14 §1).
|
|
6
|
-
* - **click_depth** — shortest path from the homepage following BODY links only (the
|
|
7
|
-
* "honest" depth; nav/footer would make everything depth-1). null = unreachable via body.
|
|
8
|
-
* Writes both back to pages.ipr / pages.click_depth for the crawl.
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* Full post-crawl link-graph finalization for a crawl: in-degree (inlink_count) from the
|
|
12
|
-
* `links` table, then iPR + click_depth. Idempotent — safe to re-run. Used by the crawler at
|
|
13
|
-
* the end of a crawl AND by the audit as a self-heal when a crawl's link-graph was left
|
|
14
|
-
* unpopulated (e.g. the crawl process was killed before it could finalize). When seedKey is
|
|
15
|
-
* null the homepage is inferred as the highest-in-degree page (computed first, above).
|
|
16
|
-
*/
|
|
17
2
|
export declare function finalizeLinkGraph(db: Database.Database, crawlId: string, seedKey: string | null): void;
|
|
18
3
|
export declare function computeLinkGraph(db: Database.Database, crawlId: string, seedKey: string | null): void;
|
|
19
4
|
//# sourceMappingURL=linkGraph.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linkGraph.d.ts","sourceRoot":"","sources":["../../src/core/linkGraph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"linkGraph.d.ts","sourceRoot":"","sources":["../../src/core/linkGraph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAiB3C,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CActG;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CA2ErG"}
|
package/dist/core/linkGraph.js
CHANGED
|
@@ -1,18 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Post-crawl link-graph metrics, computed in-process from the `links` table (no new infra):
|
|
3
|
-
* - **iPR** — internal PageRank (weighted: nav/footer links count ×0.2, body ×1), log-
|
|
4
|
-
* normalised to 0–100. Surfaces where internal authority concentrates (research/14 §1).
|
|
5
|
-
* - **click_depth** — shortest path from the homepage following BODY links only (the
|
|
6
|
-
* "honest" depth; nav/footer would make everything depth-1). null = unreachable via body.
|
|
7
|
-
* Writes both back to pages.ipr / pages.click_depth for the crawl.
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* Full post-crawl link-graph finalization for a crawl: in-degree (inlink_count) from the
|
|
11
|
-
* `links` table, then iPR + click_depth. Idempotent — safe to re-run. Used by the crawler at
|
|
12
|
-
* the end of a crawl AND by the audit as a self-heal when a crawl's link-graph was left
|
|
13
|
-
* unpopulated (e.g. the crawl process was killed before it could finalize). When seedKey is
|
|
14
|
-
* null the homepage is inferred as the highest-in-degree page (computed first, above).
|
|
15
|
-
*/
|
|
16
1
|
export function finalizeLinkGraph(db, crawlId, seedKey) {
|
|
17
2
|
db.prepare(`UPDATE pages SET inlink_count = (
|
|
18
3
|
SELECT COUNT(*) FROM links
|
|
@@ -33,13 +18,12 @@ export function computeLinkGraph(db, crawlId, seedKey) {
|
|
|
33
18
|
return;
|
|
34
19
|
const idx = new Map(nodes.map((n, i) => [n, i]));
|
|
35
20
|
const edges = db.prepare('SELECT source_key s, target_key t, placement p FROM links WHERE crawl_id=? AND is_internal=1 AND source_key!=target_key').all(crawlId);
|
|
36
|
-
// ── iPR: weighted power iteration ──
|
|
37
21
|
const outW = new Float64Array(N);
|
|
38
22
|
const adj = Array.from({ length: N }, () => []);
|
|
39
23
|
for (const e of edges) {
|
|
40
24
|
const si = idx.get(e.s), ti = idx.get(e.t);
|
|
41
25
|
if (si === undefined || ti === undefined)
|
|
42
|
-
continue;
|
|
26
|
+
continue;
|
|
43
27
|
const w = e.p === 'body' ? 1 : 0.2;
|
|
44
28
|
adj[si].push({ t: ti, w });
|
|
45
29
|
outW[si] += w;
|
|
@@ -62,8 +46,6 @@ export function computeLinkGraph(db, crawlId, seedKey) {
|
|
|
62
46
|
}
|
|
63
47
|
for (let i = 0; i < N; i++)
|
|
64
48
|
next[i] += danglingShare;
|
|
65
|
-
// L1-delta early exit — PageRank usually converges well before 30 iterations; stop once the
|
|
66
|
-
// vector barely moves so we don't spend the back half of the iterations for no change.
|
|
67
49
|
let delta = 0;
|
|
68
50
|
for (let i = 0; i < N; i++)
|
|
69
51
|
delta += Math.abs(next[i] - pr[i]);
|
|
@@ -71,7 +53,6 @@ export function computeLinkGraph(db, crawlId, seedKey) {
|
|
|
71
53
|
if (delta < 1e-6)
|
|
72
54
|
break;
|
|
73
55
|
}
|
|
74
|
-
// log-normalise to 0–100 (pr values are all > 0 thanks to the (1-d)/N base)
|
|
75
56
|
let lo = Infinity, hi = -Infinity;
|
|
76
57
|
const logpr = new Float64Array(N);
|
|
77
58
|
for (let i = 0; i < N; i++) {
|
|
@@ -86,7 +67,6 @@ export function computeLinkGraph(db, crawlId, seedKey) {
|
|
|
86
67
|
const ipr = new Float64Array(N);
|
|
87
68
|
for (let i = 0; i < N; i++)
|
|
88
69
|
ipr[i] = Math.round(((logpr[i] - lo) / span) * 100);
|
|
89
|
-
// ── click_depth: BFS from homepage over BODY links only ──
|
|
90
70
|
const bodyAdj = Array.from({ length: N }, () => []);
|
|
91
71
|
for (const e of edges) {
|
|
92
72
|
if (e.p !== 'body')
|
|
@@ -96,8 +76,6 @@ export function computeLinkGraph(db, crawlId, seedKey) {
|
|
|
96
76
|
bodyAdj[si].push(ti);
|
|
97
77
|
}
|
|
98
78
|
const depth = new Int32Array(N).fill(-1);
|
|
99
|
-
// BFS root: the seed's key, but if the bare homepage redirected (final URL keyed
|
|
100
|
-
// differently), fall back to the shallowest crawl-discovered page (depth 0 = seed).
|
|
101
79
|
let start = seedKey != null ? idx.get(seedKey) : undefined;
|
|
102
80
|
if (start === undefined) {
|
|
103
81
|
const root = db.prepare('SELECT url_key FROM pages WHERE crawl_id=? ORDER BY depth ASC, inlink_count DESC LIMIT 1').get(crawlId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linkGraph.js","sourceRoot":"","sources":["../../src/core/linkGraph.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"linkGraph.js","sourceRoot":"","sources":["../../src/core/linkGraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,6 @@
|
|
|
1
1
|
import type Database from 'better-sqlite3';
|
|
2
|
-
/**
|
|
3
|
-
* Market Sizing and Prioritisation - the organic market read that opens an engagement.
|
|
4
|
-
*
|
|
5
|
-
* Top-down Labs only, never bottom-up SERPs: ONE cached ranked_keywords pull per domain
|
|
6
|
-
* (client + up to 4 competitors) unions into a keyword universe. Total demand = summed
|
|
7
|
-
* search volume (deduplicated by keyword). Share of voice = each domain's ETV share of
|
|
8
|
-
* the universe, overall and per topic cluster (lexical greedy clustering).
|
|
9
|
-
*
|
|
10
|
-
* Honesty: the competitor set and each domain's ranked keywords are deterministic (D -
|
|
11
|
-
* the Labs index). ETV is DataForSEO's CTR-curve estimate - a modelled judgement (N);
|
|
12
|
-
* the share-of-voice percentages inherit that. Volumes are Google Ads averages.
|
|
13
|
-
*/
|
|
14
2
|
export interface MarketDomainInput {
|
|
15
3
|
domain: string;
|
|
16
|
-
/** keyword → { volume, position, etv } for that domain */
|
|
17
4
|
keywords: {
|
|
18
5
|
keyword: string;
|
|
19
6
|
volume: number | null;
|