@consilioweb/payload-seo-analyzer 1.9.0 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -177,6 +177,13 @@ interface SeoFeatures {
177
177
  duplicateContent?: boolean;
178
178
  /** Settings view (/admin/seo-config) */
179
179
  settings?: boolean;
180
+ /**
181
+ * Proactive monitoring digest (opt-in, default false). Periodically reports score
182
+ * regressions, new 404s and ranking drops via webhook and/or email. Delivery + thresholds
183
+ * are configured with env vars (SEO_ALERT_WEBHOOK_URL, SEO_ALERT_EMAIL, SEO_ALERT_SCORE_DROP,
184
+ * SEO_ALERT_POSITION_DROP, SEO_ALERT_INTERVAL_HOURS). Email uses Payload's email adapter.
185
+ */
186
+ alerts?: boolean;
180
187
  }
181
188
  /** Pre-computed context shared across all rule modules to avoid redundant work */
182
189
  interface AnalysisContext {
@@ -460,6 +467,9 @@ interface DashboardTranslations {
460
467
  pagesAnalyzed: string;
461
468
  markCornerstone: string;
462
469
  unmarkCornerstone: string;
470
+ bulkOptimizeMeta: string;
471
+ bulkOptimizing: string;
472
+ bulkConfirm: string;
463
473
  searchPlaceholder: string;
464
474
  allCollections: string;
465
475
  allScores: string;
@@ -1216,6 +1226,107 @@ declare function buildSeoInputFromDoc(doc: any, collection: string, options?: {
1216
1226
  isGlobal?: boolean;
1217
1227
  }): SeoInput;
1218
1228
 
1229
+ /**
1230
+ * Frontend metadata helper — turns a Payload document into a Next.js-compatible `Metadata`
1231
+ * object (title, description, canonical, hreflang, robots, Open Graph, Twitter).
1232
+ *
1233
+ * This closes the loop between analysis and production: instead of only grading the SEO in the
1234
+ * admin, the plugin can now PRODUCE the actual `<head>` metadata. Use it in a Next.js page:
1235
+ *
1236
+ * export async function generateMetadata({ params }) {
1237
+ * const doc = await payload.findByID({ collection: 'pages', id, depth: 1 })
1238
+ * return buildSeoMetadata(doc, { collection: 'pages', siteUrl, siteName: 'My Site' })
1239
+ * }
1240
+ *
1241
+ * The return value is a structural subset of Next's `Metadata` (assignable to it) — kept
1242
+ * dependency-free so the plugin doesn't hard-depend on `next`.
1243
+ */
1244
+ interface SeoMetadataOptions {
1245
+ /** Collection slug — used to pick the Open Graph type (posts → 'article') */
1246
+ collection?: string;
1247
+ /** Absolute site URL (defaults to NEXT_PUBLIC_SERVER_URL / PAYLOAD_PUBLIC_SERVER_URL) */
1248
+ siteUrl?: string;
1249
+ /** Site name for Open Graph */
1250
+ siteName?: string;
1251
+ /** Template for the title, e.g. "%s | My Site" (%s = the page title) */
1252
+ titleTemplate?: string;
1253
+ /** Fallback OG/Twitter image (absolute, or site-relative) when the document has none */
1254
+ defaultImage?: string;
1255
+ /** Open Graph locale, e.g. 'fr_FR' */
1256
+ locale?: string;
1257
+ }
1258
+ interface SeoMetadata {
1259
+ title?: string;
1260
+ description?: string;
1261
+ alternates?: {
1262
+ canonical?: string;
1263
+ languages?: Record<string, string>;
1264
+ };
1265
+ robots?: {
1266
+ index: boolean;
1267
+ follow: boolean;
1268
+ };
1269
+ openGraph?: {
1270
+ title?: string;
1271
+ description?: string;
1272
+ url?: string;
1273
+ siteName?: string;
1274
+ type?: string;
1275
+ locale?: string;
1276
+ images?: Array<{
1277
+ url: string;
1278
+ }>;
1279
+ };
1280
+ twitter?: {
1281
+ card?: string;
1282
+ title?: string;
1283
+ description?: string;
1284
+ images?: string[];
1285
+ };
1286
+ }
1287
+ /**
1288
+ * Build a Next.js-compatible `Metadata` object from a Payload document.
1289
+ * Pure — safe to call inside `generateMetadata()` (server side).
1290
+ */
1291
+ declare function buildSeoMetadata(doc: Record<string, unknown>, options?: SeoMetadataOptions): SeoMetadata;
1292
+
1293
+ /**
1294
+ * Schema.org / JSON-LD generation — pure, framework-agnostic builders.
1295
+ *
1296
+ * Single source of truth shared by the admin endpoint (`endpoints/schemaGenerator.ts`) and the
1297
+ * frontend render helper (`buildJsonLd` + the `<JsonLd>` component), so the structured data the
1298
+ * dashboard previews is byte-for-byte what the site renders.
1299
+ */
1300
+ declare const SCHEMA_TYPES: readonly ["Article", "LocalBusiness", "BreadcrumbList", "FAQPage", "Product", "Organization", "Person", "Event", "Recipe", "Video"];
1301
+ type SchemaType = (typeof SCHEMA_TYPES)[number];
1302
+ /** Resolve an absolute image URL from a populated meta.image or hero media object. */
1303
+ declare function getSchemaImageUrl(metaImage: Record<string, unknown> | undefined, heroMedia: Record<string, unknown> | undefined, siteUrl: string): string | undefined;
1304
+ /** Detect schema type from collection slug and document content. */
1305
+ declare function detectSchemaType(collection: string, doc: Record<string, unknown>): SchemaType;
1306
+ interface BuildJsonLdOptions {
1307
+ /** Collection slug — used to auto-detect the schema type when `type` is omitted */
1308
+ collection?: string;
1309
+ /** Absolute site URL (defaults to NEXT_PUBLIC_SERVER_URL / PAYLOAD_PUBLIC_SERVER_URL) */
1310
+ siteUrl?: string;
1311
+ /** Force a specific schema type instead of auto-detecting */
1312
+ type?: SchemaType;
1313
+ }
1314
+ /**
1315
+ * Build a clean JSON-LD object from a Payload document. Pure — safe to call on the server
1316
+ * during rendering (e.g. in a Next.js Server Component) or from the admin endpoint.
1317
+ */
1318
+ declare function buildJsonLd(doc: Record<string, unknown>, options?: BuildJsonLdOptions): {
1319
+ type: SchemaType;
1320
+ jsonLd: Record<string, unknown>;
1321
+ };
1322
+ /**
1323
+ * Convenience: build the JSON-LD and return a ready-to-inject `<script>` string.
1324
+ * In React/Next you can instead render the object directly:
1325
+ * <script type="application/ld+json"
1326
+ * dangerouslySetInnerHTML={{ __html: JSON.stringify(buildJsonLd(doc, opts).jsonLd) }} />
1327
+ */
1328
+ declare function renderJsonLdScript(doc: Record<string, unknown>, options?: BuildJsonLdOptions): string;
1329
+
1219
1330
  /**
1220
1331
  * SEO Score History endpoint handler.
1221
1332
  * Returns score history + trend for a specific document.
@@ -1348,8 +1459,8 @@ declare function createGenerateHandler(pluginConfig: GeneratePluginConfig): Payl
1348
1459
 
1349
1460
  /**
1350
1461
  * Schema.org JSON-LD Auto-Generator endpoint.
1351
- * Generates structured data (JSON-LD) from Payload document fields.
1352
- * Supports: Article, LocalBusiness, BreadcrumbList, FAQPage, Product, Organization.
1462
+ * Thin HTTP wrapper around the pure `buildJsonLd` helper (`helpers/buildSchema.ts`), so the
1463
+ * admin preview and the frontend `<JsonLd>` render use identical structured data.
1353
1464
  *
1354
1465
  * Auto-detects schema type from collection/content, with optional override.
1355
1466
  *
@@ -1474,4 +1585,4 @@ declare function getStopWordCompounds(locale: 'fr' | 'en'): ReadonlyArray<readon
1474
1585
 
1475
1586
  declare function analyzeSeo(data: SeoInput, config?: SeoConfig): SeoAnalysis;
1476
1587
 
1477
- export { ACTION_VERBS, type AnalysisContext, type CheckCategory, type CheckStatus, type DashboardLocale, type DashboardTranslations, type DocSourceType, EVERGREEN_SLUGS, FLESCH_THRESHOLDS, type FetchAllDocsOptions, type FetchedDoc, GENERIC_ANCHORS, type GenerateFnArgs$1 as GenerateFnArgs, KEYWORD_DENSITY_MAX, KEYWORD_DENSITY_MIN, KEYWORD_DENSITY_WARN, LEGAL_SLUGS_MAP, MAX_RECURSION_DEPTH, META_DESC_LENGTH_MAX, META_DESC_LENGTH_MIN, MIN_WORDS_FORM, MIN_WORDS_GENERIC, MIN_WORDS_LEGAL, MIN_WORDS_POST, MIN_WORDS_THIN, type MetaFieldsConfig, POWER_WORDS, POWER_WORDS_FR, type PageType, READABILITY_THRESHOLDS, type ResolveLocaleArgs, type RuleGroup, SCORE_EXCELLENT, SCORE_GOOD, SCORE_OK, STOP_WORDS, STOP_WORD_COMPOUNDS_MAP, type SeoAnalysis, type SeoCheck, type SeoConfig, type SeoFeatures, type SeoInput, type SeoLevel, type SeoPluginConfig, type SeoThresholds, TITLE_LENGTH_MAX, TITLE_LENGTH_MIN, UTILITY_SLUGS, WARNING_MULTIPLIER, analyzeSeo, buildSeoInputFromDoc, calculateFlesch, calculateFleschFR, checkHeadingHierarchy, checkImagesInBlocks, countKeywordOccurrences, countLongSections, countSentences, countSyllablesEN, countSyllablesFR, countWords, createAiRewriteHandler, createDuplicateContentHandler, createGenerateHandler, createHistoryHandler, createKeywordResearchHandler, createPerformanceHandler, createRedirectChainsHandler, createSchemaGeneratorHandler, createSeoPerformanceCollection, createSeoScoreHistoryCollection, createSitemapAuditHandler, createTrackSeoScoreHook, detectPageType, detectPassiveVoice, extractHeadingsFromLexical, extractImagesFromLexical, extractLinkUrlsFromLexical, extractLinksFromLexical, extractListsFromLexical, extractTextFromLexical, fetchAllDocs, getActionVerbs, getActionVerbsFR, getDashboardT, getEvergreenSlugs, getGenericAnchors, getLegalSlugs, getPowerWords, getStopWordCompounds, getStopWords, getStopWordsFR, getUtilitySlugs, hasTransitionWord, isStopWordInCompoundExpression, keywordMatchesText, metaFields, normalizeForComparison, registerDashboardTranslations, resolveAnalysisLocale, seoAnalyzerPlugin, seoFields, seoAnalyzerPlugin as seoPlugin, slugifyKeyword };
1588
+ export { ACTION_VERBS, type AnalysisContext, type BuildJsonLdOptions, type CheckCategory, type CheckStatus, type DashboardLocale, type DashboardTranslations, type DocSourceType, EVERGREEN_SLUGS, FLESCH_THRESHOLDS, type FetchAllDocsOptions, type FetchedDoc, GENERIC_ANCHORS, type GenerateFnArgs$1 as GenerateFnArgs, KEYWORD_DENSITY_MAX, KEYWORD_DENSITY_MIN, KEYWORD_DENSITY_WARN, LEGAL_SLUGS_MAP, MAX_RECURSION_DEPTH, META_DESC_LENGTH_MAX, META_DESC_LENGTH_MIN, MIN_WORDS_FORM, MIN_WORDS_GENERIC, MIN_WORDS_LEGAL, MIN_WORDS_POST, MIN_WORDS_THIN, type MetaFieldsConfig, POWER_WORDS, POWER_WORDS_FR, type PageType, READABILITY_THRESHOLDS, type ResolveLocaleArgs, type RuleGroup, SCHEMA_TYPES, SCORE_EXCELLENT, SCORE_GOOD, SCORE_OK, STOP_WORDS, STOP_WORD_COMPOUNDS_MAP, type SchemaType, type SeoAnalysis, type SeoCheck, type SeoConfig, type SeoFeatures, type SeoInput, type SeoLevel, type SeoMetadata, type SeoMetadataOptions, type SeoPluginConfig, type SeoThresholds, TITLE_LENGTH_MAX, TITLE_LENGTH_MIN, UTILITY_SLUGS, WARNING_MULTIPLIER, analyzeSeo, buildJsonLd, buildSeoInputFromDoc, buildSeoMetadata, calculateFlesch, calculateFleschFR, checkHeadingHierarchy, checkImagesInBlocks, countKeywordOccurrences, countLongSections, countSentences, countSyllablesEN, countSyllablesFR, countWords, createAiRewriteHandler, createDuplicateContentHandler, createGenerateHandler, createHistoryHandler, createKeywordResearchHandler, createPerformanceHandler, createRedirectChainsHandler, createSchemaGeneratorHandler, createSeoPerformanceCollection, createSeoScoreHistoryCollection, createSitemapAuditHandler, createTrackSeoScoreHook, detectPageType, detectPassiveVoice, detectSchemaType, extractHeadingsFromLexical, extractImagesFromLexical, extractLinkUrlsFromLexical, extractLinksFromLexical, extractListsFromLexical, extractTextFromLexical, fetchAllDocs, getActionVerbs, getActionVerbsFR, getDashboardT, getEvergreenSlugs, getGenericAnchors, getLegalSlugs, getPowerWords, getSchemaImageUrl, getStopWordCompounds, getStopWords, getStopWordsFR, getUtilitySlugs, hasTransitionWord, isStopWordInCompoundExpression, keywordMatchesText, metaFields, normalizeForComparison, registerDashboardTranslations, renderJsonLdScript, resolveAnalysisLocale, seoAnalyzerPlugin, seoFields, seoAnalyzerPlugin as seoPlugin, slugifyKeyword };
package/dist/index.d.ts CHANGED
@@ -177,6 +177,13 @@ interface SeoFeatures {
177
177
  duplicateContent?: boolean;
178
178
  /** Settings view (/admin/seo-config) */
179
179
  settings?: boolean;
180
+ /**
181
+ * Proactive monitoring digest (opt-in, default false). Periodically reports score
182
+ * regressions, new 404s and ranking drops via webhook and/or email. Delivery + thresholds
183
+ * are configured with env vars (SEO_ALERT_WEBHOOK_URL, SEO_ALERT_EMAIL, SEO_ALERT_SCORE_DROP,
184
+ * SEO_ALERT_POSITION_DROP, SEO_ALERT_INTERVAL_HOURS). Email uses Payload's email adapter.
185
+ */
186
+ alerts?: boolean;
180
187
  }
181
188
  /** Pre-computed context shared across all rule modules to avoid redundant work */
182
189
  interface AnalysisContext {
@@ -460,6 +467,9 @@ interface DashboardTranslations {
460
467
  pagesAnalyzed: string;
461
468
  markCornerstone: string;
462
469
  unmarkCornerstone: string;
470
+ bulkOptimizeMeta: string;
471
+ bulkOptimizing: string;
472
+ bulkConfirm: string;
463
473
  searchPlaceholder: string;
464
474
  allCollections: string;
465
475
  allScores: string;
@@ -1216,6 +1226,107 @@ declare function buildSeoInputFromDoc(doc: any, collection: string, options?: {
1216
1226
  isGlobal?: boolean;
1217
1227
  }): SeoInput;
1218
1228
 
1229
+ /**
1230
+ * Frontend metadata helper — turns a Payload document into a Next.js-compatible `Metadata`
1231
+ * object (title, description, canonical, hreflang, robots, Open Graph, Twitter).
1232
+ *
1233
+ * This closes the loop between analysis and production: instead of only grading the SEO in the
1234
+ * admin, the plugin can now PRODUCE the actual `<head>` metadata. Use it in a Next.js page:
1235
+ *
1236
+ * export async function generateMetadata({ params }) {
1237
+ * const doc = await payload.findByID({ collection: 'pages', id, depth: 1 })
1238
+ * return buildSeoMetadata(doc, { collection: 'pages', siteUrl, siteName: 'My Site' })
1239
+ * }
1240
+ *
1241
+ * The return value is a structural subset of Next's `Metadata` (assignable to it) — kept
1242
+ * dependency-free so the plugin doesn't hard-depend on `next`.
1243
+ */
1244
+ interface SeoMetadataOptions {
1245
+ /** Collection slug — used to pick the Open Graph type (posts → 'article') */
1246
+ collection?: string;
1247
+ /** Absolute site URL (defaults to NEXT_PUBLIC_SERVER_URL / PAYLOAD_PUBLIC_SERVER_URL) */
1248
+ siteUrl?: string;
1249
+ /** Site name for Open Graph */
1250
+ siteName?: string;
1251
+ /** Template for the title, e.g. "%s | My Site" (%s = the page title) */
1252
+ titleTemplate?: string;
1253
+ /** Fallback OG/Twitter image (absolute, or site-relative) when the document has none */
1254
+ defaultImage?: string;
1255
+ /** Open Graph locale, e.g. 'fr_FR' */
1256
+ locale?: string;
1257
+ }
1258
+ interface SeoMetadata {
1259
+ title?: string;
1260
+ description?: string;
1261
+ alternates?: {
1262
+ canonical?: string;
1263
+ languages?: Record<string, string>;
1264
+ };
1265
+ robots?: {
1266
+ index: boolean;
1267
+ follow: boolean;
1268
+ };
1269
+ openGraph?: {
1270
+ title?: string;
1271
+ description?: string;
1272
+ url?: string;
1273
+ siteName?: string;
1274
+ type?: string;
1275
+ locale?: string;
1276
+ images?: Array<{
1277
+ url: string;
1278
+ }>;
1279
+ };
1280
+ twitter?: {
1281
+ card?: string;
1282
+ title?: string;
1283
+ description?: string;
1284
+ images?: string[];
1285
+ };
1286
+ }
1287
+ /**
1288
+ * Build a Next.js-compatible `Metadata` object from a Payload document.
1289
+ * Pure — safe to call inside `generateMetadata()` (server side).
1290
+ */
1291
+ declare function buildSeoMetadata(doc: Record<string, unknown>, options?: SeoMetadataOptions): SeoMetadata;
1292
+
1293
+ /**
1294
+ * Schema.org / JSON-LD generation — pure, framework-agnostic builders.
1295
+ *
1296
+ * Single source of truth shared by the admin endpoint (`endpoints/schemaGenerator.ts`) and the
1297
+ * frontend render helper (`buildJsonLd` + the `<JsonLd>` component), so the structured data the
1298
+ * dashboard previews is byte-for-byte what the site renders.
1299
+ */
1300
+ declare const SCHEMA_TYPES: readonly ["Article", "LocalBusiness", "BreadcrumbList", "FAQPage", "Product", "Organization", "Person", "Event", "Recipe", "Video"];
1301
+ type SchemaType = (typeof SCHEMA_TYPES)[number];
1302
+ /** Resolve an absolute image URL from a populated meta.image or hero media object. */
1303
+ declare function getSchemaImageUrl(metaImage: Record<string, unknown> | undefined, heroMedia: Record<string, unknown> | undefined, siteUrl: string): string | undefined;
1304
+ /** Detect schema type from collection slug and document content. */
1305
+ declare function detectSchemaType(collection: string, doc: Record<string, unknown>): SchemaType;
1306
+ interface BuildJsonLdOptions {
1307
+ /** Collection slug — used to auto-detect the schema type when `type` is omitted */
1308
+ collection?: string;
1309
+ /** Absolute site URL (defaults to NEXT_PUBLIC_SERVER_URL / PAYLOAD_PUBLIC_SERVER_URL) */
1310
+ siteUrl?: string;
1311
+ /** Force a specific schema type instead of auto-detecting */
1312
+ type?: SchemaType;
1313
+ }
1314
+ /**
1315
+ * Build a clean JSON-LD object from a Payload document. Pure — safe to call on the server
1316
+ * during rendering (e.g. in a Next.js Server Component) or from the admin endpoint.
1317
+ */
1318
+ declare function buildJsonLd(doc: Record<string, unknown>, options?: BuildJsonLdOptions): {
1319
+ type: SchemaType;
1320
+ jsonLd: Record<string, unknown>;
1321
+ };
1322
+ /**
1323
+ * Convenience: build the JSON-LD and return a ready-to-inject `<script>` string.
1324
+ * In React/Next you can instead render the object directly:
1325
+ * <script type="application/ld+json"
1326
+ * dangerouslySetInnerHTML={{ __html: JSON.stringify(buildJsonLd(doc, opts).jsonLd) }} />
1327
+ */
1328
+ declare function renderJsonLdScript(doc: Record<string, unknown>, options?: BuildJsonLdOptions): string;
1329
+
1219
1330
  /**
1220
1331
  * SEO Score History endpoint handler.
1221
1332
  * Returns score history + trend for a specific document.
@@ -1348,8 +1459,8 @@ declare function createGenerateHandler(pluginConfig: GeneratePluginConfig): Payl
1348
1459
 
1349
1460
  /**
1350
1461
  * Schema.org JSON-LD Auto-Generator endpoint.
1351
- * Generates structured data (JSON-LD) from Payload document fields.
1352
- * Supports: Article, LocalBusiness, BreadcrumbList, FAQPage, Product, Organization.
1462
+ * Thin HTTP wrapper around the pure `buildJsonLd` helper (`helpers/buildSchema.ts`), so the
1463
+ * admin preview and the frontend `<JsonLd>` render use identical structured data.
1353
1464
  *
1354
1465
  * Auto-detects schema type from collection/content, with optional override.
1355
1466
  *
@@ -1474,4 +1585,4 @@ declare function getStopWordCompounds(locale: 'fr' | 'en'): ReadonlyArray<readon
1474
1585
 
1475
1586
  declare function analyzeSeo(data: SeoInput, config?: SeoConfig): SeoAnalysis;
1476
1587
 
1477
- export { ACTION_VERBS, type AnalysisContext, type CheckCategory, type CheckStatus, type DashboardLocale, type DashboardTranslations, type DocSourceType, EVERGREEN_SLUGS, FLESCH_THRESHOLDS, type FetchAllDocsOptions, type FetchedDoc, GENERIC_ANCHORS, type GenerateFnArgs$1 as GenerateFnArgs, KEYWORD_DENSITY_MAX, KEYWORD_DENSITY_MIN, KEYWORD_DENSITY_WARN, LEGAL_SLUGS_MAP, MAX_RECURSION_DEPTH, META_DESC_LENGTH_MAX, META_DESC_LENGTH_MIN, MIN_WORDS_FORM, MIN_WORDS_GENERIC, MIN_WORDS_LEGAL, MIN_WORDS_POST, MIN_WORDS_THIN, type MetaFieldsConfig, POWER_WORDS, POWER_WORDS_FR, type PageType, READABILITY_THRESHOLDS, type ResolveLocaleArgs, type RuleGroup, SCORE_EXCELLENT, SCORE_GOOD, SCORE_OK, STOP_WORDS, STOP_WORD_COMPOUNDS_MAP, type SeoAnalysis, type SeoCheck, type SeoConfig, type SeoFeatures, type SeoInput, type SeoLevel, type SeoPluginConfig, type SeoThresholds, TITLE_LENGTH_MAX, TITLE_LENGTH_MIN, UTILITY_SLUGS, WARNING_MULTIPLIER, analyzeSeo, buildSeoInputFromDoc, calculateFlesch, calculateFleschFR, checkHeadingHierarchy, checkImagesInBlocks, countKeywordOccurrences, countLongSections, countSentences, countSyllablesEN, countSyllablesFR, countWords, createAiRewriteHandler, createDuplicateContentHandler, createGenerateHandler, createHistoryHandler, createKeywordResearchHandler, createPerformanceHandler, createRedirectChainsHandler, createSchemaGeneratorHandler, createSeoPerformanceCollection, createSeoScoreHistoryCollection, createSitemapAuditHandler, createTrackSeoScoreHook, detectPageType, detectPassiveVoice, extractHeadingsFromLexical, extractImagesFromLexical, extractLinkUrlsFromLexical, extractLinksFromLexical, extractListsFromLexical, extractTextFromLexical, fetchAllDocs, getActionVerbs, getActionVerbsFR, getDashboardT, getEvergreenSlugs, getGenericAnchors, getLegalSlugs, getPowerWords, getStopWordCompounds, getStopWords, getStopWordsFR, getUtilitySlugs, hasTransitionWord, isStopWordInCompoundExpression, keywordMatchesText, metaFields, normalizeForComparison, registerDashboardTranslations, resolveAnalysisLocale, seoAnalyzerPlugin, seoFields, seoAnalyzerPlugin as seoPlugin, slugifyKeyword };
1588
+ export { ACTION_VERBS, type AnalysisContext, type BuildJsonLdOptions, type CheckCategory, type CheckStatus, type DashboardLocale, type DashboardTranslations, type DocSourceType, EVERGREEN_SLUGS, FLESCH_THRESHOLDS, type FetchAllDocsOptions, type FetchedDoc, GENERIC_ANCHORS, type GenerateFnArgs$1 as GenerateFnArgs, KEYWORD_DENSITY_MAX, KEYWORD_DENSITY_MIN, KEYWORD_DENSITY_WARN, LEGAL_SLUGS_MAP, MAX_RECURSION_DEPTH, META_DESC_LENGTH_MAX, META_DESC_LENGTH_MIN, MIN_WORDS_FORM, MIN_WORDS_GENERIC, MIN_WORDS_LEGAL, MIN_WORDS_POST, MIN_WORDS_THIN, type MetaFieldsConfig, POWER_WORDS, POWER_WORDS_FR, type PageType, READABILITY_THRESHOLDS, type ResolveLocaleArgs, type RuleGroup, SCHEMA_TYPES, SCORE_EXCELLENT, SCORE_GOOD, SCORE_OK, STOP_WORDS, STOP_WORD_COMPOUNDS_MAP, type SchemaType, type SeoAnalysis, type SeoCheck, type SeoConfig, type SeoFeatures, type SeoInput, type SeoLevel, type SeoMetadata, type SeoMetadataOptions, type SeoPluginConfig, type SeoThresholds, TITLE_LENGTH_MAX, TITLE_LENGTH_MIN, UTILITY_SLUGS, WARNING_MULTIPLIER, analyzeSeo, buildJsonLd, buildSeoInputFromDoc, buildSeoMetadata, calculateFlesch, calculateFleschFR, checkHeadingHierarchy, checkImagesInBlocks, countKeywordOccurrences, countLongSections, countSentences, countSyllablesEN, countSyllablesFR, countWords, createAiRewriteHandler, createDuplicateContentHandler, createGenerateHandler, createHistoryHandler, createKeywordResearchHandler, createPerformanceHandler, createRedirectChainsHandler, createSchemaGeneratorHandler, createSeoPerformanceCollection, createSeoScoreHistoryCollection, createSitemapAuditHandler, createTrackSeoScoreHook, detectPageType, detectPassiveVoice, detectSchemaType, extractHeadingsFromLexical, extractImagesFromLexical, extractLinkUrlsFromLexical, extractLinksFromLexical, extractListsFromLexical, extractTextFromLexical, fetchAllDocs, getActionVerbs, getActionVerbsFR, getDashboardT, getEvergreenSlugs, getGenericAnchors, getLegalSlugs, getPowerWords, getSchemaImageUrl, getStopWordCompounds, getStopWords, getStopWordsFR, getUtilitySlugs, hasTransitionWord, isStopWordInCompoundExpression, keywordMatchesText, metaFields, normalizeForComparison, registerDashboardTranslations, renderJsonLdScript, resolveAnalysisLocale, seoAnalyzerPlugin, seoFields, seoAnalyzerPlugin as seoPlugin, slugifyKeyword };