@growth-labs/seo 0.2.7 → 0.3.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/README.md +20 -7
- package/dist/_internal/state.d.ts +7 -0
- package/dist/_internal/state.d.ts.map +1 -0
- package/dist/_internal/state.js +18 -0
- package/dist/_internal/state.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +161 -44
- package/dist/index.js.map +1 -1
- package/dist/middleware/seo.d.ts.map +1 -1
- package/dist/middleware/seo.js +1 -1
- package/dist/middleware/seo.js.map +1 -1
- package/dist/options.d.ts +87 -40
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +22 -6
- package/dist/options.js.map +1 -1
- package/dist/routes/aeo-twin.js +1 -1
- package/dist/routes/aeo-twin.js.map +1 -1
- package/dist/routes/apple-news.d.ts.map +1 -1
- package/dist/routes/apple-news.js +3 -2
- package/dist/routes/apple-news.js.map +1 -1
- package/dist/routes/llms-full.js +1 -1
- package/dist/routes/llms-full.js.map +1 -1
- package/dist/routes/llms.js +1 -1
- package/dist/routes/llms.js.map +1 -1
- package/dist/routes/podcast-narration.d.ts.map +1 -1
- package/dist/routes/podcast-narration.js +3 -2
- package/dist/routes/podcast-narration.js.map +1 -1
- package/dist/routes/podcast.d.ts.map +1 -1
- package/dist/routes/podcast.js +3 -2
- package/dist/routes/podcast.js.map +1 -1
- package/dist/routes/revalidate.d.ts.map +1 -1
- package/dist/routes/revalidate.js +5 -3
- package/dist/routes/revalidate.js.map +1 -1
- package/dist/routes/robots.d.ts.map +1 -1
- package/dist/routes/robots.js +9 -3
- package/dist/routes/robots.js.map +1 -1
- package/dist/routes/rss.d.ts.map +1 -1
- package/dist/routes/rss.js +3 -2
- package/dist/routes/rss.js.map +1 -1
- package/dist/routes/sitemap-articles.js +1 -1
- package/dist/routes/sitemap-articles.js.map +1 -1
- package/dist/routes/sitemap-index.d.ts.map +1 -1
- package/dist/routes/sitemap-index.js +3 -2
- package/dist/routes/sitemap-index.js.map +1 -1
- package/dist/routes/sitemap-markdown.js +1 -1
- package/dist/routes/sitemap-markdown.js.map +1 -1
- package/dist/routes/sitemap-pages.js +1 -1
- package/dist/routes/sitemap-pages.js.map +1 -1
- package/dist/routes/sitemap-products.js +1 -1
- package/dist/routes/sitemap-products.js.map +1 -1
- package/dist/routes/sitemap-videos.js +1 -1
- package/dist/routes/sitemap-videos.js.map +1 -1
- package/dist/runtime.d.ts +1 -5
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +3 -5
- package/dist/runtime.js.map +1 -1
- package/dist/site-url-core.d.ts +10 -0
- package/dist/site-url-core.d.ts.map +1 -0
- package/dist/site-url-core.js +46 -0
- package/dist/site-url-core.js.map +1 -0
- package/dist/site-url.d.ts +5 -0
- package/dist/site-url.d.ts.map +1 -0
- package/dist/site-url.js +9 -0
- package/dist/site-url.js.map +1 -0
- package/dist/utils/apple-news-rss.d.ts +2 -2
- package/dist/utils/apple-news-rss.d.ts.map +1 -1
- package/dist/utils/define-content-provider.d.ts +61 -0
- package/dist/utils/define-content-provider.d.ts.map +1 -0
- package/dist/utils/define-content-provider.js +38 -0
- package/dist/utils/define-content-provider.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/json-ld/organization.d.ts +2 -2
- package/dist/utils/json-ld/organization.d.ts.map +1 -1
- package/dist/utils/json-ld/organization.js.map +1 -1
- package/dist/utils/json-ld/website.d.ts +2 -2
- package/dist/utils/json-ld/website.d.ts.map +1 -1
- package/dist/utils/json-ld/website.js.map +1 -1
- package/dist/utils/podcast.d.ts +2 -2
- package/dist/utils/podcast.d.ts.map +1 -1
- package/dist/utils/podcast.js.map +1 -1
- package/dist/utils/robots.d.ts +13 -2
- package/dist/utils/robots.d.ts.map +1 -1
- package/dist/utils/robots.js +4 -4
- package/dist/utils/robots.js.map +1 -1
- package/dist/utils/rss.d.ts +2 -2
- package/dist/utils/rss.d.ts.map +1 -1
- package/dist/utils/rss.js.map +1 -1
- package/dist/utils/seo-head.d.ts +22 -0
- package/dist/utils/seo-head.d.ts.map +1 -0
- package/dist/utils/seo-head.js +40 -0
- package/dist/utils/seo-head.js.map +1 -0
- package/dist/vite-plugin.d.ts.map +1 -1
- package/dist/vite-plugin.js +2 -2
- package/dist/vite-plugin.js.map +1 -1
- package/package.json +8 -4
- package/src/components/AeoHead.astro +2 -1
- package/src/components/SeoHead.astro +30 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization.js","sourceRoot":"","sources":["../../../src/utils/json-ld/organization.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,0BAA0B,CAAC,
|
|
1
|
+
{"version":3,"file":"organization.js","sourceRoot":"","sources":["../../../src/utils/json-ld/organization.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,0BAA0B,CAAC,OAAmC;IAC7E,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAEhD,MAAM,MAAM,GAAiB;QAC5B,UAAU,EAAE,oBAAoB;QAChC,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE,YAAY,CAAC,IAAI;QACvB,GAAG,EAAE,YAAY,CAAC,GAAG,IAAI,IAAI;QAC7B,IAAI,EAAE;YACL,OAAO,EAAE,aAAa;YACtB,GAAG,EAAE,YAAY,CAAC,IAAI;SACtB;KACD,CAAA;IAED,IAAI,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QACjC,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAA;IACpC,CAAC;IAED,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAA;QACpC,MAAM,SAAS,GAAiB;YAC/B,OAAO,EAAE,sBAAsB;YAC/B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,oBAAoB,EAAE,sBAAsB,MAAM,CAAC,oBAAoB,EAAE;SACzE,CAAA;QACD,IAAI,MAAM,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YAC7C,SAAS,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAA;QACzD,CAAC;QACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACzB,SAAS,CAAC,YAAY,GAAG,sBAAsB,MAAM,CAAC,YAAY,EAAE,CAAA;QACrE,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACvB,SAAS,CAAC,UAAU,GAAG,sBAAsB,MAAM,CAAC,UAAU,EAAE,CAAA;QACjE,CAAC;QACD,MAAM,CAAC,uBAAuB,GAAG,SAAS,CAAA;IAC3C,CAAC;IAED,OAAO,MAAM,CAAA;AACd,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SeoOptionsWithResolvedSite } from '../../options.js';
|
|
2
2
|
import type { JsonLdObject } from '../../types.js';
|
|
3
|
-
export declare function generateWebSiteJsonLd(options:
|
|
3
|
+
export declare function generateWebSiteJsonLd(options: SeoOptionsWithResolvedSite): JsonLdObject;
|
|
4
4
|
//# sourceMappingURL=website.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"website.d.ts","sourceRoot":"","sources":["../../../src/utils/json-ld/website.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"website.d.ts","sourceRoot":"","sources":["../../../src/utils/json-ld/website.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,0BAA0B,GAAG,YAAY,CAuBvF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"website.js","sourceRoot":"","sources":["../../../src/utils/json-ld/website.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,qBAAqB,CAAC,
|
|
1
|
+
{"version":3,"file":"website.js","sourceRoot":"","sources":["../../../src/utils/json-ld/website.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,qBAAqB,CAAC,OAAmC;IACxE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IAE/C,MAAM,MAAM,GAAiB;QAC5B,UAAU,EAAE,oBAAoB;QAChC,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,YAAY,CAAC,IAAI;QACvB,GAAG,EAAE,IAAI;QACT,eAAe,EAAE;YAChB,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE;gBACP,OAAO,EAAE,YAAY;gBACrB,WAAW,EAAE,GAAG,IAAI,0BAA0B;aAC9C;YACD,aAAa,EAAE,kCAAkC;SACjD;KACD,CAAA;IAED,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACrB,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAC/C,CAAC;IAED,OAAO,MAAM,CAAA;AACd,CAAC"}
|
package/dist/utils/podcast.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SeoOptionsWithResolvedSite } from '../options.js';
|
|
2
2
|
import type { ContentItem } from '../types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Convert ISO 8601 duration (e.g. PT8M30S, PT1H2M3S) to M:SS or H:MM:SS
|
|
5
5
|
*/
|
|
6
6
|
export declare function convertIso8601Duration(duration: string): string;
|
|
7
|
-
export declare function generatePodcastFeed(episodes: ContentItem[], options:
|
|
7
|
+
export declare function generatePodcastFeed(episodes: ContentItem[], options: SeoOptionsWithResolvedSite): string;
|
|
8
8
|
//# sourceMappingURL=podcast.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"podcast.d.ts","sourceRoot":"","sources":["../../src/utils/podcast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"podcast.d.ts","sourceRoot":"","sources":["../../src/utils/podcast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAW9C;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAe/D;AAMD,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE,0BAA0B,GACjC,MAAM,CAwER"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"podcast.js","sourceRoot":"","sources":["../../src/utils/podcast.ts"],"names":[],"mappings":"AAGA,SAAS,SAAS,CAAC,GAAW;IAC7B,OAAO,GAAG;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAA;IACrE,IAAI,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAA;IAE3B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;IAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;IAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;IAE7C,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACf,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAC3C,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAC3C,OAAO,GAAG,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE,CAAA;IAC9B,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC3C,OAAO,GAAG,OAAO,IAAI,EAAE,EAAE,CAAA;AAC1B,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe;IAChC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,mBAAmB,
|
|
1
|
+
{"version":3,"file":"podcast.js","sourceRoot":"","sources":["../../src/utils/podcast.ts"],"names":[],"mappings":"AAGA,SAAS,SAAS,CAAC,GAAW;IAC7B,OAAO,GAAG;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAA;IACrE,IAAI,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAA;IAE3B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;IAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;IAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;IAE7C,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACf,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAC3C,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAC3C,OAAO,GAAG,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE,CAAA;IAC9B,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC3C,OAAO,GAAG,OAAO,IAAI,EAAE,EAAE,CAAA;AAC1B,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe;IAChC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAClC,QAAuB,EACvB,OAAmC;IAEnC,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,OAAO,CAAA;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;IAE/B,6DAA6D;IAC7D,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,YAAY,CAAC,IAAI,CAAA;IACnD,MAAM,YAAY,GAAG,OAAO,EAAE,KAAK,IAAI,YAAY,CAAC,IAAI,CAAA;IACxD,MAAM,kBAAkB,GAAG,OAAO,EAAE,WAAW,IAAI,EAAE,CAAA;IACrD,MAAM,YAAY,GAAG,OAAO,EAAE,KAAK,IAAI,YAAY,CAAC,IAAI,CAAA;IACxD,MAAM,eAAe,GAAG,OAAO,EAAE,QAAQ,IAAI,YAAY,CAAA;IACzD,MAAM,eAAe,GAAG,OAAO,EAAE,QAAQ,IAAI,IAAI,CAAA;IACjD,MAAM,eAAe,GAAG,OAAO,EAAE,QAAQ,IAAI,KAAK,CAAA;IAClD,MAAM,WAAW,GAAG,OAAO,EAAE,IAAI,IAAI,UAAU,CAAA;IAC/C,MAAM,UAAU,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAA;IAEvC,MAAM,WAAW,GAAG,QAAQ;SAC1B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACb,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACtE,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,oBAAoB,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;QACpF,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW;YAC/B,CAAC,CAAC,wBAAwB,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB;YACrE,CAAC,CAAC,EAAE,CAAA;QAEL,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK;YAC9B,CAAC,CAAC,2BAA2B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC;YACxF,CAAC,CAAC,EAAE,CAAA;QAEL,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ;YACvC,CAAC,CAAC,4BAA4B,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,oBAAoB;YACxG,CAAC,CAAC,EAAE,CAAA;QAEL,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAA;QAC9B,MAAM,UAAU,GACf,EAAE,EAAE,aAAa,IAAI,IAAI;YACxB,CAAC,CAAC,2BAA2B,EAAE,CAAC,aAAa,mBAAmB;YAChE,CAAC,CAAC,EAAE,CAAA;QACN,MAAM,SAAS,GACd,EAAE,EAAE,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,0BAA0B,EAAE,CAAC,YAAY,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAA;QAC5F,MAAM,cAAc,GAAG,EAAE,EAAE,WAAW;YACrC,CAAC,CAAC,+BAA+B,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,uBAAuB;YACjF,CAAC,CAAC,EAAE,CAAA;QAEL,OAAO;eACK,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;cACtB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;iCACA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,UAAU,GAAG,OAAO,GAAG,YAAY,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,cAAc;YAC7I,CAAA;IACV,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAA;IAEZ,OAAO;;;;;;aAMK,SAAS,CAAC,YAAY,CAAC;mBACjB,SAAS,CAAC,kBAAkB,CAAC;YACpC,SAAS,CAAC,IAAI,CAAC;gBACX,SAAS,CAAC,eAAe,CAAC;qBACrB,SAAS,CAAC,MAAM,CAAC;;qBAEjB,SAAS,CAAC,MAAM,CAAC;sBAChB,SAAS,CAAC,UAAU,CAAC;;0BAEjB,SAAS,CAAC,YAAY,CAAC;6BACpB,SAAS,CAAC,eAAe,CAAC;uBAChC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;mBACtC,SAAS,CAAC,WAAW,CAAC;EACvC,WAAW;;OAEN,CAAA;AACP,CAAC"}
|
package/dist/utils/robots.d.ts
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export
|
|
1
|
+
import type { SeoOptionsWithResolvedSite } from '../options.js';
|
|
2
|
+
export interface GenerateRobotsTxtOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Emit a `Sitemap:` line pointing at SITEMAP_INDEX_PATH.
|
|
5
|
+
*
|
|
6
|
+
* The caller is responsible for ensuring the sitemap index route is
|
|
7
|
+
* actually being served. Pass `false` when no content provider is wired;
|
|
8
|
+
* otherwise crawlers follow the Sitemap: line to an empty or 404 index,
|
|
9
|
+
* which is a live, crawler-visible SEO regression.
|
|
10
|
+
*/
|
|
11
|
+
includeSitemap: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function generateRobotsTxt(options: SeoOptionsWithResolvedSite, { includeSitemap }: GenerateRobotsTxtOptions): string;
|
|
3
14
|
//# sourceMappingURL=robots.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAA;AAG/D,MAAM,WAAW,wBAAwB;IACxC;;;;;;;OAOG;IACH,cAAc,EAAE,OAAO,CAAA;CACvB;AAED,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,0BAA0B,EACnC,EAAE,cAAc,EAAE,EAAE,wBAAwB,GAC1C,MAAM,CA4BR"}
|
package/dist/utils/robots.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { SITEMAP_INDEX_PATH } from './sitemap.js';
|
|
2
|
-
export function generateRobotsTxt(options) {
|
|
2
|
+
export function generateRobotsTxt(options, { includeSitemap }) {
|
|
3
3
|
const { site, robots } = options;
|
|
4
4
|
const lines = [];
|
|
5
|
-
// Default rules
|
|
6
5
|
lines.push('User-agent: *');
|
|
7
6
|
lines.push('Allow: /');
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
if (includeSitemap) {
|
|
8
|
+
lines.push(`Sitemap: ${new URL(SITEMAP_INDEX_PATH, site).toString()}`);
|
|
9
|
+
}
|
|
10
10
|
if (robots.additionalRules?.length) {
|
|
11
11
|
for (const rule of robots.additionalRules) {
|
|
12
12
|
lines.push('');
|
package/dist/utils/robots.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robots.js","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"robots.js","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAcjD,MAAM,UAAU,iBAAiB,CAChC,OAAmC,EACnC,EAAE,cAAc,EAA4B;IAE5C,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAChC,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAC3B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACtB,IAAI,cAAc,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IACvE,CAAC;IAED,IAAI,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;QACpC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACd,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;YAC3C,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;gBACxB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC/B,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAA;gBAC7B,CAAC;YACF,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;gBAC3B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAClC,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAA;gBAChC,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;AAC/B,CAAC"}
|
package/dist/utils/rss.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SeoOptionsWithResolvedSite } from '../options.js';
|
|
2
2
|
import type { ContentItem } from '../types.js';
|
|
3
|
-
export declare function generateRssFeed(items: ContentItem[], options:
|
|
3
|
+
export declare function generateRssFeed(items: ContentItem[], options: SeoOptionsWithResolvedSite, description?: string): string;
|
|
4
4
|
//# sourceMappingURL=rss.d.ts.map
|
package/dist/utils/rss.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rss.d.ts","sourceRoot":"","sources":["../../src/utils/rss.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"rss.d.ts","sourceRoot":"","sources":["../../src/utils/rss.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAe9C,wBAAgB,eAAe,CAC9B,KAAK,EAAE,WAAW,EAAE,EACpB,OAAO,EAAE,0BAA0B,EACnC,WAAW,CAAC,EAAE,MAAM,GAClB,MAAM,CA2CR"}
|
package/dist/utils/rss.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rss.js","sourceRoot":"","sources":["../../src/utils/rss.ts"],"names":[],"mappings":"AAGA,SAAS,SAAS,CAAC,GAAW;IAC7B,OAAO,GAAG;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AAC1B,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe;IAChC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,eAAe,CAC9B,KAAoB,EACpB,
|
|
1
|
+
{"version":3,"file":"rss.js","sourceRoot":"","sources":["../../src/utils/rss.ts"],"names":[],"mappings":"AAGA,SAAS,SAAS,CAAC,GAAW;IAC7B,OAAO,GAAG;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AAC1B,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe;IAChC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,eAAe,CAC9B,KAAoB,EACpB,OAAmC,EACnC,WAAoB;IAEpB,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAChD,MAAM,eAAe,GAAG,WAAW,IAAI,YAAY,CAAC,IAAI,CAAA;IACxD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;IAChE,MAAM,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAE9C,MAAM,QAAQ,GAAG,KAAK;SACpB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACb,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACtE,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,oBAAoB,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;QACpF,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW;YAC/B,CAAC,CAAC,wBAAwB,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB;YACrE,CAAC,CAAC,EAAE,CAAA;QACL,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;aACtC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;aACnE,IAAI,CAAC,EAAE,CAAC,CAAA;QACV,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK;YAC9B,CAAC,CAAC,2BAA2B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC;YACxF,CAAC,CAAC,EAAE,CAAA;QAEL,OAAO;eACK,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;cACtB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;iCACA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,YAAY;YACnG,CAAA;IACV,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAA;IAEZ,OAAO;;;;;;aAMK,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC;mBACtB,SAAS,CAAC,eAAe,CAAC;YACjC,SAAS,CAAC,IAAI,CAAC;gBACX,SAAS,CAAC,QAAQ,CAAC;uBACZ,SAAS,CAAC,GAAG,IAAI,WAAW,CAAC;qBAC/B,aAAa;EAChC,QAAQ;;OAEH,CAAA;AACP,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { SeoOptionsWithResolvedSite } from '../options.js';
|
|
2
|
+
import type { ContentItem, JsonLdObject } from '../types.js';
|
|
3
|
+
import type { OgVariant } from './meta.js';
|
|
4
|
+
interface BuildSeoHeadTitleDescriptionOptions {
|
|
5
|
+
item?: ContentItem;
|
|
6
|
+
options: SeoOptionsWithResolvedSite;
|
|
7
|
+
title?: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
}
|
|
10
|
+
interface BuildSeoHeadJsonLdOptions {
|
|
11
|
+
item?: ContentItem;
|
|
12
|
+
options: SeoOptionsWithResolvedSite;
|
|
13
|
+
variant: OgVariant;
|
|
14
|
+
emitJsonLd?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function buildSeoHeadTitleDescription({ item, options, title, description, }: BuildSeoHeadTitleDescriptionOptions): {
|
|
17
|
+
title: string;
|
|
18
|
+
description?: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function buildSeoHeadJsonLd({ item, options, variant, emitJsonLd, }: BuildSeoHeadJsonLdOptions): JsonLdObject[];
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=seo-head.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo-head.d.ts","sourceRoot":"","sources":["../../src/utils/seo-head.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAQ5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAE1C,UAAU,mCAAmC;IAC5C,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,OAAO,EAAE,0BAA0B,CAAA;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,UAAU,yBAAyB;IAClC,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,OAAO,EAAE,0BAA0B,CAAA;IACnC,OAAO,EAAE,SAAS,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,wBAAgB,4BAA4B,CAAC,EAC5C,IAAI,EACJ,OAAO,EACP,KAAK,EACL,WAAW,GACX,EAAE,mCAAmC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAU/E;AAED,wBAAgB,kBAAkB,CAAC,EAClC,IAAI,EACJ,OAAO,EACP,OAAO,EACP,UAAiB,GACjB,EAAE,yBAAyB,GAAG,YAAY,EAAE,CAgC5C"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { generateArticleJsonLd, generateAudioJsonLd, generateProductJsonLd, generateVideoJsonLd, generateWebSiteJsonLd, } from './json-ld/index.js';
|
|
2
|
+
export function buildSeoHeadTitleDescription({ item, options, title, description, }) {
|
|
3
|
+
const baseTitle = title ?? item?.title ?? options.organization.name;
|
|
4
|
+
const suffix = options.defaults.titleSuffix;
|
|
5
|
+
const resolvedTitle = suffix && !baseTitle.endsWith(suffix) ? `${baseTitle}${suffix}` : baseTitle;
|
|
6
|
+
const resolvedDescription = description ?? item?.description;
|
|
7
|
+
return {
|
|
8
|
+
title: resolvedTitle,
|
|
9
|
+
description: resolvedDescription,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function buildSeoHeadJsonLd({ item, options, variant, emitJsonLd = true, }) {
|
|
13
|
+
if (!emitJsonLd)
|
|
14
|
+
return [];
|
|
15
|
+
if (!item) {
|
|
16
|
+
return [generateWebSiteJsonLd(options)];
|
|
17
|
+
}
|
|
18
|
+
const jsonLd = [];
|
|
19
|
+
if (variant === 'article') {
|
|
20
|
+
jsonLd.push(generateArticleJsonLd(item, options));
|
|
21
|
+
}
|
|
22
|
+
else if (variant === 'product' && item.product) {
|
|
23
|
+
jsonLd.push(generateProductJsonLd(item.product, item.url, options));
|
|
24
|
+
}
|
|
25
|
+
else if (variant === 'website') {
|
|
26
|
+
jsonLd.push(generateWebSiteJsonLd(options));
|
|
27
|
+
}
|
|
28
|
+
if (item.video) {
|
|
29
|
+
jsonLd.push(generateVideoJsonLd(item));
|
|
30
|
+
}
|
|
31
|
+
if (item.audio) {
|
|
32
|
+
jsonLd.push(generateAudioJsonLd(item.audio, {
|
|
33
|
+
title: item.title,
|
|
34
|
+
datePublished: item.datePublished,
|
|
35
|
+
articleUrl: item.url,
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
return jsonLd;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=seo-head.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo-head.js","sourceRoot":"","sources":["../../src/utils/seo-head.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,GACrB,MAAM,oBAAoB,CAAA;AAiB3B,MAAM,UAAU,4BAA4B,CAAC,EAC5C,IAAI,EACJ,OAAO,EACP,KAAK,EACL,WAAW,GAC0B;IACrC,MAAM,SAAS,GAAG,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAA;IACnE,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAA;IAC3C,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACjG,MAAM,mBAAmB,GAAG,WAAW,IAAI,IAAI,EAAE,WAAW,CAAA;IAE5D,OAAO;QACN,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,mBAAmB;KAChC,CAAA;AACF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAClC,IAAI,EACJ,OAAO,EACP,OAAO,EACP,UAAU,GAAG,IAAI,GACU;IAC3B,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAA;IAE1B,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAA;IACxC,CAAC;IAED,MAAM,MAAM,GAAmB,EAAE,CAAA;IAEjC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IAClD,CAAC;SAAM,IAAI,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;IACpE,CAAC;SAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAA;IACvC,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CACV,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,UAAU,EAAE,IAAI,CAAC,GAAG;SACpB,CAAC,CACF,CAAA;IACF,CAAC;IAED,OAAO,MAAM,CAAA;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-plugin.d.ts","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAClC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAKtD,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,kBAAkB,CAAA;IAC1B;;;;;;;;;OASG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,GAAG,kBAAkB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"vite-plugin.d.ts","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAClC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAKtD,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,kBAAkB,CAAA;IAC1B;;;;;;;;;OASG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,GAAG,kBAAkB,GAAG,MAAM,CA4C3F"}
|
package/dist/vite-plugin.js
CHANGED
|
@@ -24,7 +24,7 @@ export function growthLabsSeoPlugin(opts) {
|
|
|
24
24
|
// calling getConfig() populate state in whatever environment they run —
|
|
25
25
|
// the main Worker AND the Cloudflare prerender worker.
|
|
26
26
|
const lines = [
|
|
27
|
-
`import { _setConfig, _setContentProvider } from '@growth-labs/seo/state';`,
|
|
27
|
+
`import { _setConfig, _setContentProvider } from '@growth-labs/seo/_internal/state';`,
|
|
28
28
|
];
|
|
29
29
|
if (contentProviderModule) {
|
|
30
30
|
lines.push(`import _cp from ${JSON.stringify(contentProviderModule)};`);
|
|
@@ -35,7 +35,7 @@ export function growthLabsSeoPlugin(opts) {
|
|
|
35
35
|
lines.push(`_setContentProvider(_cp);`);
|
|
36
36
|
}
|
|
37
37
|
lines.push(`export { config };`);
|
|
38
|
-
lines.push(`export { getConfig, getContentProvider } from '@growth-labs/seo/state';`);
|
|
38
|
+
lines.push(`export { getConfig, getContentProvider } from '@growth-labs/seo/_internal/state';`);
|
|
39
39
|
return lines.join('\n');
|
|
40
40
|
},
|
|
41
41
|
};
|
package/dist/vite-plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-plugin.js","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"AAGA,MAAM,iBAAiB,GAAG,gCAAgC,CAAA;AAC1D,MAAM,0BAA0B,GAAG,KAAK,iBAAiB,EAAE,CAAA;AAiB3D,MAAM,UAAU,mBAAmB,CAAC,IAA+C;IAClF,sEAAsE;IACtE,MAAM,UAAU,GACf,QAAQ,IAAI,IAAI,IAAI,MAAM,IAAK,IAA6B,CAAC,MAAM;QAClE,CAAC,CAAE,IAA6B;QAChC,CAAC,CAAC,EAAE,MAAM,EAAE,IAA0B,EAAE,CAAA;IAE1C,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,GAAG,UAAU,CAAA;IACpD,uEAAuE;IACvE,2CAA2C;IAC3C,MAAM,EAAE,eAAe,EAAE,CAAC,EAAE,GAAG,YAAY,EAAE,GAAG,MAAiC,CAAA;IAEjF,OAAO;QACN,IAAI,EAAE,wBAAwB;QAC9B,SAAS,CAAC,EAAE;YACX,IAAI,EAAE,KAAK,iBAAiB,EAAE,CAAC;gBAC9B,OAAO,0BAA0B,CAAA;YAClC,CAAC;QACF,CAAC;QACD,IAAI,CAAC,EAAE;YACN,IAAI,EAAE,KAAK,0BAA0B;gBAAE,OAAM;YAE7C,mEAAmE;YACnE,0EAA0E;YAC1E,wEAAwE;YACxE,uDAAuD;YACvD,MAAM,KAAK,GAAa;gBACvB,
|
|
1
|
+
{"version":3,"file":"vite-plugin.js","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"AAGA,MAAM,iBAAiB,GAAG,gCAAgC,CAAA;AAC1D,MAAM,0BAA0B,GAAG,KAAK,iBAAiB,EAAE,CAAA;AAiB3D,MAAM,UAAU,mBAAmB,CAAC,IAA+C;IAClF,sEAAsE;IACtE,MAAM,UAAU,GACf,QAAQ,IAAI,IAAI,IAAI,MAAM,IAAK,IAA6B,CAAC,MAAM;QAClE,CAAC,CAAE,IAA6B;QAChC,CAAC,CAAC,EAAE,MAAM,EAAE,IAA0B,EAAE,CAAA;IAE1C,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,GAAG,UAAU,CAAA;IACpD,uEAAuE;IACvE,2CAA2C;IAC3C,MAAM,EAAE,eAAe,EAAE,CAAC,EAAE,GAAG,YAAY,EAAE,GAAG,MAAiC,CAAA;IAEjF,OAAO;QACN,IAAI,EAAE,wBAAwB;QAC9B,SAAS,CAAC,EAAE;YACX,IAAI,EAAE,KAAK,iBAAiB,EAAE,CAAC;gBAC9B,OAAO,0BAA0B,CAAA;YAClC,CAAC;QACF,CAAC;QACD,IAAI,CAAC,EAAE;YACN,IAAI,EAAE,KAAK,0BAA0B;gBAAE,OAAM;YAE7C,mEAAmE;YACnE,0EAA0E;YAC1E,wEAAwE;YACxE,uDAAuD;YACvD,MAAM,KAAK,GAAa;gBACvB,qFAAqF;aACrF,CAAA;YACD,IAAI,qBAAqB,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAA;YACxE,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;YAC7D,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;YACjC,IAAI,qBAAqB,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;YACxC,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;YAChC,KAAK,CAAC,IAAI,CACT,mFAAmF,CACnF,CAAA;YACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACxB,CAAC;KACD,CAAA;AACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@growth-labs/seo",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -26,9 +26,13 @@
|
|
|
26
26
|
"import": "./dist/routes/*.js",
|
|
27
27
|
"default": "./dist/routes/*.js"
|
|
28
28
|
},
|
|
29
|
-
"./state": {
|
|
30
|
-
"types": "./dist/state.d.ts",
|
|
31
|
-
"import": "./dist/state.js"
|
|
29
|
+
"./_internal/state": {
|
|
30
|
+
"types": "./dist/_internal/state.d.ts",
|
|
31
|
+
"import": "./dist/_internal/state.js"
|
|
32
|
+
},
|
|
33
|
+
"./site-url": {
|
|
34
|
+
"types": "./dist/site-url.d.ts",
|
|
35
|
+
"import": "./dist/site-url.js"
|
|
32
36
|
},
|
|
33
37
|
"./bindings": {
|
|
34
38
|
"types": "./dist/bindings.d.ts",
|
|
@@ -9,6 +9,7 @@ import 'virtual:growth-labs/seo/config'
|
|
|
9
9
|
// src/options.js inside the consumer's node_modules. Package specifiers route
|
|
10
10
|
// through the exports map to the compiled dist output.
|
|
11
11
|
import { getConfig, resolveAeoTwins } from '@growth-labs/seo'
|
|
12
|
+
import { resolveSeoConfig } from '@growth-labs/seo/site-url'
|
|
12
13
|
|
|
13
14
|
export interface Props {
|
|
14
15
|
/**
|
|
@@ -32,7 +33,7 @@ export interface Props {
|
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
const { canonical, emitTwinLink = true } = Astro.props
|
|
35
|
-
const config = getConfig()
|
|
36
|
+
const config = resolveSeoConfig(getConfig())
|
|
36
37
|
const aeo = resolveAeoTwins(config.aeoTwins)
|
|
37
38
|
|
|
38
39
|
// ─── Apple News discovery link ───
|
|
@@ -23,8 +23,10 @@
|
|
|
23
23
|
import 'virtual:growth-labs/seo/config'
|
|
24
24
|
|
|
25
25
|
import { getConfig, type ContentItem } from '@growth-labs/seo'
|
|
26
|
+
import { resolveSeoConfig } from '@growth-labs/seo/site-url'
|
|
26
27
|
import {
|
|
27
|
-
|
|
28
|
+
buildSeoHeadJsonLd,
|
|
29
|
+
buildSeoHeadTitleDescription,
|
|
28
30
|
generateCanonical,
|
|
29
31
|
generateHreflang,
|
|
30
32
|
generateMeta,
|
|
@@ -76,6 +78,13 @@ export interface Props {
|
|
|
76
78
|
* have a twin), false otherwise (homepage doesn't).
|
|
77
79
|
*/
|
|
78
80
|
emitTwinLink?: boolean
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Explicit document title/description overrides. When omitted, title and
|
|
84
|
+
* description come from the content item, then the organization name.
|
|
85
|
+
*/
|
|
86
|
+
title?: string
|
|
87
|
+
description?: string
|
|
79
88
|
}
|
|
80
89
|
|
|
81
90
|
const {
|
|
@@ -85,9 +94,12 @@ const {
|
|
|
85
94
|
emitJsonLd,
|
|
86
95
|
canonical,
|
|
87
96
|
emitTwinLink,
|
|
97
|
+
title,
|
|
98
|
+
description,
|
|
88
99
|
} = Astro.props
|
|
89
100
|
|
|
90
|
-
const config = getConfig()
|
|
101
|
+
const config = resolveSeoConfig(getConfig())
|
|
102
|
+
const titleDescription = buildSeoHeadTitleDescription({ item, options: config, title, description })
|
|
91
103
|
|
|
92
104
|
// Canonical: item.url if item provided, else explicit prop, else Astro.url.
|
|
93
105
|
const canonicalHref = (() => {
|
|
@@ -98,7 +110,9 @@ const canonicalHref = (() => {
|
|
|
98
110
|
const canonicalLink = generateCanonical(canonicalHref, config)
|
|
99
111
|
|
|
100
112
|
// Meta tags (OG + Twitter + news_keywords + apple-news-*): item required.
|
|
101
|
-
const metaTags = item
|
|
113
|
+
const metaTags = item
|
|
114
|
+
? generateMeta(item, variant, config).filter((tag) => tag.name !== 'robots')
|
|
115
|
+
: []
|
|
102
116
|
|
|
103
117
|
// Hreflang: item's alternateLocales when present. generateHreflang tolerates
|
|
104
118
|
// empty input; we gate on length anyway to avoid a call when unnecessary.
|
|
@@ -106,16 +120,22 @@ const hreflangLinks = item?.alternateLocales?.length
|
|
|
106
120
|
? generateHreflang(item.alternateLocales, config.defaultLocale ?? 'en')
|
|
107
121
|
: []
|
|
108
122
|
|
|
109
|
-
// JSON-LD emission default: on
|
|
110
|
-
const shouldEmitJsonLd = emitJsonLd ??
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
:
|
|
123
|
+
// JSON-LD emission default: on for both global and content pages.
|
|
124
|
+
const shouldEmitJsonLd = emitJsonLd ?? true
|
|
125
|
+
const jsonLdEntries = buildSeoHeadJsonLd({
|
|
126
|
+
item,
|
|
127
|
+
options: config,
|
|
128
|
+
variant,
|
|
129
|
+
emitJsonLd: shouldEmitJsonLd,
|
|
130
|
+
})
|
|
114
131
|
|
|
115
132
|
// Twin-link default: on when there's an item (article-ish page), off otherwise.
|
|
116
133
|
const shouldEmitTwinLink = emitTwinLink ?? Boolean(item)
|
|
117
134
|
---
|
|
118
135
|
|
|
136
|
+
<title>{titleDescription.title}</title>
|
|
137
|
+
{titleDescription.description && <meta name="description" content={titleDescription.description} />}
|
|
138
|
+
|
|
119
139
|
{robots !== null && <meta name="robots" content={robots} />}
|
|
120
140
|
|
|
121
141
|
<link {...canonicalLink} />
|
|
@@ -126,6 +146,6 @@ const shouldEmitTwinLink = emitTwinLink ?? Boolean(item)
|
|
|
126
146
|
|
|
127
147
|
<AeoHead canonical={canonicalHref} emitTwinLink={shouldEmitTwinLink} />
|
|
128
148
|
|
|
129
|
-
{jsonLd
|
|
149
|
+
{jsonLdEntries.map((jsonLd) => (
|
|
130
150
|
<script type="application/ld+json" set:html={JSON.stringify(jsonLd)} />
|
|
131
|
-
)}
|
|
151
|
+
))}
|