@sonordev/site-kit 1.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +376 -0
- package/dist/SetupWizard-Cki06kB0.d.mts +12 -0
- package/dist/SetupWizard-Cki06kB0.d.ts +12 -0
- package/dist/analytics/index.d.mts +93 -0
- package/dist/analytics/index.d.ts +93 -0
- package/dist/analytics/index.js +89 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/index.mjs +71 -0
- package/dist/analytics/index.mjs.map +1 -0
- package/dist/api-CWtoFJCO.d.mts +137 -0
- package/dist/api-CWtoFJCO.d.ts +137 -0
- package/dist/blog/index.d.mts +305 -0
- package/dist/blog/index.d.ts +305 -0
- package/dist/blog/index.js +1578 -0
- package/dist/blog/index.js.map +1 -0
- package/dist/blog/index.mjs +1562 -0
- package/dist/blog/index.mjs.map +1 -0
- package/dist/blog/server.d.mts +229 -0
- package/dist/blog/server.d.ts +229 -0
- package/dist/blog/server.js +692 -0
- package/dist/blog/server.js.map +1 -0
- package/dist/blog/server.mjs +666 -0
- package/dist/blog/server.mjs.map +1 -0
- package/dist/chunk-24277A3Q.mjs +968 -0
- package/dist/chunk-24277A3Q.mjs.map +1 -0
- package/dist/chunk-373TK6TZ.js +321 -0
- package/dist/chunk-373TK6TZ.js.map +1 -0
- package/dist/chunk-3MYZS6PD.js +30 -0
- package/dist/chunk-3MYZS6PD.js.map +1 -0
- package/dist/chunk-43GBM4SX.js +283 -0
- package/dist/chunk-43GBM4SX.js.map +1 -0
- package/dist/chunk-4XPGGLVP.mjs +53 -0
- package/dist/chunk-4XPGGLVP.mjs.map +1 -0
- package/dist/chunk-622GAQP5.js +2008 -0
- package/dist/chunk-622GAQP5.js.map +1 -0
- package/dist/chunk-6BIPAKL4.mjs +28 -0
- package/dist/chunk-6BIPAKL4.mjs.map +1 -0
- package/dist/chunk-6ZCISNAB.mjs +343 -0
- package/dist/chunk-6ZCISNAB.mjs.map +1 -0
- package/dist/chunk-72MQFHYJ.js +1429 -0
- package/dist/chunk-72MQFHYJ.js.map +1 -0
- package/dist/chunk-7557OTHW.js +62 -0
- package/dist/chunk-7557OTHW.js.map +1 -0
- package/dist/chunk-7FUV73JZ.js +981 -0
- package/dist/chunk-7FUV73JZ.js.map +1 -0
- package/dist/chunk-7RF6PVHA.mjs +324 -0
- package/dist/chunk-7RF6PVHA.mjs.map +1 -0
- package/dist/chunk-7RYCHO6D.mjs +134 -0
- package/dist/chunk-7RYCHO6D.mjs.map +1 -0
- package/dist/chunk-7UKPRW25.mjs +1999 -0
- package/dist/chunk-7UKPRW25.mjs.map +1 -0
- package/dist/chunk-7URAOG2M.js +14864 -0
- package/dist/chunk-7URAOG2M.js.map +1 -0
- package/dist/chunk-AFAO3TGS.mjs +810 -0
- package/dist/chunk-AFAO3TGS.mjs.map +1 -0
- package/dist/chunk-BYLIU6XG.js +343 -0
- package/dist/chunk-BYLIU6XG.js.map +1 -0
- package/dist/chunk-D63MUKZ6.mjs +4423 -0
- package/dist/chunk-D63MUKZ6.mjs.map +1 -0
- package/dist/chunk-DDKW2FNA.js +390 -0
- package/dist/chunk-DDKW2FNA.js.map +1 -0
- package/dist/chunk-DQYMKR27.mjs +341 -0
- package/dist/chunk-DQYMKR27.mjs.map +1 -0
- package/dist/chunk-DW5UJKHH.js +221 -0
- package/dist/chunk-DW5UJKHH.js.map +1 -0
- package/dist/chunk-EEZCR6E6.js +50 -0
- package/dist/chunk-EEZCR6E6.js.map +1 -0
- package/dist/chunk-GCJXQ4AG.mjs +59 -0
- package/dist/chunk-GCJXQ4AG.mjs.map +1 -0
- package/dist/chunk-JGNQK2G6.mjs +14845 -0
- package/dist/chunk-JGNQK2G6.mjs.map +1 -0
- package/dist/chunk-JTLOJLWQ.mjs +563 -0
- package/dist/chunk-JTLOJLWQ.mjs.map +1 -0
- package/dist/chunk-K23A4G76.mjs +202 -0
- package/dist/chunk-K23A4G76.mjs.map +1 -0
- package/dist/chunk-KKU3K7RG.js +336 -0
- package/dist/chunk-KKU3K7RG.js.map +1 -0
- package/dist/chunk-KUGMH4ZF.js +571 -0
- package/dist/chunk-KUGMH4ZF.js.map +1 -0
- package/dist/chunk-LBVWVP72.js +110 -0
- package/dist/chunk-LBVWVP72.js.map +1 -0
- package/dist/chunk-LIVWLY2P.js +138 -0
- package/dist/chunk-LIVWLY2P.js.map +1 -0
- package/dist/chunk-M2T6R7BA.mjs +1003 -0
- package/dist/chunk-M2T6R7BA.mjs.map +1 -0
- package/dist/chunk-MV3QN7PW.mjs +47 -0
- package/dist/chunk-MV3QN7PW.mjs.map +1 -0
- package/dist/chunk-OB7E654K.js +72 -0
- package/dist/chunk-OB7E654K.js.map +1 -0
- package/dist/chunk-OIIKTGRL.mjs +380 -0
- package/dist/chunk-OIIKTGRL.mjs.map +1 -0
- package/dist/chunk-P3UWIUJS.mjs +1427 -0
- package/dist/chunk-P3UWIUJS.mjs.map +1 -0
- package/dist/chunk-PKN27UMH.mjs +136 -0
- package/dist/chunk-PKN27UMH.mjs.map +1 -0
- package/dist/chunk-QXV4667R.mjs +105 -0
- package/dist/chunk-QXV4667R.mjs.map +1 -0
- package/dist/chunk-S7FRYNSU.mjs +315 -0
- package/dist/chunk-S7FRYNSU.mjs.map +1 -0
- package/dist/chunk-TFLQX7K7.mjs +68 -0
- package/dist/chunk-TFLQX7K7.mjs.map +1 -0
- package/dist/chunk-UWE5PCYJ.mjs +279 -0
- package/dist/chunk-UWE5PCYJ.mjs.map +1 -0
- package/dist/chunk-UYFDNX2F.js +4469 -0
- package/dist/chunk-UYFDNX2F.js.map +1 -0
- package/dist/chunk-W4PALSGM.js +350 -0
- package/dist/chunk-W4PALSGM.js.map +1 -0
- package/dist/chunk-WECQ6KOB.js +1008 -0
- package/dist/chunk-WECQ6KOB.js.map +1 -0
- package/dist/chunk-XQQWI6WB.js +814 -0
- package/dist/chunk-XQQWI6WB.js.map +1 -0
- package/dist/chunk-XZJOZJB6.js +140 -0
- package/dist/chunk-XZJOZJB6.js.map +1 -0
- package/dist/chunk-ZSMWDLMK.js +63 -0
- package/dist/chunk-ZSMWDLMK.js.map +1 -0
- package/dist/cli/index.js +37243 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/index.mjs +37209 -0
- package/dist/cli/index.mjs.map +1 -0
- package/dist/commerce/index.d.mts +170 -0
- package/dist/commerce/index.d.ts +170 -0
- package/dist/commerce/index.js +174 -0
- package/dist/commerce/index.js.map +1 -0
- package/dist/commerce/index.mjs +5 -0
- package/dist/commerce/index.mjs.map +1 -0
- package/dist/commerce/server.d.mts +107 -0
- package/dist/commerce/server.d.ts +107 -0
- package/dist/commerce/server.js +187 -0
- package/dist/commerce/server.js.map +1 -0
- package/dist/commerce/server.mjs +177 -0
- package/dist/commerce/server.mjs.map +1 -0
- package/dist/config/index.d.mts +43 -0
- package/dist/config/index.d.ts +43 -0
- package/dist/config/index.js +66 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/index.mjs +64 -0
- package/dist/config/index.mjs.map +1 -0
- package/dist/engage/index.d.mts +33 -0
- package/dist/engage/index.d.ts +33 -0
- package/dist/engage/index.js +22 -0
- package/dist/engage/index.js.map +1 -0
- package/dist/engage/index.mjs +5 -0
- package/dist/engage/index.mjs.map +1 -0
- package/dist/forms/index.d.mts +437 -0
- package/dist/forms/index.d.ts +437 -0
- package/dist/forms/index.js +1168 -0
- package/dist/forms/index.js.map +1 -0
- package/dist/forms/index.mjs +1142 -0
- package/dist/forms/index.mjs.map +1 -0
- package/dist/generators-2XKQMPKH.mjs +4 -0
- package/dist/generators-2XKQMPKH.mjs.map +1 -0
- package/dist/generators-DTMO36DV.js +33 -0
- package/dist/generators-DTMO36DV.js.map +1 -0
- package/dist/images/index.d.mts +4 -0
- package/dist/images/index.d.ts +4 -0
- package/dist/images/index.js +46 -0
- package/dist/images/index.js.map +1 -0
- package/dist/images/index.mjs +5 -0
- package/dist/images/index.mjs.map +1 -0
- package/dist/images/server.d.mts +69 -0
- package/dist/images/server.d.ts +69 -0
- package/dist/images/server.js +21 -0
- package/dist/images/server.js.map +1 -0
- package/dist/images/server.mjs +4 -0
- package/dist/images/server.mjs.map +1 -0
- package/dist/index.d.mts +846 -0
- package/dist/index.d.ts +846 -0
- package/dist/index.js +2623 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2416 -0
- package/dist/index.mjs.map +1 -0
- package/dist/layout/index.d.mts +53 -0
- package/dist/layout/index.d.ts +53 -0
- package/dist/layout/index.js +187 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/layout/index.mjs +185 -0
- package/dist/layout/index.mjs.map +1 -0
- package/dist/llms/index.d.mts +448 -0
- package/dist/llms/index.d.ts +448 -0
- package/dist/llms/index.js +581 -0
- package/dist/llms/index.js.map +1 -0
- package/dist/llms/index.mjs +529 -0
- package/dist/llms/index.mjs.map +1 -0
- package/dist/manifest/index.d.mts +62 -0
- package/dist/manifest/index.d.ts +62 -0
- package/dist/manifest/index.js +85 -0
- package/dist/manifest/index.js.map +1 -0
- package/dist/manifest/index.mjs +83 -0
- package/dist/manifest/index.mjs.map +1 -0
- package/dist/middleware/index.d.mts +63 -0
- package/dist/middleware/index.d.ts +63 -0
- package/dist/middleware/index.js +54 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/index.mjs +51 -0
- package/dist/middleware/index.mjs.map +1 -0
- package/dist/migrator-2MQHOFDQ.mjs +4 -0
- package/dist/migrator-2MQHOFDQ.mjs.map +1 -0
- package/dist/migrator-THJCF6MZ.js +37 -0
- package/dist/migrator-THJCF6MZ.js.map +1 -0
- package/dist/redirects/index.d.mts +78 -0
- package/dist/redirects/index.d.ts +78 -0
- package/dist/redirects/index.js +26 -0
- package/dist/redirects/index.js.map +1 -0
- package/dist/redirects/index.mjs +5 -0
- package/dist/redirects/index.mjs.map +1 -0
- package/dist/reputation/index.d.mts +57 -0
- package/dist/reputation/index.d.ts +57 -0
- package/dist/reputation/index.js +21 -0
- package/dist/reputation/index.js.map +1 -0
- package/dist/reputation/index.mjs +4 -0
- package/dist/reputation/index.mjs.map +1 -0
- package/dist/robots/index.d.mts +38 -0
- package/dist/robots/index.d.ts +38 -0
- package/dist/robots/index.js +52 -0
- package/dist/robots/index.js.map +1 -0
- package/dist/robots/index.mjs +50 -0
- package/dist/robots/index.mjs.map +1 -0
- package/dist/routing-B5XS-6_W.d.mts +118 -0
- package/dist/routing-DZYzyDHw.d.ts +118 -0
- package/dist/scanner-GAF5PO5F.js +53 -0
- package/dist/scanner-GAF5PO5F.js.map +1 -0
- package/dist/scanner-LKJKW7IT.mjs +4 -0
- package/dist/scanner-LKJKW7IT.mjs.map +1 -0
- package/dist/securityHeaders-nwZ6nP4g.d.mts +24 -0
- package/dist/securityHeaders-nwZ6nP4g.d.ts +24 -0
- package/dist/seo/index.d.mts +600 -0
- package/dist/seo/index.d.ts +600 -0
- package/dist/seo/index.js +883 -0
- package/dist/seo/index.js.map +1 -0
- package/dist/seo/index.mjs +773 -0
- package/dist/seo/index.mjs.map +1 -0
- package/dist/seo/register-sitemap-cli.js +151 -0
- package/dist/seo/register-sitemap-cli.js.map +1 -0
- package/dist/seo/register-sitemap-cli.mjs +144 -0
- package/dist/seo/register-sitemap-cli.mjs.map +1 -0
- package/dist/seo/server.d.mts +107 -0
- package/dist/seo/server.d.ts +107 -0
- package/dist/seo/server.js +207 -0
- package/dist/seo/server.js.map +1 -0
- package/dist/seo/server.mjs +186 -0
- package/dist/seo/server.mjs.map +1 -0
- package/dist/server-api-EWXKOQZA.mjs +4 -0
- package/dist/server-api-EWXKOQZA.mjs.map +1 -0
- package/dist/server-api-GJPNRYUP.js +81 -0
- package/dist/server-api-GJPNRYUP.js.map +1 -0
- package/dist/setup/client.d.mts +60 -0
- package/dist/setup/client.d.ts +60 -0
- package/dist/setup/client.js +31 -0
- package/dist/setup/client.js.map +1 -0
- package/dist/setup/client.mjs +6 -0
- package/dist/setup/client.mjs.map +1 -0
- package/dist/setup/index.d.mts +5 -0
- package/dist/setup/index.d.ts +5 -0
- package/dist/setup/index.js +35 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/index.mjs +6 -0
- package/dist/setup/index.mjs.map +1 -0
- package/dist/setup/server.d.mts +14 -0
- package/dist/setup/server.d.ts +14 -0
- package/dist/setup/server.js +13 -0
- package/dist/setup/server.js.map +1 -0
- package/dist/setup/server.mjs +4 -0
- package/dist/setup/server.mjs.map +1 -0
- package/dist/site-config/index.d.mts +24 -0
- package/dist/site-config/index.d.ts +24 -0
- package/dist/site-config/index.js +17 -0
- package/dist/site-config/index.js.map +1 -0
- package/dist/site-config/index.mjs +4 -0
- package/dist/site-config/index.mjs.map +1 -0
- package/dist/sitemap/index.d.mts +96 -0
- package/dist/sitemap/index.d.ts +96 -0
- package/dist/sitemap/index.js +288 -0
- package/dist/sitemap/index.js.map +1 -0
- package/dist/sitemap/index.mjs +285 -0
- package/dist/sitemap/index.mjs.map +1 -0
- package/dist/socket-loader-J26QHHOB.js +16 -0
- package/dist/socket-loader-J26QHHOB.js.map +1 -0
- package/dist/socket-loader-R7S2YJ2J.mjs +14 -0
- package/dist/socket-loader-R7S2YJ2J.mjs.map +1 -0
- package/dist/types-0dmq3k20.d.mts +168 -0
- package/dist/types-0dmq3k20.d.ts +168 -0
- package/dist/types-Blb2QNkV.d.mts +263 -0
- package/dist/types-Blb2QNkV.d.ts +263 -0
- package/dist/types-BnCwwUX3.d.mts +250 -0
- package/dist/types-BnCwwUX3.d.ts +250 -0
- package/dist/types-CGlnp43R.d.mts +312 -0
- package/dist/types-CGlnp43R.d.ts +312 -0
- package/dist/types-D08004rU.d.mts +179 -0
- package/dist/types-D08004rU.d.ts +179 -0
- package/dist/types-DNSYU7qI.d.mts +127 -0
- package/dist/types-DNSYU7qI.d.ts +127 -0
- package/dist/types-KZP_VWZp.d.mts +266 -0
- package/dist/types-KZP_VWZp.d.ts +266 -0
- package/dist/useEventModal-BVTx69XE.d.mts +274 -0
- package/dist/useEventModal-Dx1dItTJ.d.ts +274 -0
- package/dist/web-vitals-444RLW3B.js +252 -0
- package/dist/web-vitals-444RLW3B.js.map +1 -0
- package/dist/web-vitals-KPICZIEF.mjs +241 -0
- package/dist/web-vitals-KPICZIEF.mjs.map +1 -0
- package/package.json +192 -0
|
@@ -0,0 +1,600 @@
|
|
|
1
|
+
import { G as GetManagedMetadataOptions, M as ManagedMetadataResult, k as GetABVariantOptions, j as ABTestResult, b as ManagedSchemaProps, d as ManagedFAQProps, f as ManagedInternalLinksProps, h as ManagedContentProps, g as ManagedContentBlock, o as ManagedScriptsProps } from '../types-KZP_VWZp.js';
|
|
2
|
+
export { A as ABTest, F as FAQItem, m as GetRedirectOptions, q as GetRobotsOptions, s as GetSitemapEntriesOptions, c as ManagedFAQData, e as ManagedLink, l as ManagedRedirect, n as ManagedScript, R as RedirectResult, p as RobotsDirective, S as SEOPageData, a as SchemaMarkup, r as SitemapEntry, U as UptradeSEOConfig } from '../types-KZP_VWZp.js';
|
|
3
|
+
import { ResolvingMetadata, Metadata } from 'next';
|
|
4
|
+
export { g as generateSitemap, a as getRedirect, b as getRobotsDirective, i as isIndexable } from '../routing-DZYzyDHw.js';
|
|
5
|
+
import * as React from 'react';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @sonordev/site-kit/seo - Server-Only API Functions
|
|
9
|
+
*
|
|
10
|
+
* SECURITY: These functions use private environment variables
|
|
11
|
+
* and should ONLY be imported in server-side code (RSC, API routes, server actions).
|
|
12
|
+
*
|
|
13
|
+
* DO NOT import this file in client components or it will expose API keys.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Fetch SEO page data - cached per request
|
|
18
|
+
* @server-only
|
|
19
|
+
*/
|
|
20
|
+
declare const getSEOPageData: (path: string) => Promise<{
|
|
21
|
+
page: any;
|
|
22
|
+
project: any;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* Fetch schema markups for a page - cached per request
|
|
26
|
+
* @server-only
|
|
27
|
+
*/
|
|
28
|
+
declare const getSchemaMarkups: (path: string, options?: {
|
|
29
|
+
includeTypes?: string[];
|
|
30
|
+
excludeTypes?: string[];
|
|
31
|
+
}) => Promise<any[]>;
|
|
32
|
+
/**
|
|
33
|
+
* Fetch FAQ data for a page - cached per request
|
|
34
|
+
* @server-only
|
|
35
|
+
*/
|
|
36
|
+
declare const getFAQData: (path: string) => Promise<any>;
|
|
37
|
+
/**
|
|
38
|
+
* Fetch internal links for a page - cached per request
|
|
39
|
+
* @server-only
|
|
40
|
+
*/
|
|
41
|
+
declare const getInternalLinks: (sourcePath: string, options?: {
|
|
42
|
+
position?: string;
|
|
43
|
+
limit?: number;
|
|
44
|
+
}) => Promise<any[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Fetch content block - cached per request
|
|
47
|
+
* @server-only
|
|
48
|
+
*/
|
|
49
|
+
declare const getContentBlock: (path: string, section: string) => Promise<any>;
|
|
50
|
+
/**
|
|
51
|
+
* Fetch A/B test and determine variant - cached per request
|
|
52
|
+
* @server-only
|
|
53
|
+
*/
|
|
54
|
+
declare const getABTest: (path: string, field: string) => Promise<any>;
|
|
55
|
+
/**
|
|
56
|
+
* Record A/B test impression
|
|
57
|
+
* @server-only
|
|
58
|
+
*/
|
|
59
|
+
declare function recordABImpression(testId: string, variant: 'a' | 'b', sessionId?: string): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Fetch redirect for a path - cached per request
|
|
62
|
+
* @server-only
|
|
63
|
+
*/
|
|
64
|
+
declare const getRedirectData: (path: string) => Promise<any>;
|
|
65
|
+
/**
|
|
66
|
+
* Fetch managed scripts - cached per request
|
|
67
|
+
* @server-only
|
|
68
|
+
*/
|
|
69
|
+
declare const getManagedScripts: (position: string, currentPath?: string) => Promise<any[]>;
|
|
70
|
+
/**
|
|
71
|
+
* Fetch robots directive for a page - cached per request
|
|
72
|
+
* @server-only
|
|
73
|
+
*/
|
|
74
|
+
declare const getRobotsData: (path: string) => Promise<any>;
|
|
75
|
+
/**
|
|
76
|
+
* Fetch sitemap entries - cached per request
|
|
77
|
+
* @server-only
|
|
78
|
+
*/
|
|
79
|
+
declare const getSitemapEntries: (options?: {
|
|
80
|
+
publishedOnly?: boolean;
|
|
81
|
+
}) => Promise<any[]>;
|
|
82
|
+
/**
|
|
83
|
+
* Register/sync sitemap entries from the client site
|
|
84
|
+
* Call this at build time to populate seo_pages from your sitemap.xml
|
|
85
|
+
* @server-only
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```ts
|
|
89
|
+
* // scripts/register-sitemap.ts (run at build time)
|
|
90
|
+
* import { registerSitemap } from '@sonordev/seo/server'
|
|
91
|
+
*
|
|
92
|
+
* await registerSitemap([
|
|
93
|
+
* { path: '/', priority: 1.0, changefreq: 'daily' },
|
|
94
|
+
* { path: '/about', priority: 0.8, changefreq: 'weekly' },
|
|
95
|
+
* ])
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
declare function registerSitemap(entries: Array<{
|
|
99
|
+
path: string;
|
|
100
|
+
title?: string;
|
|
101
|
+
priority?: number;
|
|
102
|
+
changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never';
|
|
103
|
+
}>): Promise<{
|
|
104
|
+
success: boolean;
|
|
105
|
+
created: number;
|
|
106
|
+
updated: number;
|
|
107
|
+
}>;
|
|
108
|
+
/**
|
|
109
|
+
* Entity types for the knowledge graph
|
|
110
|
+
*/
|
|
111
|
+
type EntityType = 'organization' | 'person' | 'service' | 'product' | 'location' | 'concept' | 'credential';
|
|
112
|
+
/**
|
|
113
|
+
* Entity from the knowledge graph
|
|
114
|
+
*/
|
|
115
|
+
interface SEOEntity {
|
|
116
|
+
id: string;
|
|
117
|
+
project_id: string;
|
|
118
|
+
entity_type: EntityType;
|
|
119
|
+
name: string;
|
|
120
|
+
slug: string;
|
|
121
|
+
properties: Record<string, unknown>;
|
|
122
|
+
knows_about: string[];
|
|
123
|
+
same_as: string[];
|
|
124
|
+
schema_type?: string;
|
|
125
|
+
is_primary: boolean;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Fetch entities for a project - cached per request
|
|
129
|
+
* Returns the entity graph for enhanced schema markup
|
|
130
|
+
* @server-only
|
|
131
|
+
*/
|
|
132
|
+
declare const getEntities: (options?: {
|
|
133
|
+
type?: EntityType;
|
|
134
|
+
}) => Promise<SEOEntity[]>;
|
|
135
|
+
/**
|
|
136
|
+
* Fetch primary entity (the business) - cached per request
|
|
137
|
+
* @server-only
|
|
138
|
+
*/
|
|
139
|
+
declare const getPrimaryEntity: () => Promise<SEOEntity | null>;
|
|
140
|
+
/**
|
|
141
|
+
* Fetch entity-enhanced schema for a page
|
|
142
|
+
* Returns Organization schema with knowsAbout, areaServed, employee, etc.
|
|
143
|
+
* @server-only
|
|
144
|
+
*/
|
|
145
|
+
declare const getEntityEnhancedSchema: (pagePath: string) => Promise<object[]>;
|
|
146
|
+
/**
|
|
147
|
+
* Get AI visibility score for a page
|
|
148
|
+
* @server-only
|
|
149
|
+
*/
|
|
150
|
+
declare const getVisibilityScore: (pagePath: string) => Promise<{
|
|
151
|
+
overall_score: number;
|
|
152
|
+
entity_coverage: number;
|
|
153
|
+
answer_density: number;
|
|
154
|
+
chunk_readability: number;
|
|
155
|
+
authority_signals: number;
|
|
156
|
+
schema_completeness: number;
|
|
157
|
+
} | null>;
|
|
158
|
+
/**
|
|
159
|
+
* Get AI visibility summary for project
|
|
160
|
+
* @server-only
|
|
161
|
+
*/
|
|
162
|
+
declare const getVisibilitySummary: () => Promise<{
|
|
163
|
+
overall_score: number;
|
|
164
|
+
total_entities: number;
|
|
165
|
+
pages_analyzed: number;
|
|
166
|
+
top_recommendations: Array<{
|
|
167
|
+
priority: string;
|
|
168
|
+
type: string;
|
|
169
|
+
message: string;
|
|
170
|
+
}>;
|
|
171
|
+
} | null>;
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Get managed metadata for a page
|
|
175
|
+
*
|
|
176
|
+
* Use in generateMetadata() to fetch Portal-managed SEO data
|
|
177
|
+
*
|
|
178
|
+
* @example
|
|
179
|
+
* ```tsx
|
|
180
|
+
* export async function generateMetadata({ params }) {
|
|
181
|
+
* return getManagedMetadata({
|
|
182
|
+
* projectId: process.env.UPTRADE_PROJECT_ID!,
|
|
183
|
+
* path: `/services/${params.slug}`,
|
|
184
|
+
* fallback: {
|
|
185
|
+
* title: 'Our Services',
|
|
186
|
+
* description: 'Learn about our services'
|
|
187
|
+
* }
|
|
188
|
+
* })
|
|
189
|
+
* }
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
192
|
+
declare function getManagedMetadata(options: GetManagedMetadataOptions): Promise<ManagedMetadataResult>;
|
|
193
|
+
/**
|
|
194
|
+
* Get A/B test variant for a field
|
|
195
|
+
*
|
|
196
|
+
* @example
|
|
197
|
+
* ```tsx
|
|
198
|
+
* const variant = await getABVariant({
|
|
199
|
+
* projectId: process.env.UPTRADE_PROJECT_ID!,
|
|
200
|
+
* path: '/pricing',
|
|
201
|
+
* field: 'title',
|
|
202
|
+
* sessionId: cookies().get('session_id')?.value
|
|
203
|
+
* })
|
|
204
|
+
*
|
|
205
|
+
* if (variant) {
|
|
206
|
+
* // Use variant.value instead of default
|
|
207
|
+
* }
|
|
208
|
+
* ```
|
|
209
|
+
*/
|
|
210
|
+
declare function getABVariant(options: GetABVariantOptions): Promise<ABTestResult | null>;
|
|
211
|
+
/**
|
|
212
|
+
* Get managed metadata with A/B test support
|
|
213
|
+
*
|
|
214
|
+
* Automatically applies running A/B test variants to metadata
|
|
215
|
+
*/
|
|
216
|
+
declare function getManagedMetadataWithAB(options: GetManagedMetadataOptions & {
|
|
217
|
+
sessionId?: string;
|
|
218
|
+
}): Promise<ManagedMetadataResult>;
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* @sonordev/site-kit/seo - withManagedMetadata
|
|
222
|
+
*
|
|
223
|
+
* Higher-order function that wraps Next.js generateMetadata to auto-merge
|
|
224
|
+
* Portal-managed SEO data. Portal values serve as defaults; page-level
|
|
225
|
+
* metadata returned by the caller takes priority.
|
|
226
|
+
*
|
|
227
|
+
* @example Zero-config (Portal manages everything):
|
|
228
|
+
* ```ts
|
|
229
|
+
* export const generateMetadata = withManagedMetadata('/about')
|
|
230
|
+
* ```
|
|
231
|
+
*
|
|
232
|
+
* @example With local overrides:
|
|
233
|
+
* ```ts
|
|
234
|
+
* export const generateMetadata = withManagedMetadata('/about', async () => ({
|
|
235
|
+
* title: 'About Us',
|
|
236
|
+
* }))
|
|
237
|
+
* ```
|
|
238
|
+
*
|
|
239
|
+
* @example Dynamic paths:
|
|
240
|
+
* ```ts
|
|
241
|
+
* export const generateMetadata = withManagedMetadata(
|
|
242
|
+
* async ({ params }) => `/services/${(await params).slug}`
|
|
243
|
+
* )
|
|
244
|
+
* ```
|
|
245
|
+
*/
|
|
246
|
+
|
|
247
|
+
type MetadataArgs = {
|
|
248
|
+
params: Promise<Record<string, string>>;
|
|
249
|
+
searchParams?: Promise<Record<string, string>>;
|
|
250
|
+
};
|
|
251
|
+
type PathResolver = string | ((args: MetadataArgs) => string | Promise<string>);
|
|
252
|
+
type PageMetadataFn = (args: MetadataArgs, parent: ResolvingMetadata) => Promise<Metadata> | Metadata;
|
|
253
|
+
/**
|
|
254
|
+
* Wrap generateMetadata to auto-merge Portal managed metadata.
|
|
255
|
+
*
|
|
256
|
+
* - `path` can be a static string or a function that derives the path
|
|
257
|
+
* from the page's params.
|
|
258
|
+
* - `pageMetadata` (optional) returns page-specific overrides.
|
|
259
|
+
* Anything it returns wins over Portal values.
|
|
260
|
+
*/
|
|
261
|
+
declare function withManagedMetadata(path: PathResolver, pageMetadata?: PageMetadataFn): (args: MetadataArgs, parent: ResolvingMetadata) => Promise<Metadata>;
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Speakable configuration for schema markup
|
|
265
|
+
*/
|
|
266
|
+
interface SpeakableSpec {
|
|
267
|
+
/** CSS selectors for speakable content */
|
|
268
|
+
cssSelector?: string[];
|
|
269
|
+
/** XPath selectors for speakable content */
|
|
270
|
+
xpath?: string[];
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Extended schema props with speakable and entity support
|
|
274
|
+
*/
|
|
275
|
+
interface EnhancedManagedSchemaProps extends ManagedSchemaProps {
|
|
276
|
+
/** Add speakable specification to page schema */
|
|
277
|
+
speakable?: SpeakableSpec | boolean;
|
|
278
|
+
/** Page type for speakable (WebPage or Article) */
|
|
279
|
+
pageType?: 'WebPage' | 'Article';
|
|
280
|
+
/** Page name for speakable schema */
|
|
281
|
+
pageName?: string;
|
|
282
|
+
/** Page URL for speakable schema */
|
|
283
|
+
pageUrl?: string;
|
|
284
|
+
/** Include entity-enhanced schema from knowledge graph (AI Visibility) */
|
|
285
|
+
includeEntityGraph?: boolean;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* ManagedSchema - Server Component that injects JSON-LD schema
|
|
289
|
+
*
|
|
290
|
+
* Fetches schema markup from Portal and renders as script tags.
|
|
291
|
+
* Now with speakable support for voice assistants and AI systems.
|
|
292
|
+
*
|
|
293
|
+
* @example
|
|
294
|
+
* ```tsx
|
|
295
|
+
* // app/services/[slug]/page.tsx
|
|
296
|
+
* import { ManagedSchema } from '@sonordev/seo'
|
|
297
|
+
*
|
|
298
|
+
* export default async function ServicePage({ params }) {
|
|
299
|
+
* return (
|
|
300
|
+
* <>
|
|
301
|
+
* <ManagedSchema
|
|
302
|
+
* projectId={process.env.UPTRADE_PROJECT_ID!}
|
|
303
|
+
* path={`/services/${params.slug}`}
|
|
304
|
+
* speakable={true}
|
|
305
|
+
* pageName="Family Law Services"
|
|
306
|
+
* pageUrl="https://example.com/services/family-law"
|
|
307
|
+
* />
|
|
308
|
+
* <main>...</main>
|
|
309
|
+
* </>
|
|
310
|
+
* )
|
|
311
|
+
* }
|
|
312
|
+
* ```
|
|
313
|
+
*/
|
|
314
|
+
declare function ManagedSchema({ path, additionalSchemas, includeTypes, excludeTypes, speakable, pageType, pageName, pageUrl, includeEntityGraph, }: EnhancedManagedSchemaProps): Promise<React.ReactElement | null>;
|
|
315
|
+
/**
|
|
316
|
+
* LLMSchema - Server Component that injects LLM-optimized structured data
|
|
317
|
+
*
|
|
318
|
+
* This component renders AI-visibility optimized data that helps LLM crawlers
|
|
319
|
+
* (like ChatGPT, Claude, Perplexity) better understand page content.
|
|
320
|
+
*
|
|
321
|
+
* The schema includes:
|
|
322
|
+
* - Detailed description (100-200 words for context)
|
|
323
|
+
* - Keywords and topics
|
|
324
|
+
* - Target audience
|
|
325
|
+
* - Content relationships
|
|
326
|
+
*
|
|
327
|
+
* @example
|
|
328
|
+
* ```tsx
|
|
329
|
+
* import { LLMSchema } from '@sonordev/seo'
|
|
330
|
+
*
|
|
331
|
+
* export default async function ServicePage({ params }) {
|
|
332
|
+
* return (
|
|
333
|
+
* <>
|
|
334
|
+
* <LLMSchema
|
|
335
|
+
* projectId={process.env.UPTRADE_PROJECT_ID!}
|
|
336
|
+
* path={`/services/${params.slug}`}
|
|
337
|
+
* />
|
|
338
|
+
* <main>...</main>
|
|
339
|
+
* </>
|
|
340
|
+
* )
|
|
341
|
+
* }
|
|
342
|
+
* ```
|
|
343
|
+
*/
|
|
344
|
+
declare function LLMSchema({ path, }: {
|
|
345
|
+
projectId?: string;
|
|
346
|
+
path: string;
|
|
347
|
+
}): Promise<React.ReactElement | null>;
|
|
348
|
+
/**
|
|
349
|
+
* Generate schema for a specific type with managed data
|
|
350
|
+
*
|
|
351
|
+
* Helper to create common schema types
|
|
352
|
+
*/
|
|
353
|
+
declare function createSchema(type: string, data: Record<string, unknown>): Record<string, unknown>;
|
|
354
|
+
/**
|
|
355
|
+
* Create BreadcrumbList schema from path
|
|
356
|
+
*/
|
|
357
|
+
declare function createBreadcrumbSchema(baseUrl: string, path: string, labels?: Record<string, string>): Record<string, unknown>;
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* ManagedFAQ - Server Component that renders FAQ section with schema
|
|
361
|
+
*
|
|
362
|
+
* Fetches FAQ content from Portal and renders with optional schema injection
|
|
363
|
+
*
|
|
364
|
+
* @example
|
|
365
|
+
* ```tsx
|
|
366
|
+
* // app/services/plumbing/page.tsx
|
|
367
|
+
* import { ManagedFAQ } from '@sonordev/seo'
|
|
368
|
+
*
|
|
369
|
+
* export default async function PlumbingPage() {
|
|
370
|
+
* return (
|
|
371
|
+
* <main>
|
|
372
|
+
* <h1>Plumbing Services</h1>
|
|
373
|
+
* <section>
|
|
374
|
+
* <ManagedFAQ
|
|
375
|
+
* projectId={process.env.UPTRADE_PROJECT_ID!}
|
|
376
|
+
* path="/services/plumbing"
|
|
377
|
+
* showTitle
|
|
378
|
+
* includeSchema
|
|
379
|
+
* />
|
|
380
|
+
* </section>
|
|
381
|
+
* </main>
|
|
382
|
+
* )
|
|
383
|
+
* }
|
|
384
|
+
* ```
|
|
385
|
+
*/
|
|
386
|
+
declare function ManagedFAQ({ path, className, renderItem, includeSchema, showTitle, }: ManagedFAQProps): Promise<React.ReactElement | null>;
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* ManagedInternalLinks - Server Component for AI-suggested internal links
|
|
390
|
+
*
|
|
391
|
+
* Fetches internal link suggestions from Portal and renders them
|
|
392
|
+
*
|
|
393
|
+
* @example
|
|
394
|
+
* ```tsx
|
|
395
|
+
* // In your article component
|
|
396
|
+
* import { ManagedInternalLinks } from '@sonordev/seo'
|
|
397
|
+
*
|
|
398
|
+
* export default async function BlogPost({ params }) {
|
|
399
|
+
* return (
|
|
400
|
+
* <article>
|
|
401
|
+
* <p>Your content here...</p>
|
|
402
|
+
*
|
|
403
|
+
* <ManagedInternalLinks
|
|
404
|
+
* projectId={process.env.UPTRADE_PROJECT_ID!}
|
|
405
|
+
* path={`/blog/${params.slug}`}
|
|
406
|
+
* position="bottom"
|
|
407
|
+
* limit={5}
|
|
408
|
+
* />
|
|
409
|
+
* </article>
|
|
410
|
+
* )
|
|
411
|
+
* }
|
|
412
|
+
* ```
|
|
413
|
+
*/
|
|
414
|
+
declare function ManagedInternalLinks({ path, position, limit, className, renderLink, }: ManagedInternalLinksProps): Promise<React.ReactElement | null>;
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* ManagedContent - Server Component for CMS-controlled content blocks
|
|
418
|
+
*
|
|
419
|
+
* Fetches content sections from Portal and renders them
|
|
420
|
+
* Supports HTML, Markdown, JSON, and React component references
|
|
421
|
+
*
|
|
422
|
+
* @example
|
|
423
|
+
* ```tsx
|
|
424
|
+
* // Hero section managed by Portal
|
|
425
|
+
* import { ManagedContent } from '@sonordev/seo'
|
|
426
|
+
*
|
|
427
|
+
* export default async function ServicePage({ params }) {
|
|
428
|
+
* return (
|
|
429
|
+
* <main>
|
|
430
|
+
* <ManagedContent
|
|
431
|
+
* projectId={process.env.UPTRADE_PROJECT_ID!}
|
|
432
|
+
* path={`/services/${params.slug}`}
|
|
433
|
+
* section="hero"
|
|
434
|
+
* fallback={<DefaultHero />}
|
|
435
|
+
* />
|
|
436
|
+
*
|
|
437
|
+
* <ManagedContent
|
|
438
|
+
* projectId={process.env.UPTRADE_PROJECT_ID!}
|
|
439
|
+
* path={`/services/${params.slug}`}
|
|
440
|
+
* section="features"
|
|
441
|
+
* />
|
|
442
|
+
*
|
|
443
|
+
* <ManagedContent
|
|
444
|
+
* projectId={process.env.UPTRADE_PROJECT_ID!}
|
|
445
|
+
* path={`/services/${params.slug}`}
|
|
446
|
+
* section="cta"
|
|
447
|
+
* />
|
|
448
|
+
* </main>
|
|
449
|
+
* )
|
|
450
|
+
* }
|
|
451
|
+
* ```
|
|
452
|
+
*/
|
|
453
|
+
declare function ManagedContent({ path, section, fallback, className, components, injectEntityAnnotations: shouldInjectEntities, }: ManagedContentProps): Promise<React.ReactElement | null>;
|
|
454
|
+
/**
|
|
455
|
+
* Get content block data without rendering
|
|
456
|
+
*
|
|
457
|
+
* Useful when you need to access the raw data
|
|
458
|
+
*/
|
|
459
|
+
declare function getManagedContentData(path: string, section: string): Promise<ManagedContentBlock | null>;
|
|
460
|
+
|
|
461
|
+
/**
|
|
462
|
+
* ManagedScripts - Server Component for injecting tracking/analytics scripts
|
|
463
|
+
*
|
|
464
|
+
* Fetches scripts from Portal and renders them in the appropriate position
|
|
465
|
+
*
|
|
466
|
+
* @example
|
|
467
|
+
* ```tsx
|
|
468
|
+
* // app/layout.tsx
|
|
469
|
+
* import { ManagedScripts } from '@sonordev/seo'
|
|
470
|
+
*
|
|
471
|
+
* export default function RootLayout({ children }) {
|
|
472
|
+
* return (
|
|
473
|
+
* <html>
|
|
474
|
+
* <head>
|
|
475
|
+
* <ManagedScripts
|
|
476
|
+
* projectId={process.env.UPTRADE_PROJECT_ID!}
|
|
477
|
+
* position="head"
|
|
478
|
+
* />
|
|
479
|
+
* </head>
|
|
480
|
+
* <body>
|
|
481
|
+
* <ManagedScripts
|
|
482
|
+
* projectId={process.env.UPTRADE_PROJECT_ID!}
|
|
483
|
+
* position="body-start"
|
|
484
|
+
* />
|
|
485
|
+
* {children}
|
|
486
|
+
* <ManagedScripts
|
|
487
|
+
* projectId={process.env.UPTRADE_PROJECT_ID!}
|
|
488
|
+
* position="body-end"
|
|
489
|
+
* />
|
|
490
|
+
* </body>
|
|
491
|
+
* </html>
|
|
492
|
+
* )
|
|
493
|
+
* }
|
|
494
|
+
* ```
|
|
495
|
+
*/
|
|
496
|
+
declare function ManagedScripts({ position, path, }: ManagedScriptsProps): Promise<React.ReactElement | null>;
|
|
497
|
+
/**
|
|
498
|
+
* NoScript fallback component
|
|
499
|
+
*
|
|
500
|
+
* Use for adding noscript content (like Google Tag Manager noscript)
|
|
501
|
+
*/
|
|
502
|
+
declare function ManagedNoScripts({ path, }: {
|
|
503
|
+
projectId?: string;
|
|
504
|
+
path?: string;
|
|
505
|
+
}): Promise<React.ReactElement | null>;
|
|
506
|
+
|
|
507
|
+
/**
|
|
508
|
+
* LocationPageContent - Server Component for fetching location page sections
|
|
509
|
+
*
|
|
510
|
+
* Usage:
|
|
511
|
+
* <LocationPageContent
|
|
512
|
+
* projectId="uuid"
|
|
513
|
+
* path="/areas/seattle-wa/plumbing"
|
|
514
|
+
* section="hero"
|
|
515
|
+
* />
|
|
516
|
+
*
|
|
517
|
+
* This component fetches content from seo_location_pages.sections for a given
|
|
518
|
+
* path and section, making it editable in Portal without code deploys.
|
|
519
|
+
*/
|
|
520
|
+
|
|
521
|
+
interface LocationPageContentProps {
|
|
522
|
+
/** Uptrade project ID */
|
|
523
|
+
projectId: string;
|
|
524
|
+
/** Page path (e.g., /areas/seattle-wa/plumbing) */
|
|
525
|
+
path: string;
|
|
526
|
+
/** Section ID or type to fetch (e.g., "hero", "intro", "services") */
|
|
527
|
+
section: string;
|
|
528
|
+
/** Fallback content if section not found */
|
|
529
|
+
fallback?: React.ReactNode;
|
|
530
|
+
/** Additional className for wrapper */
|
|
531
|
+
className?: string;
|
|
532
|
+
/** Custom renderer for the section data */
|
|
533
|
+
render?: (data: LocationSectionData) => React.ReactNode;
|
|
534
|
+
}
|
|
535
|
+
interface LocationSectionData {
|
|
536
|
+
type: string;
|
|
537
|
+
content: any;
|
|
538
|
+
}
|
|
539
|
+
interface HeroSectionContent {
|
|
540
|
+
title: string;
|
|
541
|
+
subtitle?: string;
|
|
542
|
+
cta_text?: string;
|
|
543
|
+
cta_href?: string;
|
|
544
|
+
stats?: Array<{
|
|
545
|
+
label: string;
|
|
546
|
+
value: string;
|
|
547
|
+
}>;
|
|
548
|
+
background_image?: string;
|
|
549
|
+
}
|
|
550
|
+
interface ServiceGridContent {
|
|
551
|
+
services: Array<{
|
|
552
|
+
title: string;
|
|
553
|
+
description: string;
|
|
554
|
+
href: string;
|
|
555
|
+
icon?: string;
|
|
556
|
+
}>;
|
|
557
|
+
}
|
|
558
|
+
interface TextSectionContent {
|
|
559
|
+
heading?: string;
|
|
560
|
+
paragraphs: string[];
|
|
561
|
+
html?: string;
|
|
562
|
+
}
|
|
563
|
+
/**
|
|
564
|
+
* Fetch location page section content from Portal
|
|
565
|
+
* Cached with React's cache() for request deduplication
|
|
566
|
+
*/
|
|
567
|
+
declare const getLocationSection: (projectId: string, path: string, section: string) => Promise<LocationSectionData | null>;
|
|
568
|
+
/**
|
|
569
|
+
* LocationPageContent - Server Component
|
|
570
|
+
*
|
|
571
|
+
* Fetches and renders a section of a location page from Portal.
|
|
572
|
+
* Content is fully editable in Portal → SEO → Location Pages.
|
|
573
|
+
*/
|
|
574
|
+
declare function LocationPageContent({ projectId, path, section, fallback, className, render, }: LocationPageContentProps): Promise<React.ReactElement | null>;
|
|
575
|
+
|
|
576
|
+
/**
|
|
577
|
+
* SitemapSync - Automatically sync sitemap.xml to Portal API
|
|
578
|
+
*
|
|
579
|
+
* Client-only component. Lives at package root so the main entry does not
|
|
580
|
+
* pull in seo/ (and server-only code). For use in SiteKitProvider and
|
|
581
|
+
* from @sonordev/site-kit/seo.
|
|
582
|
+
*
|
|
583
|
+
* @example
|
|
584
|
+
* ```tsx
|
|
585
|
+
* import { SitemapSync } from '@sonordev/site-kit'
|
|
586
|
+
* // or
|
|
587
|
+
* import { SitemapSync } from '@sonordev/site-kit/seo'
|
|
588
|
+
* ```
|
|
589
|
+
*/
|
|
590
|
+
interface SitemapSyncProps {
|
|
591
|
+
/** Custom sitemap URL (defaults to /sitemap.xml) */
|
|
592
|
+
sitemapUrl?: string;
|
|
593
|
+
/** How often to re-sync in minutes (0 = only on mount, default: 60) */
|
|
594
|
+
syncInterval?: number;
|
|
595
|
+
/** Enable debug logging */
|
|
596
|
+
debug?: boolean;
|
|
597
|
+
}
|
|
598
|
+
declare function SitemapSync({ sitemapUrl, syncInterval, debug, }: SitemapSyncProps): null;
|
|
599
|
+
|
|
600
|
+
export { ABTestResult, type EntityType, GetABVariantOptions, GetManagedMetadataOptions, LLMSchema, type HeroSectionContent as LocationHeroContent, LocationPageContent, type LocationPageContentProps, type LocationSectionData, type ServiceGridContent as LocationServicesContent, type TextSectionContent as LocationTextContent, ManagedContent, ManagedContentBlock, ManagedContentProps, ManagedFAQ, ManagedFAQProps, ManagedInternalLinks, ManagedInternalLinksProps, ManagedMetadataResult, ManagedNoScripts, ManagedSchema, ManagedSchemaProps, ManagedScripts, ManagedScriptsProps, type SEOEntity, SitemapSync, createBreadcrumbSchema, createSchema, getABTest, getABVariant, getContentBlock, getEntities, getEntityEnhancedSchema, getFAQData, getInternalLinks, getLocationSection, getManagedContentData, getManagedMetadata, getManagedMetadataWithAB, getManagedScripts, getPrimaryEntity, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, getVisibilityScore, getVisibilitySummary, recordABImpression, registerSitemap, withManagedMetadata };
|