@growth-labs/seo 0.5.0 → 0.5.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.
@@ -8,49 +8,56 @@ export const GET = async (context) => {
8
8
  const contentProvider = getContentProvider();
9
9
  const sitemaps = [];
10
10
  const { site } = config;
11
+ const injectedRoutes = config.injectedRoutes;
11
12
  // Fetch articles lastmod if possible
12
13
  let articlesLastmod;
13
14
  let pagesLastmod;
14
15
  let videosLastmod;
15
16
  let productsLastmod;
16
17
  if (contentProvider) {
17
- try {
18
- const articles = await contentProvider({ type: 'articles' }, context);
19
- if (articles.length > 0) {
20
- const dates = articles
21
- .map((a) => a.dateModified ?? a.datePublished)
22
- .filter(Boolean);
23
- if (dates.length > 0) {
24
- articlesLastmod = dates.sort().at(-1);
18
+ if (injectedRoutes.sitemapArticles) {
19
+ try {
20
+ const articles = await contentProvider({ type: 'articles' }, context);
21
+ if (articles.length > 0) {
22
+ const dates = articles
23
+ .map((a) => a.dateModified ?? a.datePublished)
24
+ .filter(Boolean);
25
+ if (dates.length > 0) {
26
+ articlesLastmod = dates.sort().at(-1);
27
+ }
25
28
  }
26
29
  }
30
+ catch { }
27
31
  }
28
- catch { }
29
- try {
30
- const pages = await contentProvider({ type: 'pages' }, context);
31
- if (pages.length > 0) {
32
- const dates = pages
33
- .map((p) => p.dateModified ?? p.datePublished)
34
- .filter(Boolean);
35
- if (dates.length > 0) {
36
- pagesLastmod = dates.sort().at(-1);
32
+ if (injectedRoutes.sitemapPages) {
33
+ try {
34
+ const pages = await contentProvider({ type: 'pages' }, context);
35
+ if (pages.length > 0) {
36
+ const dates = pages
37
+ .map((p) => p.dateModified ?? p.datePublished)
38
+ .filter(Boolean);
39
+ if (dates.length > 0) {
40
+ pagesLastmod = dates.sort().at(-1);
41
+ }
37
42
  }
38
43
  }
44
+ catch { }
39
45
  }
40
- catch { }
41
- try {
42
- const videos = await contentProvider({ type: 'videos' }, context);
43
- if (videos.length > 0) {
44
- const dates = videos
45
- .map((v) => v.dateModified ?? v.datePublished)
46
- .filter(Boolean);
47
- if (dates.length > 0) {
48
- videosLastmod = dates.sort().at(-1);
46
+ if (injectedRoutes.sitemapVideos) {
47
+ try {
48
+ const videos = await contentProvider({ type: 'videos' }, context);
49
+ if (videos.length > 0) {
50
+ const dates = videos
51
+ .map((v) => v.dateModified ?? v.datePublished)
52
+ .filter(Boolean);
53
+ if (dates.length > 0) {
54
+ videosLastmod = dates.sort().at(-1);
55
+ }
49
56
  }
50
57
  }
58
+ catch { }
51
59
  }
52
- catch { }
53
- if (config.commerce?.enabled) {
60
+ if (config.commerce?.enabled && injectedRoutes.sitemapProducts) {
54
61
  try {
55
62
  const products = await contentProvider({ type: 'products' }, context);
56
63
  if (products.length > 0) {
@@ -65,10 +72,16 @@ export const GET = async (context) => {
65
72
  catch { }
66
73
  }
67
74
  }
68
- sitemaps.push({ loc: `${site}/sitemap-articles.xml`, lastmod: articlesLastmod });
69
- sitemaps.push({ loc: `${site}/sitemap-pages.xml`, lastmod: pagesLastmod });
70
- sitemaps.push({ loc: `${site}/sitemap-videos.xml`, lastmod: videosLastmod });
71
- if (config.commerce?.enabled) {
75
+ if (injectedRoutes.sitemapArticles) {
76
+ sitemaps.push({ loc: `${site}/sitemap-articles.xml`, lastmod: articlesLastmod });
77
+ }
78
+ if (injectedRoutes.sitemapPages) {
79
+ sitemaps.push({ loc: `${site}/sitemap-pages.xml`, lastmod: pagesLastmod });
80
+ }
81
+ if (injectedRoutes.sitemapVideos) {
82
+ sitemaps.push({ loc: `${site}/sitemap-videos.xml`, lastmod: videosLastmod });
83
+ }
84
+ if (config.commerce?.enabled && injectedRoutes.sitemapProducts) {
72
85
  sitemaps.push({ loc: `${site}/sitemap-products.xml`, lastmod: productsLastmod });
73
86
  }
74
87
  const xml = generateSitemapIndex(sitemaps);
@@ -1 +1 @@
1
- {"version":3,"file":"sitemap-index.js","sourceRoot":"","sources":["../../src/routes/sitemap-index.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AAEvC,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1D,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAA;AAE9B,MAAM,CAAC,MAAM,GAAG,GAAa,KAAK,EAAE,OAAO,EAAE,EAAE;IAC9C,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAA;IAC5C,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAA;IAE5C,MAAM,QAAQ,GAAmB,EAAE,CAAA;IAEnC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAA;IAEvB,qCAAqC;IACrC,IAAI,eAAmC,CAAA;IACvC,IAAI,YAAgC,CAAA;IACpC,IAAI,aAAiC,CAAA;IACrC,IAAI,eAAmC,CAAA;IAEvC,IAAI,eAAe,EAAE,CAAC;QACrB,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,OAAc,CAAC,CAAA;YAC5E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,QAAQ;qBACpB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,aAAa,CAAC;qBAC7C,MAAM,CAAC,OAAO,CAAa,CAAA;gBAC7B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;gBACtC,CAAC;YACF,CAAC;QACF,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAEV,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAc,CAAC,CAAA;YACtE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,KAAK;qBACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,aAAa,CAAC;qBAC7C,MAAM,CAAC,OAAO,CAAa,CAAA;gBAC7B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;gBACnC,CAAC;YACF,CAAC;QACF,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAEV,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAc,CAAC,CAAA;YACxE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,MAAM;qBAClB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,aAAa,CAAC;qBAC7C,MAAM,CAAC,OAAO,CAAa,CAAA;gBAC7B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,aAAa,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;gBACpC,CAAC;YACF,CAAC;QACF,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAEV,IAAI,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACJ,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,OAAc,CAAC,CAAA;gBAC5E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzB,MAAM,KAAK,GAAG,QAAQ;yBACpB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,aAAa,CAAC;yBAC7C,MAAM,CAAC,OAAO,CAAa,CAAA;oBAC7B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACtB,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;oBACtC,CAAC;gBACF,CAAC;YACF,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACX,CAAC;IACF,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,uBAAuB,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAA;IAChF,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,oBAAoB,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAA;IAC1E,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,qBAAqB,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAA;IAE5E,IAAI,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,uBAAuB,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAA;IACjF,CAAC;IAED,MAAM,GAAG,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAA;IAE1C,OAAO,IAAI,QAAQ,CAAC,GAAG,EAAE;QACxB,OAAO,EAAE,EAAE,cAAc,EAAE,gCAAgC,EAAE;KAC7D,CAAC,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"sitemap-index.js","sourceRoot":"","sources":["../../src/routes/sitemap-index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sitemap.d.ts","sourceRoot":"","sources":["../../src/utils/sitemap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,eAAO,MAAM,kBAAkB,uBAAuB,CAAA;AAEtD,MAAM,WAAW,YAAY;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAWD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,CAYrE;AASD,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE,kBAAkB,GACzB,MAAM,CA6CR;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAajE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAoCjE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAyBnE"}
1
+ {"version":3,"file":"sitemap.d.ts","sourceRoot":"","sources":["../../src/utils/sitemap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,eAAO,MAAM,kBAAkB,uBAAuB,CAAA;AAEtD,MAAM,WAAW,YAAY;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAWD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,CAYrE;AASD,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE,kBAAkB,GACzB,MAAM,CA6CR;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAajE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAsCjE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAyBnE"}
@@ -77,7 +77,7 @@ ${entries}
77
77
  }
78
78
  export function generateVideoSitemap(items) {
79
79
  const entries = items
80
- .filter((item) => item.video)
80
+ .filter((item) => Boolean(item.video && (item.video.contentUrl || item.video.embedUrl)))
81
81
  .map((item) => {
82
82
  const v = item.video;
83
83
  const contentUrlTag = v.contentUrl
@@ -1 +1 @@
1
- {"version":3,"file":"sitemap.js","sourceRoot":"","sources":["../../src/utils/sitemap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sitemap.js","sourceRoot":"","sources":["../../src/utils/sitemap.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,11 @@ export interface PageValidationOptions {
6
6
  titleMaxLength: number;
7
7
  descriptionMaxLength: number;
8
8
  heroMinWidth?: number;
9
+ pagePath?: string;
10
+ requireH1?: boolean;
11
+ requireHeroImage?: boolean;
12
+ requireArticleSchema?: boolean;
13
+ requireMaxImagePreviewLarge?: boolean;
9
14
  }
10
15
  /**
11
16
  * Validate a JSON-LD object for common SEO issues.
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IACrC,cAAc,EAAE,MAAM,CAAA;IACtB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAqEhF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,gBAAgB,CAyF3F;AA4BD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,MAAM,WAAW,wBAAwB;IACxC,GAAG,EAAE,MAAM,CAAA;IACX,iBAAiB,EAAE;QAClB,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,qBAAqB,EAAE,MAAM,CAAA;KAC7B,CAAA;CACD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,wBAAwB,EAAE,CAkC5F;AAID,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,SAAS,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAAC,EAC9C,eAAe,EACf,KAAK,GACL,EAAE;IACF,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC5B,KAAK,EAAE,WAAW,EAAE,CAAA;CACpB,GAAG,mBAAmB,EAAE,CAmBxB"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IACrC,cAAc,EAAE,MAAM,CAAA;IACtB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACrC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAqEhF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,gBAAgB,CA8G3F;AA6FD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,MAAM,WAAW,wBAAwB;IACxC,GAAG,EAAE,MAAM,CAAA;IACX,iBAAiB,EAAE;QAClB,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,qBAAqB,EAAE,MAAM,CAAA;KAC7B,CAAA;CACD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,wBAAwB,EAAE,CAkC5F;AAID,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,SAAS,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAAC,EAC9C,eAAe,EACf,KAAK,GACL,EAAE;IACF,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC5B,KAAK,EAAE,WAAW,EAAE,CAAA;CACpB,GAAG,mBAAmB,EAAE,CAmBxB"}
@@ -109,7 +109,7 @@ export function validatePage(html, options) {
109
109
  const ogImageMatch = html.match(/<meta\s[^>]*property=["']og:image["'][^>]*>/i) ??
110
110
  html.match(/<meta\s[^>]*property=og:image[^>]*>/i);
111
111
  if (!ogImageMatch) {
112
- warnings.push('Missing og:image meta tag');
112
+ pushIssue(options.requireHeroImage, errors, warnings, 'Missing hero image og:image meta tag');
113
113
  }
114
114
  // og:image:width check against heroMinWidth
115
115
  if (options.heroMinWidth) {
@@ -121,26 +121,100 @@ export function validatePage(html, options) {
121
121
  if (widthContentMatch) {
122
122
  const width = Number(widthContentMatch[1]);
123
123
  if (!Number.isNaN(width) && width < options.heroMinWidth) {
124
- warnings.push(`Hero image width ${width}px is below minimum ${options.heroMinWidth}px`);
124
+ pushIssue(options.requireHeroImage, errors, warnings, `Hero image width ${width}px is below minimum ${options.heroMinWidth}px`);
125
125
  }
126
126
  }
127
+ else if (options.requireHeroImage) {
128
+ errors.push(`Hero image width is missing; minimum is ${options.heroMinWidth}px`);
129
+ }
130
+ }
131
+ else if (options.requireHeroImage && ogImageMatch) {
132
+ errors.push(`Hero image width is missing; minimum is ${options.heroMinWidth}px`);
127
133
  }
128
134
  }
129
135
  // H1 checks
130
136
  const h1Matches = html.match(/<h1[\s>]/gi) ?? [];
131
137
  if (h1Matches.length === 0) {
132
- warnings.push('Missing H1 tag');
138
+ pushIssue(options.requireH1, errors, warnings, 'Missing H1 tag');
133
139
  }
134
140
  else if (h1Matches.length > 1) {
135
- warnings.push(`Multiple H1 tags found (${h1Matches.length})`);
141
+ pushIssue(options.requireH1, errors, warnings, `Multiple H1 tags found (${h1Matches.length})`);
136
142
  }
137
143
  // JSON-LD presence check
138
144
  const jsonLdMatch = html.match(/<script\s[^>]*type=["']application\/ld\+json["'][^>]*>/i);
139
145
  if (!jsonLdMatch) {
140
146
  warnings.push('Missing JSON-LD structured data');
141
147
  }
148
+ if (options.requireArticleSchema &&
149
+ isLikelyArticlePath(options.pagePath) &&
150
+ !hasArticleJsonLd(html)) {
151
+ errors.push('Missing valid Article JSON-LD for article route');
152
+ }
153
+ if (options.requireMaxImagePreviewLarge && !hasMaxImagePreviewLarge(html)) {
154
+ errors.push('Missing robots max-image-preview:large directive');
155
+ }
142
156
  return { errors, warnings };
143
157
  }
158
+ function pushIssue(asError, errors, warnings, message) {
159
+ if (asError)
160
+ errors.push(message);
161
+ else
162
+ warnings.push(message);
163
+ }
164
+ function isLikelyArticlePath(pagePath) {
165
+ if (!pagePath)
166
+ return false;
167
+ return /\/(article|articles|news|story|stories)\//i.test(pagePath);
168
+ }
169
+ function hasArticleJsonLd(html) {
170
+ for (const rawJson of extractJsonLdBodies(html)) {
171
+ try {
172
+ const parsed = JSON.parse(rawJson);
173
+ if (hasArticleType(parsed))
174
+ return true;
175
+ }
176
+ catch { }
177
+ }
178
+ return false;
179
+ }
180
+ function extractJsonLdBodies(html) {
181
+ const bodies = [];
182
+ const pattern = /<script\s[^>]*type=["']application\/ld\+json["'][^>]*>([\s\S]*?)<\/script>/gi;
183
+ for (const match of html.matchAll(pattern)) {
184
+ if (match[1])
185
+ bodies.push(match[1].trim());
186
+ }
187
+ return bodies;
188
+ }
189
+ function hasArticleType(value) {
190
+ if (Array.isArray(value))
191
+ return value.some(hasArticleType);
192
+ if (!isRecord(value))
193
+ return false;
194
+ const type = value['@type'];
195
+ if (type === 'Article' || type === 'NewsArticle' || type === 'BlogPosting')
196
+ return true;
197
+ if (Array.isArray(type) &&
198
+ type.some((item) => item === 'Article' || item === 'NewsArticle' || item === 'BlogPosting')) {
199
+ return true;
200
+ }
201
+ return hasArticleType(value['@graph']);
202
+ }
203
+ function hasMaxImagePreviewLarge(html) {
204
+ const metaTags = html.match(/<meta\s+[^>]*>/gi) ?? [];
205
+ for (const tag of metaTags) {
206
+ if (getHtmlAttr(tag, 'name')?.toLowerCase() !== 'robots')
207
+ continue;
208
+ const content = getHtmlAttr(tag, 'content')?.toLowerCase() ?? '';
209
+ const directives = content.split(',').map((part) => part.trim());
210
+ if (directives.includes('max-image-preview:large'))
211
+ return true;
212
+ }
213
+ return false;
214
+ }
215
+ function isRecord(value) {
216
+ return typeof value === 'object' && value !== null;
217
+ }
144
218
  function isNoindexMetaRefreshRedirect(html) {
145
219
  const metaTags = html.match(/<meta\s+[^>]*>/gi) ?? [];
146
220
  const hasRefresh = metaTags.some((tag) => getHtmlAttr(tag, 'http-equiv')?.toLowerCase() === 'refresh');
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@growth-labs/seo",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "type": "module",
5
5
  "types": "./dist/index.d.ts",
6
6
  "exports": {
package/src/index.ts CHANGED
@@ -89,53 +89,65 @@ export default function seo(userOptions: SeoOptions): AstroIntegration {
89
89
 
90
90
  const injected: string[] = []
91
91
  const skipped: Array<{ pattern: string; reason: string }> = []
92
+ const injectedRoutes = options.injectedRoutes
92
93
 
93
- // ─── Sitemaps (provider-wired gated) ───
94
- if (providerWired) {
95
- injectRoute({
96
- pattern: SITEMAP_INDEX_PATH,
97
- entrypoint: resolveEntrypoint('./routes/sitemap-index'),
98
- prerender: false,
99
- })
100
- injected.push(SITEMAP_INDEX_PATH)
94
+ const injectSeoRoute = (pattern: string, entrypoint: string) => {
101
95
  injectRoute({
102
- pattern: '/sitemap-articles.xml',
103
- entrypoint: resolveEntrypoint('./routes/sitemap-articles'),
96
+ pattern,
97
+ entrypoint: resolveEntrypoint(entrypoint),
104
98
  prerender: false,
105
99
  })
106
- injected.push('/sitemap-articles.xml')
107
- injectRoute({
108
- pattern: '/sitemap-pages.xml',
109
- entrypoint: resolveEntrypoint('./routes/sitemap-pages'),
110
- prerender: false,
111
- })
112
- injected.push('/sitemap-pages.xml')
113
- injectRoute({
114
- pattern: '/sitemap-videos.xml',
115
- entrypoint: resolveEntrypoint('./routes/sitemap-videos'),
116
- prerender: false,
100
+ injected.push(pattern)
101
+ }
102
+
103
+ const skipDisabledRoute = (pattern: string, optionName: string) => {
104
+ skipped.push({
105
+ pattern,
106
+ reason: `injectedRoutes.${optionName} is false`,
117
107
  })
118
- injected.push('/sitemap-videos.xml')
119
- if (options.commerce?.enabled) {
120
- injectRoute({
121
- pattern: '/sitemap-products.xml',
122
- entrypoint: resolveEntrypoint('./routes/sitemap-products'),
123
- prerender: false,
124
- })
125
- injected.push('/sitemap-products.xml')
108
+ }
109
+
110
+ // ─── Sitemaps (provider-wired gated) ───
111
+ if (providerWired) {
112
+ if (injectedRoutes.sitemapIndex) {
113
+ injectSeoRoute(SITEMAP_INDEX_PATH, './routes/sitemap-index')
114
+ } else {
115
+ skipDisabledRoute(SITEMAP_INDEX_PATH, 'sitemapIndex')
116
+ }
117
+
118
+ if (injectedRoutes.sitemapArticles) {
119
+ injectSeoRoute('/sitemap-articles.xml', './routes/sitemap-articles')
120
+ } else {
121
+ skipDisabledRoute('/sitemap-articles.xml', 'sitemapArticles')
122
+ }
123
+
124
+ if (injectedRoutes.sitemapPages) {
125
+ injectSeoRoute('/sitemap-pages.xml', './routes/sitemap-pages')
126
+ } else {
127
+ skipDisabledRoute('/sitemap-pages.xml', 'sitemapPages')
128
+ }
129
+
130
+ if (injectedRoutes.sitemapVideos) {
131
+ injectSeoRoute('/sitemap-videos.xml', './routes/sitemap-videos')
132
+ } else {
133
+ skipDisabledRoute('/sitemap-videos.xml', 'sitemapVideos')
134
+ }
135
+
136
+ if (!injectedRoutes.sitemapProducts) {
137
+ skipDisabledRoute('/sitemap-products.xml', 'sitemapProducts')
138
+ } else if (options.commerce?.enabled) {
139
+ injectSeoRoute('/sitemap-products.xml', './routes/sitemap-products')
126
140
  } else {
127
141
  skipped.push({
128
142
  pattern: '/sitemap-products.xml',
129
143
  reason: 'commerce.enabled is false',
130
144
  })
131
145
  }
132
- if (options.markdownSitemap && aeo && aeo.mode !== 'middleware') {
133
- injectRoute({
134
- pattern: '/sitemap-markdown.xml',
135
- entrypoint: resolveEntrypoint('./routes/sitemap-markdown'),
136
- prerender: false,
137
- })
138
- injected.push('/sitemap-markdown.xml')
146
+
147
+ if (!injectedRoutes.sitemapMarkdown) {
148
+ skipDisabledRoute('/sitemap-markdown.xml', 'sitemapMarkdown')
149
+ } else if (options.markdownSitemap && aeo && aeo.mode !== 'middleware') {
150
+ injectSeoRoute('/sitemap-markdown.xml', './routes/sitemap-markdown')
139
151
  } else if (options.markdownSitemap) {
140
152
  skipped.push({
141
153
  pattern: '/sitemap-markdown.xml',
@@ -313,12 +325,17 @@ export default function seo(userOptions: SeoOptions): AstroIntegration {
313
325
 
314
326
  for (const file of htmlFiles) {
315
327
  const html = readFileSync(file, 'utf-8')
328
+ const relPath = file.replace(outDir, '')
316
329
  const result = validatePage(html, {
317
330
  titleMaxLength: options.validation.titleMaxLength,
318
331
  descriptionMaxLength: options.validation.descriptionMaxLength,
319
332
  heroMinWidth: options.validation.heroMinWidth,
333
+ pagePath: relPath,
334
+ requireH1: options.validation.requireH1,
335
+ requireHeroImage: options.validation.requireHeroImage,
336
+ requireArticleSchema: options.validation.requireArticleSchema,
337
+ requireMaxImagePreviewLarge: options.validation.requireMaxImagePreviewLarge,
320
338
  })
321
- const relPath = file.replace(outDir, '')
322
339
  for (const error of result.errors) {
323
340
  logger.error(`${relPath}: ${error}`)
324
341
  errorCount++
@@ -352,6 +369,9 @@ export default function seo(userOptions: SeoOptions): AstroIntegration {
352
369
 
353
370
  if (errorCount || warningCount) {
354
371
  logger.info(`SEO validation: ${errorCount} errors, ${warningCount} warnings`)
372
+ if (errorCount > 0) {
373
+ throw new Error(`[@growth-labs/seo] SEO validation failed with ${errorCount} errors`)
374
+ }
355
375
  } else {
356
376
  logger.info('SEO validation: all checks passed')
357
377
  }
package/src/options.ts CHANGED
@@ -185,6 +185,19 @@ const crawlerPolicySchema = z
185
185
  })
186
186
  .default({})
187
187
 
188
+ // ─── Injected route ownership ───
189
+
190
+ const injectedRoutesSchema = z
191
+ .object({
192
+ sitemapIndex: z.boolean().default(true),
193
+ sitemapArticles: z.boolean().default(true),
194
+ sitemapPages: z.boolean().default(true),
195
+ sitemapVideos: z.boolean().default(true),
196
+ sitemapProducts: z.boolean().default(true),
197
+ sitemapMarkdown: z.boolean().default(true),
198
+ })
199
+ .default({})
200
+
188
201
  // ─── Main schema ───
189
202
 
190
203
  const siteUrlSchema = z.union([
@@ -217,6 +230,10 @@ export const seoOptionsSchema = z.object({
217
230
  markdownSitemap: z.boolean().default(true),
218
231
  rss: z.boolean().default(false),
219
232
 
233
+ // ─── Injected route ownership ───
234
+ // Set a route false when the consumer application owns that public path.
235
+ injectedRoutes: injectedRoutesSchema,
236
+
220
237
  // ─── AEO twins ───
221
238
  // Boolean form = { mode: 'static' } when true, no twins emitted when false.
222
239
  aeoTwins: z.union([z.boolean(), aeoTwinsObjectSchema]).default(false),
@@ -269,6 +286,10 @@ export const seoOptionsSchema = z.object({
269
286
  heroMinWidth: z.number().default(1200),
270
287
  titleMaxLength: z.number().default(110),
271
288
  descriptionMaxLength: z.number().default(160),
289
+ requireH1: z.boolean().default(true),
290
+ requireHeroImage: z.boolean().default(true),
291
+ requireArticleSchema: z.boolean().default(true),
292
+ requireMaxImagePreviewLarge: z.boolean().default(true),
272
293
  enabled: z.boolean().default(true),
273
294
  })
274
295
  .default({}),
@@ -14,6 +14,7 @@ export const GET: APIRoute = async (context) => {
14
14
  const sitemaps: SitemapEntry[] = []
15
15
 
16
16
  const { site } = config
17
+ const injectedRoutes = config.injectedRoutes
17
18
 
18
19
  // Fetch articles lastmod if possible
19
20
  let articlesLastmod: string | undefined
@@ -22,43 +23,49 @@ export const GET: APIRoute = async (context) => {
22
23
  let productsLastmod: string | undefined
23
24
 
24
25
  if (contentProvider) {
25
- try {
26
- const articles = await contentProvider({ type: 'articles' }, context as any)
27
- if (articles.length > 0) {
28
- const dates = articles
29
- .map((a) => a.dateModified ?? a.datePublished)
30
- .filter(Boolean) as string[]
31
- if (dates.length > 0) {
32
- articlesLastmod = dates.sort().at(-1)
26
+ if (injectedRoutes.sitemapArticles) {
27
+ try {
28
+ const articles = await contentProvider({ type: 'articles' }, context as any)
29
+ if (articles.length > 0) {
30
+ const dates = articles
31
+ .map((a) => a.dateModified ?? a.datePublished)
32
+ .filter(Boolean) as string[]
33
+ if (dates.length > 0) {
34
+ articlesLastmod = dates.sort().at(-1)
35
+ }
33
36
  }
34
- }
35
- } catch {}
37
+ } catch {}
38
+ }
36
39
 
37
- try {
38
- const pages = await contentProvider({ type: 'pages' }, context as any)
39
- if (pages.length > 0) {
40
- const dates = pages
41
- .map((p) => p.dateModified ?? p.datePublished)
42
- .filter(Boolean) as string[]
43
- if (dates.length > 0) {
44
- pagesLastmod = dates.sort().at(-1)
40
+ if (injectedRoutes.sitemapPages) {
41
+ try {
42
+ const pages = await contentProvider({ type: 'pages' }, context as any)
43
+ if (pages.length > 0) {
44
+ const dates = pages
45
+ .map((p) => p.dateModified ?? p.datePublished)
46
+ .filter(Boolean) as string[]
47
+ if (dates.length > 0) {
48
+ pagesLastmod = dates.sort().at(-1)
49
+ }
45
50
  }
46
- }
47
- } catch {}
51
+ } catch {}
52
+ }
48
53
 
49
- try {
50
- const videos = await contentProvider({ type: 'videos' }, context as any)
51
- if (videos.length > 0) {
52
- const dates = videos
53
- .map((v) => v.dateModified ?? v.datePublished)
54
- .filter(Boolean) as string[]
55
- if (dates.length > 0) {
56
- videosLastmod = dates.sort().at(-1)
54
+ if (injectedRoutes.sitemapVideos) {
55
+ try {
56
+ const videos = await contentProvider({ type: 'videos' }, context as any)
57
+ if (videos.length > 0) {
58
+ const dates = videos
59
+ .map((v) => v.dateModified ?? v.datePublished)
60
+ .filter(Boolean) as string[]
61
+ if (dates.length > 0) {
62
+ videosLastmod = dates.sort().at(-1)
63
+ }
57
64
  }
58
- }
59
- } catch {}
65
+ } catch {}
66
+ }
60
67
 
61
- if (config.commerce?.enabled) {
68
+ if (config.commerce?.enabled && injectedRoutes.sitemapProducts) {
62
69
  try {
63
70
  const products = await contentProvider({ type: 'products' }, context as any)
64
71
  if (products.length > 0) {
@@ -73,11 +80,17 @@ export const GET: APIRoute = async (context) => {
73
80
  }
74
81
  }
75
82
 
76
- sitemaps.push({ loc: `${site}/sitemap-articles.xml`, lastmod: articlesLastmod })
77
- sitemaps.push({ loc: `${site}/sitemap-pages.xml`, lastmod: pagesLastmod })
78
- sitemaps.push({ loc: `${site}/sitemap-videos.xml`, lastmod: videosLastmod })
83
+ if (injectedRoutes.sitemapArticles) {
84
+ sitemaps.push({ loc: `${site}/sitemap-articles.xml`, lastmod: articlesLastmod })
85
+ }
86
+ if (injectedRoutes.sitemapPages) {
87
+ sitemaps.push({ loc: `${site}/sitemap-pages.xml`, lastmod: pagesLastmod })
88
+ }
89
+ if (injectedRoutes.sitemapVideos) {
90
+ sitemaps.push({ loc: `${site}/sitemap-videos.xml`, lastmod: videosLastmod })
91
+ }
79
92
 
80
- if (config.commerce?.enabled) {
93
+ if (config.commerce?.enabled && injectedRoutes.sitemapProducts) {
81
94
  sitemaps.push({ loc: `${site}/sitemap-products.xml`, lastmod: productsLastmod })
82
95
  }
83
96