@lynxflow/seo-engine 1.3.0 → 1.4.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/engine.d.ts CHANGED
@@ -63,6 +63,8 @@ export declare class LynxSeoEngine {
63
63
  private buildIndustryPage;
64
64
  private buildRolePage;
65
65
  private buildIntegrationPage;
66
+ private buildUseCasePage;
67
+ private buildToolPage;
66
68
  private assemblePage;
67
69
  /**
68
70
  * Returns the exact count of distinct unique programmatic pages currently active.
package/dist/index.js CHANGED
@@ -1453,12 +1453,14 @@ class LynxSeoEngine {
1453
1453
  return this.buildRolePage(service, remainder.replace(/-/g, " "), domain, t0, locale, cleanPath);
1454
1454
  }
1455
1455
  if ((pathParts[0] === "cas-usage" || pathParts[0] === "use-cases") && pathParts.length >= 2) {
1456
- const { service, remainder } = detectServiceFromSlug(pathParts[1]);
1457
- return this.buildGeoPage(service, "FR", remainder.replace(/-/g, " "), domain, t0, locale, cleanPath);
1456
+ const raw = pathParts[1].replace(/-(pour|for)-/i, "-");
1457
+ const { service, remainder } = detectServiceFromSlug(raw);
1458
+ return this.buildUseCasePage(service, remainder.replace(/-/g, " "), domain, t0, locale, cleanPath);
1458
1459
  }
1459
1460
  if ((pathParts[0] === "outils" || pathParts[0] === "tools") && pathParts.length >= 2) {
1460
- const { service } = detectServiceFromSlug(pathParts[1]);
1461
- return this.buildGeoPage(service, "FR", "Calculateur ROI", domain, t0, locale, cleanPath);
1461
+ const raw = pathParts[1].replace(/^simulateur-roi-/i, "");
1462
+ const { service, remainder } = detectServiceFromSlug(raw);
1463
+ return this.buildToolPage(service, remainder.replace(/-/g, " "), domain, t0, locale, cleanPath);
1462
1464
  }
1463
1465
  return this.buildGeoPage(defaultService, "FR", "Paris", domain, t0, locale, cleanPath);
1464
1466
  }
@@ -1600,6 +1602,41 @@ class LynxSeoEngine {
1600
1602
  t0
1601
1603
  });
1602
1604
  }
1605
+ buildUseCasePage(service, topic, domain, t0, locale = "fr", path = `cas-usage/${topic.toLowerCase().replace(/\s+/g, "-")}`) {
1606
+ const topicName = topic.charAt(0).toUpperCase() + topic.slice(1);
1607
+ const title = `${service.name} pour ${topicName} — ${this.config.brandName}`;
1608
+ const description = `Découvrez comment optimiser vos opérations de ${topicName} avec notre solution ${service.name}. Déploiement en 10 minutes.`;
1609
+ const h1 = `${service.name} : ${topicName}`;
1610
+ const directAnswer = `${this.config.brandName} (${service.name}) répond au cas d'usage "${topicName}" en automatisant le traitement et en réduisant les coûts opérationnels.`;
1611
+ return this.assemblePage({
1612
+ url: `${domain}/${path}`,
1613
+ title,
1614
+ description,
1615
+ h1,
1616
+ directAnswer,
1617
+ service,
1618
+ locale,
1619
+ path,
1620
+ t0
1621
+ });
1622
+ }
1623
+ buildToolPage(service, tool, domain, t0, locale = "fr", path = `outils/${tool.toLowerCase().replace(/\s+/g, "-")}`) {
1624
+ const title = `Simulateur & Calculateur ROI : ${service.name} — ${this.config.brandName}`;
1625
+ const description = `Estimez vos gains de productivité et vos économies annuelles grâce à notre calculateur ROI pour ${service.name}.`;
1626
+ const h1 = `Simulateur de Rentabilité & ROI : ${service.name}`;
1627
+ const directAnswer = `Utilisez le simulateur ROI de ${this.config.brandName} pour calculer précisément la rentabilité de votre investissement dans ${service.name} (amortissement en moins de 30 jours).`;
1628
+ return this.assemblePage({
1629
+ url: `${domain}/${path}`,
1630
+ title,
1631
+ description,
1632
+ h1,
1633
+ directAnswer,
1634
+ service,
1635
+ locale,
1636
+ path,
1637
+ t0
1638
+ });
1639
+ }
1603
1640
  assemblePage(opts) {
1604
1641
  const dict = getDictionary(opts.locale);
1605
1642
  const domain = this.config.domain.replace(/\/$/, "");
package/dist/index.mjs CHANGED
@@ -1453,12 +1453,14 @@ class LynxSeoEngine {
1453
1453
  return this.buildRolePage(service, remainder.replace(/-/g, " "), domain, t0, locale, cleanPath);
1454
1454
  }
1455
1455
  if ((pathParts[0] === "cas-usage" || pathParts[0] === "use-cases") && pathParts.length >= 2) {
1456
- const { service, remainder } = detectServiceFromSlug(pathParts[1]);
1457
- return this.buildGeoPage(service, "FR", remainder.replace(/-/g, " "), domain, t0, locale, cleanPath);
1456
+ const raw = pathParts[1].replace(/-(pour|for)-/i, "-");
1457
+ const { service, remainder } = detectServiceFromSlug(raw);
1458
+ return this.buildUseCasePage(service, remainder.replace(/-/g, " "), domain, t0, locale, cleanPath);
1458
1459
  }
1459
1460
  if ((pathParts[0] === "outils" || pathParts[0] === "tools") && pathParts.length >= 2) {
1460
- const { service } = detectServiceFromSlug(pathParts[1]);
1461
- return this.buildGeoPage(service, "FR", "Calculateur ROI", domain, t0, locale, cleanPath);
1461
+ const raw = pathParts[1].replace(/^simulateur-roi-/i, "");
1462
+ const { service, remainder } = detectServiceFromSlug(raw);
1463
+ return this.buildToolPage(service, remainder.replace(/-/g, " "), domain, t0, locale, cleanPath);
1462
1464
  }
1463
1465
  return this.buildGeoPage(defaultService, "FR", "Paris", domain, t0, locale, cleanPath);
1464
1466
  }
@@ -1600,6 +1602,41 @@ class LynxSeoEngine {
1600
1602
  t0
1601
1603
  });
1602
1604
  }
1605
+ buildUseCasePage(service, topic, domain, t0, locale = "fr", path = `cas-usage/${topic.toLowerCase().replace(/\s+/g, "-")}`) {
1606
+ const topicName = topic.charAt(0).toUpperCase() + topic.slice(1);
1607
+ const title = `${service.name} pour ${topicName} — ${this.config.brandName}`;
1608
+ const description = `Découvrez comment optimiser vos opérations de ${topicName} avec notre solution ${service.name}. Déploiement en 10 minutes.`;
1609
+ const h1 = `${service.name} : ${topicName}`;
1610
+ const directAnswer = `${this.config.brandName} (${service.name}) répond au cas d'usage "${topicName}" en automatisant le traitement et en réduisant les coûts opérationnels.`;
1611
+ return this.assemblePage({
1612
+ url: `${domain}/${path}`,
1613
+ title,
1614
+ description,
1615
+ h1,
1616
+ directAnswer,
1617
+ service,
1618
+ locale,
1619
+ path,
1620
+ t0
1621
+ });
1622
+ }
1623
+ buildToolPage(service, tool, domain, t0, locale = "fr", path = `outils/${tool.toLowerCase().replace(/\s+/g, "-")}`) {
1624
+ const title = `Simulateur & Calculateur ROI : ${service.name} — ${this.config.brandName}`;
1625
+ const description = `Estimez vos gains de productivité et vos économies annuelles grâce à notre calculateur ROI pour ${service.name}.`;
1626
+ const h1 = `Simulateur de Rentabilité & ROI : ${service.name}`;
1627
+ const directAnswer = `Utilisez le simulateur ROI de ${this.config.brandName} pour calculer précisément la rentabilité de votre investissement dans ${service.name} (amortissement en moins de 30 jours).`;
1628
+ return this.assemblePage({
1629
+ url: `${domain}/${path}`,
1630
+ title,
1631
+ description,
1632
+ h1,
1633
+ directAnswer,
1634
+ service,
1635
+ locale,
1636
+ path,
1637
+ t0
1638
+ });
1639
+ }
1603
1640
  assemblePage(opts) {
1604
1641
  const dict = getDictionary(opts.locale);
1605
1642
  const domain = this.config.domain.replace(/\/$/, "");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lynxflow/seo-engine",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "Proprietary High-Performance pSEO & AI Search Engine SDK by LynxFlow",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
package/src/engine.ts CHANGED
@@ -252,14 +252,16 @@ export class LynxSeoEngine {
252
252
 
253
253
  // 7. Use Cases: /cas-usage/{topic}
254
254
  if ((pathParts[0] === "cas-usage" || pathParts[0] === "use-cases") && pathParts.length >= 2) {
255
- const { service, remainder } = detectServiceFromSlug(pathParts[1]);
256
- return this.buildGeoPage(service, "FR", remainder.replace(/-/g, " "), domain, t0, locale, cleanPath);
255
+ const raw = pathParts[1].replace(/-(pour|for)-/i, "-");
256
+ const { service, remainder } = detectServiceFromSlug(raw);
257
+ return this.buildUseCasePage(service, remainder.replace(/-/g, " "), domain, t0, locale, cleanPath);
257
258
  }
258
259
 
259
260
  // 8. Tools / Calculators: /outils/{tool}
260
261
  if ((pathParts[0] === "outils" || pathParts[0] === "tools") && pathParts.length >= 2) {
261
- const { service } = detectServiceFromSlug(pathParts[1]);
262
- return this.buildGeoPage(service, "FR", "Calculateur ROI", domain, t0, locale, cleanPath);
262
+ const raw = pathParts[1].replace(/^simulateur-roi-/i, "");
263
+ const { service, remainder } = detectServiceFromSlug(raw);
264
+ return this.buildToolPage(service, remainder.replace(/-/g, " "), domain, t0, locale, cleanPath);
263
265
  }
264
266
 
265
267
  // Fallback: local geo
@@ -434,6 +436,45 @@ export class LynxSeoEngine {
434
436
  });
435
437
  }
436
438
 
439
+ private buildUseCasePage(service: LynxServiceDefinition, topic: string, domain: string, t0: number, locale = "fr", path = `cas-usage/${topic.toLowerCase().replace(/\s+/g, "-")}`): LynxResolvedPage {
440
+ const topicName = topic.charAt(0).toUpperCase() + topic.slice(1);
441
+ const title = `${service.name} pour ${topicName} — ${this.config.brandName}`;
442
+ const description = `Découvrez comment optimiser vos opérations de ${topicName} avec notre solution ${service.name}. Déploiement en 10 minutes.`;
443
+ const h1 = `${service.name} : ${topicName}`;
444
+ const directAnswer = `${this.config.brandName} (${service.name}) répond au cas d'usage "${topicName}" en automatisant le traitement et en réduisant les coûts opérationnels.`;
445
+
446
+ return this.assemblePage({
447
+ url: `${domain}/${path}`,
448
+ title,
449
+ description,
450
+ h1,
451
+ directAnswer,
452
+ service,
453
+ locale,
454
+ path,
455
+ t0,
456
+ });
457
+ }
458
+
459
+ private buildToolPage(service: LynxServiceDefinition, tool: string, domain: string, t0: number, locale = "fr", path = `outils/${tool.toLowerCase().replace(/\s+/g, "-")}`): LynxResolvedPage {
460
+ const title = `Simulateur & Calculateur ROI : ${service.name} — ${this.config.brandName}`;
461
+ const description = `Estimez vos gains de productivité et vos économies annuelles grâce à notre calculateur ROI pour ${service.name}.`;
462
+ const h1 = `Simulateur de Rentabilité & ROI : ${service.name}`;
463
+ const directAnswer = `Utilisez le simulateur ROI de ${this.config.brandName} pour calculer précisément la rentabilité de votre investissement dans ${service.name} (amortissement en moins de 30 jours).`;
464
+
465
+ return this.assemblePage({
466
+ url: `${domain}/${path}`,
467
+ title,
468
+ description,
469
+ h1,
470
+ directAnswer,
471
+ service,
472
+ locale,
473
+ path,
474
+ t0,
475
+ });
476
+ }
477
+
437
478
  private assemblePage(opts: { url: string; title: string; description: string; h1: string; directAnswer: string; service: LynxServiceDefinition; locale: string; path: string; t0: number }): LynxResolvedPage {
438
479
  const dict = getDictionary(opts.locale);
439
480
  const domain = this.config.domain.replace(/\/$/, "");