@se-studio/core-ui 1.36.0 → 1.38.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/ANALYTICS.md +23 -3
- package/CHANGELOG.md +14 -0
- package/README.md +1 -1
- package/dist/analytics/adapters/GoogleTagManagerAdapter.d.ts +21 -1
- package/dist/analytics/adapters/GoogleTagManagerAdapter.d.ts.map +1 -1
- package/dist/analytics/adapters/GoogleTagManagerAdapter.js +20 -2
- package/dist/analytics/adapters/GoogleTagManagerAdapter.js.map +1 -1
- package/dist/analytics/adapters/index.d.ts +1 -0
- package/dist/analytics/adapters/index.d.ts.map +1 -1
- package/dist/analytics/adapters/index.js +1 -0
- package/dist/analytics/adapters/index.js.map +1 -1
- package/dist/analytics/isProductionAnalytics.d.ts +2 -0
- package/dist/analytics/isProductionAnalytics.d.ts.map +1 -0
- package/dist/analytics/isProductionAnalytics.js +32 -0
- package/dist/analytics/isProductionAnalytics.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/utils/robots.d.ts +62 -7
- package/dist/utils/robots.d.ts.map +1 -1
- package/dist/utils/robots.js +108 -13
- package/dist/utils/robots.js.map +1 -1
- package/docs/llms.md +24 -4
- package/package.json +1 -1
package/ANALYTICS.md
CHANGED
|
@@ -116,14 +116,34 @@ HubSpot / form packages must import from `@se-studio/core-ui/form-analytics` (sl
|
|
|
116
116
|
The `GoogleTagManagerAdapter` supports both GTM Container ID and GA4 Measurement ID.
|
|
117
117
|
|
|
118
118
|
```tsx
|
|
119
|
+
import { GoogleTagManagerAdapter, isProductionAnalytics } from '@se-studio/core-ui';
|
|
120
|
+
|
|
121
|
+
// Server component — VERCEL_ENV is visible here. Pass the boolean into the client adapter.
|
|
122
|
+
const productionAnalytics = isProductionAnalytics();
|
|
123
|
+
|
|
124
|
+
// Client component
|
|
119
125
|
const adapter = new GoogleTagManagerAdapter({
|
|
120
|
-
containerId: 'GTM-XXXXXXX', //
|
|
121
|
-
//
|
|
122
|
-
|
|
126
|
+
containerId: 'GTM-XXXXXXX', // production container — loaded when the gate is true, including when the site has not opted in
|
|
127
|
+
measurementId: 'G-XXXXXXXX', // production GA4 — same gate; ignored when containerId is set
|
|
128
|
+
testContainerId: 'GTM-TEST', // used only after opt-in, when the gate is false
|
|
129
|
+
testMeasurementId: 'G-TEST', // used when the gate is false and testContainerId is unset
|
|
130
|
+
productionAnalytics, // server-computed boolean. Omit to keep loading containerId unless the Vercel env is set.
|
|
123
131
|
consentDefault: 'granted', // omit unless the site (not the CMP) should set Consent Mode default
|
|
124
132
|
});
|
|
125
133
|
```
|
|
126
134
|
|
|
135
|
+
`isProductionAnalytics()` is opt-in. An explicit boolean always wins. Otherwise it is true when `NEXT_PUBLIC_VERCEL_ENV` or `VERCEL_ENV` is `'production'`, and true when both are unset, so an existing client that only passes `containerId` still loads that container. It is false only when one of those variables is set to another value (`preview`, `development`). `NODE_ENV === 'production'` is the wrong signal: Vercel preview builds are also `NODE_ENV=production`. Client bundles do not see `VERCEL_ENV`. Opt in by computing the helper in a Server Component and passing `productionAnalytics`, or by setting `NEXT_PUBLIC_VERCEL_ENV`.
|
|
136
|
+
|
|
137
|
+
When the gate is false the adapter loads `testContainerId` (or `testMeasurementId` if there is no test container). If neither test id is set, it loads nothing and logs once in development. A site that has opted in does not load the production container on preview or develop (R7.8).
|
|
138
|
+
|
|
139
|
+
Use the same helper for other production-only scripts (Clarity, Ours, Segment, HubSpot tracking):
|
|
140
|
+
|
|
141
|
+
```tsx
|
|
142
|
+
if (isProductionAnalytics()) {
|
|
143
|
+
// load the production script
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
127
147
|
Consent Mode v2: `initialize()` pushes `gtag('consent', 'default', {…})` **only when `consentDefault` is set**, before loading GTM (as an `arguments` object, not a dataLayer array). Omit `consentDefault` so the CMP decides (R7.7) — the adapter must not grant `ad_storage` / `ad_user_data` / `ad_personalization` by implication. Pass `consentDefault: 'granted'` for US opt-out sites without a CMP, or `'denied'` for adapter-owned opt-in. `updateConsent({ analytics, advertising })` pushes `gtag('consent', 'update', {…})`. If `updateConsent` runs before `initialize`, the update is stashed and flushed after any default command, before the container or gtag.js.
|
|
128
148
|
|
|
129
149
|
### GTM Data Layer Events
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @se-studio/core-ui
|
|
2
2
|
|
|
3
|
+
## 1.38.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 4993b1c: Add an opt-in production analytics gate. `isProductionAnalytics()` returns the explicit boolean when passed. Otherwise it is true when `NEXT_PUBLIC_VERCEL_ENV` or `VERCEL_ENV` is `production`, and true when both are unset so existing callers keep loading the production container. It is false only when one of those variables is set to another value.
|
|
8
|
+
|
|
9
|
+
`GoogleTagManagerAdapter` loads `containerId` / `measurementId` when that is true, including the default unset case. When the gate is false it loads optional `testContainerId` / `testMeasurementId`, or nothing if those are unset. Sites opt in by computing the helper in a Server Component and passing `productionAnalytics`, or by setting `NEXT_PUBLIC_VERCEL_ENV`. Use the same helper for other production-only scripts (Clarity, Ours, Segment, HubSpot tracking).
|
|
10
|
+
|
|
11
|
+
## 1.37.0
|
|
12
|
+
|
|
13
|
+
### Minor Changes
|
|
14
|
+
|
|
15
|
+
- 0a1bb04: Add opt-in multi-group robots.txt (preamble, AI_AGENT_USER_AGENTS / ai-agents preset, Content-Signal per group, shared no-drift disallow + allowExtra inheritance) and general llms.txt customisation (customBlocks placements, llmsAccessPolicyBlock preset, size/heading guards). Mistral token corrected to `MistralAI-Index` (vendor docs). Both surfaces remain code-configured only — no CMS fields.
|
|
16
|
+
|
|
3
17
|
## 1.36.0
|
|
4
18
|
|
|
5
19
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -430,7 +430,7 @@ const previewConfig = mergeCmsRendererConfig(
|
|
|
430
430
|
#### Utilities
|
|
431
431
|
- **`createRobotsConfig`** - Builds `MetadataRoute.Robots` for `src/app/robots.ts` with shared production disallow defaults; configurable via `pathPrefix`, `apiPrefixes`, `disallowExtra`, `disallowOmit`, and `blockTrackingQueryParams`
|
|
432
432
|
- **`buildRobotsDisallow`** - Returns the production disallow path list (for plain-text robots route handlers)
|
|
433
|
-
- **`formatRobotsTxt` / `createRobotsTxtResponse`** - Plain-text robots.txt including optional Content Signals (`src/app/robots.txt/route.ts`)
|
|
433
|
+
- **`formatRobotsTxt` / `createRobotsTxtResponse`** - Plain-text robots.txt including optional Content Signals, preamble comments, multi-group AI crawler rules (`AI_AGENT_USER_AGENTS` / `userAgents: 'ai-agents'`), and shared no-drift disallow (`src/app/robots.txt/route.ts`). Code-configured only — not CMS.
|
|
434
434
|
- **`resolveMarkdownNegotiationPath` / `prefersMarkdownAccept` / `htmlPathToMarkdownPath`** - Middleware helpers for `Accept: text/markdown` → existing `/{path}.md` rewrites
|
|
435
435
|
- **`apiPathNeedingTrailingSlash`** - Middleware helper: rewrite bare `/api/*` → `/api/*/` when `trailingSlash: true` so MCP POST and other APIs are not 308’d
|
|
436
436
|
- **`appendAgentDiscoveryLinkHeaders` / `buildAgentDiscoveryLinkValues`** - Homepage/document `Link` headers (`describedby` → `/llms.txt`, alternate markdown)
|
|
@@ -7,15 +7,34 @@ declare global {
|
|
|
7
7
|
type ConsentModeValue = 'granted' | 'denied';
|
|
8
8
|
interface GoogleTagManagerConfig {
|
|
9
9
|
/**
|
|
10
|
-
* GTM Container ID (e.g., GTM-XXXXXXX)
|
|
10
|
+
* GTM Container ID (e.g., GTM-XXXXXXX).
|
|
11
|
+
* Loaded when the production gate is true. When the site has not opted in,
|
|
12
|
+
* that is still this id.
|
|
11
13
|
*/
|
|
12
14
|
containerId?: string;
|
|
13
15
|
/**
|
|
14
16
|
* GA4 Measurement ID (e.g., G-XXXXXXXXXX)
|
|
15
17
|
* If provided, it will be initialized via gtag.js if GTM is not used,
|
|
16
18
|
* or can be used alongside GTM if needed.
|
|
19
|
+
* Loaded when the production gate is true and `containerId` is unset.
|
|
17
20
|
*/
|
|
18
21
|
measurementId?: string;
|
|
22
|
+
/**
|
|
23
|
+
* GTM container for preview, develop, and local dev.
|
|
24
|
+
* Used only when the site has opted in and the gate is false. Omit to load nothing.
|
|
25
|
+
*/
|
|
26
|
+
testContainerId?: string;
|
|
27
|
+
/**
|
|
28
|
+
* GA4 measurement id for preview, develop, and local dev.
|
|
29
|
+
* Used only when the gate is false and `testContainerId` is unset.
|
|
30
|
+
*/
|
|
31
|
+
testMeasurementId?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Opt in to the production gate. Pass a boolean from a Server Component,
|
|
34
|
+
* where `VERCEL_ENV` is visible. Omit, and omit `NEXT_PUBLIC_VERCEL_ENV` /
|
|
35
|
+
* `VERCEL_ENV`, to keep loading `containerId` / `measurementId`.
|
|
36
|
+
*/
|
|
37
|
+
productionAnalytics?: boolean;
|
|
19
38
|
/**
|
|
20
39
|
* Consent Mode v2 default, pushed via `gtag('consent', 'default', …)` before
|
|
21
40
|
* GTM/gtag.js loads. Omit this so the CMP (or Google’s own default) decides
|
|
@@ -26,6 +45,7 @@ interface GoogleTagManagerConfig {
|
|
|
26
45
|
}
|
|
27
46
|
export declare class GoogleTagManagerAdapter implements AnalyticsAdapter {
|
|
28
47
|
private initialized;
|
|
48
|
+
private nonProductionSkipped;
|
|
29
49
|
private config;
|
|
30
50
|
private pendingConsent;
|
|
31
51
|
constructor(config: GoogleTagManagerConfig);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GoogleTagManagerAdapter.d.ts","sourceRoot":"","sources":["../../../src/analytics/adapters/GoogleTagManagerAdapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GoogleTagManagerAdapter.d.ts","sourceRoot":"","sources":["../../../src/analytics/adapters/GoogleTagManagerAdapter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAElB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,SAAS,EAAE,OAAO,EAAE,CAAC;KACtB;CACF;AAED,KAAK,gBAAgB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE7C,UAAU,sBAAsB;IAC9B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,gBAAgB,CAAC;CACnC;AAgCD,qBAAa,uBAAwB,YAAW,gBAAgB;IAC9D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,cAAc,CAAoC;IAE1D,YAAY,MAAM,EAAE,sBAAsB,EAEzC;IAED;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,iBAAiB;IAgBzB,8EAA8E;IAC9E,OAAO,CAAC,mBAAmB;IAQ3B,UAAU,SA8DT;IAED;;;;;;OAMG;IACH,aAAa,CAAC,OAAO,EAAE,qBAAqB,QAc3C;IAED,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAWnE;IAED,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAe/D;IAED,UAAU,CAAC,UAAU,EAAE,uBAAuB,GAAG,IAAI,CAYpD;CACF"}
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
'use client';
|
|
2
|
+
import { isProductionAnalytics } from '../isProductionAnalytics';
|
|
2
3
|
function toConsentMode(allowed) {
|
|
3
4
|
return allowed ? 'granted' : 'denied';
|
|
4
5
|
}
|
|
6
|
+
let loggedNonProductionSkip = false;
|
|
7
|
+
function logNonProductionSkipOnce() {
|
|
8
|
+
if (loggedNonProductionSkip || process.env.NODE_ENV !== 'development') {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
loggedNonProductionSkip = true;
|
|
12
|
+
console.info('[GTM Adapter] Not production: production container not loaded. ' +
|
|
13
|
+
'Set testContainerId or testMeasurementId to load a test container.');
|
|
14
|
+
}
|
|
5
15
|
/**
|
|
6
16
|
* Push a gtag command. Consent Mode only honours the `arguments` object
|
|
7
17
|
* (`function gtag(){ dataLayer.push(arguments); }`), not a real Array.
|
|
@@ -16,6 +26,7 @@ const gtag = function gtag() {
|
|
|
16
26
|
};
|
|
17
27
|
export class GoogleTagManagerAdapter {
|
|
18
28
|
initialized = false;
|
|
29
|
+
nonProductionSkipped = false;
|
|
19
30
|
config;
|
|
20
31
|
pendingConsent;
|
|
21
32
|
constructor(config) {
|
|
@@ -60,9 +71,16 @@ export class GoogleTagManagerAdapter {
|
|
|
60
71
|
this.pendingConsent = undefined;
|
|
61
72
|
}
|
|
62
73
|
initialize() {
|
|
63
|
-
if (typeof window === 'undefined' || this.initialized)
|
|
74
|
+
if (typeof window === 'undefined' || this.initialized || this.nonProductionSkipped)
|
|
64
75
|
return;
|
|
65
|
-
const
|
|
76
|
+
const production = isProductionAnalytics(this.config.productionAnalytics);
|
|
77
|
+
const containerId = production ? this.config.containerId : this.config.testContainerId;
|
|
78
|
+
const measurementId = production ? this.config.measurementId : this.config.testMeasurementId;
|
|
79
|
+
if (!production && !containerId && !measurementId) {
|
|
80
|
+
this.nonProductionSkipped = true;
|
|
81
|
+
logNonProductionSkipOnce();
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
66
84
|
if (!containerId && !measurementId) {
|
|
67
85
|
console.warn('[GTM Adapter] No container ID or measurement ID provided');
|
|
68
86
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GoogleTagManagerAdapter.js","sourceRoot":"","sources":["../../../src/analytics/adapters/GoogleTagManagerAdapter.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"GoogleTagManagerAdapter.js","sourceRoot":"","sources":["../../../src/analytics/adapters/GoogleTagManagerAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { isProductionAnalytics } from '../isProductionAnalytics';
|
|
1
2
|
export { CompositeAnalyticsAdapter } from './CompositeAnalyticsAdapter';
|
|
2
3
|
export type { ConsentAwareAdapterOptions } from './ConsentAwareAdapter';
|
|
3
4
|
export { ConsentAwareAdapter } from './ConsentAwareAdapter';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analytics/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,YAAY,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analytics/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,YAAY,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { isProductionAnalytics } from '../isProductionAnalytics';
|
|
1
2
|
export { CompositeAnalyticsAdapter } from './CompositeAnalyticsAdapter';
|
|
2
3
|
export { ConsentAwareAdapter } from './ConsentAwareAdapter';
|
|
3
4
|
export { ConsoleAnalyticsAdapter } from './ConsoleAnalyticsAdapter';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analytics/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analytics/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isProductionAnalytics.d.ts","sourceRoot":"","sources":["../../src/analytics/isProductionAnalytics.ts"],"names":[],"mappings":"AAsBA,wBAAgB,qBAAqB,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CASjE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether to load production analytics ids.
|
|
3
|
+
*
|
|
4
|
+
* Opt-in. An explicit override always wins. Otherwise the gate applies only
|
|
5
|
+
* when `NEXT_PUBLIC_VERCEL_ENV` or `VERCEL_ENV` is set, and is true solely for
|
|
6
|
+
* `'production'`. When both are unset this returns true so callers keep
|
|
7
|
+
* today's behaviour and still load the production container. Client bundles
|
|
8
|
+
* cannot see `VERCEL_ENV`; compute this in a Server Component and pass the
|
|
9
|
+
* boolean as `productionAnalytics`, or set `NEXT_PUBLIC_VERCEL_ENV`.
|
|
10
|
+
*/
|
|
11
|
+
function configuredVercelEnv() {
|
|
12
|
+
const published = process.env.NEXT_PUBLIC_VERCEL_ENV;
|
|
13
|
+
if (published) {
|
|
14
|
+
return published;
|
|
15
|
+
}
|
|
16
|
+
const server = process.env.VERCEL_ENV;
|
|
17
|
+
if (server) {
|
|
18
|
+
return server;
|
|
19
|
+
}
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
export function isProductionAnalytics(override) {
|
|
23
|
+
if (override !== undefined) {
|
|
24
|
+
return override;
|
|
25
|
+
}
|
|
26
|
+
const env = configuredVercelEnv();
|
|
27
|
+
if (env === undefined) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
return env === 'production';
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=isProductionAnalytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isProductionAnalytics.js","sourceRoot":"","sources":["../../src/analytics/isProductionAnalytics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,SAAS,mBAAmB;IAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IACrD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACtC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAkB;IACtD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;IAClC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,KAAK,YAAY,CAAC;AAC9B,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -38,7 +38,7 @@ export type { AnalyticsPageTrackerProps } from './analytics/AnalyticsPageTracker
|
|
|
38
38
|
export { AnalyticsPageTracker } from './analytics/AnalyticsPageTracker';
|
|
39
39
|
export { AnalyticsProvider, useAnalyticsContext } from './analytics/AnalyticsProvider';
|
|
40
40
|
export type { ConsentAwareAdapterOptions } from './analytics/adapters';
|
|
41
|
-
export { CompositeAnalyticsAdapter, ConsentAwareAdapter, ConsoleAnalyticsAdapter, GoogleTagManagerAdapter, } from './analytics/adapters';
|
|
41
|
+
export { CompositeAnalyticsAdapter, ConsentAwareAdapter, ConsoleAnalyticsAdapter, GoogleTagManagerAdapter, isProductionAnalytics, } from './analytics/adapters';
|
|
42
42
|
export type { ConsentModel, ConsentStatus, PrivacySignalNavigator, ResolveAnalyticsConsentOptions, } from './analytics/consent/resolveAnalyticsConsent';
|
|
43
43
|
export { createConsentGetter, resolveAnalyticsConsent, } from './analytics/consent/resolveAnalyticsConsent';
|
|
44
44
|
export type { AnalyticsAdapter, AnalyticsConsentState, ClickTrackingProperties, PageTrackingProperties, } from './analytics/types';
|
|
@@ -131,8 +131,8 @@ export { processCollectionLinks } from './utils/processCollectionLinks';
|
|
|
131
131
|
export { processTextContent } from './utils/processTextContent';
|
|
132
132
|
export { extractTextFromReactNode } from './utils/reactNodeText';
|
|
133
133
|
export { extractRichTextNodeText } from './utils/richTextNodeText';
|
|
134
|
-
export type { ContentSignalPreference, ContentSignals, CreateRobotsConfigOptions, FormatRobotsTxtOptions, } from './utils/robots';
|
|
135
|
-
export { buildRobotsDisallow, createRobotsConfig, createRobotsTxtResponse, DEFAULT_ROBOTS_DISALLOW, formatContentSignalLine, formatRobotsTxt, TRACKING_QUERY_ROBOTS_DISALLOW, } from './utils/robots';
|
|
134
|
+
export type { ContentSignalPreference, ContentSignals, CreateRobotsConfigOptions, FormatRobotsTxtOptions, RobotsTxtGroupOptions, RobotsUserAgentPreset, } from './utils/robots';
|
|
135
|
+
export { AI_AGENT_USER_AGENTS, buildRobotsDisallow, createRobotsConfig, createRobotsTxtResponse, DEFAULT_ROBOTS_DISALLOW, formatContentSignalLine, formatRobotsTxt, resolveRobotsUserAgents, TRACKING_QUERY_ROBOTS_DISALLOW, } from './utils/robots';
|
|
136
136
|
export { scopeCss } from './utils/scopeCss';
|
|
137
137
|
export type { CreateSitemapXmlRouteHandlerOptions, GenerateSitemapOptions, SitemapChangeFrequency, SitemapEntry, SitemapSource, } from './utils/sitemap';
|
|
138
138
|
export { buildSitemap, createSitemapXmlResponse, createSitemapXmlRouteHandler, deduplicateSitemapEntries, generateNextSitemap, SITEMAP_CACHE_TAG, SITEMAP_XML_HEADERS, sitemapToXml, sortSitemapEntries, } from './utils/sitemap';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAC/F,YAAY,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAElF,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACvF,YAAY,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
export { AnalyticsPageTracker } from './analytics/AnalyticsPageTracker';
|
|
38
38
|
export { AnalyticsProvider, useAnalyticsContext } from './analytics/AnalyticsProvider';
|
|
39
39
|
// Analytics Adapters
|
|
40
|
-
export { CompositeAnalyticsAdapter, ConsentAwareAdapter, ConsoleAnalyticsAdapter, GoogleTagManagerAdapter, } from './analytics/adapters';
|
|
40
|
+
export { CompositeAnalyticsAdapter, ConsentAwareAdapter, ConsoleAnalyticsAdapter, GoogleTagManagerAdapter, isProductionAnalytics, } from './analytics/adapters';
|
|
41
41
|
export { createConsentGetter, resolveAnalyticsConsent, } from './analytics/consent/resolveAnalyticsConsent';
|
|
42
42
|
export { useAnalytics } from './analytics/useAnalytics';
|
|
43
43
|
export { createVideoEngagementSession, useHtml5VideoEngagement, useVideoEngagement, VIDEO_ENGAGEMENT_EVENT_NAMES, VIDEO_ENGAGEMENT_EVENTS, VIDEO_ENGAGEMENT_THRESHOLDS, } from './analytics/video';
|
|
@@ -112,7 +112,7 @@ export { processCollectionLinks } from './utils/processCollectionLinks';
|
|
|
112
112
|
export { processTextContent } from './utils/processTextContent';
|
|
113
113
|
export { extractTextFromReactNode } from './utils/reactNodeText';
|
|
114
114
|
export { extractRichTextNodeText } from './utils/richTextNodeText';
|
|
115
|
-
export { buildRobotsDisallow, createRobotsConfig, createRobotsTxtResponse, DEFAULT_ROBOTS_DISALLOW, formatContentSignalLine, formatRobotsTxt, TRACKING_QUERY_ROBOTS_DISALLOW, } from './utils/robots';
|
|
115
|
+
export { AI_AGENT_USER_AGENTS, buildRobotsDisallow, createRobotsConfig, createRobotsTxtResponse, DEFAULT_ROBOTS_DISALLOW, formatContentSignalLine, formatRobotsTxt, resolveRobotsUserAgents, TRACKING_QUERY_ROBOTS_DISALLOW, } from './utils/robots';
|
|
116
116
|
export { scopeCss } from './utils/scopeCss';
|
|
117
117
|
export { buildSitemap, createSitemapXmlResponse, createSitemapXmlRouteHandler, deduplicateSitemapEntries, generateNextSitemap, SITEMAP_CACHE_TAG, SITEMAP_XML_HEADERS, sitemapToXml, sortSitemapEntries, } from './utils/sitemap';
|
|
118
118
|
export { buildStructuredDataContext } from './utils/structuredDataUtils';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAMH,YAAY;AACZ,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEvF,qBAAqB;AACrB,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -10,8 +10,8 @@ export { DEFAULT_RELATED_ARTICLES_FALLBACK_POLICY, getRelatedArticles, getRelate
|
|
|
10
10
|
export type { BuildListingItemsOptions, ListingFetchHelpers, ListingStructuredDataItem, } from '../utils/listingStructuredData';
|
|
11
11
|
export { buildListingItems, buildListingStructuredDataContext, } from '../utils/listingStructuredData';
|
|
12
12
|
export { CMS_HOMEPAGE_SLUG, controlSlugFromCanonicalPath, resolvePageTestControlSlug, } from '../utils/pageTestControlSlug';
|
|
13
|
-
export type { ContentSignalPreference, ContentSignals, CreateRobotsConfigOptions, FormatRobotsTxtOptions, } from '../utils/robots';
|
|
14
|
-
export { buildRobotsDisallow, createRobotsConfig, createRobotsTxtResponse, DEFAULT_ROBOTS_DISALLOW, formatContentSignalLine, formatRobotsTxt, TRACKING_QUERY_ROBOTS_DISALLOW, } from '../utils/robots';
|
|
13
|
+
export type { ContentSignalPreference, ContentSignals, CreateRobotsConfigOptions, FormatRobotsTxtOptions, RobotsTxtGroupOptions, RobotsUserAgentPreset, } from '../utils/robots';
|
|
14
|
+
export { AI_AGENT_USER_AGENTS, buildRobotsDisallow, createRobotsConfig, createRobotsTxtResponse, DEFAULT_ROBOTS_DISALLOW, formatContentSignalLine, formatRobotsTxt, resolveRobotsUserAgents, TRACKING_QUERY_ROBOTS_DISALLOW, } from '../utils/robots';
|
|
15
15
|
export type { GenerateNotFoundPage, GenerateSlimNotFoundPage, RouteHandlersConfig, } from './route-handlers';
|
|
16
16
|
export { createRouteHandlers } from './route-handlers';
|
|
17
17
|
export type { CmsPagePreparationResult, PrepareArticlePageInput, PrepareArticleTypePageInput, PrepareArticleTypesIndexPageInput, PrepareArticleTypeTagPageInput, PrepareCustomTypePageInput, PreparePageInput, PreparePersonPageInput, PrepareTagPageInput, PrepareTagsIndexPageInput, PrepareTeamIndexPageInput, RouteHandlersPrepareHooks, } from './route-handlers-types';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,YAAY,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC9F,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,YAAY,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,EAC/B,6BAA6B,EAC7B,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EACL,wCAAwC,EACxC,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,oCAAoC,GACrC,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,iCAAiC,GAClC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,uBAAuB,EACvB,cAAc,EACd,yBAAyB,EACzB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,YAAY,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC9F,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,YAAY,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,EAC/B,6BAA6B,EAC7B,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EACL,wCAAwC,EACxC,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,oCAAoC,GACrC,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,iCAAiC,GAClC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,uBAAuB,EACvB,cAAc,EACd,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,uBAAuB,EACvB,8BAA8B,GAC/B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,EAC3B,iCAAiC,EACjC,8BAA8B,EAC9B,0BAA0B,EAC1B,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/server/index.js
CHANGED
|
@@ -5,7 +5,7 @@ export { apiPathNeedingTrailingSlash, appendAgentDiscoveryLinkHeaders, buildAgen
|
|
|
5
5
|
export { DEFAULT_RELATED_ARTICLES_FALLBACK_POLICY, getRelatedArticles, getRelatedPeople, getRelatedTags, resolveRelatedArticlesFallbackPolicy, } from '../utils/componentUtils';
|
|
6
6
|
export { buildListingItems, buildListingStructuredDataContext, } from '../utils/listingStructuredData';
|
|
7
7
|
export { CMS_HOMEPAGE_SLUG, controlSlugFromCanonicalPath, resolvePageTestControlSlug, } from '../utils/pageTestControlSlug';
|
|
8
|
-
export { buildRobotsDisallow, createRobotsConfig, createRobotsTxtResponse, DEFAULT_ROBOTS_DISALLOW, formatContentSignalLine, formatRobotsTxt, TRACKING_QUERY_ROBOTS_DISALLOW, } from '../utils/robots';
|
|
8
|
+
export { AI_AGENT_USER_AGENTS, buildRobotsDisallow, createRobotsConfig, createRobotsTxtResponse, DEFAULT_ROBOTS_DISALLOW, formatContentSignalLine, formatRobotsTxt, resolveRobotsUserAgents, TRACKING_QUERY_ROBOTS_DISALLOW, } from '../utils/robots';
|
|
9
9
|
export { createRouteHandlers } from './route-handlers';
|
|
10
10
|
export { toBreadcrumbOptions } from './route-types';
|
|
11
11
|
export { canRenderArticleTypeTagRoute, canRenderTagIndex } from './tag-index-guards';
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAGrB,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAM9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,EAC/B,6BAA6B,EAC7B,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,wCAAwC,EACxC,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,oCAAoC,GACrC,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EACL,iBAAiB,EACjB,iCAAiC,GAClC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAGrB,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAM9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,EAC/B,6BAA6B,EAC7B,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,wCAAwC,EACxC,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,oCAAoC,GACrC,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EACL,iBAAiB,EACjB,iCAAiC,GAClC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,8BAA8B,CAAC;AAStC,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,uBAAuB,EACvB,8BAA8B,GAC/B,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAuBvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/utils/robots.d.ts
CHANGED
|
@@ -7,6 +7,19 @@ export declare const DEFAULT_ROBOTS_DISALLOW: readonly ['/*?_rsc=*', '/_next/dat
|
|
|
7
7
|
* help other crawlers and audit tooling but are not a complete Google fix.
|
|
8
8
|
*/
|
|
9
9
|
export declare const TRACKING_QUERY_ROBOTS_DISALLOW: readonly ['/*?_gl=*', '/*?nnerid=*', '/*?ref=*'];
|
|
10
|
+
/**
|
|
11
|
+
* Curated AI / LLM crawler user-agents — single source of truth for all sites.
|
|
12
|
+
* Living list: bump via changeset when vendors rename tokens; verify against vendor docs.
|
|
13
|
+
*
|
|
14
|
+
* Spot-checked 12 Oct 2026:
|
|
15
|
+
* - Meta trio (`meta-externalagent`, `meta-externalfetcher`, `meta-webindexer`) —
|
|
16
|
+
* matches https://developers.facebook.com/docs/sharing/webmasters/web-crawlers
|
|
17
|
+
* - Mistral: `MistralAI-User` + `MistralAI-Index` (not `MistralAI-User/Index`) —
|
|
18
|
+
* matches https://docs.mistral.ai/robots
|
|
19
|
+
*/
|
|
20
|
+
export declare const AI_AGENT_USER_AGENTS: readonly ['ClaudeBot', 'Claude-User', 'Claude-SearchBot', 'GPTBot', 'ChatGPT-User', 'OAI-SearchBot', 'PerplexityBot', 'Perplexity-User', 'meta-externalagent', 'meta-externalfetcher', 'meta-webindexer', 'Amazonbot', 'Amzn-SearchBot', 'Amzn-User', 'MistralAI-User', 'MistralAI-Index', 'DuckAssistBot', 'CCBot', 'Bytespider', 'Diffbot', 'cohere-ai'];
|
|
21
|
+
/** Named UA presets that expand via {@link AI_AGENT_USER_AGENTS}. */
|
|
22
|
+
export type RobotsUserAgentPreset = 'ai-agents';
|
|
10
23
|
/** Yes/no preference for Content Signals (contentsignals.org). */
|
|
11
24
|
export type ContentSignalPreference = 'yes' | 'no';
|
|
12
25
|
/**
|
|
@@ -60,14 +73,47 @@ export interface CreateRobotsConfigOptions {
|
|
|
60
73
|
*/
|
|
61
74
|
allowExtra?: readonly string[];
|
|
62
75
|
}
|
|
63
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* Additional robots.txt group after `User-agent: *`.
|
|
78
|
+
* Named groups inherit the shared disallow list (no drift) plus optional group-only extras.
|
|
79
|
+
*/
|
|
80
|
+
export interface RobotsTxtGroupOptions {
|
|
81
|
+
/** Explicit UAs, or a preset key that expands via {@link AI_AGENT_USER_AGENTS}. */
|
|
82
|
+
userAgents: readonly string[] | RobotsUserAgentPreset;
|
|
83
|
+
/** Overrides group Content-Signal; default = top-level `contentSignals`. */
|
|
84
|
+
contentSignals?: ContentSignals;
|
|
85
|
+
/**
|
|
86
|
+
* Disallows for this group only (merged after shared base).
|
|
87
|
+
* Must never be applied to `*` unless also listed in shared `disallowExtra`.
|
|
88
|
+
*/
|
|
89
|
+
disallowExtra?: readonly string[];
|
|
90
|
+
/**
|
|
91
|
+
* Extra `Allow:` paths for this group (after `Allow: /`).
|
|
92
|
+
* Appended after top-level `allowExtra` (same no-drift inheritance as disallow).
|
|
93
|
+
*/
|
|
94
|
+
allowExtra?: readonly string[];
|
|
95
|
+
}
|
|
96
|
+
/** Options for plain-text robots.txt (supports Content-Signal, preamble, multi-group). */
|
|
64
97
|
export interface FormatRobotsTxtOptions extends CreateRobotsConfigOptions {
|
|
65
98
|
/**
|
|
66
|
-
* When set (production only), emit a Content-Signal line under `User-agent:
|
|
99
|
+
* When set (production only), emit a Content-Signal line under `User-agent: *`
|
|
100
|
+
* and as the default for each named group (unless the group overrides).
|
|
67
101
|
* Next.js `MetadataRoute.Robots` cannot express this — use `formatRobotsTxt` /
|
|
68
102
|
* `createRobotsTxtResponse` in `src/app/robots.txt/route.ts` instead of `robots.ts`.
|
|
69
103
|
*/
|
|
70
104
|
contentSignals?: ContentSignals;
|
|
105
|
+
/**
|
|
106
|
+
* Leading comment lines (e.g. Terms of Use preamble). Strings may omit `# `;
|
|
107
|
+
* the formatter prefixes `# ` when missing and emits a blank line before the
|
|
108
|
+
* first `User-agent`. Production only. Site-owned copy — not CMS.
|
|
109
|
+
*/
|
|
110
|
+
preamble?: string | readonly string[];
|
|
111
|
+
/**
|
|
112
|
+
* Additional groups after `*`. Each group emits multiple `User-agent:` lines,
|
|
113
|
+
* optional Content-Signal, Allow, then the shared disallow list plus
|
|
114
|
+
* `group.disallowExtra`. Production only; opt-in.
|
|
115
|
+
*/
|
|
116
|
+
groups?: readonly RobotsTxtGroupOptions[];
|
|
71
117
|
}
|
|
72
118
|
/**
|
|
73
119
|
* Builds the production disallow path list from options.
|
|
@@ -80,8 +126,8 @@ export declare function buildRobotsDisallow(options: CreateRobotsConfigOptions):
|
|
|
80
126
|
* In production: allows `/` and disallows internal/infrastructure paths.
|
|
81
127
|
* In non-production: disallows all crawlers (with optional staging bot allowlist).
|
|
82
128
|
*
|
|
83
|
-
* **Content-Signal:** not supported here (Next metadata type).
|
|
84
|
-
* {@link formatRobotsTxt} / {@link createRobotsTxtResponse} in a route handler.
|
|
129
|
+
* **Content-Signal / preamble / multi-group:** not supported here (Next metadata type).
|
|
130
|
+
* Use {@link formatRobotsTxt} / {@link createRobotsTxtResponse} in a route handler.
|
|
85
131
|
*/
|
|
86
132
|
export declare function createRobotsConfig(options: CreateRobotsConfigOptions): MetadataRoute.Robots;
|
|
87
133
|
/**
|
|
@@ -92,11 +138,18 @@ export declare function createRobotsConfig(options: CreateRobotsConfigOptions):
|
|
|
92
138
|
* // → 'Content-Signal: search=yes, ai-train=no, ai-input=yes'
|
|
93
139
|
*/
|
|
94
140
|
export declare function formatContentSignalLine(signals: ContentSignals): string;
|
|
141
|
+
/** Resolves a preset or explicit UA list. Throws if the resolved list is empty. */
|
|
142
|
+
export declare function resolveRobotsUserAgents(userAgents: readonly string[] | RobotsUserAgentPreset): readonly string[];
|
|
95
143
|
/**
|
|
96
|
-
* Builds a full plain-text robots.txt body, including optional Content-Signal
|
|
144
|
+
* Builds a full plain-text robots.txt body, including optional Content-Signal,
|
|
145
|
+
* preamble comments, and additional user-agent groups.
|
|
146
|
+
*
|
|
147
|
+
* Prefer this over `createRobotsConfig` when you need Content Signals, comments,
|
|
148
|
+
* or multi-group AI crawler rules. Serve from `src/app/robots.txt/route.ts`.
|
|
97
149
|
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
150
|
+
* **No-drift:** shared disallow is built once via {@link buildRobotsDisallow};
|
|
151
|
+
* named groups append only `group.disallowExtra`. Top-level `allowExtra` is
|
|
152
|
+
* inherited by named groups, then `group.allowExtra` is appended.
|
|
100
153
|
*/
|
|
101
154
|
export declare function formatRobotsTxt(options: FormatRobotsTxtOptions): string;
|
|
102
155
|
/**
|
|
@@ -108,6 +161,8 @@ export declare function formatRobotsTxt(options: FormatRobotsTxtOptions): string
|
|
|
108
161
|
* isProduction,
|
|
109
162
|
* baseUrl,
|
|
110
163
|
* contentSignals: { search: 'yes', aiTrain: 'no', aiInput: 'yes' },
|
|
164
|
+
* preamble: ['Terms of Use apply. See /terms'],
|
|
165
|
+
* groups: [{ userAgents: 'ai-agents', disallowExtra: ['/results'] }],
|
|
111
166
|
* });
|
|
112
167
|
* }
|
|
113
168
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAE1C,uEAAuE;AACvE,eAAO,MAAM,uBAAuB,YAClC,WAAW,EACX,cAAc,EACd,OAAO,EACP,WAAW,EACX,aAAa,EACb,OAAO,EACP,MAAM,CACE,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,YAAI,UAAU,EAAE,aAAa,EAAE,UAAU,CAAU,CAAC;AAE/F,kEAAkE;AAClE,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,IAAI,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,MAAM,EAAE,uBAAuB,CAAC;IAChC,yCAAyC;IACzC,OAAO,EAAE,uBAAuB,CAAC;IACjC,6DAA6D;IAC7D,OAAO,EAAE,uBAAuB,CAAC;CAClC;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,+CAA+C;IAC/C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,0FAA0F;IAC1F,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,4CAA4C;IAC5C,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE;;;;;OAKG;IACH,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED,
|
|
1
|
+
{"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/robots.js
CHANGED
|
@@ -14,6 +14,39 @@ export const DEFAULT_ROBOTS_DISALLOW = [
|
|
|
14
14
|
* help other crawlers and audit tooling but are not a complete Google fix.
|
|
15
15
|
*/
|
|
16
16
|
export const TRACKING_QUERY_ROBOTS_DISALLOW = ['/*?_gl=*', '/*?nnerid=*', '/*?ref=*'];
|
|
17
|
+
/**
|
|
18
|
+
* Curated AI / LLM crawler user-agents — single source of truth for all sites.
|
|
19
|
+
* Living list: bump via changeset when vendors rename tokens; verify against vendor docs.
|
|
20
|
+
*
|
|
21
|
+
* Spot-checked 12 Oct 2026:
|
|
22
|
+
* - Meta trio (`meta-externalagent`, `meta-externalfetcher`, `meta-webindexer`) —
|
|
23
|
+
* matches https://developers.facebook.com/docs/sharing/webmasters/web-crawlers
|
|
24
|
+
* - Mistral: `MistralAI-User` + `MistralAI-Index` (not `MistralAI-User/Index`) —
|
|
25
|
+
* matches https://docs.mistral.ai/robots
|
|
26
|
+
*/
|
|
27
|
+
export const AI_AGENT_USER_AGENTS = [
|
|
28
|
+
'ClaudeBot',
|
|
29
|
+
'Claude-User',
|
|
30
|
+
'Claude-SearchBot',
|
|
31
|
+
'GPTBot',
|
|
32
|
+
'ChatGPT-User',
|
|
33
|
+
'OAI-SearchBot',
|
|
34
|
+
'PerplexityBot',
|
|
35
|
+
'Perplexity-User',
|
|
36
|
+
'meta-externalagent',
|
|
37
|
+
'meta-externalfetcher',
|
|
38
|
+
'meta-webindexer',
|
|
39
|
+
'Amazonbot',
|
|
40
|
+
'Amzn-SearchBot',
|
|
41
|
+
'Amzn-User',
|
|
42
|
+
'MistralAI-User',
|
|
43
|
+
'MistralAI-Index',
|
|
44
|
+
'DuckAssistBot',
|
|
45
|
+
'CCBot',
|
|
46
|
+
'Bytespider',
|
|
47
|
+
'Diffbot',
|
|
48
|
+
'cohere-ai',
|
|
49
|
+
];
|
|
17
50
|
function normalizePathPrefix(prefix) {
|
|
18
51
|
if (!prefix) {
|
|
19
52
|
return undefined;
|
|
@@ -76,8 +109,8 @@ export function buildRobotsDisallow(options) {
|
|
|
76
109
|
* In production: allows `/` and disallows internal/infrastructure paths.
|
|
77
110
|
* In non-production: disallows all crawlers (with optional staging bot allowlist).
|
|
78
111
|
*
|
|
79
|
-
* **Content-Signal:** not supported here (Next metadata type).
|
|
80
|
-
* {@link formatRobotsTxt} / {@link createRobotsTxtResponse} in a route handler.
|
|
112
|
+
* **Content-Signal / preamble / multi-group:** not supported here (Next metadata type).
|
|
113
|
+
* Use {@link formatRobotsTxt} / {@link createRobotsTxtResponse} in a route handler.
|
|
81
114
|
*/
|
|
82
115
|
export function createRobotsConfig(options) {
|
|
83
116
|
const sitemap = options.sitemapUrl ?? `${options.baseUrl}/sitemap.xml`;
|
|
@@ -120,11 +153,54 @@ export function createRobotsConfig(options) {
|
|
|
120
153
|
export function formatContentSignalLine(signals) {
|
|
121
154
|
return `Content-Signal: search=${signals.search}, ai-train=${signals.aiTrain}, ai-input=${signals.aiInput}`;
|
|
122
155
|
}
|
|
156
|
+
/** Resolves a preset or explicit UA list. Throws if the resolved list is empty. */
|
|
157
|
+
export function resolveRobotsUserAgents(userAgents) {
|
|
158
|
+
const resolved = userAgents === 'ai-agents' ? AI_AGENT_USER_AGENTS : userAgents;
|
|
159
|
+
if (resolved.length === 0) {
|
|
160
|
+
throw new Error('robots.txt group userAgents must not be empty');
|
|
161
|
+
}
|
|
162
|
+
return resolved;
|
|
163
|
+
}
|
|
164
|
+
/** Merges shared (top-level) allowExtra with group-only extras. */
|
|
165
|
+
function mergeAllowExtra(shared, group) {
|
|
166
|
+
if (!shared?.length && !group?.length) {
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
return [...(shared ?? []), ...(group ?? [])];
|
|
170
|
+
}
|
|
171
|
+
function formatPreambleLines(preamble) {
|
|
172
|
+
const raw = typeof preamble === 'string' ? [preamble] : [...preamble];
|
|
173
|
+
return raw.map((line) => {
|
|
174
|
+
const trimmed = line.replace(/\s+$/, '');
|
|
175
|
+
if (trimmed.startsWith('#')) {
|
|
176
|
+
return trimmed;
|
|
177
|
+
}
|
|
178
|
+
return `# ${trimmed}`;
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
function appendAllowLines(lines, allowExtra) {
|
|
182
|
+
lines.push('Allow: /');
|
|
183
|
+
if (allowExtra?.length) {
|
|
184
|
+
for (const path of allowExtra) {
|
|
185
|
+
lines.push(`Allow: ${path}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
function appendDisallowLines(lines, paths) {
|
|
190
|
+
for (const path of paths) {
|
|
191
|
+
lines.push(`Disallow: ${path}`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
123
194
|
/**
|
|
124
|
-
* Builds a full plain-text robots.txt body, including optional Content-Signal
|
|
195
|
+
* Builds a full plain-text robots.txt body, including optional Content-Signal,
|
|
196
|
+
* preamble comments, and additional user-agent groups.
|
|
197
|
+
*
|
|
198
|
+
* Prefer this over `createRobotsConfig` when you need Content Signals, comments,
|
|
199
|
+
* or multi-group AI crawler rules. Serve from `src/app/robots.txt/route.ts`.
|
|
125
200
|
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
201
|
+
* **No-drift:** shared disallow is built once via {@link buildRobotsDisallow};
|
|
202
|
+
* named groups append only `group.disallowExtra`. Top-level `allowExtra` is
|
|
203
|
+
* inherited by named groups, then `group.allowExtra` is appended.
|
|
128
204
|
*/
|
|
129
205
|
export function formatRobotsTxt(options) {
|
|
130
206
|
const sitemap = options.sitemapUrl ?? `${options.baseUrl}/sitemap.xml`;
|
|
@@ -138,19 +214,36 @@ export function formatRobotsTxt(options) {
|
|
|
138
214
|
lines.push('', `Sitemap: ${sitemap}`, '');
|
|
139
215
|
return lines.join('\n');
|
|
140
216
|
}
|
|
141
|
-
const lines = [
|
|
217
|
+
const lines = [];
|
|
218
|
+
if (options.preamble !== undefined) {
|
|
219
|
+
lines.push(...formatPreambleLines(options.preamble));
|
|
220
|
+
lines.push('');
|
|
221
|
+
}
|
|
222
|
+
const sharedDisallow = buildRobotsDisallow(options);
|
|
223
|
+
lines.push('User-agent: *');
|
|
142
224
|
if (options.contentSignals) {
|
|
143
225
|
lines.push(formatContentSignalLine(options.contentSignals));
|
|
144
226
|
}
|
|
145
|
-
lines.
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
227
|
+
appendAllowLines(lines, options.allowExtra);
|
|
228
|
+
appendDisallowLines(lines, sharedDisallow);
|
|
229
|
+
if (options.groups?.length) {
|
|
230
|
+
for (const group of options.groups) {
|
|
231
|
+
const userAgents = resolveRobotsUserAgents(group.userAgents);
|
|
232
|
+
lines.push('');
|
|
233
|
+
for (const ua of userAgents) {
|
|
234
|
+
lines.push(`User-agent: ${ua}`);
|
|
235
|
+
}
|
|
236
|
+
const groupSignals = group.contentSignals ?? options.contentSignals;
|
|
237
|
+
if (groupSignals) {
|
|
238
|
+
lines.push(formatContentSignalLine(groupSignals));
|
|
239
|
+
}
|
|
240
|
+
appendAllowLines(lines, mergeAllowExtra(options.allowExtra, group.allowExtra));
|
|
241
|
+
const groupDisallow = group.disallowExtra?.length
|
|
242
|
+
? [...sharedDisallow, ...group.disallowExtra]
|
|
243
|
+
: sharedDisallow;
|
|
244
|
+
appendDisallowLines(lines, groupDisallow);
|
|
149
245
|
}
|
|
150
246
|
}
|
|
151
|
-
for (const path of buildRobotsDisallow(options)) {
|
|
152
|
-
lines.push(`Disallow: ${path}`);
|
|
153
|
-
}
|
|
154
247
|
lines.push('', `Sitemap: ${sitemap}`, '');
|
|
155
248
|
return lines.join('\n');
|
|
156
249
|
}
|
|
@@ -163,6 +256,8 @@ export function formatRobotsTxt(options) {
|
|
|
163
256
|
* isProduction,
|
|
164
257
|
* baseUrl,
|
|
165
258
|
* contentSignals: { search: 'yes', aiTrain: 'no', aiInput: 'yes' },
|
|
259
|
+
* preamble: ['Terms of Use apply. See /terms'],
|
|
260
|
+
* groups: [{ userAgents: 'ai-agents', disallowExtra: ['/results'] }],
|
|
166
261
|
* });
|
|
167
262
|
* }
|
|
168
263
|
*/
|
package/dist/utils/robots.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robots.js","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"AAEA,uEAAuE;AACvE,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,WAAW;IACX,cAAc;IACd,OAAO;IACP,WAAW;IACX,aAAa;IACb,OAAO;IACP,MAAM;CACE,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"robots.js","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"AAEA,uEAAuE;AACvE,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,WAAW;IACX,cAAc;IACd,OAAO;IACP,WAAW;IACX,aAAa;IACb,OAAO;IACP,MAAM;CACE,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,CAAU,CAAC;AAE/F;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,WAAW;IACX,aAAa;IACb,kBAAkB;IAClB,QAAQ;IACR,cAAc;IACd,eAAe;IACf,eAAe;IACf,iBAAiB;IACjB,oBAAoB;IACpB,sBAAsB;IACtB,iBAAiB;IACjB,WAAW;IACX,gBAAgB;IAChB,WAAW;IACX,gBAAgB;IAChB,iBAAiB;IACjB,eAAe;IACf,OAAO;IACP,YAAY;IACZ,SAAS;IACT,WAAW;CACH,CAAC;AAsGX,SAAS,mBAAmB,CAAC,MAA0B;IACrD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;IACtE,OAAO,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,UAA8B;IACnE,IAAI,IAAI,KAAK,MAAM,IAAI,UAAU,EAAE,CAAC;QAClC,OAAO,GAAG,UAAU,MAAM,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAe,EAAE,WAA8B;IACzE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;gBAC5B,WAAW,GAAG,IAAI,CAAC;YACrB,CAAC;YACD,SAAS;QACX,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAkC;IACpE,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,CAAC;IAErD,IAAI,KAAK,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACjF,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAClC,CAAC;IAEF,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAE/C,IAAI,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,OAAO,CAAC,wBAAwB,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,GAAG,8BAA8B,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAkC;IACnE,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,IAAI,GAAG,OAAO,CAAC,OAAO,cAAc,CAAC;IAEvE,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAkC;YAC3C;gBACE,SAAS,EAAE,GAAG;gBACd,QAAQ,EAAE,GAAG;aACd;SACF,CAAC;QAEF,IAAI,OAAO,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;YACtC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;gBAC7C,KAAK,CAAC,IAAI,CAAC;oBACT,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,KAAK,EAAE,IAAI,CAAC,KAAK;iBAClB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,KAAK,GACT,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAE3F,OAAO;QACL,KAAK,EAAE;YACL;gBACE,SAAS,EAAE,GAAG;gBACd,KAAK;gBACL,QAAQ,EAAE,mBAAmB,CAAC,OAAO,CAAC;aACvC;SACF;QACD,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAuB;IAC7D,OAAO,0BAA0B,OAAO,CAAC,MAAM,cAAc,OAAO,CAAC,OAAO,cAAc,OAAO,CAAC,OAAO,EAAE,CAAC;AAC9G,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,uBAAuB,CACrC,UAAqD;IAErD,MAAM,QAAQ,GAAG,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,UAAU,CAAC;IAChF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,mEAAmE;AACnE,SAAS,eAAe,CACtB,MAAqC,EACrC,KAAoC;IAEpC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACtC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAoC;IAC/D,MAAM,GAAG,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;IACtE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACzC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,KAAK,OAAO,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAe,EAAE,UAAyC;IAClF,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,IAAI,UAAU,EAAE,MAAM,EAAE,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAe,EAAE,KAAwB;IACpE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,OAA+B;IAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,IAAI,GAAG,OAAO,CAAC,OAAO,cAAc,CAAC;IAEvE,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAa,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QAEzD,IAAI,OAAO,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;YACtC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;gBAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,eAAe,IAAI,CAAC,SAAS,EAAE,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAEpD,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE5B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAE3C,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,uBAAuB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;YAClC,CAAC;YAED,MAAM,YAAY,GAAG,KAAK,CAAC,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC;YACpE,IAAI,YAAY,EAAE,CAAC;gBACjB,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC,CAAC;YACpD,CAAC;YAED,gBAAgB,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;YAE/E,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,EAAE,MAAM;gBAC/C,CAAC,CAAC,CAAC,GAAG,cAAc,EAAE,GAAG,KAAK,CAAC,aAAa,CAAC;gBAC7C,CAAC,CAAC,cAAc,CAAC;YACnB,mBAAmB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAA+B;IACrE,OAAO,IAAI,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE;QAC5C,OAAO,EAAE,EAAE,cAAc,EAAE,2BAA2B,EAAE;KACzD,CAAC,CAAC;AACL,CAAC"}
|
package/docs/llms.md
CHANGED
|
@@ -149,6 +149,7 @@ import {
|
|
|
149
149
|
ConsentAwareAdapter,
|
|
150
150
|
GoogleTagManagerAdapter,
|
|
151
151
|
createConsentGetter,
|
|
152
|
+
isProductionAnalytics,
|
|
152
153
|
resolveAnalyticsConsent,
|
|
153
154
|
useAnalytics,
|
|
154
155
|
} from '@se-studio/core-ui';
|
|
@@ -160,8 +161,11 @@ const hasConsent = createConsentGetter({
|
|
|
160
161
|
source: () => /* cookie / CMP */ undefined,
|
|
161
162
|
});
|
|
162
163
|
|
|
164
|
+
const productionAnalytics = isProductionAnalytics();
|
|
163
165
|
const gtm = new GoogleTagManagerAdapter({
|
|
164
166
|
containerId: 'GTM-XXXX',
|
|
167
|
+
testContainerId: 'GTM-TEST',
|
|
168
|
+
productionAnalytics,
|
|
165
169
|
consentDefault: 'granted',
|
|
166
170
|
});
|
|
167
171
|
const adapter = new ConsentAwareAdapter(gtm, 'analytics', () => hasConsent(), {
|
|
@@ -175,6 +179,8 @@ const { trackClick } = useAnalytics();
|
|
|
175
179
|
trackClick('Button', 'CTA Button', { slug: 'home' });
|
|
176
180
|
```
|
|
177
181
|
|
|
182
|
+
`isProductionAnalytics()` is opt-in. An explicit boolean wins. Otherwise it is true when `NEXT_PUBLIC_VERCEL_ENV` or `VERCEL_ENV` is `'production'`, and true when both are unset, so a client that only passes `containerId` still loads it. It is false only when one of those variables is set to another value. The adapter then loads `testContainerId` / `testMeasurementId` if set, and otherwise loads nothing (one development log). `NODE_ENV === 'production'` is the wrong signal (Vercel preview builds use it too). Pass a server-computed `productionAnalytics` boolean into the client adapter, or set `NEXT_PUBLIC_VERCEL_ENV` — client bundles do not see `VERCEL_ENV`. Gate Clarity, Ours, Segment, and HubSpot tracking with the same helper (R7.8).
|
|
183
|
+
|
|
178
184
|
`resolveAnalyticsConsent` defaults to granted (opt-out) when unconfigured. GTM Consent Mode uses `gtag('consent','default'| 'update')` via the `arguments` object before the container script **only when `consentDefault` is set**; omit it so the CMP decides (R7.7). The Arguments shape (not Array) lets a site’s own `updateConsent` calls take effect. HubSpot: pass `getConsent` so `initialize()` does not inject `js.hs-scripts.com` while denied. `ConsentAwareAdapter` vendor sync is opt-in `{ syncConsent: true }` and updates **analytics** only.
|
|
179
185
|
|
|
180
186
|
### Video engagement events
|
|
@@ -253,9 +259,9 @@ Default production disallows: `/*?_rsc=*`, `/_next/data/`, `/api/`, `/preview/`,
|
|
|
253
259
|
|
|
254
260
|
**Split-domain sites (Point Me):** pass `pathPrefix` (`SITE_PREFIX`), extra `apiPrefixes` (`/marketing-api/`), `disallowExtra`, `disallowOmit`, and `blockTrackingQueryParams` as needed. Query-string disallows help non-Google crawlers; Google matches path only — pair with strong canonicals.
|
|
255
261
|
|
|
256
|
-
### Content Signals (recommended for agent readiness)
|
|
262
|
+
### Content Signals + multi-group (recommended for agent readiness)
|
|
257
263
|
|
|
258
|
-
Next.js `MetadataRoute.Robots` cannot emit `Content-Signal
|
|
264
|
+
Next.js `MetadataRoute.Robots` cannot emit `Content-Signal`, preamble comments, or multi-group AI rules. Use a route handler. **All robots values are code-configured** (site route / constants) — not CMS.
|
|
259
265
|
|
|
260
266
|
```ts
|
|
261
267
|
// src/app/robots.txt/route.ts
|
|
@@ -267,15 +273,29 @@ export function GET() {
|
|
|
267
273
|
return createRobotsTxtResponse({
|
|
268
274
|
isProduction,
|
|
269
275
|
baseUrl,
|
|
276
|
+
// Leading # comments (Terms preamble). Strings may omit `# `.
|
|
277
|
+
// preamble: ['Terms of Use apply. See /terms'],
|
|
270
278
|
contentSignals: { search: 'yes', aiTrain: 'no', aiInput: 'yes' },
|
|
271
|
-
//
|
|
279
|
+
// Shared disallow (applied to * and every named group):
|
|
280
|
+
// disallowExtra: ['/private/', '/flight/'],
|
|
272
281
|
// Public agent APIs under /api/ (Google: specific Allow can win over Disallow: /api/):
|
|
273
282
|
// allowExtra: ['/api/mcp', '/api/search'],
|
|
283
|
+
// Named groups after *: inherit shared disallow + group-only extras (no drift).
|
|
284
|
+
// groups: [{ userAgents: 'ai-agents', disallowExtra: ['/results'] }],
|
|
274
285
|
});
|
|
275
286
|
}
|
|
276
287
|
```
|
|
277
288
|
|
|
278
|
-
|
|
289
|
+
| Option | Purpose |
|
|
290
|
+
|--------|---------|
|
|
291
|
+
| `contentSignals` | Default Content-Signal for `*` and named groups |
|
|
292
|
+
| `preamble` | Leading `#` comment line(s) before first `User-agent` |
|
|
293
|
+
| `groups` | Extra UA groups; each may override Content-Signal and add `disallowExtra` / `allowExtra` |
|
|
294
|
+
| `userAgents: 'ai-agents'` | Expands `AI_AGENT_USER_AGENTS` (Claude, GPT, Perplexity, Meta, Amazon, Mistral, …) |
|
|
295
|
+
|
|
296
|
+
**No-drift rule:** shared disallow is built once via `buildRobotsDisallow`. `*` uses that list only; named groups use `shared + group.disallowExtra`. Group-only paths (e.g. `/results`) must not appear under `*`. Top-level `allowExtra` is likewise inherited by named groups, then `group.allowExtra` is appended. Empty `userAgents: []` throws.
|
|
297
|
+
|
|
298
|
+
Also: `formatRobotsTxt`, `formatContentSignalLine`, `buildRobotsDisallow`, `AI_AGENT_USER_AGENTS`, `resolveRobotsUserAgents`. Omit `preamble` + `groups` for byte-compatible legacy output. The UA list is living — bump via changeset when vendors rename tokens.
|
|
279
299
|
|
|
280
300
|
## Agent readiness (Band A)
|
|
281
301
|
|