@gscdump/sdk 4.4.0 → 4.6.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/dist/indexing-issues.mjs +3 -3
- package/dist/package.mjs +1 -1
- package/dist/site-triage.d.mts +1 -1
- package/dist/site-triage.mjs +29 -0
- package/dist/v1/http.mjs +8 -0
- package/package.json +3 -3
package/dist/indexing-issues.mjs
CHANGED
|
@@ -52,8 +52,8 @@ const issueDetails = {
|
|
|
52
52
|
fix: "If the removal was intentional, back it with a real signal: a noindex tag, a 404/410, or authentication. The removal tool alone does not keep a page out of Search permanently."
|
|
53
53
|
},
|
|
54
54
|
unknown_to_google: {
|
|
55
|
-
description: "
|
|
56
|
-
fix: "
|
|
55
|
+
description: "Google has no record of these URLs. It has not crawled them and has not queued them for a crawl. A URL can stay unknown even when it is in a sitemap that Google already read.",
|
|
56
|
+
fix: "Check that each URL is in a sitemap Google reads. If it already is, the sitemap is not the gap: link to these URLs from pages Google already indexed, and earn links from other sites."
|
|
57
57
|
},
|
|
58
58
|
stale_crawl: {
|
|
59
59
|
description: "Google hasn't re-crawled these pages in over 30 days. They may have low perceived value or your crawl budget may be exhausted.",
|
|
@@ -153,7 +153,7 @@ const issueGroups = [
|
|
|
153
153
|
description: "Help Google find and value your pages",
|
|
154
154
|
effort: "involved",
|
|
155
155
|
controlLevel: "partial",
|
|
156
|
-
education: "Google found these pages but either didn't think they were worth indexing, or hasn't discovered them yet. For crawled-but-not-indexed pages, improving content quality and internal linking helps — but Google ultimately decides what to index. For
|
|
156
|
+
education: "Google found these pages but either didn't think they were worth indexing, or hasn't discovered them yet. For crawled-but-not-indexed pages, improving content quality and internal linking helps — but Google ultimately decides what to index. For pages unknown to Google, check the sitemap first. If they are already in it, link to them from indexed pages.",
|
|
157
157
|
issueTypes: [
|
|
158
158
|
"crawled_not_indexed",
|
|
159
159
|
"discovered_not_indexed",
|
package/dist/package.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var version = "4.
|
|
1
|
+
var version = "4.6.0";
|
|
2
2
|
export { version };
|
package/dist/site-triage.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SearchConsoleStageIssue } from "./search-console-stage.mjs";
|
|
2
2
|
export type ReachStage = 'emerging' | 'growing' | 'plateaued' | 'declining' | 'faded' | 'decayed';
|
|
3
|
-
export type HealthStage = 'healthy' | 'crawl_faults' | 'quality_rejection';
|
|
3
|
+
export type HealthStage = 'healthy' | 'crawl_faults' | 'quality_rejection' | 'not_indexed';
|
|
4
4
|
export interface TriageEvidence {
|
|
5
5
|
label: string;
|
|
6
6
|
value: string;
|
package/dist/site-triage.mjs
CHANGED
|
@@ -88,6 +88,10 @@ const HEALTH_COPY = {
|
|
|
88
88
|
summary: "Real access faults (server errors / broken links) are capping otherwise-indexable pages.",
|
|
89
89
|
primaryAction: "Fix the 5xx and broken URLs; return 410/404 for pages you retire on purpose."
|
|
90
90
|
},
|
|
91
|
+
not_indexed: {
|
|
92
|
+
summary: "Google has not indexed most known URLs. It queued many without a crawl, and it crawled others and left them out.",
|
|
93
|
+
primaryAction: "Link to the queued URLs from pages Google already indexed, and consolidate or improve the crawled ones."
|
|
94
|
+
},
|
|
91
95
|
quality_rejection: {
|
|
92
96
|
summary: "Google is crawling pages and refusing to index them — a soft quality signal it never reports explicitly.",
|
|
93
97
|
primaryAction: "Consolidate or improve the rejected pages, or noindex the thin/low-value set."
|
|
@@ -107,6 +111,7 @@ function classifyHealthStage(input) {
|
|
|
107
111
|
const softFound = countSearchConsoleIssues(issues, "soft_404");
|
|
108
112
|
const serverError = countSearchConsoleIssues(issues, "server_error", "blocked_robots", "access_denied", "forbidden");
|
|
109
113
|
const crawledNotIndexed = countSearchConsoleIssues(issues, "crawled_not_indexed");
|
|
114
|
+
const discoveredNotIndexed = countSearchConsoleIssues(issues, "discovered_not_indexed");
|
|
110
115
|
const intentionalDead = isIntentionalRetirementSite(input, notFound, serverError) ? notFound : 0;
|
|
111
116
|
const indexableUrls = Math.max(1, totalUrls - noindex - intentionalDead);
|
|
112
117
|
const hardBlocks = serverError + (input.crawlAuditBlockerCount ?? 0);
|
|
@@ -140,6 +145,30 @@ function classifyHealthStage(input) {
|
|
|
140
145
|
progression: escapeReduce("healthy", "crawled-rejected share", share, REJECT_SHARE, `${(share * 100).toFixed(0)}% rejected — improve/consolidate ~${formatSearchConsoleCount(toClear)} pages to clear`)
|
|
141
146
|
};
|
|
142
147
|
}
|
|
148
|
+
const notIndexedPool = rejectPool + discoveredNotIndexed;
|
|
149
|
+
if (totalUrls > 0 && notIndexedPool > REJECT_MIN && notIndexedPool / totalUrls >= REJECT_SHARE) {
|
|
150
|
+
const share = notIndexedPool / totalUrls;
|
|
151
|
+
const toClear = Math.max(0, Math.ceil(notIndexedPool - REJECT_SHARE * totalUrls));
|
|
152
|
+
return {
|
|
153
|
+
stage: "not_indexed",
|
|
154
|
+
...HEALTH_COPY.not_indexed,
|
|
155
|
+
evidence: [
|
|
156
|
+
{
|
|
157
|
+
label: "Discovered, currently not indexed",
|
|
158
|
+
value: formatSearchConsoleCount(discoveredNotIndexed)
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
label: "Crawled, currently not indexed",
|
|
162
|
+
value: formatSearchConsoleCount(rejectPool)
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
label: "Share of known URLs",
|
|
166
|
+
value: `${(share * 100).toFixed(0)}%`
|
|
167
|
+
}
|
|
168
|
+
],
|
|
169
|
+
progression: escapeReduce("healthy", "not-indexed share", share, REJECT_SHARE, `${(share * 100).toFixed(0)}% not indexed. Get ~${formatSearchConsoleCount(toClear)} URLs indexed to clear the gate`)
|
|
170
|
+
};
|
|
171
|
+
}
|
|
143
172
|
return {
|
|
144
173
|
stage: "healthy",
|
|
145
174
|
...HEALTH_COPY.healthy,
|
package/dist/v1/http.mjs
CHANGED
|
@@ -374,6 +374,11 @@ function createGscdumpV1Client(options) {
|
|
|
374
374
|
listSiteIndexingUrls: (input, executeOptions) => execute("partner.sites.indexing.urls.list", input, executeOptions),
|
|
375
375
|
getSiteBingData: (input, executeOptions) => execute("partner.sites.bing.data.get", input, executeOptions),
|
|
376
376
|
listSiteBingIndexingEvidence: (input, executeOptions) => execute("partner.sites.indexing.bing.evidence.list", input, executeOptions),
|
|
377
|
+
getSiteIndexNowConnection: (input, executeOptions) => execute("partner.sites.indexing.indexnow.connection.get", input, executeOptions),
|
|
378
|
+
configureSiteIndexNowConnection: (input, executeOptions) => execute("partner.sites.indexing.indexnow.connection.configure", input, executeOptions),
|
|
379
|
+
verifySiteIndexNowConnection: (input, executeOptions) => execute("partner.sites.indexing.indexnow.connection.verify", input, executeOptions),
|
|
380
|
+
submitSiteIndexNow: (input, executeOptions) => execute("partner.sites.indexing.indexnow.submissions.create", input, executeOptions),
|
|
381
|
+
listSiteIndexNowSubmissionReceipts: (input, executeOptions) => execute("partner.sites.indexing.indexnow.submissions.list", input, executeOptions),
|
|
377
382
|
getSiteBingConnection: (input, executeOptions) => execute("partner.sites.indexing.bing.connection.get", input, executeOptions),
|
|
378
383
|
verifySiteBingConnection: (input, executeOptions) => execute("partner.sites.indexing.bing.connection.verify", input, executeOptions),
|
|
379
384
|
listSiteIndexingTransitions: (input, executeOptions) => execute("partner.sites.indexing.transitions.list", input, executeOptions),
|
|
@@ -387,6 +392,9 @@ function createGscdumpV1Client(options) {
|
|
|
387
392
|
deleteSite: (input, executeOptions) => execute("partner.sites.delete", input, executeOptions),
|
|
388
393
|
getCanonicalMismatches: (input, executeOptions) => execute("partner.sites.canonical.mismatches.get", input, executeOptions),
|
|
389
394
|
inspectSiteUrls: (input, executeOptions) => execute("partner.sites.indexing.inspect.create", input, executeOptions),
|
|
395
|
+
listSiteWatchedUrls: (input, executeOptions) => execute("partner.sites.indexing.watched.list", input, executeOptions),
|
|
396
|
+
addSiteWatchedUrls: (input, executeOptions) => execute("partner.sites.indexing.watched.add", input, executeOptions),
|
|
397
|
+
removeSiteWatchedUrls: (input, executeOptions) => execute("partner.sites.indexing.watched.remove", input, executeOptions),
|
|
390
398
|
recoverSitePermission: (input, executeOptions) => execute("partner.sites.permission.recover", input, executeOptions),
|
|
391
399
|
queryKeywordSparklines: (input, executeOptions) => execute("partner.sites.keyword.sparklines.query", input, executeOptions),
|
|
392
400
|
getQueryTrend: (input, executeOptions) => execute("partner.sites.query.trend.get", input, executeOptions),
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gscdump/sdk",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.6.0",
|
|
5
5
|
"description": "Consumer SDK for hosted gscdump.com integrations.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Harlan Wilton",
|
|
@@ -144,8 +144,8 @@
|
|
|
144
144
|
"node": ">=22.13.0"
|
|
145
145
|
},
|
|
146
146
|
"dependencies": {
|
|
147
|
-
"@gscdump/contracts": "^4.
|
|
148
|
-
"gscdump": "^4.
|
|
147
|
+
"@gscdump/contracts": "^4.6.0",
|
|
148
|
+
"gscdump": "^4.6.0",
|
|
149
149
|
"ofetch": "^1.5.1",
|
|
150
150
|
"zod": "^4.6.5"
|
|
151
151
|
},
|