@gscdump/sdk 0.37.0 → 0.37.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.
Files changed (2) hide show
  1. package/dist/index.mjs +89 -5
  2. package/package.json +5 -5
package/dist/index.mjs CHANGED
@@ -1076,6 +1076,42 @@ const issueDetails = {
1076
1076
  description: "Google encountered 5xx server errors when trying to crawl these URLs. The pages were unreachable at crawl time.",
1077
1077
  fix: "Check your server logs for errors. Ensure your hosting can handle Googlebot traffic. Fix any backend issues causing 500/502/503 errors."
1078
1078
  },
1079
+ access_forbidden: {
1080
+ description: "Your server returned 403 Forbidden to Googlebot. Usually a WAF, bot-protection rule, or firewall treating the crawler as an attacker — a human visitor may see the page fine.",
1081
+ fix: "Allowlist Googlebot in your WAF / bot-protection rules and verify by IP, not user agent. Check Cloudflare bot-fight mode, rate limits, and any geo or ASN blocking. Re-test with the URL Inspection tool's \"Test live URL\"."
1082
+ },
1083
+ access_denied: {
1084
+ description: "Your server returned 401 Unauthorized to Googlebot. The URL sits behind an authentication wall.",
1085
+ fix: "If the page should rank, remove the auth requirement for crawlers or move the content to a public URL. If it is genuinely private, block it in robots.txt or noindex it so it stops being reported as an indexing failure."
1086
+ },
1087
+ blocked_4xx: {
1088
+ description: "Google got a 4xx response other than 401, 403, or 404 — commonly 410 Gone, 429 Too Many Requests, or 451.",
1089
+ fix: "Check which status the URL actually returns. A 429 means Googlebot is being rate-limited: raise or exempt the crawler limit. A 410 is intentional deletion and will clear on its own."
1090
+ },
1091
+ redirect_error: {
1092
+ description: "Google could not follow the redirect — a redirect chain that is too long, a loop, an empty Location header, or a URL that exceeds the maximum length.",
1093
+ fix: "Collapse redirect chains to a single hop. Look for loops (A→B→A) and self-redirects. Point internal links and sitemap entries at the final destination URL."
1094
+ },
1095
+ crawl_error: {
1096
+ description: "Google hit an internal crawl error or considered the URL malformed. Often transient on Google's side, but a persistent count means the URL itself is invalid.",
1097
+ fix: "Verify the URL parses and resolves. Remove malformed URLs from your sitemap and internal links. If the URLs are valid, re-inspect in a few days — transient crawl errors clear themselves."
1098
+ },
1099
+ sitemap_redirect: {
1100
+ description: "These URLs are submitted in your sitemap but redirect elsewhere. A sitemap should only list final, canonical, 200-status URLs — a redirecting entry wastes crawl budget and tells Google your sitemap is stale.",
1101
+ fix: "Replace each redirecting entry with its destination URL, or drop it from the sitemap entirely. Then resubmit the sitemap."
1102
+ },
1103
+ alternate_canonical: {
1104
+ description: "These pages declare a canonical pointing at another page, and Google honoured it. The canonical target is what gets indexed. Usually intentional.",
1105
+ fix: "Nothing to fix if the canonical is deliberate. If these pages should rank on their own, make each one self-canonical and give it genuinely distinct content."
1106
+ },
1107
+ duplicate_no_canonical: {
1108
+ description: "Google decided these pages duplicate another URL and picked the canonical itself, because the page declared no preference. You did not choose which URL ranks — Google did.",
1109
+ fix: "Add a canonical link to every page. Point it at itself for pages that should rank, or at the preferred URL for genuine duplicates. Leaving it unset hands the decision to Google."
1110
+ },
1111
+ page_removed: {
1112
+ description: "These URLs are suppressed by a request in Search Console's Removals tool. The block is temporary — roughly six months — and then they become eligible again.",
1113
+ 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."
1114
+ },
1079
1115
  unknown_to_google: {
1080
1116
  description: "These URLs exist on your site but Google hasn't discovered them yet. They may be orphaned pages or missing from your sitemap.",
1081
1117
  fix: "Add these URLs to your sitemap. Create internal links to them from well-indexed pages. Submit the sitemap in Google Search Console."
@@ -1203,6 +1239,42 @@ const coverageLabels = {
1203
1239
  "Blocked by robots.txt": {
1204
1240
  short: "Robots blocked",
1205
1241
  color: "text-warning"
1242
+ },
1243
+ "Blocked due to access forbidden (403)": {
1244
+ short: "Forbidden (403)",
1245
+ color: "text-error"
1246
+ },
1247
+ "Blocked due to unauthorized request (401)": {
1248
+ short: "Unauthorized (401)",
1249
+ color: "text-error"
1250
+ },
1251
+ "Blocked due to other 4xx issue": {
1252
+ short: "Blocked (4xx)",
1253
+ color: "text-error"
1254
+ },
1255
+ "Redirect error": {
1256
+ short: "Redirect error",
1257
+ color: "text-error"
1258
+ },
1259
+ "Page with redirect": {
1260
+ short: "Redirect",
1261
+ color: "text-muted"
1262
+ },
1263
+ "Alternate page with proper canonical tag": {
1264
+ short: "Alternate canonical",
1265
+ color: "text-muted"
1266
+ },
1267
+ "Duplicate without user-selected canonical": {
1268
+ short: "Duplicate, no canonical",
1269
+ color: "text-warning"
1270
+ },
1271
+ "Duplicate, Google chose different canonical than user": {
1272
+ short: "Canonical overridden",
1273
+ color: "text-warning"
1274
+ },
1275
+ "Blocked by page removal tool": {
1276
+ short: "Removal tool",
1277
+ color: "text-muted"
1206
1278
  }
1207
1279
  };
1208
1280
  function coverageLabel(state) {
@@ -1219,8 +1291,13 @@ const issueGroups = [
1219
1291
  description: "Configuration changes you can make right now",
1220
1292
  effort: "quick",
1221
1293
  controlLevel: "full",
1222
- education: "These issues are caused by your site's configuration preventing Google from indexing certain pages. If these pages should be indexed, the fix is usually a one-line config change — remove a robots.txt rule or fix a canonical URL. Highest-ROI fixes, zero content work.",
1223
- issueTypes: ["blocked_robots", "canonical_mismatch"]
1294
+ education: "These issues are caused by your site's configuration preventing Google from indexing certain pages. If these pages should be indexed, the fix is usually a one-line config change — remove a robots.txt rule, fix a canonical URL, or drop a redirecting entry from your sitemap. Highest-ROI fixes, zero content work.",
1295
+ issueTypes: [
1296
+ "blocked_robots",
1297
+ "canonical_mismatch",
1298
+ "duplicate_no_canonical",
1299
+ "sitemap_redirect"
1300
+ ]
1224
1301
  },
1225
1302
  {
1226
1303
  id: "technical",
@@ -1229,11 +1306,16 @@ const issueGroups = [
1229
1306
  description: "Server and URL issues to resolve",
1230
1307
  effort: "moderate",
1231
1308
  controlLevel: "full",
1232
- education: "These are infrastructure problems — your server is returning errors, pages have been deleted without redirects, or pages appear empty to Google. Fix server errors first (they affect crawl budget), then handle 404s with redirects, and ensure pages with real content return proper status codes.",
1309
+ education: "These are infrastructure problems — your server is returning errors, blocking Googlebot at the edge, failing to follow redirects, or serving pages that look empty. Fix crawl blocks and server errors first (they cost crawl budget and can drop indexed pages), then handle 404s with redirects.",
1233
1310
  issueTypes: [
1234
1311
  "server_error",
1235
1312
  "not_found",
1236
- "soft_404"
1313
+ "soft_404",
1314
+ "access_forbidden",
1315
+ "access_denied",
1316
+ "blocked_4xx",
1317
+ "redirect_error",
1318
+ "crawl_error"
1237
1319
  ]
1238
1320
  },
1239
1321
  {
@@ -1259,10 +1341,12 @@ const issueGroups = [
1259
1341
  description: "Usually intentional — review but likely fine",
1260
1342
  effort: "quick",
1261
1343
  controlLevel: "none",
1262
- education: "These aren't really \"issues\" — they're usually intentional. Noindex tags are set deliberately to keep pages out of search. Redirects are normal when you move pages. Fragment URLs are stripped by Google by design. Review to make sure nothing unexpected is here.",
1344
+ education: "These aren't really \"issues\" — they're usually intentional. Noindex tags are set deliberately to keep pages out of search. Redirects are normal when you move pages. An alternate page with a proper canonical is consolidation working as designed. Fragment URLs are stripped by Google. Review to make sure nothing unexpected is here.",
1263
1345
  issueTypes: [
1264
1346
  "noindex",
1265
1347
  "redirect",
1348
+ "alternate_canonical",
1349
+ "page_removed",
1266
1350
  "fragment_url"
1267
1351
  ]
1268
1352
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@gscdump/sdk",
3
3
  "type": "module",
4
- "version": "0.37.0",
4
+ "version": "0.37.2",
5
5
  "description": "Consumer SDK for hosted gscdump.com integrations.",
6
6
  "author": {
7
7
  "name": "Harlan Wilton",
@@ -44,10 +44,10 @@
44
44
  "date-fns": "^4.4.0",
45
45
  "ofetch": "^1.5.1",
46
46
  "zod": "^4.4.3",
47
- "@gscdump/contracts": "0.37.0",
48
- "@gscdump/engine": "0.37.0",
49
- "gscdump": "0.37.0",
50
- "@gscdump/analysis": "0.37.0"
47
+ "@gscdump/analysis": "0.37.2",
48
+ "@gscdump/contracts": "0.37.2",
49
+ "@gscdump/engine": "0.37.2",
50
+ "gscdump": "0.37.2"
51
51
  },
52
52
  "devDependencies": {
53
53
  "typescript": "^6.0.3",