@consilioweb/payload-seo-analyzer 1.8.1 → 1.10.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 {
@@ -453,6 +460,8 @@ interface DashboardTranslations {
453
460
  };
454
461
  seoView: {
455
462
  loadingAudit: string;
463
+ buildingAudit: string;
464
+ buildTimeout: string;
456
465
  errorSaving: string;
457
466
  auditTitle: string;
458
467
  pagesAnalyzed: string;
@@ -896,6 +905,18 @@ interface DashboardTranslations {
896
905
  metaTitle: string;
897
906
  metaDescription: string;
898
907
  emptyValue: string;
908
+ optimizeWithAi: string;
909
+ optimizeIntro: string;
910
+ optimizeRunning: string;
911
+ applyAll: string;
912
+ applied: string;
913
+ whyChanges: string;
914
+ labelCurrent: string;
915
+ labelSuggested: string;
916
+ labelFocusKeyword: string;
917
+ heuristicNote: string;
918
+ applySaveHint: string;
919
+ noMetaChange: string;
899
920
  };
900
921
  scoreHistory: {
901
922
  loading: string;
@@ -1202,6 +1223,107 @@ declare function buildSeoInputFromDoc(doc: any, collection: string, options?: {
1202
1223
  isGlobal?: boolean;
1203
1224
  }): SeoInput;
1204
1225
 
1226
+ /**
1227
+ * Frontend metadata helper — turns a Payload document into a Next.js-compatible `Metadata`
1228
+ * object (title, description, canonical, hreflang, robots, Open Graph, Twitter).
1229
+ *
1230
+ * This closes the loop between analysis and production: instead of only grading the SEO in the
1231
+ * admin, the plugin can now PRODUCE the actual `<head>` metadata. Use it in a Next.js page:
1232
+ *
1233
+ * export async function generateMetadata({ params }) {
1234
+ * const doc = await payload.findByID({ collection: 'pages', id, depth: 1 })
1235
+ * return buildSeoMetadata(doc, { collection: 'pages', siteUrl, siteName: 'My Site' })
1236
+ * }
1237
+ *
1238
+ * The return value is a structural subset of Next's `Metadata` (assignable to it) — kept
1239
+ * dependency-free so the plugin doesn't hard-depend on `next`.
1240
+ */
1241
+ interface SeoMetadataOptions {
1242
+ /** Collection slug — used to pick the Open Graph type (posts → 'article') */
1243
+ collection?: string;
1244
+ /** Absolute site URL (defaults to NEXT_PUBLIC_SERVER_URL / PAYLOAD_PUBLIC_SERVER_URL) */
1245
+ siteUrl?: string;
1246
+ /** Site name for Open Graph */
1247
+ siteName?: string;
1248
+ /** Template for the title, e.g. "%s | My Site" (%s = the page title) */
1249
+ titleTemplate?: string;
1250
+ /** Fallback OG/Twitter image (absolute, or site-relative) when the document has none */
1251
+ defaultImage?: string;
1252
+ /** Open Graph locale, e.g. 'fr_FR' */
1253
+ locale?: string;
1254
+ }
1255
+ interface SeoMetadata {
1256
+ title?: string;
1257
+ description?: string;
1258
+ alternates?: {
1259
+ canonical?: string;
1260
+ languages?: Record<string, string>;
1261
+ };
1262
+ robots?: {
1263
+ index: boolean;
1264
+ follow: boolean;
1265
+ };
1266
+ openGraph?: {
1267
+ title?: string;
1268
+ description?: string;
1269
+ url?: string;
1270
+ siteName?: string;
1271
+ type?: string;
1272
+ locale?: string;
1273
+ images?: Array<{
1274
+ url: string;
1275
+ }>;
1276
+ };
1277
+ twitter?: {
1278
+ card?: string;
1279
+ title?: string;
1280
+ description?: string;
1281
+ images?: string[];
1282
+ };
1283
+ }
1284
+ /**
1285
+ * Build a Next.js-compatible `Metadata` object from a Payload document.
1286
+ * Pure — safe to call inside `generateMetadata()` (server side).
1287
+ */
1288
+ declare function buildSeoMetadata(doc: Record<string, unknown>, options?: SeoMetadataOptions): SeoMetadata;
1289
+
1290
+ /**
1291
+ * Schema.org / JSON-LD generation — pure, framework-agnostic builders.
1292
+ *
1293
+ * Single source of truth shared by the admin endpoint (`endpoints/schemaGenerator.ts`) and the
1294
+ * frontend render helper (`buildJsonLd` + the `<JsonLd>` component), so the structured data the
1295
+ * dashboard previews is byte-for-byte what the site renders.
1296
+ */
1297
+ declare const SCHEMA_TYPES: readonly ["Article", "LocalBusiness", "BreadcrumbList", "FAQPage", "Product", "Organization", "Person", "Event", "Recipe", "Video"];
1298
+ type SchemaType = (typeof SCHEMA_TYPES)[number];
1299
+ /** Resolve an absolute image URL from a populated meta.image or hero media object. */
1300
+ declare function getSchemaImageUrl(metaImage: Record<string, unknown> | undefined, heroMedia: Record<string, unknown> | undefined, siteUrl: string): string | undefined;
1301
+ /** Detect schema type from collection slug and document content. */
1302
+ declare function detectSchemaType(collection: string, doc: Record<string, unknown>): SchemaType;
1303
+ interface BuildJsonLdOptions {
1304
+ /** Collection slug — used to auto-detect the schema type when `type` is omitted */
1305
+ collection?: string;
1306
+ /** Absolute site URL (defaults to NEXT_PUBLIC_SERVER_URL / PAYLOAD_PUBLIC_SERVER_URL) */
1307
+ siteUrl?: string;
1308
+ /** Force a specific schema type instead of auto-detecting */
1309
+ type?: SchemaType;
1310
+ }
1311
+ /**
1312
+ * Build a clean JSON-LD object from a Payload document. Pure — safe to call on the server
1313
+ * during rendering (e.g. in a Next.js Server Component) or from the admin endpoint.
1314
+ */
1315
+ declare function buildJsonLd(doc: Record<string, unknown>, options?: BuildJsonLdOptions): {
1316
+ type: SchemaType;
1317
+ jsonLd: Record<string, unknown>;
1318
+ };
1319
+ /**
1320
+ * Convenience: build the JSON-LD and return a ready-to-inject `<script>` string.
1321
+ * In React/Next you can instead render the object directly:
1322
+ * <script type="application/ld+json"
1323
+ * dangerouslySetInnerHTML={{ __html: JSON.stringify(buildJsonLd(doc, opts).jsonLd) }} />
1324
+ */
1325
+ declare function renderJsonLdScript(doc: Record<string, unknown>, options?: BuildJsonLdOptions): string;
1326
+
1205
1327
  /**
1206
1328
  * SEO Score History endpoint handler.
1207
1329
  * Returns score history + trend for a specific document.
@@ -1334,8 +1456,8 @@ declare function createGenerateHandler(pluginConfig: GeneratePluginConfig): Payl
1334
1456
 
1335
1457
  /**
1336
1458
  * Schema.org JSON-LD Auto-Generator endpoint.
1337
- * Generates structured data (JSON-LD) from Payload document fields.
1338
- * Supports: Article, LocalBusiness, BreadcrumbList, FAQPage, Product, Organization.
1459
+ * Thin HTTP wrapper around the pure `buildJsonLd` helper (`helpers/buildSchema.ts`), so the
1460
+ * admin preview and the frontend `<JsonLd>` render use identical structured data.
1339
1461
  *
1340
1462
  * Auto-detects schema type from collection/content, with optional override.
1341
1463
  *
@@ -1460,4 +1582,4 @@ declare function getStopWordCompounds(locale: 'fr' | 'en'): ReadonlyArray<readon
1460
1582
 
1461
1583
  declare function analyzeSeo(data: SeoInput, config?: SeoConfig): SeoAnalysis;
1462
1584
 
1463
- 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 };
1585
+ 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 {
@@ -453,6 +460,8 @@ interface DashboardTranslations {
453
460
  };
454
461
  seoView: {
455
462
  loadingAudit: string;
463
+ buildingAudit: string;
464
+ buildTimeout: string;
456
465
  errorSaving: string;
457
466
  auditTitle: string;
458
467
  pagesAnalyzed: string;
@@ -896,6 +905,18 @@ interface DashboardTranslations {
896
905
  metaTitle: string;
897
906
  metaDescription: string;
898
907
  emptyValue: string;
908
+ optimizeWithAi: string;
909
+ optimizeIntro: string;
910
+ optimizeRunning: string;
911
+ applyAll: string;
912
+ applied: string;
913
+ whyChanges: string;
914
+ labelCurrent: string;
915
+ labelSuggested: string;
916
+ labelFocusKeyword: string;
917
+ heuristicNote: string;
918
+ applySaveHint: string;
919
+ noMetaChange: string;
899
920
  };
900
921
  scoreHistory: {
901
922
  loading: string;
@@ -1202,6 +1223,107 @@ declare function buildSeoInputFromDoc(doc: any, collection: string, options?: {
1202
1223
  isGlobal?: boolean;
1203
1224
  }): SeoInput;
1204
1225
 
1226
+ /**
1227
+ * Frontend metadata helper — turns a Payload document into a Next.js-compatible `Metadata`
1228
+ * object (title, description, canonical, hreflang, robots, Open Graph, Twitter).
1229
+ *
1230
+ * This closes the loop between analysis and production: instead of only grading the SEO in the
1231
+ * admin, the plugin can now PRODUCE the actual `<head>` metadata. Use it in a Next.js page:
1232
+ *
1233
+ * export async function generateMetadata({ params }) {
1234
+ * const doc = await payload.findByID({ collection: 'pages', id, depth: 1 })
1235
+ * return buildSeoMetadata(doc, { collection: 'pages', siteUrl, siteName: 'My Site' })
1236
+ * }
1237
+ *
1238
+ * The return value is a structural subset of Next's `Metadata` (assignable to it) — kept
1239
+ * dependency-free so the plugin doesn't hard-depend on `next`.
1240
+ */
1241
+ interface SeoMetadataOptions {
1242
+ /** Collection slug — used to pick the Open Graph type (posts → 'article') */
1243
+ collection?: string;
1244
+ /** Absolute site URL (defaults to NEXT_PUBLIC_SERVER_URL / PAYLOAD_PUBLIC_SERVER_URL) */
1245
+ siteUrl?: string;
1246
+ /** Site name for Open Graph */
1247
+ siteName?: string;
1248
+ /** Template for the title, e.g. "%s | My Site" (%s = the page title) */
1249
+ titleTemplate?: string;
1250
+ /** Fallback OG/Twitter image (absolute, or site-relative) when the document has none */
1251
+ defaultImage?: string;
1252
+ /** Open Graph locale, e.g. 'fr_FR' */
1253
+ locale?: string;
1254
+ }
1255
+ interface SeoMetadata {
1256
+ title?: string;
1257
+ description?: string;
1258
+ alternates?: {
1259
+ canonical?: string;
1260
+ languages?: Record<string, string>;
1261
+ };
1262
+ robots?: {
1263
+ index: boolean;
1264
+ follow: boolean;
1265
+ };
1266
+ openGraph?: {
1267
+ title?: string;
1268
+ description?: string;
1269
+ url?: string;
1270
+ siteName?: string;
1271
+ type?: string;
1272
+ locale?: string;
1273
+ images?: Array<{
1274
+ url: string;
1275
+ }>;
1276
+ };
1277
+ twitter?: {
1278
+ card?: string;
1279
+ title?: string;
1280
+ description?: string;
1281
+ images?: string[];
1282
+ };
1283
+ }
1284
+ /**
1285
+ * Build a Next.js-compatible `Metadata` object from a Payload document.
1286
+ * Pure — safe to call inside `generateMetadata()` (server side).
1287
+ */
1288
+ declare function buildSeoMetadata(doc: Record<string, unknown>, options?: SeoMetadataOptions): SeoMetadata;
1289
+
1290
+ /**
1291
+ * Schema.org / JSON-LD generation — pure, framework-agnostic builders.
1292
+ *
1293
+ * Single source of truth shared by the admin endpoint (`endpoints/schemaGenerator.ts`) and the
1294
+ * frontend render helper (`buildJsonLd` + the `<JsonLd>` component), so the structured data the
1295
+ * dashboard previews is byte-for-byte what the site renders.
1296
+ */
1297
+ declare const SCHEMA_TYPES: readonly ["Article", "LocalBusiness", "BreadcrumbList", "FAQPage", "Product", "Organization", "Person", "Event", "Recipe", "Video"];
1298
+ type SchemaType = (typeof SCHEMA_TYPES)[number];
1299
+ /** Resolve an absolute image URL from a populated meta.image or hero media object. */
1300
+ declare function getSchemaImageUrl(metaImage: Record<string, unknown> | undefined, heroMedia: Record<string, unknown> | undefined, siteUrl: string): string | undefined;
1301
+ /** Detect schema type from collection slug and document content. */
1302
+ declare function detectSchemaType(collection: string, doc: Record<string, unknown>): SchemaType;
1303
+ interface BuildJsonLdOptions {
1304
+ /** Collection slug — used to auto-detect the schema type when `type` is omitted */
1305
+ collection?: string;
1306
+ /** Absolute site URL (defaults to NEXT_PUBLIC_SERVER_URL / PAYLOAD_PUBLIC_SERVER_URL) */
1307
+ siteUrl?: string;
1308
+ /** Force a specific schema type instead of auto-detecting */
1309
+ type?: SchemaType;
1310
+ }
1311
+ /**
1312
+ * Build a clean JSON-LD object from a Payload document. Pure — safe to call on the server
1313
+ * during rendering (e.g. in a Next.js Server Component) or from the admin endpoint.
1314
+ */
1315
+ declare function buildJsonLd(doc: Record<string, unknown>, options?: BuildJsonLdOptions): {
1316
+ type: SchemaType;
1317
+ jsonLd: Record<string, unknown>;
1318
+ };
1319
+ /**
1320
+ * Convenience: build the JSON-LD and return a ready-to-inject `<script>` string.
1321
+ * In React/Next you can instead render the object directly:
1322
+ * <script type="application/ld+json"
1323
+ * dangerouslySetInnerHTML={{ __html: JSON.stringify(buildJsonLd(doc, opts).jsonLd) }} />
1324
+ */
1325
+ declare function renderJsonLdScript(doc: Record<string, unknown>, options?: BuildJsonLdOptions): string;
1326
+
1205
1327
  /**
1206
1328
  * SEO Score History endpoint handler.
1207
1329
  * Returns score history + trend for a specific document.
@@ -1334,8 +1456,8 @@ declare function createGenerateHandler(pluginConfig: GeneratePluginConfig): Payl
1334
1456
 
1335
1457
  /**
1336
1458
  * Schema.org JSON-LD Auto-Generator endpoint.
1337
- * Generates structured data (JSON-LD) from Payload document fields.
1338
- * Supports: Article, LocalBusiness, BreadcrumbList, FAQPage, Product, Organization.
1459
+ * Thin HTTP wrapper around the pure `buildJsonLd` helper (`helpers/buildSchema.ts`), so the
1460
+ * admin preview and the frontend `<JsonLd>` render use identical structured data.
1339
1461
  *
1340
1462
  * Auto-detects schema type from collection/content, with optional override.
1341
1463
  *
@@ -1460,4 +1582,4 @@ declare function getStopWordCompounds(locale: 'fr' | 'en'): ReadonlyArray<readon
1460
1582
 
1461
1583
  declare function analyzeSeo(data: SeoInput, config?: SeoConfig): SeoAnalysis;
1462
1584
 
1463
- 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 };
1585
+ 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 };