@growth-labs/seo 0.2.5 → 0.2.7
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 +10 -0
- package/dist/cloudflare-workers.d.ts +5 -0
- package/dist/cloudflare-workers.d.ts.map +1 -0
- package/dist/cloudflare-workers.js +2 -0
- package/dist/cloudflare-workers.js.map +1 -0
- package/dist/middleware/seo.d.ts +1 -8
- package/dist/middleware/seo.d.ts.map +1 -1
- package/dist/middleware/seo.js +3 -6
- package/dist/middleware/seo.js.map +1 -1
- package/dist/routes/revalidate.d.ts.map +1 -1
- package/dist/routes/revalidate.js +2 -1
- package/dist/routes/revalidate.js.map +1 -1
- package/dist/runtime.d.ts +15 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +10 -0
- package/dist/runtime.js.map +1 -0
- package/package.json +5 -2
- package/src/components/SeoHead.astro +131 -0
package/README.md
CHANGED
|
@@ -139,6 +139,15 @@ export default {
|
|
|
139
139
|
- Emits the Apple News discovery link (`<link rel="alternate" type="application/rss+xml">`) when `appleNews.discoveryLink: true`.
|
|
140
140
|
- Emits a per-page markdown twin link (`<link rel="alternate" type="text/markdown" href="<twinUrl>">`) for discoverability on prerendered HTML served by Cloudflare Assets where middleware doesn't run.
|
|
141
141
|
|
|
142
|
+
## Runtime behavior
|
|
143
|
+
|
|
144
|
+
`@growth-labs/seo` already self-seeds config through `virtual:growth-labs/seo/config`. Runtime entrypoints now also resolve bindings from the standard Cloudflare surfaces instead of requiring a package-specific `locals.runtime` shim:
|
|
145
|
+
|
|
146
|
+
- `cloudflare:workers` for env bindings
|
|
147
|
+
- `Astro.locals.cfContext.waitUntil()` for background tasks
|
|
148
|
+
|
|
149
|
+
Legacy `locals.runtime` remains a compatibility fallback, but consumer repos should not need a Growth Labs-specific runtime middleware just to make this package run.
|
|
150
|
+
|
|
142
151
|
**Build-time:**
|
|
143
152
|
- Emits `.md` twins + summary twins for public items (static/both modes) under `dist/client/`.
|
|
144
153
|
- Validates hreflang reciprocity.
|
|
@@ -179,6 +188,7 @@ import { computeEffectiveAuthSegment } from '@growth-labs/seo/utils'
|
|
|
179
188
|
## Key patterns
|
|
180
189
|
|
|
181
190
|
- Virtual module: `virtual:growth-labs/seo/config`
|
|
191
|
+
- Runtime routes and middleware resolve bindings from standard Cloudflare surfaces
|
|
182
192
|
- AI crawler blocking: enforced at `robots.txt` AND per-request 403 on members items
|
|
183
193
|
- `.md` twin canonical: emitted with `X-Robots-Tag: noindex` + `Link: <html-url>; rel="canonical"` — prevents Google from clustering the `.md` as a duplicate of the HTML
|
|
184
194
|
- Summary twins: `.summary.md` companion emitted when `summaryTwin: true` (default), with a 4-tier fallback (item.summary → bullets → first-sentence-per-section → description-only)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare-workers.d.ts","sourceRoot":"","sources":["../src/cloudflare-workers.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,oBAAoB,CAAC;IAC5B,MAAM,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACzC;AAED,OAAO,EAAE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare-workers.js","sourceRoot":"","sources":["../src/cloudflare-workers.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAA"}
|
package/dist/middleware/seo.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import 'virtual:growth-labs/seo/config';
|
|
2
|
-
import type { SeoEnv } from '../bindings.js';
|
|
3
2
|
import { type ResolvedSeoOptions } from '../options.js';
|
|
4
3
|
import type { ContentItem, ContentProvider, CrawlerClass } from '../types.js';
|
|
5
4
|
import { type RawAuthSegment } from '../utils/effective-auth.js';
|
|
@@ -23,13 +22,7 @@ export interface SeoMiddlewareContext {
|
|
|
23
22
|
locals?: Record<string, unknown>;
|
|
24
23
|
}
|
|
25
24
|
export declare function createSeoMiddleware(options: ResolvedSeoOptions, contentProvider?: ContentProvider, deps?: SeoMiddlewareDeps): (context: SeoMiddlewareContext, next: () => Promise<Response>) => Promise<Response>;
|
|
26
|
-
export declare const onRequest: (context: SeoMiddlewareContext
|
|
27
|
-
locals?: {
|
|
28
|
-
runtime?: {
|
|
29
|
-
env?: SeoEnv;
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
}, next: () => Promise<Response>) => Promise<Response>;
|
|
25
|
+
export declare const onRequest: (context: SeoMiddlewareContext, next: () => Promise<Response>) => Promise<Response>;
|
|
33
26
|
declare function appendVaryHeaders(headers: Headers): void;
|
|
34
27
|
declare function dedupVary(combined: string): string;
|
|
35
28
|
declare function twinUrlFor(url: URL, aeo: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/middleware/seo.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/middleware/seo.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AAEvC,OAAO,EAAE,KAAK,kBAAkB,EAAmB,MAAM,eAAe,CAAA;AAGxE,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAwB,MAAM,aAAa,CAAA;AAGnG,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAE7F,OAAO,EAAE,KAAK,iBAAiB,EAAiC,MAAM,yBAAyB,CAAA;AAI/F,MAAM,WAAW,iBAAiB;IACjC,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IACtD,wFAAwF;IACxF,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B,uEAAuE;IACvE,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;KAAE,CAAA;IACvD,wEAAwE;IACxE,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,cAAc,CAAA;IACrD,0FAA0F;IAC1F,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;CAC/C;AAED,MAAM,WAAW,oBAAoB;IACpC,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC;AAED,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,kBAAkB,EAC3B,eAAe,CAAC,EAAE,eAAe,EACjC,IAAI,GAAE,iBAAsB,IAM3B,SAAS,oBAAoB,EAC7B,MAAM,MAAM,OAAO,CAAC,QAAQ,CAAC,KAC3B,OAAO,CAAC,QAAQ,CAAC,CAyFpB;AAMD,eAAO,MAAM,SAAS,GACrB,SAAS,oBAAoB,EAC7B,MAAM,MAAM,OAAO,CAAC,QAAQ,CAAC,KAC3B,OAAO,CAAC,QAAQ,CA2BlB,CAAA;AAqBD,iBAAS,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAIjD;AAED,iBAAS,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM3C;AAOD,iBAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;IAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAAE,GAAG,MAAM,CAG9E;AAED,iBAAe,eAAe,CAC7B,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAmBlC;AA4GD,eAAO,MAAM,UAAU;;;;;CAKtB,CAAA"}
|
package/dist/middleware/seo.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import 'virtual:growth-labs/seo/config';
|
|
2
2
|
import { resolveAeoTwins } from '../options.js';
|
|
3
|
+
import { getRuntimeEnv, getWaitUntil } from '../runtime.js';
|
|
3
4
|
import { getConfig, getContentProvider } from '../state.js';
|
|
4
5
|
import { estimateTokenCount, generateAeoMarkdown } from '../utils/aeo.js';
|
|
5
6
|
import { classifyRequest } from '../utils/crawler-class.js';
|
|
@@ -91,7 +92,7 @@ let _classifier;
|
|
|
91
92
|
export const onRequest = async (context, next) => {
|
|
92
93
|
const config = getConfig();
|
|
93
94
|
const contentProvider = getContentProvider();
|
|
94
|
-
const env = context
|
|
95
|
+
const env = getRuntimeEnv(context);
|
|
95
96
|
const aeo = resolveAeoTwins(config.aeoTwins);
|
|
96
97
|
// Wire bindings from env when aeoTwins is enabled. Middleware-mode requires R2+DO;
|
|
97
98
|
// static-only consumers get the lighter path.
|
|
@@ -110,11 +111,7 @@ export const onRequest = async (context, next) => {
|
|
|
110
111
|
const middleware = createSeoMiddleware(config, contentProvider, {
|
|
111
112
|
freshLayer,
|
|
112
113
|
assets: env?.ASSETS,
|
|
113
|
-
waitUntil: (
|
|
114
|
-
const ctx = context.locals
|
|
115
|
-
?.cfContext;
|
|
116
|
-
ctx?.waitUntil?.(promise);
|
|
117
|
-
},
|
|
114
|
+
waitUntil: getWaitUntil(context),
|
|
118
115
|
});
|
|
119
116
|
return middleware(context, next);
|
|
120
117
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seo.js","sourceRoot":"","sources":["../../src/middleware/seo.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"seo.js","sourceRoot":"","sources":["../../src/middleware/seo.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AAEvC,OAAO,EAA2B,eAAe,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAE3D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,2BAA2B,EAAuB,MAAM,4BAA4B,CAAA;AAC7F,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAuB,MAAM,oBAAoB,CAAA;AACjG,OAAO,EAA0B,aAAa,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAsB/F,MAAM,UAAU,mBAAmB,CAClC,OAA2B,EAC3B,eAAiC,EACjC,OAA0B,EAAE;IAE5B,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,uBAAuB,EAAE,CAAA;IAE3D,OAAO,KAAK,EACX,OAA6B,EAC7B,IAA6B,EACT,EAAE;QACtB,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;QAClD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAEhC,yEAAyE;QACzE,mCAAmC;QACnC,MAAM,YAAY,GAAiB,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,IAAI,MAAM,CAAA;QACxD,MAAM,oBAAoB,GAAyB,2BAA2B,CAC7E,YAAY,EACZ,OAAO,CACP,CAAA;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,MAAM,CAAC,YAAY,GAAG,YAAY,CAAA;YAC1C,OAAO,CAAC,MAAM,CAAC,oBAAoB,GAAG,oBAAoB,CAAA;QAC3D,CAAC;QAED,8EAA8E;QAC9E,iFAAiF;QACjF,mEAAmE;QACnE,MAAM,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,wBAAwB,CAAA;QACvE,IAAI,gBAAgB,IAAI,YAAY,KAAK,oBAAoB,IAAI,eAAe,EAAE,CAAC;YAClF,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,eAAe,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;YAC1E,IAAI,IAAI,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE;oBAChC,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE;wBACR,cAAc,EAAE,2BAA2B;wBAC3C,cAAc,EAAE,SAAS;wBACzB,GAAG,WAAW,EAAE;qBAChB;iBACD,CAAC,CAAA;YACH,CAAC;QACF,CAAC;QAED,oEAAoE;QACpE,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA;QACtD,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,aAAa,IAAI,eAAe,EAAE,CAAC;YACtE,MAAM,gBAAgB,GAAG,MAAM,gBAAgB,CAAC;gBAC/C,OAAO;gBACP,OAAO;gBACP,OAAO;gBACP,eAAe;gBACf,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;aACzB,CAAC,CAAA;YACF,IAAI,gBAAgB;gBAAE,OAAO,gBAAgB,CAAA;QAC9C,CAAC;QAED,wEAAwE;QACxE,MAAM,QAAQ,GAAG,MAAM,IAAI,EAAE,CAAA;QAE7B,4DAA4D;QAC5D,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QAEhD,oCAAoC;QACpC,UAAU,CAAC,GAAG,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAA;QAEnE,yDAAyD;QACzD,qDAAqD;QACrD,8CAA8C;QAC9C,yCAAyC;QACzC,8CAA8C;QAC9C,iBAAiB,CAAC,UAAU,CAAC,CAAA;QAE7B,4EAA4E;QAC5E,6DAA6D;QAC7D,IAAI,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,eAAe;gBAC/B,CAAC,CAAC,MAAM,eAAe,CAAC,eAAe,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC;gBAC/D,CAAC,CAAC,SAAS,CAAA;YACZ,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChD,MAAM,MAAM,GACX,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;gBACrF,MAAM,SAAS,GAAG,IAAI,MAAM,0CAA0C,CAAA;gBACtE,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;gBACvC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;YAC3E,CAAC;QACF,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;YAClC,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO,EAAE,UAAU;SACnB,CAAC,CAAA;IACH,CAAC,CAAA;AACF,CAAC;AAED,iCAAiC;AAEjC,IAAI,WAAuC,CAAA;AAE3C,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAC7B,OAA6B,EAC7B,IAA6B,EACT,EAAE;IACtB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAA;IAC5C,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAW,CAAA;IAC5C,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAE5C,mFAAmF;IACnF,8CAA8C;IAC9C,IAAI,UAAyC,CAAA;IAC7C,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QAC3D,MAAM,WAAW,GAAG,GAAG,CAAC,UAAU,CAAC,WAAW,CAAA;QAC9C,MAAM,IAAI,GAAI,GAA0C,CAAC,WAAW,CAAC,CAAA;QACrE,IAAI,IAAI,EAAE,CAAC;YACV,UAAU,GAAG;gBACZ,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC,IAAI;gBACzB,IAAI,EAAE,IAAiC;gBACvC,YAAY,EAAE,GAAG,CAAC,mBAAmB,EAAE,EAAE,IAAI,KAAK;aAClD,CAAA;QACF,CAAC;IACF,CAAC;IAED,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,EAAE,eAAe,EAAE;QAC/D,UAAU;QACV,MAAM,EAAE,GAAG,EAAE,MAAM;QACnB,SAAS,EAAE,YAAY,CAAC,OAAO,CAAC;KAChC,CAAC,CAAA;IACF,OAAO,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AACjC,CAAC,CAAA;AAED,oBAAoB;AAEpB,SAAS,uBAAuB;IAC/B,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,WAAW,GAAG,oBAAoB,CAAC,iBAAiB,EAAE,CAAC,CAAA;IACxD,CAAC;IACD,MAAM,QAAQ,GAAG,WAAW,CAAA;IAC5B,OAAO,CAAC,OAAgB,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAA;AAClF,CAAC;AAED,SAAS,wBAAwB,CAAC,MAA0B;IAC3D,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,aAAa,CAAA;IACzD,OAAO,YAAY,OAAO,YAAY,MAAM,cAAc,OAAO,EAAE,CAAA;AACpE,CAAC;AAED,SAAS,WAAW;IACnB,OAAO,EAAE,IAAI,EAAE,8CAA8C,EAAE,CAAA;AAChE,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAgB;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACpC,MAAM,QAAQ,GAAG,8CAA8C,CAAA;IAC/D,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,QAAQ,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;AACjF,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB;IAClC,MAAM,KAAK,GAAG,QAAQ;SACpB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAA;IACjB,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACtC,CAAC;AAED,SAAS,cAAc,CAAC,QAAkB;IACzC,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;IACrD,OAAO,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AAChC,CAAC;AAED,SAAS,UAAU,CAAC,GAAQ,EAAE,GAAwC;IACrE,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;IACxE,OAAO,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;AAC1B,CAAC;AAED,KAAK,UAAU,eAAe,CAC7B,eAAgC,EAChC,OAA6B,EAC7B,QAAgB;IAEhB,+EAA+E;IAC/E,qEAAqE;IACrE,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAA;IAChE,IAAI,CAAC;QACJ,+EAA+E;QAC/E,4EAA4E;QAC5E,kCAAkC;QAClC,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,OAAgB,CAAC,CAAA;QAC1F,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YAC1B,IAAI,CAAC;gBACJ,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAA;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACR,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAA;YAC7B,CAAC;QACF,CAAC,CAAC,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAA;IACjB,CAAC;AACF,CAAC;AAcD,KAAK,UAAU,gBAAgB,CAAC,KAAyB;IACxD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAC3F,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAChC,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC7C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IACrB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;IAEzD,gCAAgC;IAChC,IAAI,UAAU,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QACrD,IAAI,GAAG,EAAE,CAAC;YACT,OAAO,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;QAC5D,CAAC;IACF,CAAC;IAED,8CAA8C;IAC9C,IAAI,MAAM,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,uBAAuB,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;QAClF,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAC9C,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAA;YACnC,OAAO,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACvC,CAAC;IACF,CAAC;IAED,+BAA+B;IAC/B,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,eAAe,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC7E,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,OAAO,IAAI,CAAA,CAAC,6CAA6C;IAC1D,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,wDAAwD;QACxD,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAA;IACtC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE;QAC7C,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC,IAAI;QACxC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,OAAO,EAAE,IAAI;QACb,eAAe,EAAE,GAAG,CAAC,eAAe;QACpC,SAAS,EAAE,OAAO,CAAC,GAAG;QACtB,OAAO,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;KAC7B,CAAC,CAAA;IAEF,6EAA6E;IAC7E,0EAA0E;IAC1E,uEAAuE;IACvE,IAAI,SAAS,IAAI,UAAU,EAAE,CAAC;QAC7B,SAAS,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAA;QACzE,OAAO,IAAI,QAAQ,CAAC,qBAAqB,EAAE;YAC1C,MAAM,EAAE,GAAG;YACX,OAAO,EAAE;gBACR,cAAc,EAAE,2BAA2B;gBAC3C,aAAa,EAAE,GAAG;gBAClB,cAAc,EAAE,SAAS;gBACzB,eAAe,EAAE,UAAU;gBAC3B,gBAAgB,EAAE,wBAAwB,CAAC,OAAO,CAAC;gBACnD,GAAG,WAAW,EAAE;aAChB;SACD,CAAC,CAAA;IACH,CAAC;IAED,6EAA6E;IAC7E,4EAA4E;IAC5E,8CAA8C;IAC9C,OAAO,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;AAC3C,CAAC;AAED,SAAS,gBAAgB,CACxB,IAAY,EACZ,OAA2B,EAC3B,WAAW,GAAG,8BAA8B;IAE5C,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;IAC3C,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;QACzB,OAAO,EAAE;YACR,cAAc,EAAE,WAAW;YAC3B,mBAAmB,EAAE,MAAM,CAAC,UAAU,CAAC;YACvC,cAAc,EAAE,SAAS;YACzB,gBAAgB,EAAE,wBAAwB,CAAC,OAAO,CAAC;YACnD,GAAG,WAAW,EAAE;SAChB;KACD,CAAC,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe;IAC1C,IAAI,CAAC;QACJ,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAA;IACjC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAA;IACzD,CAAC;AACF,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,iBAAiB;IACjB,SAAS;IACT,UAAU;IACV,eAAe;CACf,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revalidate.d.ts","sourceRoot":"","sources":["../../src/routes/revalidate.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"revalidate.d.ts","sourceRoot":"","sources":["../../src/routes/revalidate.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAWrC,eAAO,MAAM,SAAS,QAAQ,CAAA;AAa9B;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,IAAI,EAAE,QAqHlB,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import 'virtual:growth-labs/seo/config';
|
|
2
2
|
import { resolveAeoTwins } from '../options.js';
|
|
3
|
+
import { getRuntimeEnv } from '../runtime.js';
|
|
3
4
|
import { getConfig, getContentProvider } from '../state.js';
|
|
4
5
|
import { generateAeoMarkdown } from '../utils/aeo.js';
|
|
5
6
|
import { generateSummaryTwin } from '../utils/aeo-summary.js';
|
|
@@ -26,7 +27,7 @@ export const POST = async (context) => {
|
|
|
26
27
|
if (!aeo?.onDemandRevalidation || !aeo.freshLayer || !aeo.revalidateToken) {
|
|
27
28
|
return json({ error: 'revalidation_disabled' }, 404);
|
|
28
29
|
}
|
|
29
|
-
const env = context
|
|
30
|
+
const env = getRuntimeEnv(context);
|
|
30
31
|
if (!env) {
|
|
31
32
|
return json({ error: 'binding_unavailable' }, 503);
|
|
32
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revalidate.js","sourceRoot":"","sources":["../../src/routes/revalidate.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AAGvC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAE7D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAEzE,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAA;AAU9B,MAAM,SAAS,GAAG,EAAE,CAAA;AACpB,MAAM,sBAAsB,GAAG,EAAE,CAAA;AAEjC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,IAAI,GAAa,KAAK,EAAE,OAAO,EAAE,EAAE;IAC/C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAA;IAC5C,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAE5C,IAAI,CAAC,GAAG,EAAE,oBAAoB,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAC3E,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,GAAG,CAAC,CAAA;IACrD,CAAC;IAED,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"revalidate.js","sourceRoot":"","sources":["../../src/routes/revalidate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface RuntimeContext {
|
|
2
|
+
locals?: {
|
|
3
|
+
cfContext?: {
|
|
4
|
+
waitUntil?: (promise: Promise<unknown>) => void;
|
|
5
|
+
};
|
|
6
|
+
runtime?: {
|
|
7
|
+
env?: Record<string, unknown>;
|
|
8
|
+
waitUntil?: (promise: Promise<unknown>) => void;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export declare function getRuntimeEnv(context: RuntimeContext): Record<string, unknown>;
|
|
13
|
+
export declare function getWaitUntil(context: RuntimeContext): (promise: Promise<unknown>) => void;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAEA,UAAU,cAAc;IACvB,MAAM,CAAC,EAAE;QACR,SAAS,CAAC,EAAE;YACX,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;SAC/C,CAAA;QACD,OAAO,CAAC,EAAE;YACT,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YAC7B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;SAC/C,CAAA;KACD,CAAA;CACD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9E;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAMzF"}
|
package/dist/runtime.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { env as cloudflareEnv } from 'cloudflare:workers';
|
|
2
|
+
export function getRuntimeEnv(context) {
|
|
3
|
+
return context.locals?.runtime?.env ?? cloudflareEnv;
|
|
4
|
+
}
|
|
5
|
+
export function getWaitUntil(context) {
|
|
6
|
+
return (context.locals?.cfContext?.waitUntil?.bind(context.locals.cfContext) ??
|
|
7
|
+
context.locals?.runtime?.waitUntil?.bind(context.locals.runtime) ??
|
|
8
|
+
(() => { }));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAczD,MAAM,UAAU,aAAa,CAAC,OAAuB;IACpD,OAAO,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAK,aAAyC,CAAA;AAClF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAuB;IACnD,OAAO,CACN,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;QACpE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QAChE,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CACV,CAAA;AACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@growth-labs/seo",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.7",
|
|
4
4
|
"type": "module",
|
|
5
|
+
"types": "./dist/index.d.ts",
|
|
5
6
|
"exports": {
|
|
6
7
|
".": {
|
|
7
8
|
"types": "./dist/index.d.ts",
|
|
@@ -41,7 +42,8 @@
|
|
|
41
42
|
"types": "./dist/cron/prune-aeo-r2.d.ts",
|
|
42
43
|
"import": "./dist/cron/prune-aeo-r2.js"
|
|
43
44
|
},
|
|
44
|
-
"./components/AeoHead.astro": "./src/components/AeoHead.astro"
|
|
45
|
+
"./components/AeoHead.astro": "./src/components/AeoHead.astro",
|
|
46
|
+
"./components/SeoHead.astro": "./src/components/SeoHead.astro"
|
|
45
47
|
},
|
|
46
48
|
"files": [
|
|
47
49
|
"dist",
|
|
@@ -67,6 +69,7 @@
|
|
|
67
69
|
},
|
|
68
70
|
"scripts": {
|
|
69
71
|
"build": "tsc",
|
|
72
|
+
"check": "biome check src/",
|
|
70
73
|
"test": "vitest run",
|
|
71
74
|
"test:watch": "vitest"
|
|
72
75
|
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
// Comprehensive SEO <head> component. Composes <AeoHead /> and emits every
|
|
3
|
+
// SEO-related head tag the package produces:
|
|
4
|
+
// - <meta name="robots"> with max-image-preview:large (default)
|
|
5
|
+
// - OpenGraph + Twitter Card meta (via generateMeta — article / product / website)
|
|
6
|
+
// - <link rel="canonical">
|
|
7
|
+
// - <link rel="alternate" hreflang="..."> for each configured locale
|
|
8
|
+
// - Apple News discovery link (via AeoHead)
|
|
9
|
+
// - Per-page markdown twin link (via AeoHead)
|
|
10
|
+
// - <script type="application/ld+json"> for the item (Article / Product / Website)
|
|
11
|
+
// - news_keywords, apple-news-*, googlebot noarchive (via generateMeta)
|
|
12
|
+
//
|
|
13
|
+
// Design: drop-in for layouts. With no props, emits only global tags suitable
|
|
14
|
+
// for the homepage / tag indexes. Pass `item` + `variant` on content pages for
|
|
15
|
+
// full meta + JSON-LD + AEO discovery. Everything configurable via props;
|
|
16
|
+
// sensible defaults make the zero-config path useful.
|
|
17
|
+
//
|
|
18
|
+
// Why this exists: consumers used to hand-roll <meta name="robots"> in every
|
|
19
|
+
// Base.astro and either forgot `max-image-preview:large` or misspelled it.
|
|
20
|
+
// Centralizing here eliminates that class of bug across ~12 sites.
|
|
21
|
+
//
|
|
22
|
+
// Side-effect import seeds state in both main and Cloudflare prerender Workers.
|
|
23
|
+
import 'virtual:growth-labs/seo/config'
|
|
24
|
+
|
|
25
|
+
import { getConfig, type ContentItem } from '@growth-labs/seo'
|
|
26
|
+
import {
|
|
27
|
+
generateArticleJsonLd,
|
|
28
|
+
generateCanonical,
|
|
29
|
+
generateHreflang,
|
|
30
|
+
generateMeta,
|
|
31
|
+
} from '@growth-labs/seo/utils'
|
|
32
|
+
import AeoHead from './AeoHead.astro'
|
|
33
|
+
|
|
34
|
+
export interface Props {
|
|
35
|
+
/**
|
|
36
|
+
* The page's ContentItem. When omitted, only global head tags are emitted
|
|
37
|
+
* (robots, Apple News discovery, AEO twin for the current URL) — suitable
|
|
38
|
+
* for homepages, tag indexes, search pages, and other non-content routes.
|
|
39
|
+
*/
|
|
40
|
+
item?: ContentItem
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Which OpenGraph variant to emit. Only used when `item` is provided.
|
|
44
|
+
* Defaults to 'website'; pass 'article' for article pages, 'product' for
|
|
45
|
+
* product pages.
|
|
46
|
+
*/
|
|
47
|
+
variant?: 'article' | 'product' | 'website'
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* `<meta name="robots">` content. Defaults to 'max-image-preview:large'
|
|
51
|
+
* (Google's recommendation for article-heavy sites; tells search engines
|
|
52
|
+
* to show large images in Discover / News results). Search engines default
|
|
53
|
+
* to index,follow, so we don't need to repeat those.
|
|
54
|
+
*
|
|
55
|
+
* Pass 'noindex' to suppress a page from search. Pass null to suppress the
|
|
56
|
+
* tag entirely (e.g. when the consumer's layout emits it separately).
|
|
57
|
+
*/
|
|
58
|
+
robots?: string | null
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Emit a JSON-LD <script> for the item. Defaults to true when `item` and
|
|
62
|
+
* `variant` are both provided. Set false if the consumer emits JSON-LD
|
|
63
|
+
* elsewhere (e.g. their own article layout hand-rolls it).
|
|
64
|
+
*/
|
|
65
|
+
emitJsonLd?: boolean
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Override the canonical URL. Defaults to `item.url` when item is
|
|
69
|
+
* provided, else `Astro.url`.
|
|
70
|
+
*/
|
|
71
|
+
canonical?: URL | string
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Pass-through to <AeoHead />. Emits the per-page markdown twin link.
|
|
75
|
+
* Defaults to true when `item` is provided (article-ish pages usually
|
|
76
|
+
* have a twin), false otherwise (homepage doesn't).
|
|
77
|
+
*/
|
|
78
|
+
emitTwinLink?: boolean
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const {
|
|
82
|
+
item,
|
|
83
|
+
variant = 'website',
|
|
84
|
+
robots = 'max-image-preview:large',
|
|
85
|
+
emitJsonLd,
|
|
86
|
+
canonical,
|
|
87
|
+
emitTwinLink,
|
|
88
|
+
} = Astro.props
|
|
89
|
+
|
|
90
|
+
const config = getConfig()
|
|
91
|
+
|
|
92
|
+
// Canonical: item.url if item provided, else explicit prop, else Astro.url.
|
|
93
|
+
const canonicalHref = (() => {
|
|
94
|
+
if (canonical) return typeof canonical === 'string' ? canonical : canonical.toString()
|
|
95
|
+
if (item) return item.url
|
|
96
|
+
return Astro.url.toString()
|
|
97
|
+
})()
|
|
98
|
+
const canonicalLink = generateCanonical(canonicalHref, config)
|
|
99
|
+
|
|
100
|
+
// Meta tags (OG + Twitter + news_keywords + apple-news-*): item required.
|
|
101
|
+
const metaTags = item ? generateMeta(item, variant, config) : []
|
|
102
|
+
|
|
103
|
+
// Hreflang: item's alternateLocales when present. generateHreflang tolerates
|
|
104
|
+
// empty input; we gate on length anyway to avoid a call when unnecessary.
|
|
105
|
+
const hreflangLinks = item?.alternateLocales?.length
|
|
106
|
+
? generateHreflang(item.alternateLocales, config.defaultLocale ?? 'en')
|
|
107
|
+
: []
|
|
108
|
+
|
|
109
|
+
// JSON-LD emission default: on when item + variant are set.
|
|
110
|
+
const shouldEmitJsonLd = emitJsonLd ?? Boolean(item)
|
|
111
|
+
const jsonLd = shouldEmitJsonLd && item && variant === 'article'
|
|
112
|
+
? generateArticleJsonLd(item, config)
|
|
113
|
+
: null
|
|
114
|
+
|
|
115
|
+
// Twin-link default: on when there's an item (article-ish page), off otherwise.
|
|
116
|
+
const shouldEmitTwinLink = emitTwinLink ?? Boolean(item)
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
{robots !== null && <meta name="robots" content={robots} />}
|
|
120
|
+
|
|
121
|
+
<link {...canonicalLink} />
|
|
122
|
+
|
|
123
|
+
{hreflangLinks.map((l) => <link rel="alternate" hreflang={l.hreflang} href={l.href} />)}
|
|
124
|
+
|
|
125
|
+
{metaTags.map((tag) => <meta {...tag} />)}
|
|
126
|
+
|
|
127
|
+
<AeoHead canonical={canonicalHref} emitTwinLink={shouldEmitTwinLink} />
|
|
128
|
+
|
|
129
|
+
{jsonLd && (
|
|
130
|
+
<script type="application/ld+json" set:html={JSON.stringify(jsonLd)} />
|
|
131
|
+
)}
|