seo 0.16.1 → 0.17.1

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/index.d.ts CHANGED
@@ -141,7 +141,7 @@ export interface PageFetchResult {
141
141
  robotsTxt?: {
142
142
  url: string;
143
143
  allowed: boolean | null;
144
- availability: 'available' | 'absent' | 'access-blocked' | 'rate-limited' | 'unreachable';
144
+ availability: 'available' | 'absent' | 'access-blocked' | 'rate-limited' | 'unreachable' | 'unreadable';
145
145
  status?: number;
146
146
  error?: string;
147
147
  matchedLine?: string;
@@ -177,7 +177,7 @@ export interface PageFetchDiagnostics {
177
177
  url: string;
178
178
  cache: 'hit' | 'miss' | 'bypass';
179
179
  allowed: boolean | null;
180
- availability: 'available' | 'absent' | 'access-blocked' | 'rate-limited' | 'unreachable';
180
+ availability: 'available' | 'absent' | 'access-blocked' | 'rate-limited' | 'unreachable' | 'unreadable';
181
181
  status?: number;
182
182
  error?: string;
183
183
  };
@@ -457,6 +457,19 @@ declare const RULE_DEFINITIONS: readonly [{
457
457
  readonly evidenceFields: ["page.title"];
458
458
  readonly suggestedCommands: ["seo audit-page --url <url> --json"];
459
459
  };
460
+ }, {
461
+ readonly id: "empty_title";
462
+ readonly title: "Title empty";
463
+ readonly category: "metadata";
464
+ readonly defaultSeverity: "high";
465
+ readonly whyItMatters: "The page has a <title> element with no text. Search engines treat it like a missing title and write their own headline for the result.";
466
+ readonly howToFix: "Fill the title element with a descriptive title that names the page topic. An empty title usually means a template field or CMS value is blank.";
467
+ readonly impactIfIgnored: "The page can look vague in search results, earn lower CTR, and send weaker relevance signals.";
468
+ readonly howToVerify: "Re-run the crawl and confirm the title element has text.";
469
+ readonly agentHints: {
470
+ readonly evidenceFields: ["page.title"];
471
+ readonly suggestedCommands: ["seo crawl <url> --max-pages 1 --json"];
472
+ };
460
473
  }, {
461
474
  readonly id: "title_too_wide";
462
475
  readonly title: "Title may truncate on some devices";
@@ -866,6 +879,15 @@ declare const RULE_DEFINITIONS: readonly [{
866
879
  readonly howToFix: "Write a concise, unique description that explains the page value and matches the main search intent.";
867
880
  readonly impactIfIgnored: "Search snippets may be generic or less persuasive, especially on pages that already rank.";
868
881
  readonly howToVerify: "Re-run the crawl and confirm the page has a meta description.";
882
+ }, {
883
+ readonly id: "empty_meta_description";
884
+ readonly title: "Meta description empty";
885
+ readonly category: "metadata";
886
+ readonly defaultSeverity: "medium";
887
+ readonly whyItMatters: "The page has a meta description tag with no content, so search engines choose their own snippet. An empty tag usually means a template field or CMS value is blank.";
888
+ readonly howToFix: "Fill the content attribute with a concise, unique description, or fix the template value that leaves it blank.";
889
+ readonly impactIfIgnored: "Search snippets may be generic or less persuasive, especially on pages that already rank.";
890
+ readonly howToVerify: "Re-run the crawl and confirm the meta description has content.";
869
891
  }, {
870
892
  readonly id: "meta_description_duplicate";
871
893
  readonly title: "Duplicate meta description";
@@ -1753,6 +1775,7 @@ export interface UrlInspectionRequest {
1753
1775
  accountEmail?: string;
1754
1776
  languageCode?: string;
1755
1777
  quotaLimit?: number;
1778
+ signal?: AbortSignal;
1756
1779
  }
1757
1780
  export interface UrlInspectionResult {
1758
1781
  inspectionResult?: {
@@ -1782,12 +1805,16 @@ export declare class GoogleApiError extends SeoError {
1782
1805
  readonly status: number;
1783
1806
  constructor(code: SeoErrorCode, message: string, status: number);
1784
1807
  }
1808
+ export declare const GOOGLE_TIMEOUT_MS = 30000;
1809
+ export declare const URL_INSPECTION_TIMEOUT_MS = 60000;
1810
+ export declare function withinGoogleTimeout<T>(what: string, timeoutMs: number, signal: AbortSignal | undefined, run: (signal: AbortSignal) => Promise<T>): Promise<T>;
1785
1811
  export declare function bearerFetch(token: () => Promise<string> | string): GoogleFetch;
1786
1812
  export declare function googleJson<T>(gfetch: GoogleFetch, url: string, input: {
1787
1813
  body?: unknown;
1788
1814
  label: string;
1789
1815
  subject?: string;
1790
1816
  maxBytes?: number;
1817
+ timeoutMs?: number;
1791
1818
  } & GoogleCallOptions): Promise<T>;
1792
1819
  export declare function searchAnalyticsRows(gfetch: GoogleFetch, site: string, body: SearchAnalyticsRequest, options: GoogleCallOptions): Promise<SearchAnalyticsResult>;
1793
1820
  export type SearchConsoleSite = {
@@ -2043,7 +2070,7 @@ type NormalizedFetchRateControls = {
2043
2070
  };
2044
2071
  type RobotsResult = {
2045
2072
  allowed: boolean | null;
2046
- availability: 'available' | 'absent' | 'access-blocked' | 'rate-limited' | 'unreachable';
2073
+ availability: 'available' | 'absent' | 'access-blocked' | 'rate-limited' | 'unreachable' | 'unreadable';
2047
2074
  status?: number;
2048
2075
  error?: string;
2049
2076
  matchedLine?: string;
@@ -2106,7 +2133,7 @@ export declare function listSites(_refresh?: boolean, accountEmail?: string): Pr
2106
2133
  permissionLevel?: string;
2107
2134
  siteType?: string;
2108
2135
  }>>;
2109
- export declare const AUDIT_PAGE_RULE_IDS: readonly ["missing_title", "title_too_wide", "h1_missing", "canonical_invalid", "canonical_conflict", "canonical_multiple", "canonical_outside_head", "canonical_streamed_in_body", "canonical_mismatch"];
2136
+ export declare const AUDIT_PAGE_RULE_IDS: readonly ["missing_title", "empty_title", "title_too_wide", "h1_missing", "canonical_invalid", "canonical_conflict", "canonical_multiple", "canonical_outside_head", "canonical_streamed_in_body", "canonical_mismatch"];
2110
2137
  export type AuditPageDependencies = {
2111
2138
  fetchPage: typeof fetchPage;
2112
2139
  queryPageMetrics: typeof queryPageMetrics;
@@ -2542,7 +2569,7 @@ export type CrawlPageSnapshot = {
2542
2569
  robotsTxt?: {
2543
2570
  url: string;
2544
2571
  allowed: boolean | null;
2545
- availability: 'available' | 'absent' | 'access-blocked' | 'rate-limited' | 'unreachable';
2572
+ availability: 'available' | 'absent' | 'access-blocked' | 'rate-limited' | 'unreachable' | 'unreadable';
2546
2573
  status?: number;
2547
2574
  error?: string;
2548
2575
  matchedLine?: string;
@@ -2744,7 +2771,7 @@ export type CrawlRequestObservation = CrawlResponseObservation | {
2744
2771
  requestedUrl: string;
2745
2772
  outcome: 'failure';
2746
2773
  durationMs?: number;
2747
- failureKind: 'dns' | 'tls' | 'timeout' | 'redirect-limit' | 'aborted' | 'unknown';
2774
+ failureKind: 'dns' | 'tls' | 'timeout' | 'redirect-limit' | 'redirect-loop' | 'aborted' | 'unknown';
2748
2775
  error: string;
2749
2776
  extraction: 'not-applicable';
2750
2777
  };
@@ -2854,6 +2881,9 @@ export declare function normalizeCrawlSkipReasonCounts(input: {
2854
2881
  };
2855
2882
  export declare function crawlSkipReasonCountsFromRecord(input?: Partial<Record<CrawlSkipReason, number>>): CrawlSkipReasonCount[];
2856
2883
  type CrawlStatusPhase = 'started' | 'url_queued' | 'url_skipped' | 'page_started' | 'page_completed' | 'page_failed' | 'page_skipped' | 'external_links_started' | 'external_links_completed' | 'cancelled' | 'completed';
2884
+ export declare function fetchFailureKind(error: unknown, signal?: AbortSignal): Extract<CrawlRequestObservation, {
2885
+ outcome: 'failure';
2886
+ }>['failureKind'];
2857
2887
  export type CrawlOneResult = {
2858
2888
  request?: CrawlRequestObservation;
2859
2889
  page?: CrawlPageSnapshot;
@@ -2878,7 +2908,8 @@ type CrawlSiteChecks = {
2878
2908
  complete: boolean;
2879
2909
  };
2880
2910
  };
2881
- type CrawlAiAvailability = 'available' | 'absent' | 'access-blocked' | 'rate-limited' | 'unreachable';
2911
+ type CrawlAiAvailability = 'available' | 'absent' | 'access-blocked' | 'rate-limited' | 'unreachable' | 'unreadable';
2912
+ type CrawlFetchErrorKind = 'dns' | 'tls' | 'timeout' | 'redirect-limit' | 'redirect-loop' | 'too-large' | 'aborted' | 'unknown';
2882
2913
  type CrawlAiBotAccess = {
2883
2914
  userAgent: string;
2884
2915
  purpose: 'search' | 'training' | 'other';
@@ -2908,6 +2939,7 @@ type CrawlAiSignals = {
2908
2939
  contentType?: string;
2909
2940
  servesHtml?: boolean;
2910
2941
  error?: string;
2942
+ errorKind?: CrawlFetchErrorKind;
2911
2943
  sitemapUrls: string[];
2912
2944
  contentSignals?: string[];
2913
2945
  botAccess: CrawlAiBotAccess[];
@@ -2920,6 +2952,7 @@ type CrawlAiSignals = {
2920
2952
  contentType?: string;
2921
2953
  servesHtml?: boolean;
2922
2954
  error?: string;
2955
+ errorKind?: CrawlFetchErrorKind;
2923
2956
  links?: {
2924
2957
  found: number;
2925
2958
  checked: number;
@@ -3440,6 +3473,7 @@ export declare const crawlPageSnapshotSchema: z.ZodObject<{
3440
3473
  "access-blocked": "access-blocked";
3441
3474
  "rate-limited": "rate-limited";
3442
3475
  unreachable: "unreachable";
3476
+ unreadable: "unreadable";
3443
3477
  }>;
3444
3478
  status: z.ZodOptional<z.ZodNumber>;
3445
3479
  error: z.ZodOptional<z.ZodString>;
@@ -3657,6 +3691,7 @@ export declare const crawlPageSnapshotSchema: z.ZodObject<{
3657
3691
  "access-blocked": "access-blocked";
3658
3692
  "rate-limited": "rate-limited";
3659
3693
  unreachable: "unreachable";
3694
+ unreadable: "unreadable";
3660
3695
  }>;
3661
3696
  status: z.ZodOptional<z.ZodNumber>;
3662
3697
  error: z.ZodOptional<z.ZodString>;
@@ -4028,6 +4063,7 @@ export declare const crawlRequestObservationSchema: z.ZodUnion<readonly [z.ZodOb
4028
4063
  "access-blocked": "access-blocked";
4029
4064
  "rate-limited": "rate-limited";
4030
4065
  unreachable: "unreachable";
4066
+ unreadable: "unreadable";
4031
4067
  }>;
4032
4068
  status: z.ZodOptional<z.ZodNumber>;
4033
4069
  error: z.ZodOptional<z.ZodString>;
@@ -4087,6 +4123,7 @@ export declare const crawlRequestObservationSchema: z.ZodUnion<readonly [z.ZodOb
4087
4123
  "access-blocked": "access-blocked";
4088
4124
  "rate-limited": "rate-limited";
4089
4125
  unreachable: "unreachable";
4126
+ unreadable: "unreadable";
4090
4127
  }>;
4091
4128
  status: z.ZodOptional<z.ZodNumber>;
4092
4129
  error: z.ZodOptional<z.ZodString>;
@@ -4111,6 +4148,7 @@ export declare const crawlRequestObservationSchema: z.ZodUnion<readonly [z.ZodOb
4111
4148
  "access-blocked": "access-blocked";
4112
4149
  "rate-limited": "rate-limited";
4113
4150
  unreachable: "unreachable";
4151
+ unreadable: "unreadable";
4114
4152
  }>;
4115
4153
  status: z.ZodOptional<z.ZodNumber>;
4116
4154
  error: z.ZodOptional<z.ZodString>;
@@ -4134,6 +4172,7 @@ export declare const crawlRequestObservationSchema: z.ZodUnion<readonly [z.ZodOb
4134
4172
  dns: "dns";
4135
4173
  tls: "tls";
4136
4174
  "redirect-limit": "redirect-limit";
4175
+ "redirect-loop": "redirect-loop";
4137
4176
  aborted: "aborted";
4138
4177
  }>;
4139
4178
  error: z.ZodString;
@@ -4628,6 +4667,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
4628
4667
  "access-blocked": "access-blocked";
4629
4668
  "rate-limited": "rate-limited";
4630
4669
  unreachable: "unreachable";
4670
+ unreadable: "unreadable";
4631
4671
  }>;
4632
4672
  status: z.ZodOptional<z.ZodNumber>;
4633
4673
  error: z.ZodOptional<z.ZodString>;
@@ -4845,6 +4885,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
4845
4885
  "access-blocked": "access-blocked";
4846
4886
  "rate-limited": "rate-limited";
4847
4887
  unreachable: "unreachable";
4888
+ unreadable: "unreadable";
4848
4889
  }>;
4849
4890
  status: z.ZodOptional<z.ZodNumber>;
4850
4891
  error: z.ZodOptional<z.ZodString>;
@@ -5299,11 +5340,22 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5299
5340
  "access-blocked": "access-blocked";
5300
5341
  "rate-limited": "rate-limited";
5301
5342
  unreachable: "unreachable";
5343
+ unreadable: "unreadable";
5302
5344
  }>;
5303
5345
  status: z.ZodOptional<z.ZodNumber>;
5304
5346
  contentType: z.ZodOptional<z.ZodString>;
5305
5347
  servesHtml: z.ZodOptional<z.ZodBoolean>;
5306
5348
  error: z.ZodOptional<z.ZodString>;
5349
+ errorKind: z.ZodOptional<z.ZodEnum<{
5350
+ unknown: "unknown";
5351
+ timeout: "timeout";
5352
+ dns: "dns";
5353
+ tls: "tls";
5354
+ "redirect-limit": "redirect-limit";
5355
+ "redirect-loop": "redirect-loop";
5356
+ aborted: "aborted";
5357
+ "too-large": "too-large";
5358
+ }>>;
5307
5359
  sitemapUrls: z.ZodArray<z.ZodString>;
5308
5360
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
5309
5361
  botAccess: z.ZodArray<z.ZodObject<{
@@ -5327,11 +5379,22 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5327
5379
  "access-blocked": "access-blocked";
5328
5380
  "rate-limited": "rate-limited";
5329
5381
  unreachable: "unreachable";
5382
+ unreadable: "unreadable";
5330
5383
  }>>;
5331
5384
  status: z.ZodOptional<z.ZodNumber>;
5332
5385
  contentType: z.ZodOptional<z.ZodString>;
5333
5386
  servesHtml: z.ZodOptional<z.ZodBoolean>;
5334
5387
  error: z.ZodOptional<z.ZodString>;
5388
+ errorKind: z.ZodOptional<z.ZodEnum<{
5389
+ unknown: "unknown";
5390
+ timeout: "timeout";
5391
+ dns: "dns";
5392
+ tls: "tls";
5393
+ "redirect-limit": "redirect-limit";
5394
+ "redirect-loop": "redirect-loop";
5395
+ aborted: "aborted";
5396
+ "too-large": "too-large";
5397
+ }>>;
5335
5398
  links: z.ZodOptional<z.ZodObject<{
5336
5399
  found: z.ZodNumber;
5337
5400
  checked: z.ZodNumber;
@@ -5359,6 +5422,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5359
5422
  "access-blocked": "access-blocked";
5360
5423
  "rate-limited": "rate-limited";
5361
5424
  unreachable: "unreachable";
5425
+ unreadable: "unreadable";
5362
5426
  }>;
5363
5427
  status: z.ZodOptional<z.ZodNumber>;
5364
5428
  contentType: z.ZodOptional<z.ZodString>;
@@ -5569,6 +5633,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5569
5633
  "access-blocked": "access-blocked";
5570
5634
  "rate-limited": "rate-limited";
5571
5635
  unreachable: "unreachable";
5636
+ unreadable: "unreadable";
5572
5637
  }>;
5573
5638
  status: z.ZodOptional<z.ZodNumber>;
5574
5639
  error: z.ZodOptional<z.ZodString>;
@@ -5628,6 +5693,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5628
5693
  "access-blocked": "access-blocked";
5629
5694
  "rate-limited": "rate-limited";
5630
5695
  unreachable: "unreachable";
5696
+ unreadable: "unreadable";
5631
5697
  }>;
5632
5698
  status: z.ZodOptional<z.ZodNumber>;
5633
5699
  error: z.ZodOptional<z.ZodString>;
@@ -5652,6 +5718,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5652
5718
  "access-blocked": "access-blocked";
5653
5719
  "rate-limited": "rate-limited";
5654
5720
  unreachable: "unreachable";
5721
+ unreadable: "unreadable";
5655
5722
  }>;
5656
5723
  status: z.ZodOptional<z.ZodNumber>;
5657
5724
  error: z.ZodOptional<z.ZodString>;
@@ -5675,6 +5742,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5675
5742
  dns: "dns";
5676
5743
  tls: "tls";
5677
5744
  "redirect-limit": "redirect-limit";
5745
+ "redirect-loop": "redirect-loop";
5678
5746
  aborted: "aborted";
5679
5747
  }>;
5680
5748
  error: z.ZodString;
@@ -5946,6 +6014,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5946
6014
  "access-blocked": "access-blocked";
5947
6015
  "rate-limited": "rate-limited";
5948
6016
  unreachable: "unreachable";
6017
+ unreadable: "unreadable";
5949
6018
  }>;
5950
6019
  status: z.ZodOptional<z.ZodNumber>;
5951
6020
  error: z.ZodOptional<z.ZodString>;
@@ -6163,6 +6232,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6163
6232
  "access-blocked": "access-blocked";
6164
6233
  "rate-limited": "rate-limited";
6165
6234
  unreachable: "unreachable";
6235
+ unreadable: "unreadable";
6166
6236
  }>;
6167
6237
  status: z.ZodOptional<z.ZodNumber>;
6168
6238
  error: z.ZodOptional<z.ZodString>;
@@ -6617,11 +6687,22 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6617
6687
  "access-blocked": "access-blocked";
6618
6688
  "rate-limited": "rate-limited";
6619
6689
  unreachable: "unreachable";
6690
+ unreadable: "unreadable";
6620
6691
  }>;
6621
6692
  status: z.ZodOptional<z.ZodNumber>;
6622
6693
  contentType: z.ZodOptional<z.ZodString>;
6623
6694
  servesHtml: z.ZodOptional<z.ZodBoolean>;
6624
6695
  error: z.ZodOptional<z.ZodString>;
6696
+ errorKind: z.ZodOptional<z.ZodEnum<{
6697
+ unknown: "unknown";
6698
+ timeout: "timeout";
6699
+ dns: "dns";
6700
+ tls: "tls";
6701
+ "redirect-limit": "redirect-limit";
6702
+ "redirect-loop": "redirect-loop";
6703
+ aborted: "aborted";
6704
+ "too-large": "too-large";
6705
+ }>>;
6625
6706
  sitemapUrls: z.ZodArray<z.ZodString>;
6626
6707
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
6627
6708
  botAccess: z.ZodArray<z.ZodObject<{
@@ -6645,11 +6726,22 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6645
6726
  "access-blocked": "access-blocked";
6646
6727
  "rate-limited": "rate-limited";
6647
6728
  unreachable: "unreachable";
6729
+ unreadable: "unreadable";
6648
6730
  }>>;
6649
6731
  status: z.ZodOptional<z.ZodNumber>;
6650
6732
  contentType: z.ZodOptional<z.ZodString>;
6651
6733
  servesHtml: z.ZodOptional<z.ZodBoolean>;
6652
6734
  error: z.ZodOptional<z.ZodString>;
6735
+ errorKind: z.ZodOptional<z.ZodEnum<{
6736
+ unknown: "unknown";
6737
+ timeout: "timeout";
6738
+ dns: "dns";
6739
+ tls: "tls";
6740
+ "redirect-limit": "redirect-limit";
6741
+ "redirect-loop": "redirect-loop";
6742
+ aborted: "aborted";
6743
+ "too-large": "too-large";
6744
+ }>>;
6653
6745
  links: z.ZodOptional<z.ZodObject<{
6654
6746
  found: z.ZodNumber;
6655
6747
  checked: z.ZodNumber;
@@ -6677,6 +6769,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6677
6769
  "access-blocked": "access-blocked";
6678
6770
  "rate-limited": "rate-limited";
6679
6771
  unreachable: "unreachable";
6772
+ unreadable: "unreadable";
6680
6773
  }>;
6681
6774
  status: z.ZodOptional<z.ZodNumber>;
6682
6775
  contentType: z.ZodOptional<z.ZodString>;
@@ -6887,6 +6980,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6887
6980
  "access-blocked": "access-blocked";
6888
6981
  "rate-limited": "rate-limited";
6889
6982
  unreachable: "unreachable";
6983
+ unreadable: "unreadable";
6890
6984
  }>;
6891
6985
  status: z.ZodOptional<z.ZodNumber>;
6892
6986
  error: z.ZodOptional<z.ZodString>;
@@ -6946,6 +7040,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6946
7040
  "access-blocked": "access-blocked";
6947
7041
  "rate-limited": "rate-limited";
6948
7042
  unreachable: "unreachable";
7043
+ unreadable: "unreadable";
6949
7044
  }>;
6950
7045
  status: z.ZodOptional<z.ZodNumber>;
6951
7046
  error: z.ZodOptional<z.ZodString>;
@@ -6970,6 +7065,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6970
7065
  "access-blocked": "access-blocked";
6971
7066
  "rate-limited": "rate-limited";
6972
7067
  unreachable: "unreachable";
7068
+ unreadable: "unreadable";
6973
7069
  }>;
6974
7070
  status: z.ZodOptional<z.ZodNumber>;
6975
7071
  error: z.ZodOptional<z.ZodString>;
@@ -6993,6 +7089,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6993
7089
  dns: "dns";
6994
7090
  tls: "tls";
6995
7091
  "redirect-limit": "redirect-limit";
7092
+ "redirect-loop": "redirect-loop";
6996
7093
  aborted: "aborted";
6997
7094
  }>;
6998
7095
  error: z.ZodString;
@@ -7264,6 +7361,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
7264
7361
  "access-blocked": "access-blocked";
7265
7362
  "rate-limited": "rate-limited";
7266
7363
  unreachable: "unreachable";
7364
+ unreadable: "unreadable";
7267
7365
  }>;
7268
7366
  status: z.ZodOptional<z.ZodNumber>;
7269
7367
  error: z.ZodOptional<z.ZodString>;
@@ -7481,6 +7579,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
7481
7579
  "access-blocked": "access-blocked";
7482
7580
  "rate-limited": "rate-limited";
7483
7581
  unreachable: "unreachable";
7582
+ unreadable: "unreadable";
7484
7583
  }>;
7485
7584
  status: z.ZodOptional<z.ZodNumber>;
7486
7585
  error: z.ZodOptional<z.ZodString>;
@@ -7935,11 +8034,22 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
7935
8034
  "access-blocked": "access-blocked";
7936
8035
  "rate-limited": "rate-limited";
7937
8036
  unreachable: "unreachable";
8037
+ unreadable: "unreadable";
7938
8038
  }>;
7939
8039
  status: z.ZodOptional<z.ZodNumber>;
7940
8040
  contentType: z.ZodOptional<z.ZodString>;
7941
8041
  servesHtml: z.ZodOptional<z.ZodBoolean>;
7942
8042
  error: z.ZodOptional<z.ZodString>;
8043
+ errorKind: z.ZodOptional<z.ZodEnum<{
8044
+ unknown: "unknown";
8045
+ timeout: "timeout";
8046
+ dns: "dns";
8047
+ tls: "tls";
8048
+ "redirect-limit": "redirect-limit";
8049
+ "redirect-loop": "redirect-loop";
8050
+ aborted: "aborted";
8051
+ "too-large": "too-large";
8052
+ }>>;
7943
8053
  sitemapUrls: z.ZodArray<z.ZodString>;
7944
8054
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
7945
8055
  botAccess: z.ZodArray<z.ZodObject<{
@@ -7963,11 +8073,22 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
7963
8073
  "access-blocked": "access-blocked";
7964
8074
  "rate-limited": "rate-limited";
7965
8075
  unreachable: "unreachable";
8076
+ unreadable: "unreadable";
7966
8077
  }>>;
7967
8078
  status: z.ZodOptional<z.ZodNumber>;
7968
8079
  contentType: z.ZodOptional<z.ZodString>;
7969
8080
  servesHtml: z.ZodOptional<z.ZodBoolean>;
7970
8081
  error: z.ZodOptional<z.ZodString>;
8082
+ errorKind: z.ZodOptional<z.ZodEnum<{
8083
+ unknown: "unknown";
8084
+ timeout: "timeout";
8085
+ dns: "dns";
8086
+ tls: "tls";
8087
+ "redirect-limit": "redirect-limit";
8088
+ "redirect-loop": "redirect-loop";
8089
+ aborted: "aborted";
8090
+ "too-large": "too-large";
8091
+ }>>;
7971
8092
  links: z.ZodOptional<z.ZodObject<{
7972
8093
  found: z.ZodNumber;
7973
8094
  checked: z.ZodNumber;
@@ -7995,6 +8116,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
7995
8116
  "access-blocked": "access-blocked";
7996
8117
  "rate-limited": "rate-limited";
7997
8118
  unreachable: "unreachable";
8119
+ unreadable: "unreadable";
7998
8120
  }>;
7999
8121
  status: z.ZodOptional<z.ZodNumber>;
8000
8122
  contentType: z.ZodOptional<z.ZodString>;
@@ -8205,6 +8327,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
8205
8327
  "access-blocked": "access-blocked";
8206
8328
  "rate-limited": "rate-limited";
8207
8329
  unreachable: "unreachable";
8330
+ unreadable: "unreadable";
8208
8331
  }>;
8209
8332
  status: z.ZodOptional<z.ZodNumber>;
8210
8333
  error: z.ZodOptional<z.ZodString>;
@@ -8264,6 +8387,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
8264
8387
  "access-blocked": "access-blocked";
8265
8388
  "rate-limited": "rate-limited";
8266
8389
  unreachable: "unreachable";
8390
+ unreadable: "unreadable";
8267
8391
  }>;
8268
8392
  status: z.ZodOptional<z.ZodNumber>;
8269
8393
  error: z.ZodOptional<z.ZodString>;
@@ -8288,6 +8412,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
8288
8412
  "access-blocked": "access-blocked";
8289
8413
  "rate-limited": "rate-limited";
8290
8414
  unreachable: "unreachable";
8415
+ unreadable: "unreadable";
8291
8416
  }>;
8292
8417
  status: z.ZodOptional<z.ZodNumber>;
8293
8418
  error: z.ZodOptional<z.ZodString>;
@@ -8311,6 +8436,7 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
8311
8436
  dns: "dns";
8312
8437
  tls: "tls";
8313
8438
  "redirect-limit": "redirect-limit";
8439
+ "redirect-loop": "redirect-loop";
8314
8440
  aborted: "aborted";
8315
8441
  }>;
8316
8442
  error: z.ZodString;
@@ -8584,6 +8710,7 @@ export declare const crawlerSchemas: {
8584
8710
  "access-blocked": "access-blocked";
8585
8711
  "rate-limited": "rate-limited";
8586
8712
  unreachable: "unreachable";
8713
+ unreadable: "unreadable";
8587
8714
  }>;
8588
8715
  status: z.ZodOptional<z.ZodNumber>;
8589
8716
  error: z.ZodOptional<z.ZodString>;
@@ -8801,6 +8928,7 @@ export declare const crawlerSchemas: {
8801
8928
  "access-blocked": "access-blocked";
8802
8929
  "rate-limited": "rate-limited";
8803
8930
  unreachable: "unreachable";
8931
+ unreadable: "unreadable";
8804
8932
  }>;
8805
8933
  status: z.ZodOptional<z.ZodNumber>;
8806
8934
  error: z.ZodOptional<z.ZodString>;
@@ -9255,11 +9383,22 @@ export declare const crawlerSchemas: {
9255
9383
  "access-blocked": "access-blocked";
9256
9384
  "rate-limited": "rate-limited";
9257
9385
  unreachable: "unreachable";
9386
+ unreadable: "unreadable";
9258
9387
  }>;
9259
9388
  status: z.ZodOptional<z.ZodNumber>;
9260
9389
  contentType: z.ZodOptional<z.ZodString>;
9261
9390
  servesHtml: z.ZodOptional<z.ZodBoolean>;
9262
9391
  error: z.ZodOptional<z.ZodString>;
9392
+ errorKind: z.ZodOptional<z.ZodEnum<{
9393
+ unknown: "unknown";
9394
+ timeout: "timeout";
9395
+ dns: "dns";
9396
+ tls: "tls";
9397
+ "redirect-limit": "redirect-limit";
9398
+ "redirect-loop": "redirect-loop";
9399
+ aborted: "aborted";
9400
+ "too-large": "too-large";
9401
+ }>>;
9263
9402
  sitemapUrls: z.ZodArray<z.ZodString>;
9264
9403
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
9265
9404
  botAccess: z.ZodArray<z.ZodObject<{
@@ -9283,11 +9422,22 @@ export declare const crawlerSchemas: {
9283
9422
  "access-blocked": "access-blocked";
9284
9423
  "rate-limited": "rate-limited";
9285
9424
  unreachable: "unreachable";
9425
+ unreadable: "unreadable";
9286
9426
  }>>;
9287
9427
  status: z.ZodOptional<z.ZodNumber>;
9288
9428
  contentType: z.ZodOptional<z.ZodString>;
9289
9429
  servesHtml: z.ZodOptional<z.ZodBoolean>;
9290
9430
  error: z.ZodOptional<z.ZodString>;
9431
+ errorKind: z.ZodOptional<z.ZodEnum<{
9432
+ unknown: "unknown";
9433
+ timeout: "timeout";
9434
+ dns: "dns";
9435
+ tls: "tls";
9436
+ "redirect-limit": "redirect-limit";
9437
+ "redirect-loop": "redirect-loop";
9438
+ aborted: "aborted";
9439
+ "too-large": "too-large";
9440
+ }>>;
9291
9441
  links: z.ZodOptional<z.ZodObject<{
9292
9442
  found: z.ZodNumber;
9293
9443
  checked: z.ZodNumber;
@@ -9315,6 +9465,7 @@ export declare const crawlerSchemas: {
9315
9465
  "access-blocked": "access-blocked";
9316
9466
  "rate-limited": "rate-limited";
9317
9467
  unreachable: "unreachable";
9468
+ unreadable: "unreadable";
9318
9469
  }>;
9319
9470
  status: z.ZodOptional<z.ZodNumber>;
9320
9471
  contentType: z.ZodOptional<z.ZodString>;
@@ -9525,6 +9676,7 @@ export declare const crawlerSchemas: {
9525
9676
  "access-blocked": "access-blocked";
9526
9677
  "rate-limited": "rate-limited";
9527
9678
  unreachable: "unreachable";
9679
+ unreadable: "unreadable";
9528
9680
  }>;
9529
9681
  status: z.ZodOptional<z.ZodNumber>;
9530
9682
  error: z.ZodOptional<z.ZodString>;
@@ -9584,6 +9736,7 @@ export declare const crawlerSchemas: {
9584
9736
  "access-blocked": "access-blocked";
9585
9737
  "rate-limited": "rate-limited";
9586
9738
  unreachable: "unreachable";
9739
+ unreadable: "unreadable";
9587
9740
  }>;
9588
9741
  status: z.ZodOptional<z.ZodNumber>;
9589
9742
  error: z.ZodOptional<z.ZodString>;
@@ -9608,6 +9761,7 @@ export declare const crawlerSchemas: {
9608
9761
  "access-blocked": "access-blocked";
9609
9762
  "rate-limited": "rate-limited";
9610
9763
  unreachable: "unreachable";
9764
+ unreadable: "unreadable";
9611
9765
  }>;
9612
9766
  status: z.ZodOptional<z.ZodNumber>;
9613
9767
  error: z.ZodOptional<z.ZodString>;
@@ -9631,6 +9785,7 @@ export declare const crawlerSchemas: {
9631
9785
  dns: "dns";
9632
9786
  tls: "tls";
9633
9787
  "redirect-limit": "redirect-limit";
9788
+ "redirect-loop": "redirect-loop";
9634
9789
  aborted: "aborted";
9635
9790
  }>;
9636
9791
  error: z.ZodString;
@@ -9902,6 +10057,7 @@ export declare const crawlerSchemas: {
9902
10057
  "access-blocked": "access-blocked";
9903
10058
  "rate-limited": "rate-limited";
9904
10059
  unreachable: "unreachable";
10060
+ unreadable: "unreadable";
9905
10061
  }>;
9906
10062
  status: z.ZodOptional<z.ZodNumber>;
9907
10063
  error: z.ZodOptional<z.ZodString>;
@@ -10119,6 +10275,7 @@ export declare const crawlerSchemas: {
10119
10275
  "access-blocked": "access-blocked";
10120
10276
  "rate-limited": "rate-limited";
10121
10277
  unreachable: "unreachable";
10278
+ unreadable: "unreadable";
10122
10279
  }>;
10123
10280
  status: z.ZodOptional<z.ZodNumber>;
10124
10281
  error: z.ZodOptional<z.ZodString>;
@@ -10573,11 +10730,22 @@ export declare const crawlerSchemas: {
10573
10730
  "access-blocked": "access-blocked";
10574
10731
  "rate-limited": "rate-limited";
10575
10732
  unreachable: "unreachable";
10733
+ unreadable: "unreadable";
10576
10734
  }>;
10577
10735
  status: z.ZodOptional<z.ZodNumber>;
10578
10736
  contentType: z.ZodOptional<z.ZodString>;
10579
10737
  servesHtml: z.ZodOptional<z.ZodBoolean>;
10580
10738
  error: z.ZodOptional<z.ZodString>;
10739
+ errorKind: z.ZodOptional<z.ZodEnum<{
10740
+ unknown: "unknown";
10741
+ timeout: "timeout";
10742
+ dns: "dns";
10743
+ tls: "tls";
10744
+ "redirect-limit": "redirect-limit";
10745
+ "redirect-loop": "redirect-loop";
10746
+ aborted: "aborted";
10747
+ "too-large": "too-large";
10748
+ }>>;
10581
10749
  sitemapUrls: z.ZodArray<z.ZodString>;
10582
10750
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
10583
10751
  botAccess: z.ZodArray<z.ZodObject<{
@@ -10601,11 +10769,22 @@ export declare const crawlerSchemas: {
10601
10769
  "access-blocked": "access-blocked";
10602
10770
  "rate-limited": "rate-limited";
10603
10771
  unreachable: "unreachable";
10772
+ unreadable: "unreadable";
10604
10773
  }>>;
10605
10774
  status: z.ZodOptional<z.ZodNumber>;
10606
10775
  contentType: z.ZodOptional<z.ZodString>;
10607
10776
  servesHtml: z.ZodOptional<z.ZodBoolean>;
10608
10777
  error: z.ZodOptional<z.ZodString>;
10778
+ errorKind: z.ZodOptional<z.ZodEnum<{
10779
+ unknown: "unknown";
10780
+ timeout: "timeout";
10781
+ dns: "dns";
10782
+ tls: "tls";
10783
+ "redirect-limit": "redirect-limit";
10784
+ "redirect-loop": "redirect-loop";
10785
+ aborted: "aborted";
10786
+ "too-large": "too-large";
10787
+ }>>;
10609
10788
  links: z.ZodOptional<z.ZodObject<{
10610
10789
  found: z.ZodNumber;
10611
10790
  checked: z.ZodNumber;
@@ -10633,6 +10812,7 @@ export declare const crawlerSchemas: {
10633
10812
  "access-blocked": "access-blocked";
10634
10813
  "rate-limited": "rate-limited";
10635
10814
  unreachable: "unreachable";
10815
+ unreadable: "unreadable";
10636
10816
  }>;
10637
10817
  status: z.ZodOptional<z.ZodNumber>;
10638
10818
  contentType: z.ZodOptional<z.ZodString>;
@@ -10843,6 +11023,7 @@ export declare const crawlerSchemas: {
10843
11023
  "access-blocked": "access-blocked";
10844
11024
  "rate-limited": "rate-limited";
10845
11025
  unreachable: "unreachable";
11026
+ unreadable: "unreadable";
10846
11027
  }>;
10847
11028
  status: z.ZodOptional<z.ZodNumber>;
10848
11029
  error: z.ZodOptional<z.ZodString>;
@@ -10902,6 +11083,7 @@ export declare const crawlerSchemas: {
10902
11083
  "access-blocked": "access-blocked";
10903
11084
  "rate-limited": "rate-limited";
10904
11085
  unreachable: "unreachable";
11086
+ unreadable: "unreadable";
10905
11087
  }>;
10906
11088
  status: z.ZodOptional<z.ZodNumber>;
10907
11089
  error: z.ZodOptional<z.ZodString>;
@@ -10926,6 +11108,7 @@ export declare const crawlerSchemas: {
10926
11108
  "access-blocked": "access-blocked";
10927
11109
  "rate-limited": "rate-limited";
10928
11110
  unreachable: "unreachable";
11111
+ unreadable: "unreadable";
10929
11112
  }>;
10930
11113
  status: z.ZodOptional<z.ZodNumber>;
10931
11114
  error: z.ZodOptional<z.ZodString>;
@@ -10949,6 +11132,7 @@ export declare const crawlerSchemas: {
10949
11132
  dns: "dns";
10950
11133
  tls: "tls";
10951
11134
  "redirect-limit": "redirect-limit";
11135
+ "redirect-loop": "redirect-loop";
10952
11136
  aborted: "aborted";
10953
11137
  }>;
10954
11138
  error: z.ZodString;
@@ -11220,6 +11404,7 @@ export declare const crawlerSchemas: {
11220
11404
  "access-blocked": "access-blocked";
11221
11405
  "rate-limited": "rate-limited";
11222
11406
  unreachable: "unreachable";
11407
+ unreadable: "unreadable";
11223
11408
  }>;
11224
11409
  status: z.ZodOptional<z.ZodNumber>;
11225
11410
  error: z.ZodOptional<z.ZodString>;
@@ -11437,6 +11622,7 @@ export declare const crawlerSchemas: {
11437
11622
  "access-blocked": "access-blocked";
11438
11623
  "rate-limited": "rate-limited";
11439
11624
  unreachable: "unreachable";
11625
+ unreadable: "unreadable";
11440
11626
  }>;
11441
11627
  status: z.ZodOptional<z.ZodNumber>;
11442
11628
  error: z.ZodOptional<z.ZodString>;
@@ -11891,11 +12077,22 @@ export declare const crawlerSchemas: {
11891
12077
  "access-blocked": "access-blocked";
11892
12078
  "rate-limited": "rate-limited";
11893
12079
  unreachable: "unreachable";
12080
+ unreadable: "unreadable";
11894
12081
  }>;
11895
12082
  status: z.ZodOptional<z.ZodNumber>;
11896
12083
  contentType: z.ZodOptional<z.ZodString>;
11897
12084
  servesHtml: z.ZodOptional<z.ZodBoolean>;
11898
12085
  error: z.ZodOptional<z.ZodString>;
12086
+ errorKind: z.ZodOptional<z.ZodEnum<{
12087
+ unknown: "unknown";
12088
+ timeout: "timeout";
12089
+ dns: "dns";
12090
+ tls: "tls";
12091
+ "redirect-limit": "redirect-limit";
12092
+ "redirect-loop": "redirect-loop";
12093
+ aborted: "aborted";
12094
+ "too-large": "too-large";
12095
+ }>>;
11899
12096
  sitemapUrls: z.ZodArray<z.ZodString>;
11900
12097
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
11901
12098
  botAccess: z.ZodArray<z.ZodObject<{
@@ -11919,11 +12116,22 @@ export declare const crawlerSchemas: {
11919
12116
  "access-blocked": "access-blocked";
11920
12117
  "rate-limited": "rate-limited";
11921
12118
  unreachable: "unreachable";
12119
+ unreadable: "unreadable";
11922
12120
  }>>;
11923
12121
  status: z.ZodOptional<z.ZodNumber>;
11924
12122
  contentType: z.ZodOptional<z.ZodString>;
11925
12123
  servesHtml: z.ZodOptional<z.ZodBoolean>;
11926
12124
  error: z.ZodOptional<z.ZodString>;
12125
+ errorKind: z.ZodOptional<z.ZodEnum<{
12126
+ unknown: "unknown";
12127
+ timeout: "timeout";
12128
+ dns: "dns";
12129
+ tls: "tls";
12130
+ "redirect-limit": "redirect-limit";
12131
+ "redirect-loop": "redirect-loop";
12132
+ aborted: "aborted";
12133
+ "too-large": "too-large";
12134
+ }>>;
11927
12135
  links: z.ZodOptional<z.ZodObject<{
11928
12136
  found: z.ZodNumber;
11929
12137
  checked: z.ZodNumber;
@@ -11951,6 +12159,7 @@ export declare const crawlerSchemas: {
11951
12159
  "access-blocked": "access-blocked";
11952
12160
  "rate-limited": "rate-limited";
11953
12161
  unreachable: "unreachable";
12162
+ unreadable: "unreadable";
11954
12163
  }>;
11955
12164
  status: z.ZodOptional<z.ZodNumber>;
11956
12165
  contentType: z.ZodOptional<z.ZodString>;
@@ -12161,6 +12370,7 @@ export declare const crawlerSchemas: {
12161
12370
  "access-blocked": "access-blocked";
12162
12371
  "rate-limited": "rate-limited";
12163
12372
  unreachable: "unreachable";
12373
+ unreadable: "unreadable";
12164
12374
  }>;
12165
12375
  status: z.ZodOptional<z.ZodNumber>;
12166
12376
  error: z.ZodOptional<z.ZodString>;
@@ -12220,6 +12430,7 @@ export declare const crawlerSchemas: {
12220
12430
  "access-blocked": "access-blocked";
12221
12431
  "rate-limited": "rate-limited";
12222
12432
  unreachable: "unreachable";
12433
+ unreadable: "unreadable";
12223
12434
  }>;
12224
12435
  status: z.ZodOptional<z.ZodNumber>;
12225
12436
  error: z.ZodOptional<z.ZodString>;
@@ -12244,6 +12455,7 @@ export declare const crawlerSchemas: {
12244
12455
  "access-blocked": "access-blocked";
12245
12456
  "rate-limited": "rate-limited";
12246
12457
  unreachable: "unreachable";
12458
+ unreadable: "unreadable";
12247
12459
  }>;
12248
12460
  status: z.ZodOptional<z.ZodNumber>;
12249
12461
  error: z.ZodOptional<z.ZodString>;
@@ -12267,6 +12479,7 @@ export declare const crawlerSchemas: {
12267
12479
  dns: "dns";
12268
12480
  tls: "tls";
12269
12481
  "redirect-limit": "redirect-limit";
12482
+ "redirect-loop": "redirect-loop";
12270
12483
  aborted: "aborted";
12271
12484
  }>;
12272
12485
  error: z.ZodString;
@@ -12451,6 +12664,7 @@ export declare const crawlerSchemas: {
12451
12664
  "access-blocked": "access-blocked";
12452
12665
  "rate-limited": "rate-limited";
12453
12666
  unreachable: "unreachable";
12667
+ unreadable: "unreadable";
12454
12668
  }>;
12455
12669
  status: z.ZodOptional<z.ZodNumber>;
12456
12670
  error: z.ZodOptional<z.ZodString>;
@@ -12510,6 +12724,7 @@ export declare const crawlerSchemas: {
12510
12724
  "access-blocked": "access-blocked";
12511
12725
  "rate-limited": "rate-limited";
12512
12726
  unreachable: "unreachable";
12727
+ unreadable: "unreadable";
12513
12728
  }>;
12514
12729
  status: z.ZodOptional<z.ZodNumber>;
12515
12730
  error: z.ZodOptional<z.ZodString>;
@@ -12534,6 +12749,7 @@ export declare const crawlerSchemas: {
12534
12749
  "access-blocked": "access-blocked";
12535
12750
  "rate-limited": "rate-limited";
12536
12751
  unreachable: "unreachable";
12752
+ unreadable: "unreadable";
12537
12753
  }>;
12538
12754
  status: z.ZodOptional<z.ZodNumber>;
12539
12755
  error: z.ZodOptional<z.ZodString>;
@@ -12557,6 +12773,7 @@ export declare const crawlerSchemas: {
12557
12773
  dns: "dns";
12558
12774
  tls: "tls";
12559
12775
  "redirect-limit": "redirect-limit";
12776
+ "redirect-loop": "redirect-loop";
12560
12777
  aborted: "aborted";
12561
12778
  }>;
12562
12779
  error: z.ZodString;
@@ -12660,6 +12877,7 @@ export declare const crawlerSchemas: {
12660
12877
  "access-blocked": "access-blocked";
12661
12878
  "rate-limited": "rate-limited";
12662
12879
  unreachable: "unreachable";
12880
+ unreadable: "unreadable";
12663
12881
  }>;
12664
12882
  status: z.ZodOptional<z.ZodNumber>;
12665
12883
  error: z.ZodOptional<z.ZodString>;
@@ -12877,6 +13095,7 @@ export declare const crawlerSchemas: {
12877
13095
  "access-blocked": "access-blocked";
12878
13096
  "rate-limited": "rate-limited";
12879
13097
  unreachable: "unreachable";
13098
+ unreadable: "unreadable";
12880
13099
  }>;
12881
13100
  status: z.ZodOptional<z.ZodNumber>;
12882
13101
  error: z.ZodOptional<z.ZodString>;
@@ -13467,6 +13686,7 @@ export declare const crawlerJsonSchemas: {
13467
13686
  "access-blocked": "access-blocked";
13468
13687
  "rate-limited": "rate-limited";
13469
13688
  unreachable: "unreachable";
13689
+ unreadable: "unreadable";
13470
13690
  }>;
13471
13691
  status: z.ZodOptional<z.ZodNumber>;
13472
13692
  error: z.ZodOptional<z.ZodString>;
@@ -13684,6 +13904,7 @@ export declare const crawlerJsonSchemas: {
13684
13904
  "access-blocked": "access-blocked";
13685
13905
  "rate-limited": "rate-limited";
13686
13906
  unreachable: "unreachable";
13907
+ unreadable: "unreadable";
13687
13908
  }>;
13688
13909
  status: z.ZodOptional<z.ZodNumber>;
13689
13910
  error: z.ZodOptional<z.ZodString>;
@@ -14138,11 +14359,22 @@ export declare const crawlerJsonSchemas: {
14138
14359
  "access-blocked": "access-blocked";
14139
14360
  "rate-limited": "rate-limited";
14140
14361
  unreachable: "unreachable";
14362
+ unreadable: "unreadable";
14141
14363
  }>;
14142
14364
  status: z.ZodOptional<z.ZodNumber>;
14143
14365
  contentType: z.ZodOptional<z.ZodString>;
14144
14366
  servesHtml: z.ZodOptional<z.ZodBoolean>;
14145
14367
  error: z.ZodOptional<z.ZodString>;
14368
+ errorKind: z.ZodOptional<z.ZodEnum<{
14369
+ unknown: "unknown";
14370
+ timeout: "timeout";
14371
+ dns: "dns";
14372
+ tls: "tls";
14373
+ "redirect-limit": "redirect-limit";
14374
+ "redirect-loop": "redirect-loop";
14375
+ aborted: "aborted";
14376
+ "too-large": "too-large";
14377
+ }>>;
14146
14378
  sitemapUrls: z.ZodArray<z.ZodString>;
14147
14379
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
14148
14380
  botAccess: z.ZodArray<z.ZodObject<{
@@ -14166,11 +14398,22 @@ export declare const crawlerJsonSchemas: {
14166
14398
  "access-blocked": "access-blocked";
14167
14399
  "rate-limited": "rate-limited";
14168
14400
  unreachable: "unreachable";
14401
+ unreadable: "unreadable";
14169
14402
  }>>;
14170
14403
  status: z.ZodOptional<z.ZodNumber>;
14171
14404
  contentType: z.ZodOptional<z.ZodString>;
14172
14405
  servesHtml: z.ZodOptional<z.ZodBoolean>;
14173
14406
  error: z.ZodOptional<z.ZodString>;
14407
+ errorKind: z.ZodOptional<z.ZodEnum<{
14408
+ unknown: "unknown";
14409
+ timeout: "timeout";
14410
+ dns: "dns";
14411
+ tls: "tls";
14412
+ "redirect-limit": "redirect-limit";
14413
+ "redirect-loop": "redirect-loop";
14414
+ aborted: "aborted";
14415
+ "too-large": "too-large";
14416
+ }>>;
14174
14417
  links: z.ZodOptional<z.ZodObject<{
14175
14418
  found: z.ZodNumber;
14176
14419
  checked: z.ZodNumber;
@@ -14198,6 +14441,7 @@ export declare const crawlerJsonSchemas: {
14198
14441
  "access-blocked": "access-blocked";
14199
14442
  "rate-limited": "rate-limited";
14200
14443
  unreachable: "unreachable";
14444
+ unreadable: "unreadable";
14201
14445
  }>;
14202
14446
  status: z.ZodOptional<z.ZodNumber>;
14203
14447
  contentType: z.ZodOptional<z.ZodString>;
@@ -14408,6 +14652,7 @@ export declare const crawlerJsonSchemas: {
14408
14652
  "access-blocked": "access-blocked";
14409
14653
  "rate-limited": "rate-limited";
14410
14654
  unreachable: "unreachable";
14655
+ unreadable: "unreadable";
14411
14656
  }>;
14412
14657
  status: z.ZodOptional<z.ZodNumber>;
14413
14658
  error: z.ZodOptional<z.ZodString>;
@@ -14467,6 +14712,7 @@ export declare const crawlerJsonSchemas: {
14467
14712
  "access-blocked": "access-blocked";
14468
14713
  "rate-limited": "rate-limited";
14469
14714
  unreachable: "unreachable";
14715
+ unreadable: "unreadable";
14470
14716
  }>;
14471
14717
  status: z.ZodOptional<z.ZodNumber>;
14472
14718
  error: z.ZodOptional<z.ZodString>;
@@ -14491,6 +14737,7 @@ export declare const crawlerJsonSchemas: {
14491
14737
  "access-blocked": "access-blocked";
14492
14738
  "rate-limited": "rate-limited";
14493
14739
  unreachable: "unreachable";
14740
+ unreadable: "unreadable";
14494
14741
  }>;
14495
14742
  status: z.ZodOptional<z.ZodNumber>;
14496
14743
  error: z.ZodOptional<z.ZodString>;
@@ -14514,6 +14761,7 @@ export declare const crawlerJsonSchemas: {
14514
14761
  dns: "dns";
14515
14762
  tls: "tls";
14516
14763
  "redirect-limit": "redirect-limit";
14764
+ "redirect-loop": "redirect-loop";
14517
14765
  aborted: "aborted";
14518
14766
  }>;
14519
14767
  error: z.ZodString;
@@ -14785,6 +15033,7 @@ export declare const crawlerJsonSchemas: {
14785
15033
  "access-blocked": "access-blocked";
14786
15034
  "rate-limited": "rate-limited";
14787
15035
  unreachable: "unreachable";
15036
+ unreadable: "unreadable";
14788
15037
  }>;
14789
15038
  status: z.ZodOptional<z.ZodNumber>;
14790
15039
  error: z.ZodOptional<z.ZodString>;
@@ -15002,6 +15251,7 @@ export declare const crawlerJsonSchemas: {
15002
15251
  "access-blocked": "access-blocked";
15003
15252
  "rate-limited": "rate-limited";
15004
15253
  unreachable: "unreachable";
15254
+ unreadable: "unreadable";
15005
15255
  }>;
15006
15256
  status: z.ZodOptional<z.ZodNumber>;
15007
15257
  error: z.ZodOptional<z.ZodString>;
@@ -15456,11 +15706,22 @@ export declare const crawlerJsonSchemas: {
15456
15706
  "access-blocked": "access-blocked";
15457
15707
  "rate-limited": "rate-limited";
15458
15708
  unreachable: "unreachable";
15709
+ unreadable: "unreadable";
15459
15710
  }>;
15460
15711
  status: z.ZodOptional<z.ZodNumber>;
15461
15712
  contentType: z.ZodOptional<z.ZodString>;
15462
15713
  servesHtml: z.ZodOptional<z.ZodBoolean>;
15463
15714
  error: z.ZodOptional<z.ZodString>;
15715
+ errorKind: z.ZodOptional<z.ZodEnum<{
15716
+ unknown: "unknown";
15717
+ timeout: "timeout";
15718
+ dns: "dns";
15719
+ tls: "tls";
15720
+ "redirect-limit": "redirect-limit";
15721
+ "redirect-loop": "redirect-loop";
15722
+ aborted: "aborted";
15723
+ "too-large": "too-large";
15724
+ }>>;
15464
15725
  sitemapUrls: z.ZodArray<z.ZodString>;
15465
15726
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
15466
15727
  botAccess: z.ZodArray<z.ZodObject<{
@@ -15484,11 +15745,22 @@ export declare const crawlerJsonSchemas: {
15484
15745
  "access-blocked": "access-blocked";
15485
15746
  "rate-limited": "rate-limited";
15486
15747
  unreachable: "unreachable";
15748
+ unreadable: "unreadable";
15487
15749
  }>>;
15488
15750
  status: z.ZodOptional<z.ZodNumber>;
15489
15751
  contentType: z.ZodOptional<z.ZodString>;
15490
15752
  servesHtml: z.ZodOptional<z.ZodBoolean>;
15491
15753
  error: z.ZodOptional<z.ZodString>;
15754
+ errorKind: z.ZodOptional<z.ZodEnum<{
15755
+ unknown: "unknown";
15756
+ timeout: "timeout";
15757
+ dns: "dns";
15758
+ tls: "tls";
15759
+ "redirect-limit": "redirect-limit";
15760
+ "redirect-loop": "redirect-loop";
15761
+ aborted: "aborted";
15762
+ "too-large": "too-large";
15763
+ }>>;
15492
15764
  links: z.ZodOptional<z.ZodObject<{
15493
15765
  found: z.ZodNumber;
15494
15766
  checked: z.ZodNumber;
@@ -15516,6 +15788,7 @@ export declare const crawlerJsonSchemas: {
15516
15788
  "access-blocked": "access-blocked";
15517
15789
  "rate-limited": "rate-limited";
15518
15790
  unreachable: "unreachable";
15791
+ unreadable: "unreadable";
15519
15792
  }>;
15520
15793
  status: z.ZodOptional<z.ZodNumber>;
15521
15794
  contentType: z.ZodOptional<z.ZodString>;
@@ -15726,6 +15999,7 @@ export declare const crawlerJsonSchemas: {
15726
15999
  "access-blocked": "access-blocked";
15727
16000
  "rate-limited": "rate-limited";
15728
16001
  unreachable: "unreachable";
16002
+ unreadable: "unreadable";
15729
16003
  }>;
15730
16004
  status: z.ZodOptional<z.ZodNumber>;
15731
16005
  error: z.ZodOptional<z.ZodString>;
@@ -15785,6 +16059,7 @@ export declare const crawlerJsonSchemas: {
15785
16059
  "access-blocked": "access-blocked";
15786
16060
  "rate-limited": "rate-limited";
15787
16061
  unreachable: "unreachable";
16062
+ unreadable: "unreadable";
15788
16063
  }>;
15789
16064
  status: z.ZodOptional<z.ZodNumber>;
15790
16065
  error: z.ZodOptional<z.ZodString>;
@@ -15809,6 +16084,7 @@ export declare const crawlerJsonSchemas: {
15809
16084
  "access-blocked": "access-blocked";
15810
16085
  "rate-limited": "rate-limited";
15811
16086
  unreachable: "unreachable";
16087
+ unreadable: "unreadable";
15812
16088
  }>;
15813
16089
  status: z.ZodOptional<z.ZodNumber>;
15814
16090
  error: z.ZodOptional<z.ZodString>;
@@ -15832,6 +16108,7 @@ export declare const crawlerJsonSchemas: {
15832
16108
  dns: "dns";
15833
16109
  tls: "tls";
15834
16110
  "redirect-limit": "redirect-limit";
16111
+ "redirect-loop": "redirect-loop";
15835
16112
  aborted: "aborted";
15836
16113
  }>;
15837
16114
  error: z.ZodString;
@@ -16103,6 +16380,7 @@ export declare const crawlerJsonSchemas: {
16103
16380
  "access-blocked": "access-blocked";
16104
16381
  "rate-limited": "rate-limited";
16105
16382
  unreachable: "unreachable";
16383
+ unreadable: "unreadable";
16106
16384
  }>;
16107
16385
  status: z.ZodOptional<z.ZodNumber>;
16108
16386
  error: z.ZodOptional<z.ZodString>;
@@ -16320,6 +16598,7 @@ export declare const crawlerJsonSchemas: {
16320
16598
  "access-blocked": "access-blocked";
16321
16599
  "rate-limited": "rate-limited";
16322
16600
  unreachable: "unreachable";
16601
+ unreadable: "unreadable";
16323
16602
  }>;
16324
16603
  status: z.ZodOptional<z.ZodNumber>;
16325
16604
  error: z.ZodOptional<z.ZodString>;
@@ -16774,11 +17053,22 @@ export declare const crawlerJsonSchemas: {
16774
17053
  "access-blocked": "access-blocked";
16775
17054
  "rate-limited": "rate-limited";
16776
17055
  unreachable: "unreachable";
17056
+ unreadable: "unreadable";
16777
17057
  }>;
16778
17058
  status: z.ZodOptional<z.ZodNumber>;
16779
17059
  contentType: z.ZodOptional<z.ZodString>;
16780
17060
  servesHtml: z.ZodOptional<z.ZodBoolean>;
16781
17061
  error: z.ZodOptional<z.ZodString>;
17062
+ errorKind: z.ZodOptional<z.ZodEnum<{
17063
+ unknown: "unknown";
17064
+ timeout: "timeout";
17065
+ dns: "dns";
17066
+ tls: "tls";
17067
+ "redirect-limit": "redirect-limit";
17068
+ "redirect-loop": "redirect-loop";
17069
+ aborted: "aborted";
17070
+ "too-large": "too-large";
17071
+ }>>;
16782
17072
  sitemapUrls: z.ZodArray<z.ZodString>;
16783
17073
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
16784
17074
  botAccess: z.ZodArray<z.ZodObject<{
@@ -16802,11 +17092,22 @@ export declare const crawlerJsonSchemas: {
16802
17092
  "access-blocked": "access-blocked";
16803
17093
  "rate-limited": "rate-limited";
16804
17094
  unreachable: "unreachable";
17095
+ unreadable: "unreadable";
16805
17096
  }>>;
16806
17097
  status: z.ZodOptional<z.ZodNumber>;
16807
17098
  contentType: z.ZodOptional<z.ZodString>;
16808
17099
  servesHtml: z.ZodOptional<z.ZodBoolean>;
16809
17100
  error: z.ZodOptional<z.ZodString>;
17101
+ errorKind: z.ZodOptional<z.ZodEnum<{
17102
+ unknown: "unknown";
17103
+ timeout: "timeout";
17104
+ dns: "dns";
17105
+ tls: "tls";
17106
+ "redirect-limit": "redirect-limit";
17107
+ "redirect-loop": "redirect-loop";
17108
+ aborted: "aborted";
17109
+ "too-large": "too-large";
17110
+ }>>;
16810
17111
  links: z.ZodOptional<z.ZodObject<{
16811
17112
  found: z.ZodNumber;
16812
17113
  checked: z.ZodNumber;
@@ -16834,6 +17135,7 @@ export declare const crawlerJsonSchemas: {
16834
17135
  "access-blocked": "access-blocked";
16835
17136
  "rate-limited": "rate-limited";
16836
17137
  unreachable: "unreachable";
17138
+ unreadable: "unreadable";
16837
17139
  }>;
16838
17140
  status: z.ZodOptional<z.ZodNumber>;
16839
17141
  contentType: z.ZodOptional<z.ZodString>;
@@ -17044,6 +17346,7 @@ export declare const crawlerJsonSchemas: {
17044
17346
  "access-blocked": "access-blocked";
17045
17347
  "rate-limited": "rate-limited";
17046
17348
  unreachable: "unreachable";
17349
+ unreadable: "unreadable";
17047
17350
  }>;
17048
17351
  status: z.ZodOptional<z.ZodNumber>;
17049
17352
  error: z.ZodOptional<z.ZodString>;
@@ -17103,6 +17406,7 @@ export declare const crawlerJsonSchemas: {
17103
17406
  "access-blocked": "access-blocked";
17104
17407
  "rate-limited": "rate-limited";
17105
17408
  unreachable: "unreachable";
17409
+ unreadable: "unreadable";
17106
17410
  }>;
17107
17411
  status: z.ZodOptional<z.ZodNumber>;
17108
17412
  error: z.ZodOptional<z.ZodString>;
@@ -17127,6 +17431,7 @@ export declare const crawlerJsonSchemas: {
17127
17431
  "access-blocked": "access-blocked";
17128
17432
  "rate-limited": "rate-limited";
17129
17433
  unreachable: "unreachable";
17434
+ unreadable: "unreadable";
17130
17435
  }>;
17131
17436
  status: z.ZodOptional<z.ZodNumber>;
17132
17437
  error: z.ZodOptional<z.ZodString>;
@@ -17150,6 +17455,7 @@ export declare const crawlerJsonSchemas: {
17150
17455
  dns: "dns";
17151
17456
  tls: "tls";
17152
17457
  "redirect-limit": "redirect-limit";
17458
+ "redirect-loop": "redirect-loop";
17153
17459
  aborted: "aborted";
17154
17460
  }>;
17155
17461
  error: z.ZodString;
@@ -17334,6 +17640,7 @@ export declare const crawlerJsonSchemas: {
17334
17640
  "access-blocked": "access-blocked";
17335
17641
  "rate-limited": "rate-limited";
17336
17642
  unreachable: "unreachable";
17643
+ unreadable: "unreadable";
17337
17644
  }>;
17338
17645
  status: z.ZodOptional<z.ZodNumber>;
17339
17646
  error: z.ZodOptional<z.ZodString>;
@@ -17393,6 +17700,7 @@ export declare const crawlerJsonSchemas: {
17393
17700
  "access-blocked": "access-blocked";
17394
17701
  "rate-limited": "rate-limited";
17395
17702
  unreachable: "unreachable";
17703
+ unreadable: "unreadable";
17396
17704
  }>;
17397
17705
  status: z.ZodOptional<z.ZodNumber>;
17398
17706
  error: z.ZodOptional<z.ZodString>;
@@ -17417,6 +17725,7 @@ export declare const crawlerJsonSchemas: {
17417
17725
  "access-blocked": "access-blocked";
17418
17726
  "rate-limited": "rate-limited";
17419
17727
  unreachable: "unreachable";
17728
+ unreadable: "unreadable";
17420
17729
  }>;
17421
17730
  status: z.ZodOptional<z.ZodNumber>;
17422
17731
  error: z.ZodOptional<z.ZodString>;
@@ -17440,6 +17749,7 @@ export declare const crawlerJsonSchemas: {
17440
17749
  dns: "dns";
17441
17750
  tls: "tls";
17442
17751
  "redirect-limit": "redirect-limit";
17752
+ "redirect-loop": "redirect-loop";
17443
17753
  aborted: "aborted";
17444
17754
  }>;
17445
17755
  error: z.ZodString;
@@ -17543,6 +17853,7 @@ export declare const crawlerJsonSchemas: {
17543
17853
  "access-blocked": "access-blocked";
17544
17854
  "rate-limited": "rate-limited";
17545
17855
  unreachable: "unreachable";
17856
+ unreadable: "unreadable";
17546
17857
  }>;
17547
17858
  status: z.ZodOptional<z.ZodNumber>;
17548
17859
  error: z.ZodOptional<z.ZodString>;
@@ -17760,6 +18071,7 @@ export declare const crawlerJsonSchemas: {
17760
18071
  "access-blocked": "access-blocked";
17761
18072
  "rate-limited": "rate-limited";
17762
18073
  unreachable: "unreachable";
18074
+ unreadable: "unreadable";
17763
18075
  }>;
17764
18076
  status: z.ZodOptional<z.ZodNumber>;
17765
18077
  error: z.ZodOptional<z.ZodString>;
@@ -18222,9 +18534,9 @@ export type ProviderId = z.infer<typeof providerIdSchema>;
18222
18534
  export type ExternalServiceId = string;
18223
18535
  export declare const providerCapabilitySchema: z.ZodEnum<{
18224
18536
  "local-search": "local-search";
18537
+ "serp-snapshot": "serp-snapshot";
18225
18538
  "keyword-metrics": "keyword-metrics";
18226
18539
  "keyword-discovery": "keyword-discovery";
18227
- "serp-snapshot": "serp-snapshot";
18228
18540
  "domain-overview": "domain-overview";
18229
18541
  "ranked-keywords": "ranked-keywords";
18230
18542
  "relevant-pages": "relevant-pages";
@@ -18392,6 +18704,103 @@ type ResolvedCrawlSiteDependencies = {
18392
18704
  };
18393
18705
  type CrawlSiteDependencies = Partial<ResolvedCrawlSiteDependencies>;
18394
18706
  export declare function crawlSite(input: CrawlConfigInput, dependencies?: CrawlSiteDependencies): Promise<CrawlReport>;
18707
+ export declare const SITE_FACTS_MAX_SITES = 1000;
18708
+ export declare const SITE_FACTS_DEFAULT_CONCURRENCY = 8;
18709
+ export declare const SITE_FACTS_MAX_CONCURRENCY = 16;
18710
+ export declare const SITE_FACTS_TIMEOUT_MS = 5000;
18711
+ export type SiteHomepageFacts = {
18712
+ url: string;
18713
+ outcome: 'response' | 'failed' | 'skipped';
18714
+ skipReason?: 'robots-disallowed' | 'robots-unknown';
18715
+ availability?: CrawlAiAvailability;
18716
+ status?: number;
18717
+ finalUrl?: string;
18718
+ redirects?: NonNullable<PageFetchResult['diagnostics']['redirectChain']>;
18719
+ contentType?: string;
18720
+ accessBlock?: {
18721
+ provider: string;
18722
+ kind: string;
18723
+ };
18724
+ responseTimeMs?: number;
18725
+ sizeBytes?: number;
18726
+ title?: string;
18727
+ metaDescription?: string;
18728
+ h1?: string;
18729
+ lang?: string;
18730
+ canonical?: string;
18731
+ metaRobots?: string;
18732
+ xRobotsTag?: string;
18733
+ indexable?: boolean;
18734
+ indexability?: string;
18735
+ markdownAlternates?: string[];
18736
+ contentSignal?: string;
18737
+ linkRelations?: string[];
18738
+ error?: string;
18739
+ errorKind?: CrawlFetchErrorKind;
18740
+ };
18741
+ export type SiteRobotsFacts = Omit<NonNullable<CrawlAiSignals['robotsTxt']>, 'sitemapUrls'> & {
18742
+ sitemapUrls: string[];
18743
+ sitemapCount: number;
18744
+ homepageAllowed: boolean | null;
18745
+ };
18746
+ export type SiteLlmsFacts = NonNullable<CrawlAiSignals['llmsTxt']> & {
18747
+ sizeBytes?: number;
18748
+ startsWithH1?: boolean;
18749
+ h1?: string;
18750
+ sameSiteLinks?: number;
18751
+ };
18752
+ export type SiteFactsRow = {
18753
+ type: 'site';
18754
+ input: string;
18755
+ origin?: string;
18756
+ error?: string;
18757
+ checkedAt?: string;
18758
+ robotsTxt?: SiteRobotsFacts;
18759
+ homepage?: SiteHomepageFacts;
18760
+ llmsTxt?: SiteLlmsFacts;
18761
+ };
18762
+ type AvailabilityCounts = Record<CrawlAiAvailability, number> & {
18763
+ failed: number;
18764
+ };
18765
+ export type SiteFactsSummary = {
18766
+ type: 'summary';
18767
+ status: 'complete' | 'cancelled';
18768
+ sites: number;
18769
+ checked: number;
18770
+ invalid: number;
18771
+ duplicatesRemoved: number;
18772
+ maxSites: number;
18773
+ concurrency: number;
18774
+ timeoutMs: number;
18775
+ durationMs: number;
18776
+ robotsTxt: AvailabilityCounts;
18777
+ homepage: AvailabilityCounts & {
18778
+ skipped: number;
18779
+ };
18780
+ llmsTxt: AvailabilityCounts & {
18781
+ startsWithH1: number;
18782
+ };
18783
+ botAccess: Array<{
18784
+ userAgent: string;
18785
+ purpose: CrawlAiBotAccess['purpose'];
18786
+ allowed: number;
18787
+ blocked: number;
18788
+ unknown: number;
18789
+ }>;
18790
+ };
18791
+ type Fetch = typeof publicHttpFetch;
18792
+ export type SiteFactsInput = {
18793
+ sites: string[];
18794
+ concurrency?: number;
18795
+ respectRobots?: boolean;
18796
+ signal?: AbortSignal;
18797
+ onRow: (row: SiteFactsRow) => Promise<void> | void;
18798
+ };
18799
+ export type SiteFactsDependencies = {
18800
+ fetch?: Fetch;
18801
+ now?: () => Date;
18802
+ };
18803
+ export declare function checkSites(input: SiteFactsInput, dependencies?: SiteFactsDependencies): Promise<SiteFactsSummary>;
18395
18804
  type QueryFlag = 'likely-automated' | 'navigational-other';
18396
18805
  declare const QUERY_FLAG_METHOD: {
18397
18806
  readonly id: "query_flags_v1";
@@ -20606,6 +21015,7 @@ export type IndexCoverageReportDependencies = {
20606
21015
  now: () => Date;
20607
21016
  };
20608
21017
  export declare function indexCoverageSignals(input: IndexCoverageReportInput, dependencies?: IndexCoverageReportDependencies): Promise<IndexCoverageReport>;
21018
+ type RedirectOutcome = 'done' | 'loop' | 'too_many' | 'timeout' | 'error';
20609
21019
  export type RedirectTraceStep = {
20610
21020
  url: string;
20611
21021
  status: number;
@@ -20620,7 +21030,9 @@ export type RedirectTraceReport = {
20620
21030
  generatedAt: string;
20621
21031
  summary: {
20622
21032
  hops: number;
20623
- finalStatus: number;
21033
+ finalStatus: number | null;
21034
+ outcome: RedirectOutcome;
21035
+ error?: string;
20624
21036
  finalIndexable?: boolean;
20625
21037
  issues: RedirectTraceIssue[];
20626
21038
  };
@@ -21535,6 +21947,7 @@ type PageFacts = {
21535
21947
  h1: string | null;
21536
21948
  canonical: string | null;
21537
21949
  robots: string | null;
21950
+ google_noindex: boolean | null;
21538
21951
  www_authenticate?: string;
21539
21952
  error?: string;
21540
21953
  };
@@ -21555,7 +21968,7 @@ type CommandDeps = {
21555
21968
  searchAnalytics: SearchAnalyticsQuery;
21556
21969
  checkPages: (urls: string[]) => Promise<PageFacts[]>;
21557
21970
  liveCheck: (url: string) => Promise<LiveCheck>;
21558
- inspect: (site: string, url: string) => Promise<IndexStatus>;
21971
+ inspect: (site: string, url: string, signal?: AbortSignal) => Promise<IndexStatus>;
21559
21972
  inspectionQuota?: (site: string) => Promise<{
21560
21973
  used: number;
21561
21974
  limit: number;
@@ -21567,7 +21980,7 @@ type CommandDeps = {
21567
21980
  }>;
21568
21981
  save: (site: string, url: string, status: IndexStatus) => void;
21569
21982
  };
21570
- pageMarkdown?: (url: string) => Promise<PageMarkdown>;
21983
+ pageMarkdown?: (url: string, limit?: number) => Promise<PageMarkdown>;
21571
21984
  call: Caller;
21572
21985
  bing?: () => Promise<BingCall | null>;
21573
21986
  bingConnect?: string;
@@ -21576,6 +21989,7 @@ type CommandDeps = {
21576
21989
  week?: () => Promise<WeekData | null>;
21577
21990
  startAudit?: (site: string) => Promise<StartAudit>;
21578
21991
  issues?: IssueStore;
21992
+ progress?: ProgressReporter;
21579
21993
  now?: () => Date;
21580
21994
  };
21581
21995
  type StartAudit = {
@@ -21755,13 +22169,45 @@ export declare function pendingCloudLogin(): Pending | null;
21755
22169
  export declare function finishCloudLogin(): Promise<'linked' | 'pending' | 'expired'>;
21756
22170
  export declare function cloudLogout(): Promise<boolean>;
21757
22171
  export declare function openCloudLink(url: string): Promise<void>;
22172
+ export type RobotsDirective = 'noindex' | 'nofollow' | 'nosnippet';
22173
+ export type SnippetControlEvidence = {
22174
+ source: 'meta-robots' | 'x-robots-tag';
22175
+ directive: 'nosnippet' | 'max-snippet';
22176
+ raw: string;
22177
+ value?: number;
22178
+ };
22179
+ export type EffectiveSnippetControl = {
22180
+ status: 'not-restricted' | 'limited' | 'blocked';
22181
+ reason: 'no-restrictive-directive' | 'max-snippet-limit' | 'max-snippet-zero' | 'nosnippet';
22182
+ maxCharacters?: number;
22183
+ evidence: SnippetControlEvidence[];
22184
+ };
22185
+ export declare function combineRobotsValues(value: Array<string | undefined>): string | undefined;
22186
+ export declare function metaRobotsDirectives(value?: string | string[]): Set<RobotsDirective>;
22187
+ export declare function xRobotsDirectives(value?: string | string[], userAgent?: string): Set<RobotsDirective>;
22188
+ export declare function hasMetaRobotsDirective(value: string | string[] | undefined, directive: RobotsDirective): boolean;
22189
+ export declare function hasXRobotsDirective(value: string | string[] | undefined, directive: RobotsDirective): boolean;
22190
+ export declare function effectiveRobotsDirectives(input: {
22191
+ metaRobots?: string | string[];
22192
+ xRobotsTag?: string | string[];
22193
+ }): Set<RobotsDirective>;
22194
+ export declare function effectiveSnippetControl(input: {
22195
+ metaRobots?: string | string[];
22196
+ xRobotsTag?: string | string[];
22197
+ }): EffectiveSnippetControl;
21758
22198
  type LintSource = {
21759
22199
  path: string;
21760
22200
  text: string;
22201
+ note?: string;
22202
+ partial?: string;
21761
22203
  } | {
21762
22204
  path: string;
21763
22205
  skipped: string;
21764
22206
  };
22207
+ type ResearchStore = {
22208
+ get(key: string): Promise<string | null>;
22209
+ put(key: string, value: string, ttlSeconds: number): Promise<void>;
22210
+ };
21765
22211
  export type TokenStorageMode = 'keychain' | 'file';
21766
22212
  export type TokenStorageStatus = {
21767
22213
  configured: TokenStorageMode;
@@ -21872,6 +22318,7 @@ export declare function nodeCommandDeps(options: {
21872
22318
  account?: string;
21873
22319
  refresh?: boolean;
21874
22320
  }): CommandDeps;
22321
+ export declare function localResearchStore(refresh?: boolean): ResearchStore;
21875
22322
  export declare const LOCAL_BING_CONNECT = "Connect Bing on your seoskill.dev account and run `seo login`, or run `seo providers bing connect` with an API key from Bing Webmaster Tools (Settings, API access).";
21876
22323
  export declare function localBing(): Promise<BingCall | null>;
21877
22324
  export declare function localAccounts(): Promise<GoogleAccount[]>;
@@ -22404,32 +22851,6 @@ export declare class ProviderError extends Error {
22404
22851
  });
22405
22852
  toJSON(): Record<string, unknown>;
22406
22853
  }
22407
- export type RobotsDirective = 'noindex' | 'nofollow' | 'nosnippet';
22408
- export type SnippetControlEvidence = {
22409
- source: 'meta-robots' | 'x-robots-tag';
22410
- directive: 'nosnippet' | 'max-snippet';
22411
- raw: string;
22412
- value?: number;
22413
- };
22414
- export type EffectiveSnippetControl = {
22415
- status: 'not-restricted' | 'limited' | 'blocked';
22416
- reason: 'no-restrictive-directive' | 'max-snippet-limit' | 'max-snippet-zero' | 'nosnippet';
22417
- maxCharacters?: number;
22418
- evidence: SnippetControlEvidence[];
22419
- };
22420
- export declare function combineRobotsValues(value: Array<string | undefined>): string | undefined;
22421
- export declare function metaRobotsDirectives(value?: string | string[]): Set<RobotsDirective>;
22422
- export declare function xRobotsDirectives(value?: string | string[], userAgent?: string): Set<RobotsDirective>;
22423
- export declare function hasMetaRobotsDirective(value: string | string[] | undefined, directive: RobotsDirective): boolean;
22424
- export declare function hasXRobotsDirective(value: string | string[] | undefined, directive: RobotsDirective): boolean;
22425
- export declare function effectiveRobotsDirectives(input: {
22426
- metaRobots?: string | string[];
22427
- xRobotsTag?: string | string[];
22428
- }): Set<RobotsDirective>;
22429
- export declare function effectiveSnippetControl(input: {
22430
- metaRobots?: string | string[];
22431
- xRobotsTag?: string | string[];
22432
- }): EffectiveSnippetControl;
22433
22854
  export interface CredentialsProvider {
22434
22855
  getGoogleOAuthClient(): OAuthClientConfig | undefined;
22435
22856
  readGoogleTokens(): Promise<StoredTokens | undefined>;
@@ -22638,5 +23059,5 @@ export declare function parseOlderThan(input?: string): number | undefined;
22638
23059
  export declare function formatRelativeExpiry(expiresAt: number): string;
22639
23060
  export declare function isoDate(daysAgo?: number): string;
22640
23061
  export declare const SEO_VERSION: string;
22641
- export { type AiReferralDataSource, type AiReferralMetrics, type AiReferralQueryEvidence, type AiReferralReport, type AiReferralSourceDefinition, type AnalyzeCannibalImportRowsInput, type AnalyzeCannibalRowsInput, type AnalyzeDecayInput, type AnalyzeQuickWinsInput, type AnalyzeSecondPageInput, type AnalyzeStrikingDistanceInput, type CannibalAnalysis, type CannibalImportAnalysis, type CannibalImportItem, type CannibalImportPage, type CannibalImportReport, type CannibalImportSelection, type CannibalItem, type CannibalPage, type CannibalReport, type CannibalSelection, type CannibalSuppression, type CannibalSuppressionReason, type CrawlAiAvailability, type CrawlAiBotAccess, type CrawlAiLinkCheck, type CrawlAiResourceSignal, type CrawlAiSignals, type CrawlSiteChecks, type CrawlSiteDependencies, type CrawlStatusPhase, type CtrUnderperformer, type CtrUnderperformerSelection, type DataForSeoAccountSnapshot, type DataForSeoClientOptions, type DecayAnalysis, type DecayComparison, type DecayDiagnosis, type DecayGroup, type DecayItem, type DecayMetrics, type DecayReport, type DecaySelection, type DecaySignal, type FetchPageOptions, type FetchRateControls, type Ga4AccountSummary, type Ga4PropertySummary, type GoogleAccessTokenClient, type InternalLinkSuggestion, type InternalLinksPage, type InternalLinksReport, type JavaScriptRenderingInput, type JavaScriptRenderingMode, type OAuthClientConfig, type PageOpportunityAnalysis, type PageOpportunityAnalysisInput, type PageOpportunityBenchmark, type PageOpportunityItem, type PageOpportunitySelection, type PageOpportunityType, type PageOpportunityVerification, type PageRenderer, type QueryClusterPage, type QueryClusterRow, type QuickWinAnalysis, type QuickWinGroup, type QuickWinItem, type QuickWinSelection, type QuickWinTemplateRecommendation, SEO_PROVIDER_API_VERSION, type SearchStatusIncident, type SearchUpdate, type SecondPageAnalysis, type SecondPageItem, type SecondPageQuery, type SecondPageRecommendation, type SecondPageReport, type SecondPageSelection, type SegmentDimension, type SegmentImpactItem, type SegmentImpactReport, type SegmentImpactSelection, type SegmentPeriodEvidence, type SegmentRange, SeoAnalyticsConnection, SeoAnalyticsLandingPageResult, SeoLandingPageVisitRow, SeoLandingPageVisitsCapability, SeoLandingPageVisitsResult, SeoProviderActionAdapter, SeoProviderActivate, SeoProviderApiVersion, SeoProviderCapabilityAdapter, SeoProviderCapabilityId, SeoProviderConnection, SeoProviderConnectionAdapter, SeoProviderConnectionField, SeoProviderHost, SeoProviderJson, SeoProviderJsonSchema, SeoProviderKind, SeoProviderRegistration, SeoProviderRequest, SeoProviderRuntime, SeoSearchMarket, SeoSerpLocalPackResult, SeoSerpOrganicResult, SeoSerpSnapshotCapability, SeoSerpSnapshotResult, type StrikingDistanceAnalysis, type StrikingDistanceAnalysisGroup, type StrikingDistanceAnalysisItem, type TelemetryErrorCategory, type TelemetryFailureClassification, type TelemetryFailureContext, type TelemetryFailureReason, type TelemetryOperation, type UnmatchedSegment, pageTechnicalSignals as technicalPageSignals };
23062
+ export { type AiReferralDataSource, type AiReferralMetrics, type AiReferralQueryEvidence, type AiReferralReport, type AiReferralSourceDefinition, type AnalyzeCannibalImportRowsInput, type AnalyzeCannibalRowsInput, type AnalyzeDecayInput, type AnalyzeQuickWinsInput, type AnalyzeSecondPageInput, type AnalyzeStrikingDistanceInput, type CannibalAnalysis, type CannibalImportAnalysis, type CannibalImportItem, type CannibalImportPage, type CannibalImportReport, type CannibalImportSelection, type CannibalItem, type CannibalPage, type CannibalReport, type CannibalSelection, type CannibalSuppression, type CannibalSuppressionReason, type CrawlAiAvailability, type CrawlAiBotAccess, type CrawlAiLinkCheck, type CrawlAiResourceSignal, type CrawlAiSignals, type CrawlFetchErrorKind, type CrawlSiteChecks, type CrawlSiteDependencies, type CrawlStatusPhase, type CtrUnderperformer, type CtrUnderperformerSelection, type DataForSeoAccountSnapshot, type DataForSeoClientOptions, type DecayAnalysis, type DecayComparison, type DecayDiagnosis, type DecayGroup, type DecayItem, type DecayMetrics, type DecayReport, type DecaySelection, type DecaySignal, type FetchPageOptions, type FetchRateControls, type Ga4AccountSummary, type Ga4PropertySummary, type GoogleAccessTokenClient, type InternalLinkSuggestion, type InternalLinksPage, type InternalLinksReport, type JavaScriptRenderingInput, type JavaScriptRenderingMode, type OAuthClientConfig, type PageOpportunityAnalysis, type PageOpportunityAnalysisInput, type PageOpportunityBenchmark, type PageOpportunityItem, type PageOpportunitySelection, type PageOpportunityType, type PageOpportunityVerification, type PageRenderer, type QueryClusterPage, type QueryClusterRow, type QuickWinAnalysis, type QuickWinGroup, type QuickWinItem, type QuickWinSelection, type QuickWinTemplateRecommendation, SEO_PROVIDER_API_VERSION, type SearchStatusIncident, type SearchUpdate, type SecondPageAnalysis, type SecondPageItem, type SecondPageQuery, type SecondPageRecommendation, type SecondPageReport, type SecondPageSelection, type SegmentDimension, type SegmentImpactItem, type SegmentImpactReport, type SegmentImpactSelection, type SegmentPeriodEvidence, type SegmentRange, SeoAnalyticsConnection, SeoAnalyticsLandingPageResult, SeoLandingPageVisitRow, SeoLandingPageVisitsCapability, SeoLandingPageVisitsResult, SeoProviderActionAdapter, SeoProviderActivate, SeoProviderApiVersion, SeoProviderCapabilityAdapter, SeoProviderCapabilityId, SeoProviderConnection, SeoProviderConnectionAdapter, SeoProviderConnectionField, SeoProviderHost, SeoProviderJson, SeoProviderJsonSchema, SeoProviderKind, SeoProviderRegistration, SeoProviderRequest, SeoProviderRuntime, SeoSearchMarket, SeoSerpLocalPackResult, SeoSerpOrganicResult, SeoSerpSnapshotCapability, SeoSerpSnapshotResult, type StrikingDistanceAnalysis, type StrikingDistanceAnalysisGroup, type StrikingDistanceAnalysisItem, type TelemetryErrorCategory, type TelemetryFailureClassification, type TelemetryFailureContext, type TelemetryFailureReason, type TelemetryOperation, type UnmatchedSegment, pageTechnicalSignals as technicalPageSignals };
22642
23063
  //# sourceMappingURL=index.d.ts.map