@growth-labs/seo 0.4.1 → 0.5.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/dist/middleware/seo.d.ts.map +1 -1
- package/dist/middleware/seo.js +8 -3
- package/dist/middleware/seo.js.map +1 -1
- package/dist/routes/aeo-twin.d.ts.map +1 -1
- package/dist/routes/aeo-twin.js +33 -2
- package/dist/routes/aeo-twin.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/define-content-provider.d.ts +1 -0
- package/dist/utils/define-content-provider.d.ts.map +1 -1
- package/dist/utils/define-content-provider.js.map +1 -1
- package/dist/utils/json-ld/video.d.ts.map +1 -1
- package/dist/utils/json-ld/video.js +18 -0
- package/dist/utils/json-ld/video.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +22 -0
- package/dist/utils/validation.js.map +1 -1
- package/package.json +1 -1
- package/src/middleware/seo.ts +8 -3
- package/src/routes/aeo-twin.ts +38 -2
- package/src/types.ts +1 -1
- package/src/utils/define-content-provider.ts +1 -0
- package/src/utils/json-ld/video.ts +20 -0
- package/src/utils/validation.ts +28 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/middleware/seo.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AAGvC,OAAO,EAAE,KAAK,kBAAkB,EAAmB,MAAM,eAAe,CAAA;AAExE,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,
|
|
1
|
+
{"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/middleware/seo.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AAGvC,OAAO,EAAE,KAAK,kBAAkB,EAAmB,MAAM,eAAe,CAAA;AAExE,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,CA8FpB;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
|
@@ -67,13 +67,18 @@ export function createSeoMiddleware(options, contentProvider, deps = {}) {
|
|
|
67
67
|
// - Cookie: auth segment depends on it
|
|
68
68
|
// - CF-Connecting-IP: FCrDNS is keyed on it
|
|
69
69
|
appendVaryHeaders(newHeaders);
|
|
70
|
-
// Link alternate header on HTML responses when aeoTwins enabled
|
|
71
|
-
//
|
|
70
|
+
// Link alternate header on HTML responses when aeoTwins enabled.
|
|
71
|
+
//
|
|
72
|
+
// Emit only when contentProvider returns an item for this URL AND that item
|
|
73
|
+
// is not members-gated. Previously this also emitted Link headers for URLs
|
|
74
|
+
// the contentProvider did not know about (hubs, region pages, the home page,
|
|
75
|
+
// etc.) — those URLs have no twin at rest, so the advertised .md target 404s.
|
|
76
|
+
// Gating to items-only matches actually-emitted twin paths.
|
|
72
77
|
if (aeo && isHtmlResponse(response)) {
|
|
73
78
|
const linkItem = contentProvider
|
|
74
79
|
? await findItemForPath(contentProvider, context, url.pathname)
|
|
75
80
|
: undefined;
|
|
76
|
-
if (
|
|
81
|
+
if (linkItem && linkItem.access !== 'members') {
|
|
77
82
|
const target = aeo.mode === 'static' || aeo.mode === 'both' ? twinUrlFor(url, aeo) : url.toString();
|
|
78
83
|
const linkValue = `<${target}>; rel="alternate"; type="text/markdown"`;
|
|
79
84
|
const existing = newHeaders.get('Link');
|
|
@@ -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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aeo-twin.d.ts","sourceRoot":"","sources":["../../src/routes/aeo-twin.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AAcvC,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAUrD,eAAO,MAAM,SAAS,OAAO,CAAA;AAqB7B,eAAO,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"aeo-twin.d.ts","sourceRoot":"","sources":["../../src/routes/aeo-twin.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AAcvC,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAUrD,eAAO,MAAM,SAAS,OAAO,CAAA;AAqB7B,eAAO,MAAM,cAAc,EAAE,cA4G5B,CAAA;AAED,eAAO,MAAM,GAAG,EAAE,QAUjB,CAAA"}
|
package/dist/routes/aeo-twin.js
CHANGED
|
@@ -25,11 +25,30 @@ export const getStaticPaths = async () => {
|
|
|
25
25
|
// Emit twins for static + both modes; middleware mode serves on-demand.
|
|
26
26
|
if (!aeo || aeo.mode === 'middleware' || !contentProvider)
|
|
27
27
|
return [];
|
|
28
|
+
// Twin generation now covers articles + pages + videos + podcasts. Hubs,
|
|
29
|
+
// region pillars, series indexes, and the home page typically come through
|
|
30
|
+
// `type: 'pages'`. Each consumer's contentProvider decides which surfaces
|
|
31
|
+
// belong to which type; if a type is unknown it returns [] and we skip.
|
|
32
|
+
const TWIN_TYPES = ['articles', 'pages', 'videos', 'podcasts'];
|
|
28
33
|
let items;
|
|
29
34
|
try {
|
|
30
35
|
// contentProvider resolves here because this function runs inside Astro's
|
|
31
36
|
// build pipeline — `astro:content` and other Vite virtual modules work.
|
|
32
|
-
|
|
37
|
+
const batches = await Promise.all(TWIN_TYPES.map((type) => contentProvider({ type }, {}).catch(() => [])));
|
|
38
|
+
// Deduplicate by URL — a contentProvider might surface the same item under
|
|
39
|
+
// multiple types (rare, but cheap to defend against).
|
|
40
|
+
const seen = new Set();
|
|
41
|
+
items = [];
|
|
42
|
+
for (const batch of batches) {
|
|
43
|
+
for (const it of batch) {
|
|
44
|
+
if (!it || typeof it.url !== 'string')
|
|
45
|
+
continue;
|
|
46
|
+
if (seen.has(it.url))
|
|
47
|
+
continue;
|
|
48
|
+
seen.add(it.url);
|
|
49
|
+
items.push(it);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
33
52
|
}
|
|
34
53
|
catch {
|
|
35
54
|
// Don't fail the build; log nothing here because astro's getStaticPaths
|
|
@@ -46,7 +65,19 @@ export const getStaticPaths = async () => {
|
|
|
46
65
|
for (const item of filtered) {
|
|
47
66
|
const primaryUrl = twinUrl(item.url);
|
|
48
67
|
const primaryPath = stripOrigin(primaryUrl).replace(/^\//, '');
|
|
49
|
-
|
|
68
|
+
// Paywall-aware twin body. For free items the twin echoes the description
|
|
69
|
+
// (consumer-provided summary). For gated items we never emit the full body
|
|
70
|
+
// — twins are public regardless of the HTML paywall — so we keep the same
|
|
71
|
+
// description-only body and append an explicit "Full analysis is gated"
|
|
72
|
+
// footer that AI engines can cite without claiming the paid content as
|
|
73
|
+
// theirs. The HTML page carries the structured-data paywall markup
|
|
74
|
+
// (`isAccessibleForFree: false` + `hasPart`); the twin's textual boundary
|
|
75
|
+
// must agree with that signal.
|
|
76
|
+
const isGated = item.access === 'members' || item.isAccessibleForFree === false;
|
|
77
|
+
const sample = item.description ?? '';
|
|
78
|
+
const body = isGated
|
|
79
|
+
? `${sample}${sample ? '\n\n' : ''}---\n\nFull analysis is behind the paywall. Read the gated piece at ${item.url}.`
|
|
80
|
+
: sample;
|
|
50
81
|
const contentHash = stalenessMode === 'content-hash' ? await computeContentHash(item, body) : undefined;
|
|
51
82
|
const summaryUrl = emitSummary ? `${primaryUrl}.summary.md` : undefined;
|
|
52
83
|
// Primary twin.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aeo-twin.js","sourceRoot":"","sources":["../../src/routes/aeo-twin.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAA;AAevC,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE1D,wEAAwE;AACxE,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAA;AAS7B,SAAS,WAAW,CAAC,GAAW;IAC/B,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAA;AACvC,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC/B,IAAI,CAAC;QACJ,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAA;IAC7B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAA;IAC7C,CAAC;AACF,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAmB,KAAK,IAAI,EAAE;IACxD,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,wEAAwE;IACxE,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,eAAe;QAAE,OAAO,EAAE,CAAA;IAEpE,IAAI,KAAoB,CAAA;IACxB,IAAI,CAAC;QACJ,0EAA0E;QAC1E,wEAAwE;QACxE,
|
|
1
|
+
{"version":3,"file":"aeo-twin.js","sourceRoot":"","sources":["../../src/routes/aeo-twin.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -93,7 +93,7 @@ export interface ContentItem {
|
|
|
93
93
|
embedUrl?: string;
|
|
94
94
|
};
|
|
95
95
|
}
|
|
96
|
-
export type ContentType = 'articles' | 'pages' | 'videos' | 'products' | 'authors';
|
|
96
|
+
export type ContentType = 'articles' | 'pages' | 'videos' | 'podcasts' | 'products' | 'authors';
|
|
97
97
|
export interface ContentProviderParams {
|
|
98
98
|
type: ContentType;
|
|
99
99
|
slugs?: string[];
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAIvC,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,YAAY;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACX;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,cAAc,CAAA;IACpE,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,cAAc,CAAA;IACpE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,MAAM,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,CAAA;QACb,UAAU,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,OAAO,CAAC,EAAE,KAAK,CAAC;QACf,MAAM,EAAE,MAAM,CAAA;QACd,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,aAAa,CAAC,EAAE,MAAM,CAAA;KACtB,CAAC,CAAA;IACF,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAA;IAC3B,SAAS,CAAC,EAAE,cAAc,GAAG,eAAe,GAAG,sBAAsB,CAAA;CACrE;AAED,MAAM,WAAW,kBAAkB;IAClC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAA;CAC1C;AAOD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAA;AAEhD,MAAM,WAAW,WAAW;IAE3B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;IAGzB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,cAAc,CAAC,EAAE,kBAAkB,CAAA;IAGnC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gBAAgB,CAAC,EAAE,sBAAsB,EAAE,CAAA;IAG3C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oBAAoB,CAAC,EAAE,KAAK,GAAG,IAAI,CAAA;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IAGvB,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAG3B,OAAO,CAAC,EAAE,cAAc,CAAA;IAGxB,GAAG,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjD,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClE,KAAK,CAAC,EAAE;QACP,YAAY,EAAE,MAAM,CAAA;QACpB,QAAQ,EAAE,MAAM,CAAA;QAChB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;KACjB,CAAA;CACD;AAID,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAA;AAE/F,MAAM,WAAW,qBAAqB;IACrC,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,MAAM,MAAM,eAAe,GAAG,CAC7B,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,UAAU,KACf,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;AAM3B,MAAM,MAAM,YAAY,GACrB,uBAAuB,GACvB,oBAAoB,GACpB,sBAAsB,GACtB,WAAW,CAAA;AAKd,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,CAAA;AAIpE,MAAM,WAAW,OAAO;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,aAAa;IAC7B,GAAG,EAAE,WAAW,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,YAAY;IAC5B,GAAG,EAAE,WAAW,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACZ;AAID,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define-content-provider.d.ts","sourceRoot":"","sources":["../../src/utils/define-content-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAElF;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAiB;IACjC,QAAQ,EAAE,WAAW,CAAA;IACrB,KAAK,EAAE,WAAW,CAAA;IAClB,MAAM,EAAE,WAAW,GAAG;QAAE,KAAK,EAAE,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAA;KAAE,CAAA;IAClE,QAAQ,EAAE,WAAW,GAAG;QAAE,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAA;KAAE,CAAA;IACxE,OAAO,EAAE,WAAW,CAAA;CACpB;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,SAAS,WAAW,EACxD,MAAM,EAAE,qBAAqB,GAAG;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,EAC3C,OAAO,EAAE,UAAU,KACf,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAEpC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,oBAAoB,CAE1F;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,oBAAoB,GAAG,oBAAoB,CAEhG"}
|
|
1
|
+
{"version":3,"file":"define-content-provider.d.ts","sourceRoot":"","sources":["../../src/utils/define-content-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAElF;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAiB;IACjC,QAAQ,EAAE,WAAW,CAAA;IACrB,KAAK,EAAE,WAAW,CAAA;IAClB,MAAM,EAAE,WAAW,GAAG;QAAE,KAAK,EAAE,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAA;KAAE,CAAA;IAClE,QAAQ,EAAE,WAAW,CAAA;IACrB,QAAQ,EAAE,WAAW,GAAG;QAAE,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAA;KAAE,CAAA;IACxE,OAAO,EAAE,WAAW,CAAA;CACpB;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,SAAS,WAAW,EACxD,MAAM,EAAE,qBAAqB,GAAG;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,EAC3C,OAAO,EAAE,UAAU,KACf,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAEpC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,oBAAoB,CAE1F;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,oBAAoB,GAAG,oBAAoB,CAEhG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define-content-provider.js","sourceRoot":"","sources":["../../src/utils/define-content-provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"define-content-provider.js","sourceRoot":"","sources":["../../src/utils/define-content-provider.ts"],"names":[],"mappings":"AA4BA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAA8B;IACnE,OAAO,QAAQ,CAAA;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,QAA8B;IACzE,OAAO,QAAQ,CAAA;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../../src/utils/json-ld/video.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE/D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../../src/utils/json-ld/video.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE/D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAqCnE"}
|
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
export function generateVideoJsonLd(item) {
|
|
2
2
|
const video = item.video;
|
|
3
|
+
// Derive isAccessibleForFree: explicit field wins, otherwise derive from access.
|
|
4
|
+
// Matches the article emitter so paywalled videos carry the same Google-recognized
|
|
5
|
+
// markup as paywalled articles. Without this, Googlebot has no way to know the
|
|
6
|
+
// gated playback is intentional and may flag the page as cloaking.
|
|
7
|
+
const isAccessibleForFree = item.isAccessibleForFree ?? item.access !== 'members';
|
|
3
8
|
const result = {
|
|
4
9
|
'@context': 'https://schema.org',
|
|
5
10
|
'@type': 'VideoObject',
|
|
6
11
|
name: item.title,
|
|
7
12
|
thumbnailUrl: video.thumbnailUrl,
|
|
8
13
|
duration: video.duration,
|
|
14
|
+
// Google requires the string form 'True'/'False' for Rich Results when paywall
|
|
15
|
+
// markup is emitted. Same convention as the article schema.
|
|
16
|
+
// https://developers.google.com/search/docs/appearance/structured-data/paywalled-content
|
|
17
|
+
isAccessibleForFree: isAccessibleForFree ? 'True' : 'False',
|
|
9
18
|
};
|
|
10
19
|
if (item.description)
|
|
11
20
|
result.description = item.description;
|
|
@@ -15,6 +24,15 @@ export function generateVideoJsonLd(item) {
|
|
|
15
24
|
result.embedUrl = video.embedUrl;
|
|
16
25
|
if (item.datePublished)
|
|
17
26
|
result.uploadDate = item.datePublished;
|
|
27
|
+
// hasPart paywall marker — emitted whenever the item is gated and a cssSelector
|
|
28
|
+
// is configured. Mirrors the article emitter behaviour.
|
|
29
|
+
if (!isAccessibleForFree && item.paywallCssSelector) {
|
|
30
|
+
result.hasPart = {
|
|
31
|
+
'@type': 'WebPageElement',
|
|
32
|
+
isAccessibleForFree: 'False',
|
|
33
|
+
cssSelector: item.paywallCssSelector,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
18
36
|
return result;
|
|
19
37
|
}
|
|
20
38
|
//# sourceMappingURL=video.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video.js","sourceRoot":"","sources":["../../../src/utils/json-ld/video.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CAAC,IAAiB;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAM,CAAA;IAEzB,MAAM,MAAM,GAAiB;QAC5B,UAAU,EAAE,oBAAoB;QAChC,OAAO,EAAE,aAAa;QACtB,IAAI,EAAE,IAAI,CAAC,KAAK;QAChB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;
|
|
1
|
+
{"version":3,"file":"video.js","sourceRoot":"","sources":["../../../src/utils/json-ld/video.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CAAC,IAAiB;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAM,CAAA;IAEzB,iFAAiF;IACjF,mFAAmF;IACnF,+EAA+E;IAC/E,mEAAmE;IACnE,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAA;IAEjF,MAAM,MAAM,GAAiB;QAC5B,UAAU,EAAE,oBAAoB;QAChC,OAAO,EAAE,aAAa;QACtB,IAAI,EAAE,IAAI,CAAC,KAAK;QAChB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,+EAA+E;QAC/E,4DAA4D;QAC5D,yFAAyF;QACzF,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;KAC3D,CAAA;IAED,IAAI,IAAI,CAAC,WAAW;QAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;IAC3D,IAAI,KAAK,CAAC,UAAU;QAAE,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;IAC1D,IAAI,KAAK,CAAC,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAA;IACpD,IAAI,IAAI,CAAC,aAAa;QAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAA;IAE9D,gFAAgF;IAChF,wDAAwD;IACxD,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACrD,MAAM,CAAC,OAAO,GAAG;YAChB,OAAO,EAAE,gBAAgB;YACzB,mBAAmB,EAAE,OAAO;YAC5B,WAAW,EAAE,IAAI,CAAC,kBAAkB;SACpC,CAAA;IACF,CAAC;IAED,OAAO,MAAM,CAAA;AACd,CAAC"}
|
|
@@ -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,
|
|
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"}
|
package/dist/utils/validation.js
CHANGED
|
@@ -69,6 +69,9 @@ export function validateJsonLd(jsonLd) {
|
|
|
69
69
|
export function validatePage(html, options) {
|
|
70
70
|
const errors = [];
|
|
71
71
|
const warnings = [];
|
|
72
|
+
if (isNoindexMetaRefreshRedirect(html)) {
|
|
73
|
+
return { errors, warnings };
|
|
74
|
+
}
|
|
72
75
|
const { titleMaxLength, descriptionMaxLength } = options;
|
|
73
76
|
// Title checks
|
|
74
77
|
const titleMatch = html.match(/<title[^>]*>([\s\S]*?)<\/title>/i);
|
|
@@ -138,6 +141,25 @@ export function validatePage(html, options) {
|
|
|
138
141
|
}
|
|
139
142
|
return { errors, warnings };
|
|
140
143
|
}
|
|
144
|
+
function isNoindexMetaRefreshRedirect(html) {
|
|
145
|
+
const metaTags = html.match(/<meta\s+[^>]*>/gi) ?? [];
|
|
146
|
+
const hasRefresh = metaTags.some((tag) => getHtmlAttr(tag, 'http-equiv')?.toLowerCase() === 'refresh');
|
|
147
|
+
const hasNoindex = metaTags.some((tag) => {
|
|
148
|
+
if (getHtmlAttr(tag, 'name')?.toLowerCase() !== 'robots')
|
|
149
|
+
return false;
|
|
150
|
+
const content = getHtmlAttr(tag, 'content')?.toLowerCase() ?? '';
|
|
151
|
+
return content
|
|
152
|
+
.split(',')
|
|
153
|
+
.map((part) => part.trim())
|
|
154
|
+
.includes('noindex');
|
|
155
|
+
});
|
|
156
|
+
return hasRefresh && hasNoindex;
|
|
157
|
+
}
|
|
158
|
+
function getHtmlAttr(tag, name) {
|
|
159
|
+
const escapedName = name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
160
|
+
const match = tag.match(new RegExp(`\\b${escapedName}\\s*=\\s*(?:"([^"]*)"|'([^']*)'|([^\\s>]+))`, 'i'));
|
|
161
|
+
return match?.[1] ?? match?.[2] ?? match?.[3];
|
|
162
|
+
}
|
|
141
163
|
/**
|
|
142
164
|
* Verify that every `alternateLocales` entry has a reciprocal entry on the
|
|
143
165
|
* target side. For search engines, missing reciprocals are a hard error — Google
|
|
@@ -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
package/src/middleware/seo.ts
CHANGED
|
@@ -109,13 +109,18 @@ export function createSeoMiddleware(
|
|
|
109
109
|
// - CF-Connecting-IP: FCrDNS is keyed on it
|
|
110
110
|
appendVaryHeaders(newHeaders)
|
|
111
111
|
|
|
112
|
-
// Link alternate header on HTML responses when aeoTwins enabled
|
|
113
|
-
//
|
|
112
|
+
// Link alternate header on HTML responses when aeoTwins enabled.
|
|
113
|
+
//
|
|
114
|
+
// Emit only when contentProvider returns an item for this URL AND that item
|
|
115
|
+
// is not members-gated. Previously this also emitted Link headers for URLs
|
|
116
|
+
// the contentProvider did not know about (hubs, region pages, the home page,
|
|
117
|
+
// etc.) — those URLs have no twin at rest, so the advertised .md target 404s.
|
|
118
|
+
// Gating to items-only matches actually-emitted twin paths.
|
|
114
119
|
if (aeo && isHtmlResponse(response)) {
|
|
115
120
|
const linkItem = contentProvider
|
|
116
121
|
? await findItemForPath(contentProvider, context, url.pathname)
|
|
117
122
|
: undefined
|
|
118
|
-
if (
|
|
123
|
+
if (linkItem && linkItem.access !== 'members') {
|
|
119
124
|
const target =
|
|
120
125
|
aeo.mode === 'static' || aeo.mode === 'both' ? twinUrlFor(url, aeo) : url.toString()
|
|
121
126
|
const linkValue = `<${target}>; rel="alternate"; type="text/markdown"`
|
package/src/routes/aeo-twin.ts
CHANGED
|
@@ -51,11 +51,35 @@ export const getStaticPaths: GetStaticPaths = async () => {
|
|
|
51
51
|
// Emit twins for static + both modes; middleware mode serves on-demand.
|
|
52
52
|
if (!aeo || aeo.mode === 'middleware' || !contentProvider) return []
|
|
53
53
|
|
|
54
|
+
// Twin generation now covers articles + pages + videos + podcasts. Hubs,
|
|
55
|
+
// region pillars, series indexes, and the home page typically come through
|
|
56
|
+
// `type: 'pages'`. Each consumer's contentProvider decides which surfaces
|
|
57
|
+
// belong to which type; if a type is unknown it returns [] and we skip.
|
|
58
|
+
const TWIN_TYPES = ['articles', 'pages', 'videos', 'podcasts'] as const
|
|
59
|
+
|
|
54
60
|
let items: ContentItem[]
|
|
55
61
|
try {
|
|
56
62
|
// contentProvider resolves here because this function runs inside Astro's
|
|
57
63
|
// build pipeline — `astro:content` and other Vite virtual modules work.
|
|
58
|
-
|
|
64
|
+
const batches = await Promise.all(
|
|
65
|
+
TWIN_TYPES.map((type) =>
|
|
66
|
+
(contentProvider({ type }, {} as never) as Promise<ContentItem[]>).catch(
|
|
67
|
+
() => [] as ContentItem[],
|
|
68
|
+
),
|
|
69
|
+
),
|
|
70
|
+
)
|
|
71
|
+
// Deduplicate by URL — a contentProvider might surface the same item under
|
|
72
|
+
// multiple types (rare, but cheap to defend against).
|
|
73
|
+
const seen = new Set<string>()
|
|
74
|
+
items = []
|
|
75
|
+
for (const batch of batches) {
|
|
76
|
+
for (const it of batch) {
|
|
77
|
+
if (!it || typeof it.url !== 'string') continue
|
|
78
|
+
if (seen.has(it.url)) continue
|
|
79
|
+
seen.add(it.url)
|
|
80
|
+
items.push(it)
|
|
81
|
+
}
|
|
82
|
+
}
|
|
59
83
|
} catch {
|
|
60
84
|
// Don't fail the build; log nothing here because astro's getStaticPaths
|
|
61
85
|
// swallows console output. The consumer sees "zero paths emitted" which
|
|
@@ -74,7 +98,19 @@ export const getStaticPaths: GetStaticPaths = async () => {
|
|
|
74
98
|
for (const item of filtered) {
|
|
75
99
|
const primaryUrl = twinUrl(item.url)
|
|
76
100
|
const primaryPath = stripOrigin(primaryUrl).replace(/^\//, '')
|
|
77
|
-
|
|
101
|
+
// Paywall-aware twin body. For free items the twin echoes the description
|
|
102
|
+
// (consumer-provided summary). For gated items we never emit the full body
|
|
103
|
+
// — twins are public regardless of the HTML paywall — so we keep the same
|
|
104
|
+
// description-only body and append an explicit "Full analysis is gated"
|
|
105
|
+
// footer that AI engines can cite without claiming the paid content as
|
|
106
|
+
// theirs. The HTML page carries the structured-data paywall markup
|
|
107
|
+
// (`isAccessibleForFree: false` + `hasPart`); the twin's textual boundary
|
|
108
|
+
// must agree with that signal.
|
|
109
|
+
const isGated = item.access === 'members' || item.isAccessibleForFree === false
|
|
110
|
+
const sample = item.description ?? ''
|
|
111
|
+
const body = isGated
|
|
112
|
+
? `${sample}${sample ? '\n\n' : ''}---\n\nFull analysis is behind the paywall. Read the gated piece at ${item.url}.`
|
|
113
|
+
: sample
|
|
78
114
|
|
|
79
115
|
const contentHash =
|
|
80
116
|
stalenessMode === 'content-hash' ? await computeContentHash(item, body) : undefined
|
package/src/types.ts
CHANGED
|
@@ -117,7 +117,7 @@ export interface ContentItem {
|
|
|
117
117
|
|
|
118
118
|
// ─── Content provider ───
|
|
119
119
|
|
|
120
|
-
export type ContentType = 'articles' | 'pages' | 'videos' | 'products' | 'authors'
|
|
120
|
+
export type ContentType = 'articles' | 'pages' | 'videos' | 'podcasts' | 'products' | 'authors'
|
|
121
121
|
|
|
122
122
|
export interface ContentProviderParams {
|
|
123
123
|
type: ContentType
|
|
@@ -16,6 +16,7 @@ export interface ContentItemByType {
|
|
|
16
16
|
articles: ContentItem
|
|
17
17
|
pages: ContentItem
|
|
18
18
|
videos: ContentItem & { video: NonNullable<ContentItem['video']> }
|
|
19
|
+
podcasts: ContentItem
|
|
19
20
|
products: ContentItem & { product: NonNullable<ContentItem['product']> }
|
|
20
21
|
authors: ContentItem
|
|
21
22
|
}
|
|
@@ -3,12 +3,22 @@ import type { ContentItem, JsonLdObject } from '../../types.js'
|
|
|
3
3
|
export function generateVideoJsonLd(item: ContentItem): JsonLdObject {
|
|
4
4
|
const video = item.video!
|
|
5
5
|
|
|
6
|
+
// Derive isAccessibleForFree: explicit field wins, otherwise derive from access.
|
|
7
|
+
// Matches the article emitter so paywalled videos carry the same Google-recognized
|
|
8
|
+
// markup as paywalled articles. Without this, Googlebot has no way to know the
|
|
9
|
+
// gated playback is intentional and may flag the page as cloaking.
|
|
10
|
+
const isAccessibleForFree = item.isAccessibleForFree ?? item.access !== 'members'
|
|
11
|
+
|
|
6
12
|
const result: JsonLdObject = {
|
|
7
13
|
'@context': 'https://schema.org',
|
|
8
14
|
'@type': 'VideoObject',
|
|
9
15
|
name: item.title,
|
|
10
16
|
thumbnailUrl: video.thumbnailUrl,
|
|
11
17
|
duration: video.duration,
|
|
18
|
+
// Google requires the string form 'True'/'False' for Rich Results when paywall
|
|
19
|
+
// markup is emitted. Same convention as the article schema.
|
|
20
|
+
// https://developers.google.com/search/docs/appearance/structured-data/paywalled-content
|
|
21
|
+
isAccessibleForFree: isAccessibleForFree ? 'True' : 'False',
|
|
12
22
|
}
|
|
13
23
|
|
|
14
24
|
if (item.description) result.description = item.description
|
|
@@ -16,5 +26,15 @@ export function generateVideoJsonLd(item: ContentItem): JsonLdObject {
|
|
|
16
26
|
if (video.embedUrl) result.embedUrl = video.embedUrl
|
|
17
27
|
if (item.datePublished) result.uploadDate = item.datePublished
|
|
18
28
|
|
|
29
|
+
// hasPart paywall marker — emitted whenever the item is gated and a cssSelector
|
|
30
|
+
// is configured. Mirrors the article emitter behaviour.
|
|
31
|
+
if (!isAccessibleForFree && item.paywallCssSelector) {
|
|
32
|
+
result.hasPart = {
|
|
33
|
+
'@type': 'WebPageElement',
|
|
34
|
+
isAccessibleForFree: 'False',
|
|
35
|
+
cssSelector: item.paywallCssSelector,
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
19
39
|
return result
|
|
20
40
|
}
|
package/src/utils/validation.ts
CHANGED
|
@@ -90,6 +90,10 @@ export function validatePage(html: string, options: PageValidationOptions): Vali
|
|
|
90
90
|
const errors: string[] = []
|
|
91
91
|
const warnings: string[] = []
|
|
92
92
|
|
|
93
|
+
if (isNoindexMetaRefreshRedirect(html)) {
|
|
94
|
+
return { errors, warnings }
|
|
95
|
+
}
|
|
96
|
+
|
|
93
97
|
const { titleMaxLength, descriptionMaxLength } = options
|
|
94
98
|
|
|
95
99
|
// Title checks
|
|
@@ -173,6 +177,30 @@ export function validatePage(html: string, options: PageValidationOptions): Vali
|
|
|
173
177
|
return { errors, warnings }
|
|
174
178
|
}
|
|
175
179
|
|
|
180
|
+
function isNoindexMetaRefreshRedirect(html: string): boolean {
|
|
181
|
+
const metaTags = html.match(/<meta\s+[^>]*>/gi) ?? []
|
|
182
|
+
const hasRefresh = metaTags.some(
|
|
183
|
+
(tag) => getHtmlAttr(tag, 'http-equiv')?.toLowerCase() === 'refresh',
|
|
184
|
+
)
|
|
185
|
+
const hasNoindex = metaTags.some((tag) => {
|
|
186
|
+
if (getHtmlAttr(tag, 'name')?.toLowerCase() !== 'robots') return false
|
|
187
|
+
const content = getHtmlAttr(tag, 'content')?.toLowerCase() ?? ''
|
|
188
|
+
return content
|
|
189
|
+
.split(',')
|
|
190
|
+
.map((part) => part.trim())
|
|
191
|
+
.includes('noindex')
|
|
192
|
+
})
|
|
193
|
+
return hasRefresh && hasNoindex
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
function getHtmlAttr(tag: string, name: string): string | undefined {
|
|
197
|
+
const escapedName = name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
|
|
198
|
+
const match = tag.match(
|
|
199
|
+
new RegExp(`\\b${escapedName}\\s*=\\s*(?:"([^"]*)"|'([^']*)'|([^\\s>]+))`, 'i'),
|
|
200
|
+
)
|
|
201
|
+
return match?.[1] ?? match?.[2] ?? match?.[3]
|
|
202
|
+
}
|
|
203
|
+
|
|
176
204
|
// ─── Hreflang reciprocity ───
|
|
177
205
|
|
|
178
206
|
import type { ContentItem } from '../types.js'
|