seo 0.14.0 → 0.15.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/PRIVACY.md +244 -518
- package/TERMS.md +57 -72
- package/dist/cli.js +85 -85
- package/dist/cli.js.map +1 -1
- package/dist/{dist-4Yam8ps7.js → dist-Dik5MNDk.js} +1 -1
- package/dist/{dist-B_2zww72.js → dist-pwGymked.js} +148 -126
- package/dist/dist-pwGymked.js.map +1 -0
- package/dist/{esm-BmuxgZyN.js → esm-DieyhVZ-.js} +2 -2
- package/dist/{esm-BmuxgZyN.js.map → esm-DieyhVZ-.js.map} +1 -1
- package/dist/index.d.ts +221 -39
- package/dist/index.js +3968 -902
- package/dist/index.js.map +1 -1
- package/dist/mcp.js +4061 -995
- package/dist/mcp.js.map +1 -1
- package/package.json +1 -1
- package/skills/seo/SKILL.md +1 -0
- package/dist/dist-B_2zww72.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -923,6 +923,32 @@ declare const RULE_DEFINITIONS: readonly [{
|
|
|
923
923
|
readonly evidenceFields: ["page.robotsTxt"];
|
|
924
924
|
readonly suggestedCommands: ["seo crawl <url> --json"];
|
|
925
925
|
};
|
|
926
|
+
}, {
|
|
927
|
+
readonly id: "robots_txt_html";
|
|
928
|
+
readonly title: "robots.txt returns an HTML page";
|
|
929
|
+
readonly category: "indexability";
|
|
930
|
+
readonly defaultSeverity: "medium";
|
|
931
|
+
readonly whyItMatters: "Crawlers read /robots.txt as plain text rules. An HTML page there, often the home page served for every path, holds no rules and no Sitemap line, so crawlers treat the site as having no robots.txt.";
|
|
932
|
+
readonly howToFix: "Serve a plain text /robots.txt with the rules the site needs and a Sitemap line. Check that the catch-all route does not answer before the static file.";
|
|
933
|
+
readonly impactIfIgnored: "Rules meant to keep crawlers out of some paths do nothing, and crawlers must find the sitemap another way.";
|
|
934
|
+
readonly howToVerify: "Request /robots.txt and confirm a 200 text/plain response with User-agent lines.";
|
|
935
|
+
readonly agentHints: {
|
|
936
|
+
readonly evidenceFields: ["report.ai.robotsTxt"];
|
|
937
|
+
readonly suggestedCommands: ["seo crawl <url> --json"];
|
|
938
|
+
};
|
|
939
|
+
}, {
|
|
940
|
+
readonly id: "sitemap_url_off_host";
|
|
941
|
+
readonly title: "Sitemap lists URLs on another host";
|
|
942
|
+
readonly category: "indexability";
|
|
943
|
+
readonly defaultSeverity: "high";
|
|
944
|
+
readonly whyItMatters: "A sitemap may list only URLs on its own host, unless the other host's robots.txt or Search Console vouches for it. Localhost URLs, left by a build that used a development base URL, can never be fetched. Either way, those entries tell search engines nothing about the real pages.";
|
|
945
|
+
readonly howToFix: "Build the sitemap with the production URL as the base, so every <loc> uses the same scheme and host as the live site.";
|
|
946
|
+
readonly impactIfIgnored: "Search engines find pages only through links, and new or deep pages can take longer to be crawled.";
|
|
947
|
+
readonly howToVerify: "Open the sitemap and confirm every <loc> starts with the live site URL, then re-run the crawl.";
|
|
948
|
+
readonly agentHints: {
|
|
949
|
+
readonly evidenceFields: ["report.sitemapDiscovery.roots[].offHost"];
|
|
950
|
+
readonly suggestedCommands: ["seo crawl <url> --json"];
|
|
951
|
+
};
|
|
926
952
|
}, {
|
|
927
953
|
readonly id: "canonicalized_page";
|
|
928
954
|
readonly title: "Canonicalized page";
|
|
@@ -2866,6 +2892,8 @@ type CrawlAiSignals = {
|
|
|
2866
2892
|
exists: boolean;
|
|
2867
2893
|
availability: CrawlAiAvailability;
|
|
2868
2894
|
status?: number;
|
|
2895
|
+
contentType?: string;
|
|
2896
|
+
servesHtml?: boolean;
|
|
2869
2897
|
error?: string;
|
|
2870
2898
|
sitemapUrls: string[];
|
|
2871
2899
|
contentSignals?: string[];
|
|
@@ -2876,6 +2904,8 @@ type CrawlAiSignals = {
|
|
|
2876
2904
|
exists: boolean;
|
|
2877
2905
|
availability?: CrawlAiAvailability;
|
|
2878
2906
|
status?: number;
|
|
2907
|
+
contentType?: string;
|
|
2908
|
+
servesHtml?: boolean;
|
|
2879
2909
|
error?: string;
|
|
2880
2910
|
links?: {
|
|
2881
2911
|
found: number;
|
|
@@ -3016,6 +3046,12 @@ export type CrawlSitemapDiscovery = {
|
|
|
3016
3046
|
documents: SitemapDocument[];
|
|
3017
3047
|
possiblyTruncated: boolean;
|
|
3018
3048
|
warnings: string[];
|
|
3049
|
+
offHost?: {
|
|
3050
|
+
count: number;
|
|
3051
|
+
localhost: number;
|
|
3052
|
+
hosts: string[];
|
|
3053
|
+
samples: string[];
|
|
3054
|
+
};
|
|
3019
3055
|
}>;
|
|
3020
3056
|
};
|
|
3021
3057
|
export type CrawlExternalLinkVerification = {
|
|
@@ -5244,6 +5280,8 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
5244
5280
|
unreachable: "unreachable";
|
|
5245
5281
|
}>;
|
|
5246
5282
|
status: z.ZodOptional<z.ZodNumber>;
|
|
5283
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
5284
|
+
servesHtml: z.ZodOptional<z.ZodBoolean>;
|
|
5247
5285
|
error: z.ZodOptional<z.ZodString>;
|
|
5248
5286
|
sitemapUrls: z.ZodArray<z.ZodString>;
|
|
5249
5287
|
contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -5270,6 +5308,8 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
5270
5308
|
unreachable: "unreachable";
|
|
5271
5309
|
}>>;
|
|
5272
5310
|
status: z.ZodOptional<z.ZodNumber>;
|
|
5311
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
5312
|
+
servesHtml: z.ZodOptional<z.ZodBoolean>;
|
|
5273
5313
|
error: z.ZodOptional<z.ZodString>;
|
|
5274
5314
|
links: z.ZodOptional<z.ZodObject<{
|
|
5275
5315
|
found: z.ZodNumber;
|
|
@@ -5405,6 +5445,12 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
5405
5445
|
}, z.core.$strip>>;
|
|
5406
5446
|
possiblyTruncated: z.ZodBoolean;
|
|
5407
5447
|
warnings: z.ZodArray<z.ZodString>;
|
|
5448
|
+
offHost: z.ZodOptional<z.ZodObject<{
|
|
5449
|
+
count: z.ZodNumber;
|
|
5450
|
+
localhost: z.ZodNumber;
|
|
5451
|
+
hosts: z.ZodArray<z.ZodString>;
|
|
5452
|
+
samples: z.ZodArray<z.ZodString>;
|
|
5453
|
+
}, z.core.$strip>>;
|
|
5408
5454
|
}, z.core.$strip>>;
|
|
5409
5455
|
}, z.core.$strip>>;
|
|
5410
5456
|
externalLinkVerification: z.ZodOptional<z.ZodObject<{
|
|
@@ -6549,6 +6595,8 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
6549
6595
|
unreachable: "unreachable";
|
|
6550
6596
|
}>;
|
|
6551
6597
|
status: z.ZodOptional<z.ZodNumber>;
|
|
6598
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
6599
|
+
servesHtml: z.ZodOptional<z.ZodBoolean>;
|
|
6552
6600
|
error: z.ZodOptional<z.ZodString>;
|
|
6553
6601
|
sitemapUrls: z.ZodArray<z.ZodString>;
|
|
6554
6602
|
contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -6575,6 +6623,8 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
6575
6623
|
unreachable: "unreachable";
|
|
6576
6624
|
}>>;
|
|
6577
6625
|
status: z.ZodOptional<z.ZodNumber>;
|
|
6626
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
6627
|
+
servesHtml: z.ZodOptional<z.ZodBoolean>;
|
|
6578
6628
|
error: z.ZodOptional<z.ZodString>;
|
|
6579
6629
|
links: z.ZodOptional<z.ZodObject<{
|
|
6580
6630
|
found: z.ZodNumber;
|
|
@@ -6710,6 +6760,12 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
6710
6760
|
}, z.core.$strip>>;
|
|
6711
6761
|
possiblyTruncated: z.ZodBoolean;
|
|
6712
6762
|
warnings: z.ZodArray<z.ZodString>;
|
|
6763
|
+
offHost: z.ZodOptional<z.ZodObject<{
|
|
6764
|
+
count: z.ZodNumber;
|
|
6765
|
+
localhost: z.ZodNumber;
|
|
6766
|
+
hosts: z.ZodArray<z.ZodString>;
|
|
6767
|
+
samples: z.ZodArray<z.ZodString>;
|
|
6768
|
+
}, z.core.$strip>>;
|
|
6713
6769
|
}, z.core.$strip>>;
|
|
6714
6770
|
}, z.core.$strip>>;
|
|
6715
6771
|
externalLinkVerification: z.ZodOptional<z.ZodObject<{
|
|
@@ -7854,6 +7910,8 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
7854
7910
|
unreachable: "unreachable";
|
|
7855
7911
|
}>;
|
|
7856
7912
|
status: z.ZodOptional<z.ZodNumber>;
|
|
7913
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
7914
|
+
servesHtml: z.ZodOptional<z.ZodBoolean>;
|
|
7857
7915
|
error: z.ZodOptional<z.ZodString>;
|
|
7858
7916
|
sitemapUrls: z.ZodArray<z.ZodString>;
|
|
7859
7917
|
contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -7880,6 +7938,8 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
7880
7938
|
unreachable: "unreachable";
|
|
7881
7939
|
}>>;
|
|
7882
7940
|
status: z.ZodOptional<z.ZodNumber>;
|
|
7941
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
7942
|
+
servesHtml: z.ZodOptional<z.ZodBoolean>;
|
|
7883
7943
|
error: z.ZodOptional<z.ZodString>;
|
|
7884
7944
|
links: z.ZodOptional<z.ZodObject<{
|
|
7885
7945
|
found: z.ZodNumber;
|
|
@@ -8015,6 +8075,12 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
8015
8075
|
}, z.core.$strip>>;
|
|
8016
8076
|
possiblyTruncated: z.ZodBoolean;
|
|
8017
8077
|
warnings: z.ZodArray<z.ZodString>;
|
|
8078
|
+
offHost: z.ZodOptional<z.ZodObject<{
|
|
8079
|
+
count: z.ZodNumber;
|
|
8080
|
+
localhost: z.ZodNumber;
|
|
8081
|
+
hosts: z.ZodArray<z.ZodString>;
|
|
8082
|
+
samples: z.ZodArray<z.ZodString>;
|
|
8083
|
+
}, z.core.$strip>>;
|
|
8018
8084
|
}, z.core.$strip>>;
|
|
8019
8085
|
}, z.core.$strip>>;
|
|
8020
8086
|
externalLinkVerification: z.ZodOptional<z.ZodObject<{
|
|
@@ -9161,6 +9227,8 @@ export declare const crawlerSchemas: {
|
|
|
9161
9227
|
unreachable: "unreachable";
|
|
9162
9228
|
}>;
|
|
9163
9229
|
status: z.ZodOptional<z.ZodNumber>;
|
|
9230
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
9231
|
+
servesHtml: z.ZodOptional<z.ZodBoolean>;
|
|
9164
9232
|
error: z.ZodOptional<z.ZodString>;
|
|
9165
9233
|
sitemapUrls: z.ZodArray<z.ZodString>;
|
|
9166
9234
|
contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -9187,6 +9255,8 @@ export declare const crawlerSchemas: {
|
|
|
9187
9255
|
unreachable: "unreachable";
|
|
9188
9256
|
}>>;
|
|
9189
9257
|
status: z.ZodOptional<z.ZodNumber>;
|
|
9258
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
9259
|
+
servesHtml: z.ZodOptional<z.ZodBoolean>;
|
|
9190
9260
|
error: z.ZodOptional<z.ZodString>;
|
|
9191
9261
|
links: z.ZodOptional<z.ZodObject<{
|
|
9192
9262
|
found: z.ZodNumber;
|
|
@@ -9322,6 +9392,12 @@ export declare const crawlerSchemas: {
|
|
|
9322
9392
|
}, z.core.$strip>>;
|
|
9323
9393
|
possiblyTruncated: z.ZodBoolean;
|
|
9324
9394
|
warnings: z.ZodArray<z.ZodString>;
|
|
9395
|
+
offHost: z.ZodOptional<z.ZodObject<{
|
|
9396
|
+
count: z.ZodNumber;
|
|
9397
|
+
localhost: z.ZodNumber;
|
|
9398
|
+
hosts: z.ZodArray<z.ZodString>;
|
|
9399
|
+
samples: z.ZodArray<z.ZodString>;
|
|
9400
|
+
}, z.core.$strip>>;
|
|
9325
9401
|
}, z.core.$strip>>;
|
|
9326
9402
|
}, z.core.$strip>>;
|
|
9327
9403
|
externalLinkVerification: z.ZodOptional<z.ZodObject<{
|
|
@@ -10466,6 +10542,8 @@ export declare const crawlerSchemas: {
|
|
|
10466
10542
|
unreachable: "unreachable";
|
|
10467
10543
|
}>;
|
|
10468
10544
|
status: z.ZodOptional<z.ZodNumber>;
|
|
10545
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
10546
|
+
servesHtml: z.ZodOptional<z.ZodBoolean>;
|
|
10469
10547
|
error: z.ZodOptional<z.ZodString>;
|
|
10470
10548
|
sitemapUrls: z.ZodArray<z.ZodString>;
|
|
10471
10549
|
contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -10492,6 +10570,8 @@ export declare const crawlerSchemas: {
|
|
|
10492
10570
|
unreachable: "unreachable";
|
|
10493
10571
|
}>>;
|
|
10494
10572
|
status: z.ZodOptional<z.ZodNumber>;
|
|
10573
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
10574
|
+
servesHtml: z.ZodOptional<z.ZodBoolean>;
|
|
10495
10575
|
error: z.ZodOptional<z.ZodString>;
|
|
10496
10576
|
links: z.ZodOptional<z.ZodObject<{
|
|
10497
10577
|
found: z.ZodNumber;
|
|
@@ -10627,6 +10707,12 @@ export declare const crawlerSchemas: {
|
|
|
10627
10707
|
}, z.core.$strip>>;
|
|
10628
10708
|
possiblyTruncated: z.ZodBoolean;
|
|
10629
10709
|
warnings: z.ZodArray<z.ZodString>;
|
|
10710
|
+
offHost: z.ZodOptional<z.ZodObject<{
|
|
10711
|
+
count: z.ZodNumber;
|
|
10712
|
+
localhost: z.ZodNumber;
|
|
10713
|
+
hosts: z.ZodArray<z.ZodString>;
|
|
10714
|
+
samples: z.ZodArray<z.ZodString>;
|
|
10715
|
+
}, z.core.$strip>>;
|
|
10630
10716
|
}, z.core.$strip>>;
|
|
10631
10717
|
}, z.core.$strip>>;
|
|
10632
10718
|
externalLinkVerification: z.ZodOptional<z.ZodObject<{
|
|
@@ -11771,6 +11857,8 @@ export declare const crawlerSchemas: {
|
|
|
11771
11857
|
unreachable: "unreachable";
|
|
11772
11858
|
}>;
|
|
11773
11859
|
status: z.ZodOptional<z.ZodNumber>;
|
|
11860
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
11861
|
+
servesHtml: z.ZodOptional<z.ZodBoolean>;
|
|
11774
11862
|
error: z.ZodOptional<z.ZodString>;
|
|
11775
11863
|
sitemapUrls: z.ZodArray<z.ZodString>;
|
|
11776
11864
|
contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -11797,6 +11885,8 @@ export declare const crawlerSchemas: {
|
|
|
11797
11885
|
unreachable: "unreachable";
|
|
11798
11886
|
}>>;
|
|
11799
11887
|
status: z.ZodOptional<z.ZodNumber>;
|
|
11888
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
11889
|
+
servesHtml: z.ZodOptional<z.ZodBoolean>;
|
|
11800
11890
|
error: z.ZodOptional<z.ZodString>;
|
|
11801
11891
|
links: z.ZodOptional<z.ZodObject<{
|
|
11802
11892
|
found: z.ZodNumber;
|
|
@@ -11932,6 +12022,12 @@ export declare const crawlerSchemas: {
|
|
|
11932
12022
|
}, z.core.$strip>>;
|
|
11933
12023
|
possiblyTruncated: z.ZodBoolean;
|
|
11934
12024
|
warnings: z.ZodArray<z.ZodString>;
|
|
12025
|
+
offHost: z.ZodOptional<z.ZodObject<{
|
|
12026
|
+
count: z.ZodNumber;
|
|
12027
|
+
localhost: z.ZodNumber;
|
|
12028
|
+
hosts: z.ZodArray<z.ZodString>;
|
|
12029
|
+
samples: z.ZodArray<z.ZodString>;
|
|
12030
|
+
}, z.core.$strip>>;
|
|
11935
12031
|
}, z.core.$strip>>;
|
|
11936
12032
|
}, z.core.$strip>>;
|
|
11937
12033
|
externalLinkVerification: z.ZodOptional<z.ZodObject<{
|
|
@@ -14004,6 +14100,8 @@ export declare const crawlerJsonSchemas: {
|
|
|
14004
14100
|
unreachable: "unreachable";
|
|
14005
14101
|
}>;
|
|
14006
14102
|
status: z.ZodOptional<z.ZodNumber>;
|
|
14103
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
14104
|
+
servesHtml: z.ZodOptional<z.ZodBoolean>;
|
|
14007
14105
|
error: z.ZodOptional<z.ZodString>;
|
|
14008
14106
|
sitemapUrls: z.ZodArray<z.ZodString>;
|
|
14009
14107
|
contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -14030,6 +14128,8 @@ export declare const crawlerJsonSchemas: {
|
|
|
14030
14128
|
unreachable: "unreachable";
|
|
14031
14129
|
}>>;
|
|
14032
14130
|
status: z.ZodOptional<z.ZodNumber>;
|
|
14131
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
14132
|
+
servesHtml: z.ZodOptional<z.ZodBoolean>;
|
|
14033
14133
|
error: z.ZodOptional<z.ZodString>;
|
|
14034
14134
|
links: z.ZodOptional<z.ZodObject<{
|
|
14035
14135
|
found: z.ZodNumber;
|
|
@@ -14165,6 +14265,12 @@ export declare const crawlerJsonSchemas: {
|
|
|
14165
14265
|
}, z.core.$strip>>;
|
|
14166
14266
|
possiblyTruncated: z.ZodBoolean;
|
|
14167
14267
|
warnings: z.ZodArray<z.ZodString>;
|
|
14268
|
+
offHost: z.ZodOptional<z.ZodObject<{
|
|
14269
|
+
count: z.ZodNumber;
|
|
14270
|
+
localhost: z.ZodNumber;
|
|
14271
|
+
hosts: z.ZodArray<z.ZodString>;
|
|
14272
|
+
samples: z.ZodArray<z.ZodString>;
|
|
14273
|
+
}, z.core.$strip>>;
|
|
14168
14274
|
}, z.core.$strip>>;
|
|
14169
14275
|
}, z.core.$strip>>;
|
|
14170
14276
|
externalLinkVerification: z.ZodOptional<z.ZodObject<{
|
|
@@ -15309,6 +15415,8 @@ export declare const crawlerJsonSchemas: {
|
|
|
15309
15415
|
unreachable: "unreachable";
|
|
15310
15416
|
}>;
|
|
15311
15417
|
status: z.ZodOptional<z.ZodNumber>;
|
|
15418
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
15419
|
+
servesHtml: z.ZodOptional<z.ZodBoolean>;
|
|
15312
15420
|
error: z.ZodOptional<z.ZodString>;
|
|
15313
15421
|
sitemapUrls: z.ZodArray<z.ZodString>;
|
|
15314
15422
|
contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -15335,6 +15443,8 @@ export declare const crawlerJsonSchemas: {
|
|
|
15335
15443
|
unreachable: "unreachable";
|
|
15336
15444
|
}>>;
|
|
15337
15445
|
status: z.ZodOptional<z.ZodNumber>;
|
|
15446
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
15447
|
+
servesHtml: z.ZodOptional<z.ZodBoolean>;
|
|
15338
15448
|
error: z.ZodOptional<z.ZodString>;
|
|
15339
15449
|
links: z.ZodOptional<z.ZodObject<{
|
|
15340
15450
|
found: z.ZodNumber;
|
|
@@ -15470,6 +15580,12 @@ export declare const crawlerJsonSchemas: {
|
|
|
15470
15580
|
}, z.core.$strip>>;
|
|
15471
15581
|
possiblyTruncated: z.ZodBoolean;
|
|
15472
15582
|
warnings: z.ZodArray<z.ZodString>;
|
|
15583
|
+
offHost: z.ZodOptional<z.ZodObject<{
|
|
15584
|
+
count: z.ZodNumber;
|
|
15585
|
+
localhost: z.ZodNumber;
|
|
15586
|
+
hosts: z.ZodArray<z.ZodString>;
|
|
15587
|
+
samples: z.ZodArray<z.ZodString>;
|
|
15588
|
+
}, z.core.$strip>>;
|
|
15473
15589
|
}, z.core.$strip>>;
|
|
15474
15590
|
}, z.core.$strip>>;
|
|
15475
15591
|
externalLinkVerification: z.ZodOptional<z.ZodObject<{
|
|
@@ -16614,6 +16730,8 @@ export declare const crawlerJsonSchemas: {
|
|
|
16614
16730
|
unreachable: "unreachable";
|
|
16615
16731
|
}>;
|
|
16616
16732
|
status: z.ZodOptional<z.ZodNumber>;
|
|
16733
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
16734
|
+
servesHtml: z.ZodOptional<z.ZodBoolean>;
|
|
16617
16735
|
error: z.ZodOptional<z.ZodString>;
|
|
16618
16736
|
sitemapUrls: z.ZodArray<z.ZodString>;
|
|
16619
16737
|
contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -16640,6 +16758,8 @@ export declare const crawlerJsonSchemas: {
|
|
|
16640
16758
|
unreachable: "unreachable";
|
|
16641
16759
|
}>>;
|
|
16642
16760
|
status: z.ZodOptional<z.ZodNumber>;
|
|
16761
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
16762
|
+
servesHtml: z.ZodOptional<z.ZodBoolean>;
|
|
16643
16763
|
error: z.ZodOptional<z.ZodString>;
|
|
16644
16764
|
links: z.ZodOptional<z.ZodObject<{
|
|
16645
16765
|
found: z.ZodNumber;
|
|
@@ -16775,6 +16895,12 @@ export declare const crawlerJsonSchemas: {
|
|
|
16775
16895
|
}, z.core.$strip>>;
|
|
16776
16896
|
possiblyTruncated: z.ZodBoolean;
|
|
16777
16897
|
warnings: z.ZodArray<z.ZodString>;
|
|
16898
|
+
offHost: z.ZodOptional<z.ZodObject<{
|
|
16899
|
+
count: z.ZodNumber;
|
|
16900
|
+
localhost: z.ZodNumber;
|
|
16901
|
+
hosts: z.ZodArray<z.ZodString>;
|
|
16902
|
+
samples: z.ZodArray<z.ZodString>;
|
|
16903
|
+
}, z.core.$strip>>;
|
|
16778
16904
|
}, z.core.$strip>>;
|
|
16779
16905
|
}, z.core.$strip>>;
|
|
16780
16906
|
externalLinkVerification: z.ZodOptional<z.ZodObject<{
|
|
@@ -19988,6 +20114,13 @@ interface CrawledPage {
|
|
|
19988
20114
|
length: number;
|
|
19989
20115
|
};
|
|
19990
20116
|
}
|
|
20117
|
+
interface SentenceSource {
|
|
20118
|
+
read(ref: {
|
|
20119
|
+
offset: number;
|
|
20120
|
+
length: number;
|
|
20121
|
+
}): Promise<LinkSentence[]>;
|
|
20122
|
+
close(): Promise<void>;
|
|
20123
|
+
}
|
|
19991
20124
|
interface SiteCrawl {
|
|
19992
20125
|
origin: string;
|
|
19993
20126
|
method: 'sitemap' | 'links';
|
|
@@ -19995,7 +20128,7 @@ interface SiteCrawl {
|
|
|
19995
20128
|
urls: string[];
|
|
19996
20129
|
pageOfUrl: Map<number, number>;
|
|
19997
20130
|
index: SiteIndex;
|
|
19998
|
-
sentences:
|
|
20131
|
+
sentences: SentenceSource;
|
|
19999
20132
|
genericAnchors: Array<{
|
|
20000
20133
|
source: number;
|
|
20001
20134
|
href: string;
|
|
@@ -20014,22 +20147,6 @@ interface SiteCrawl {
|
|
|
20014
20147
|
};
|
|
20015
20148
|
warnings: string[];
|
|
20016
20149
|
}
|
|
20017
|
-
declare class SentenceStore {
|
|
20018
|
-
private readonly dir;
|
|
20019
|
-
private readonly handle;
|
|
20020
|
-
private size;
|
|
20021
|
-
private constructor();
|
|
20022
|
-
static open(): Promise<SentenceStore>;
|
|
20023
|
-
write(sentences: LinkSentence[]): Promise<{
|
|
20024
|
-
offset: number;
|
|
20025
|
-
length: number;
|
|
20026
|
-
}>;
|
|
20027
|
-
read(ref: {
|
|
20028
|
-
offset: number;
|
|
20029
|
-
length: number;
|
|
20030
|
-
}): Promise<LinkSentence[]>;
|
|
20031
|
-
close(): Promise<void>;
|
|
20032
|
-
}
|
|
20033
20150
|
interface CrawlInput {
|
|
20034
20151
|
startUrl: string;
|
|
20035
20152
|
maxPages: number;
|
|
@@ -20037,7 +20154,6 @@ interface CrawlInput {
|
|
|
20037
20154
|
refresh?: boolean;
|
|
20038
20155
|
progress?: ProgressReporter;
|
|
20039
20156
|
}
|
|
20040
|
-
declare function crawlForLinks(input: CrawlInput): Promise<SiteCrawl>;
|
|
20041
20157
|
export declare const PAGE_TYPES: {
|
|
20042
20158
|
readonly pillar_guide: "A long, broad guide that covers a whole topic and would naturally link out to many narrower pages";
|
|
20043
20159
|
readonly support_article: "A focused article, post, tutorial, or explainer about one narrower subject";
|
|
@@ -20209,9 +20325,10 @@ export interface InternalLinksInput {
|
|
|
20209
20325
|
refresh?: boolean;
|
|
20210
20326
|
}
|
|
20211
20327
|
export interface InternalLinksDependencies {
|
|
20212
|
-
crawl:
|
|
20328
|
+
crawl: (input: CrawlInput) => Promise<SiteCrawl>;
|
|
20213
20329
|
searchConsole: {
|
|
20214
20330
|
property: string;
|
|
20331
|
+
maxRows?: number;
|
|
20215
20332
|
query: (request: SearchAnalyticsRequest) => Promise<{
|
|
20216
20333
|
rows: GscRow[];
|
|
20217
20334
|
rowsFetched: number;
|
|
@@ -20229,6 +20346,7 @@ export interface InternalLinksDependencies {
|
|
|
20229
20346
|
progress?: ProgressReporter;
|
|
20230
20347
|
}
|
|
20231
20348
|
export declare function siteStartUrl(site: string): string;
|
|
20349
|
+
export declare function internalLinksReportWith(input: InternalLinksInput, dependencies: Partial<InternalLinksDependencies> & Pick<InternalLinksDependencies, 'crawl' | 'searchConsole' | 'decisionModel'>): Promise<InternalLinksReport>;
|
|
20232
20350
|
export declare function internalLinksReport(input: InternalLinksInput, dependencies: Partial<InternalLinksDependencies> & Pick<InternalLinksDependencies, 'searchConsole' | 'decisionModel'>): Promise<InternalLinksReport>;
|
|
20233
20351
|
type PseoTemplateCluster = {
|
|
20234
20352
|
id: string;
|
|
@@ -21308,26 +21426,6 @@ type AuditAccess = {
|
|
|
21308
21426
|
checks: (site: string, offset: number, limit: number) => Promise<AuditChecks | null>;
|
|
21309
21427
|
add: (site: string) => Promise<'added' | 'exists' | 'full'>;
|
|
21310
21428
|
};
|
|
21311
|
-
declare const ISSUE_MARKS: readonly ["open", "fixed", "ignored"];
|
|
21312
|
-
type IssueMark = (typeof ISSUE_MARKS)[number];
|
|
21313
|
-
type IssueSeen = 'found' | 'not-found' | 'not-checked';
|
|
21314
|
-
type StoredIssue = {
|
|
21315
|
-
id: string;
|
|
21316
|
-
kind: string;
|
|
21317
|
-
subject: string;
|
|
21318
|
-
evidence: string;
|
|
21319
|
-
mark: IssueMark;
|
|
21320
|
-
marked_at: string | null;
|
|
21321
|
-
note: string | null;
|
|
21322
|
-
first_found: string;
|
|
21323
|
-
last_found: string | null;
|
|
21324
|
-
seen: IssueSeen;
|
|
21325
|
-
checked_at: string | null;
|
|
21326
|
-
};
|
|
21327
|
-
type IssueStore = {
|
|
21328
|
-
read: (site: string) => Promise<StoredIssue[] | null>;
|
|
21329
|
-
write: (site: string, issues: StoredIssue[]) => Promise<void>;
|
|
21330
|
-
};
|
|
21331
21429
|
type RedirectKind = 'permanent' | 'temporary';
|
|
21332
21430
|
type LiveCheck = {
|
|
21333
21431
|
first: PageFacts;
|
|
@@ -21372,6 +21470,10 @@ declare const COMMANDS: {
|
|
|
21372
21470
|
readonly where: "local";
|
|
21373
21471
|
readonly summary: "Pages that could link to a target page.";
|
|
21374
21472
|
};
|
|
21473
|
+
readonly lint: {
|
|
21474
|
+
readonly where: "anywhere";
|
|
21475
|
+
readonly summary: "Check copy for patterns common in AI-written text, weak copy and title and description length.";
|
|
21476
|
+
};
|
|
21375
21477
|
};
|
|
21376
21478
|
type CommandId = keyof typeof COMMANDS;
|
|
21377
21479
|
type Caller = (command: CommandId, args?: Record<string, string | number | undefined>) => string;
|
|
@@ -21446,6 +21548,45 @@ type PageMarkdown = {
|
|
|
21446
21548
|
} | {
|
|
21447
21549
|
error: string;
|
|
21448
21550
|
};
|
|
21551
|
+
declare const ISSUE_MARKS: readonly ["open", "fixed", "ignored"];
|
|
21552
|
+
type IssueMark = (typeof ISSUE_MARKS)[number];
|
|
21553
|
+
type IssueSeen = 'found' | 'not-found' | 'not-checked';
|
|
21554
|
+
type StoredIssue = {
|
|
21555
|
+
id: string;
|
|
21556
|
+
kind: string;
|
|
21557
|
+
subject: string;
|
|
21558
|
+
evidence: string;
|
|
21559
|
+
mark: IssueMark;
|
|
21560
|
+
marked_at: string | null;
|
|
21561
|
+
note: string | null;
|
|
21562
|
+
first_found: string;
|
|
21563
|
+
last_found: string | null;
|
|
21564
|
+
seen: IssueSeen;
|
|
21565
|
+
checked_at: string | null;
|
|
21566
|
+
measures?: IssueMeasure[];
|
|
21567
|
+
};
|
|
21568
|
+
declare const MEASURE_DAYS: readonly [28, 56];
|
|
21569
|
+
type MeasureDays = (typeof MEASURE_DAYS)[number];
|
|
21570
|
+
type MeasurePeriod = {
|
|
21571
|
+
start: string;
|
|
21572
|
+
end: string;
|
|
21573
|
+
clicks: number;
|
|
21574
|
+
impressions: number;
|
|
21575
|
+
position: number | null;
|
|
21576
|
+
};
|
|
21577
|
+
type IssueMeasure = {
|
|
21578
|
+
days: MeasureDays;
|
|
21579
|
+
fixed_on: string;
|
|
21580
|
+
scope: 'page' | 'query on page';
|
|
21581
|
+
before: MeasurePeriod;
|
|
21582
|
+
after: MeasurePeriod;
|
|
21583
|
+
updates: string[] | null;
|
|
21584
|
+
measured_at: string;
|
|
21585
|
+
};
|
|
21586
|
+
type IssueStore = {
|
|
21587
|
+
read: (site: string) => Promise<StoredIssue[] | null>;
|
|
21588
|
+
write: (site: string, issues: StoredIssue[]) => Promise<void>;
|
|
21589
|
+
};
|
|
21449
21590
|
type WeekSite = {
|
|
21450
21591
|
property: string;
|
|
21451
21592
|
link: string | null;
|
|
@@ -21474,6 +21615,37 @@ type WeekSite = {
|
|
|
21474
21615
|
clicks: number;
|
|
21475
21616
|
previous: number;
|
|
21476
21617
|
} | null;
|
|
21618
|
+
opportunities?: WeekOpportunities | null;
|
|
21619
|
+
measured?: {
|
|
21620
|
+
total: number;
|
|
21621
|
+
items: (IssueMeasure & {
|
|
21622
|
+
subject: string;
|
|
21623
|
+
})[];
|
|
21624
|
+
};
|
|
21625
|
+
};
|
|
21626
|
+
type WeekOpportunities = {
|
|
21627
|
+
checked_at: number | null;
|
|
21628
|
+
competitors: string[];
|
|
21629
|
+
blocked: string | null;
|
|
21630
|
+
partial: boolean;
|
|
21631
|
+
items: WeekOpportunity[];
|
|
21632
|
+
};
|
|
21633
|
+
type WeekOpportunity = {
|
|
21634
|
+
keyword: string;
|
|
21635
|
+
kind: 'page' | 'tool';
|
|
21636
|
+
search_volume: number;
|
|
21637
|
+
cpc: number;
|
|
21638
|
+
intent: string;
|
|
21639
|
+
competitors: {
|
|
21640
|
+
domain: string;
|
|
21641
|
+
position: number;
|
|
21642
|
+
url: string;
|
|
21643
|
+
}[];
|
|
21644
|
+
site_dr: number;
|
|
21645
|
+
low_dr: number;
|
|
21646
|
+
top: number;
|
|
21647
|
+
cluster: number;
|
|
21648
|
+
relevance: number;
|
|
21477
21649
|
};
|
|
21478
21650
|
type WeekData = {
|
|
21479
21651
|
start: string;
|
|
@@ -21521,6 +21693,13 @@ export declare function pendingCloudLogin(): Pending | null;
|
|
|
21521
21693
|
export declare function finishCloudLogin(): Promise<'linked' | 'pending' | 'expired'>;
|
|
21522
21694
|
export declare function cloudLogout(): Promise<boolean>;
|
|
21523
21695
|
export declare function openCloudLink(url: string): Promise<void>;
|
|
21696
|
+
type LintSource = {
|
|
21697
|
+
path: string;
|
|
21698
|
+
text: string;
|
|
21699
|
+
} | {
|
|
21700
|
+
path: string;
|
|
21701
|
+
skipped: string;
|
|
21702
|
+
};
|
|
21524
21703
|
export type TokenStorageMode = 'keychain' | 'file';
|
|
21525
21704
|
export type TokenStorageStatus = {
|
|
21526
21705
|
configured: TokenStorageMode;
|
|
@@ -21893,6 +22072,9 @@ export declare function readJson<T = unknown>(response: Response, label: string,
|
|
|
21893
22072
|
maxBytes?: number;
|
|
21894
22073
|
}): Promise<T>;
|
|
21895
22074
|
export declare function readJsonOrUndefined<T = unknown>(response: Response, label: string): Promise<T | undefined>;
|
|
22075
|
+
export declare const LINT_MAX_FILES = 100;
|
|
22076
|
+
export declare function lintPaths(inputs: string[], cwd?: string): Promise<string[]>;
|
|
22077
|
+
export declare function readLintFiles(inputs: string[], cwd?: string): Promise<LintSource[]>;
|
|
21896
22078
|
export declare function createLogger(runId: string): pino.Logger;
|
|
21897
22079
|
export declare function makeRunId(): string;
|
|
21898
22080
|
export declare function renderPresentationTablesMarkdown(tables: PresentationTable[]): string[];
|