@lynxflow/seo-engine 1.8.0 → 1.8.2
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/connectors/wordpress/lynxseo-admin-app.js +272 -192
- package/connectors/wordpress/lynxseo-connector.zip +0 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +350 -0
- package/dist/index.mjs +350 -0
- package/dist/power-words-psychology.d.ts +35 -0
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/power-words-psychology.ts +260 -0
package/dist/index.d.ts
CHANGED
|
@@ -64,6 +64,7 @@ export * from "./team-rbac";
|
|
|
64
64
|
export * from "./real-reviews-sync";
|
|
65
65
|
export * from "./google-business-profile";
|
|
66
66
|
export * from "./video-youtube-analyzer";
|
|
67
|
+
export * from "./power-words-psychology";
|
|
67
68
|
import { LynxSeoEngine, type EngineConfig } from "./engine";
|
|
68
69
|
import { ApiKeyGuardian } from "./auth-key";
|
|
69
70
|
import { TokenQuotaManager } from "./token-quota-manager";
|
package/dist/index.js
CHANGED
|
@@ -71,12 +71,14 @@ __export(exports_src, {
|
|
|
71
71
|
RealReviewsSyncEngine: () => RealReviewsSyncEngine,
|
|
72
72
|
RankMathParityEngine: () => RankMathParityEngine,
|
|
73
73
|
PseoMatrixEngine: () => PseoMatrixEngine,
|
|
74
|
+
PowerWordsPsychologyEngine: () => PowerWordsPsychologyEngine,
|
|
74
75
|
PSEO_AGENT_SYSTEM_PROMPT: () => PSEO_AGENT_SYSTEM_PROMPT,
|
|
75
76
|
OgImageGenerator: () => OgImageGenerator,
|
|
76
77
|
NGramDensityAnalyzer: () => NGramDensityAnalyzer,
|
|
77
78
|
McpSeoServerHub: () => McpSeoServerHub,
|
|
78
79
|
MasterMarketingEngine: () => MasterMarketingEngine,
|
|
79
80
|
MULTILINGUAL_STOP_WORDS: () => MULTILINGUAL_STOP_WORDS,
|
|
81
|
+
MULTILINGUAL_POWER_WORDS: () => MULTILINGUAL_POWER_WORDS,
|
|
80
82
|
MULTILINGUAL_DISCLAIMERS: () => MULTILINGUAL_DISCLAIMERS,
|
|
81
83
|
MULTILINGUAL_BANNED_DISPARAGING_WORDS: () => MULTILINGUAL_BANNED_DISPARAGING_WORDS,
|
|
82
84
|
LynxSeoEngine: () => LynxSeoEngine,
|
|
@@ -7346,6 +7348,354 @@ class VideoYouTubeAnalyzer {
|
|
|
7346
7348
|
`.trim();
|
|
7347
7349
|
}
|
|
7348
7350
|
}
|
|
7351
|
+
// src/power-words-psychology.ts
|
|
7352
|
+
var MULTILINGUAL_POWER_WORDS = {
|
|
7353
|
+
fr: {
|
|
7354
|
+
authority: [
|
|
7355
|
+
"officiel",
|
|
7356
|
+
"guide",
|
|
7357
|
+
"expert",
|
|
7358
|
+
"complet",
|
|
7359
|
+
"certifié",
|
|
7360
|
+
"ultime",
|
|
7361
|
+
"meilleur",
|
|
7362
|
+
"meilleurs",
|
|
7363
|
+
"comparatif",
|
|
7364
|
+
"maîtriser",
|
|
7365
|
+
"spécialiste",
|
|
7366
|
+
"leader",
|
|
7367
|
+
"professionnel",
|
|
7368
|
+
"authentique",
|
|
7369
|
+
"infaillible",
|
|
7370
|
+
"reconnu",
|
|
7371
|
+
"démontré"
|
|
7372
|
+
],
|
|
7373
|
+
urgency: [
|
|
7374
|
+
"rapide",
|
|
7375
|
+
"instantané",
|
|
7376
|
+
"maintenant",
|
|
7377
|
+
"immédiat",
|
|
7378
|
+
"express",
|
|
7379
|
+
"2026",
|
|
7380
|
+
"dernière minute",
|
|
7381
|
+
"urgent",
|
|
7382
|
+
"dépêchez-vous",
|
|
7383
|
+
"en 5 min",
|
|
7384
|
+
"en 10 min",
|
|
7385
|
+
"aujourd'hui",
|
|
7386
|
+
"débloquer"
|
|
7387
|
+
],
|
|
7388
|
+
value: [
|
|
7389
|
+
"gratuit",
|
|
7390
|
+
"économique",
|
|
7391
|
+
"rentable",
|
|
7392
|
+
"offert",
|
|
7393
|
+
"sans engagement",
|
|
7394
|
+
"garanti",
|
|
7395
|
+
"facile",
|
|
7396
|
+
"clé en main",
|
|
7397
|
+
"rentabilité",
|
|
7398
|
+
"gain",
|
|
7399
|
+
"économisez",
|
|
7400
|
+
"inclus",
|
|
7401
|
+
"accessible",
|
|
7402
|
+
"inédit"
|
|
7403
|
+
],
|
|
7404
|
+
curiosity: [
|
|
7405
|
+
"exclusif",
|
|
7406
|
+
"secret",
|
|
7407
|
+
"astuces",
|
|
7408
|
+
"révélé",
|
|
7409
|
+
"inédit",
|
|
7410
|
+
"top",
|
|
7411
|
+
"méthode",
|
|
7412
|
+
"pourquoi",
|
|
7413
|
+
"comment",
|
|
7414
|
+
"découvrir",
|
|
7415
|
+
"choc",
|
|
7416
|
+
"incontournable",
|
|
7417
|
+
"mystère",
|
|
7418
|
+
"incroyable"
|
|
7419
|
+
],
|
|
7420
|
+
sentimentPositive: [
|
|
7421
|
+
"parfait",
|
|
7422
|
+
"incroyable",
|
|
7423
|
+
"magnifique",
|
|
7424
|
+
"puissant",
|
|
7425
|
+
"réussi",
|
|
7426
|
+
"génial",
|
|
7427
|
+
"exceptionnel",
|
|
7428
|
+
"facile",
|
|
7429
|
+
"meilleur",
|
|
7430
|
+
"succès",
|
|
7431
|
+
"brillant",
|
|
7432
|
+
"splendide",
|
|
7433
|
+
"radieux",
|
|
7434
|
+
"magique",
|
|
7435
|
+
"sublime"
|
|
7436
|
+
],
|
|
7437
|
+
sentimentNegative: [
|
|
7438
|
+
"erreur",
|
|
7439
|
+
"piège",
|
|
7440
|
+
"danger",
|
|
7441
|
+
"éviter",
|
|
7442
|
+
"pire",
|
|
7443
|
+
"arnaque",
|
|
7444
|
+
"catastrophe",
|
|
7445
|
+
"risqué",
|
|
7446
|
+
"menace",
|
|
7447
|
+
"perte"
|
|
7448
|
+
]
|
|
7449
|
+
},
|
|
7450
|
+
en: {
|
|
7451
|
+
authority: [
|
|
7452
|
+
"ultimate",
|
|
7453
|
+
"complete",
|
|
7454
|
+
"definitive",
|
|
7455
|
+
"guide",
|
|
7456
|
+
"expert",
|
|
7457
|
+
"official",
|
|
7458
|
+
"proven",
|
|
7459
|
+
"master",
|
|
7460
|
+
"certified",
|
|
7461
|
+
"best",
|
|
7462
|
+
"top",
|
|
7463
|
+
"authority",
|
|
7464
|
+
"case study",
|
|
7465
|
+
"benchmark",
|
|
7466
|
+
"professional"
|
|
7467
|
+
],
|
|
7468
|
+
urgency: [
|
|
7469
|
+
"instant",
|
|
7470
|
+
"fast",
|
|
7471
|
+
"quick",
|
|
7472
|
+
"now",
|
|
7473
|
+
"today",
|
|
7474
|
+
"2026",
|
|
7475
|
+
"deadline",
|
|
7476
|
+
"last chance",
|
|
7477
|
+
"step-by-step",
|
|
7478
|
+
"overnight",
|
|
7479
|
+
"rapid",
|
|
7480
|
+
"minutes"
|
|
7481
|
+
],
|
|
7482
|
+
value: [
|
|
7483
|
+
"free",
|
|
7484
|
+
"affordable",
|
|
7485
|
+
"guaranteed",
|
|
7486
|
+
"save",
|
|
7487
|
+
"profit",
|
|
7488
|
+
"profitable",
|
|
7489
|
+
"bonus",
|
|
7490
|
+
"cheap",
|
|
7491
|
+
"priceless",
|
|
7492
|
+
"effortless",
|
|
7493
|
+
"lifetime",
|
|
7494
|
+
"budget"
|
|
7495
|
+
],
|
|
7496
|
+
curiosity: [
|
|
7497
|
+
"secret",
|
|
7498
|
+
"secrets",
|
|
7499
|
+
"exclusive",
|
|
7500
|
+
"revealed",
|
|
7501
|
+
"hacks",
|
|
7502
|
+
"tricks",
|
|
7503
|
+
"hacks",
|
|
7504
|
+
"behind the scenes",
|
|
7505
|
+
"uncovered",
|
|
7506
|
+
"surprising",
|
|
7507
|
+
"insider",
|
|
7508
|
+
"confidential",
|
|
7509
|
+
"jaw-dropping"
|
|
7510
|
+
],
|
|
7511
|
+
sentimentPositive: [
|
|
7512
|
+
"amazing",
|
|
7513
|
+
"awesome",
|
|
7514
|
+
"brilliant",
|
|
7515
|
+
"epic",
|
|
7516
|
+
"legendary",
|
|
7517
|
+
"superb",
|
|
7518
|
+
"stunning",
|
|
7519
|
+
"perfect",
|
|
7520
|
+
"powerful",
|
|
7521
|
+
"triumph",
|
|
7522
|
+
"miracle",
|
|
7523
|
+
"flawless"
|
|
7524
|
+
],
|
|
7525
|
+
sentimentNegative: [
|
|
7526
|
+
"mistake",
|
|
7527
|
+
"warning",
|
|
7528
|
+
"deadly",
|
|
7529
|
+
"worst",
|
|
7530
|
+
"danger",
|
|
7531
|
+
"toxic",
|
|
7532
|
+
"destroy",
|
|
7533
|
+
"ruin",
|
|
7534
|
+
"scam",
|
|
7535
|
+
"nightmare"
|
|
7536
|
+
]
|
|
7537
|
+
},
|
|
7538
|
+
es: {
|
|
7539
|
+
authority: ["guía", "completo", "definitivo", "experto", "oficial", "mejor", "mejores", "certificado", "profesional", "maestro"],
|
|
7540
|
+
urgency: ["rápido", "ahora", "inmediato", "2026", "hoy", "urgente", "en minutos", "paso a paso"],
|
|
7541
|
+
value: ["gratis", "gratuito", "económico", "garantizado", "ahorra", "rentable", "oferta", "sin riesgo"],
|
|
7542
|
+
curiosity: ["secreto", "exclusivo", "revelado", "trucos", "increíble", "top", "método", "descubre"],
|
|
7543
|
+
sentimentPositive: ["increíble", "fantástico", "perfecto", "excelente", "maravilloso", "potente", "éxito"],
|
|
7544
|
+
sentimentNegative: ["error", "peligro", "evitar", "peor", "estafa", "trampa", "arruinar"]
|
|
7545
|
+
},
|
|
7546
|
+
de: {
|
|
7547
|
+
authority: ["leitfaden", "komplett", "experte", "offiziell", "beste", "bester", "zertifiziert", "vergleich", "meister"],
|
|
7548
|
+
urgency: ["schnell", "jetzt", "sofort", "2026", "heute", "schritt-für-schritt", "in 5 minuten"],
|
|
7549
|
+
value: ["kostenlos", "gratis", "sparen", "garantiert", "günstig", "rendite", "ohne risiko"],
|
|
7550
|
+
curiosity: ["geheim", "exklusiv", "tipps", "tricks", "enthüllt", "top", "warum", "entdecken"],
|
|
7551
|
+
sentimentPositive: ["perfekt", "genial", "hervorragend", "leistungsstark", "erfolg", "wunderbar"],
|
|
7552
|
+
sentimentNegative: ["fehler", "gefahr", "vermeiden", "schlimmste", "falle", "risiko"]
|
|
7553
|
+
},
|
|
7554
|
+
it: {
|
|
7555
|
+
authority: ["guida", "completa", "esperto", "ufficiale", "migliore", "migliori", "certificato", "professionale"],
|
|
7556
|
+
urgency: ["veloce", "ora", "subito", "2026", "oggi", "passo dopo passo", "in pochi minuti"],
|
|
7557
|
+
value: ["gratis", "gratuito", "economico", "garantito", "risparmio", "conveniente", "senza rischi"],
|
|
7558
|
+
curiosity: ["segreto", "esclusivo", "trucchi", "rivelato", "top", "metodo", "scopri"],
|
|
7559
|
+
sentimentPositive: ["perfetto", "fantastico", "eccellente", "potente", "successo", "incredibile"],
|
|
7560
|
+
sentimentNegative: ["errore", "pericolo", "evitare", "peggiore", "truffa", "trappola"]
|
|
7561
|
+
},
|
|
7562
|
+
nl: {
|
|
7563
|
+
authority: ["gids", "compleet", "expert", "officieel", "beste", "gecertificeerd", "professioneel"],
|
|
7564
|
+
urgency: ["snel", "nu", "direct", "2026", "vandaag", "stap voor stap"],
|
|
7565
|
+
value: ["gratis", "goedkoop", "gegarandeerd", "bespaar", "rendement", "zonder risico"],
|
|
7566
|
+
curiosity: ["geheim", "exclusief", "tips", "onthuld", "top", "ontdek"],
|
|
7567
|
+
sentimentPositive: ["perfect", "geweldig", "uitstekend", "krachtig", "succes"],
|
|
7568
|
+
sentimentNegative: ["fout", "gevaar", "vermijden", "slechtste", "valkuil"]
|
|
7569
|
+
},
|
|
7570
|
+
pt: {
|
|
7571
|
+
authority: ["guia", "completo", "definitivo", "especialista", "oficial", "melhor", "melhores", "certificado"],
|
|
7572
|
+
urgency: ["rápido", "agora", "imediato", "2026", "hoje", "passo a passo"],
|
|
7573
|
+
value: ["grátis", "gratuito", "econômico", "garantido", "economize", "sem risco"],
|
|
7574
|
+
curiosity: ["segredo", "exclusivo", "revelado", "truques", "top", "descubra"],
|
|
7575
|
+
sentimentPositive: ["incrível", "perfeito", "excelente", "poderoso", "sucesso"],
|
|
7576
|
+
sentimentNegative: ["erro", "perigo", "evitar", "pior", "golpe"]
|
|
7577
|
+
}
|
|
7578
|
+
};
|
|
7579
|
+
|
|
7580
|
+
class PowerWordsPsychologyEngine {
|
|
7581
|
+
static analyzeTitlePsychology(title, lang = "fr") {
|
|
7582
|
+
const cleanTitle = title.toLowerCase();
|
|
7583
|
+
const dict = MULTILINGUAL_POWER_WORDS[lang] || MULTILINGUAL_POWER_WORDS.fr;
|
|
7584
|
+
const detectedPowerWords = [];
|
|
7585
|
+
let score = 30;
|
|
7586
|
+
const hasAuthority = dict.authority.some((w) => {
|
|
7587
|
+
if (cleanTitle.includes(w)) {
|
|
7588
|
+
detectedPowerWords.push(w);
|
|
7589
|
+
return true;
|
|
7590
|
+
}
|
|
7591
|
+
return false;
|
|
7592
|
+
});
|
|
7593
|
+
if (hasAuthority)
|
|
7594
|
+
score += 20;
|
|
7595
|
+
const hasUrgency = dict.urgency.some((w) => {
|
|
7596
|
+
if (cleanTitle.includes(w)) {
|
|
7597
|
+
detectedPowerWords.push(w);
|
|
7598
|
+
return true;
|
|
7599
|
+
}
|
|
7600
|
+
return false;
|
|
7601
|
+
});
|
|
7602
|
+
if (hasUrgency)
|
|
7603
|
+
score += 15;
|
|
7604
|
+
const hasValue = dict.value.some((w) => {
|
|
7605
|
+
if (cleanTitle.includes(w)) {
|
|
7606
|
+
detectedPowerWords.push(w);
|
|
7607
|
+
return true;
|
|
7608
|
+
}
|
|
7609
|
+
return false;
|
|
7610
|
+
});
|
|
7611
|
+
if (hasValue)
|
|
7612
|
+
score += 15;
|
|
7613
|
+
const hasCuriosity = dict.curiosity.some((w) => {
|
|
7614
|
+
if (cleanTitle.includes(w)) {
|
|
7615
|
+
detectedPowerWords.push(w);
|
|
7616
|
+
return true;
|
|
7617
|
+
}
|
|
7618
|
+
return false;
|
|
7619
|
+
});
|
|
7620
|
+
if (hasCuriosity)
|
|
7621
|
+
score += 10;
|
|
7622
|
+
const hasNumber = /\d+/.test(title);
|
|
7623
|
+
if (hasNumber)
|
|
7624
|
+
score += 10;
|
|
7625
|
+
const currentYear = new Date().getFullYear().toString();
|
|
7626
|
+
const hasYear = title.includes(currentYear) || title.includes("2026");
|
|
7627
|
+
let sentiment = "neutre";
|
|
7628
|
+
const hasPositive = dict.sentimentPositive.some((w) => cleanTitle.includes(w));
|
|
7629
|
+
const hasNegative = dict.sentimentNegative.some((w) => cleanTitle.includes(w));
|
|
7630
|
+
if (hasPositive) {
|
|
7631
|
+
sentiment = "positif";
|
|
7632
|
+
} else if (hasNegative) {
|
|
7633
|
+
sentiment = "negatif";
|
|
7634
|
+
}
|
|
7635
|
+
const recommendations = [];
|
|
7636
|
+
if (!detectedPowerWords.length) {
|
|
7637
|
+
recommendations.push("Ajoutez au moins un mot d'impact (*Power Word*) comme 'Guide Complet', 'Meilleur' ou 'Ultime'.");
|
|
7638
|
+
}
|
|
7639
|
+
if (!hasNumber) {
|
|
7640
|
+
recommendations.push("Intégrez un chiffre ou l'année en cours (ex: '7 astuces', '2026') pour booster le taux de clic de +36%.");
|
|
7641
|
+
}
|
|
7642
|
+
if (title.length < 35) {
|
|
7643
|
+
recommendations.push("Titre trop court : enrichissez votre promesse de valeur pour occuper les 600px de la SERP Google.");
|
|
7644
|
+
}
|
|
7645
|
+
const suggestedTitles = [];
|
|
7646
|
+
if (lang === "fr") {
|
|
7647
|
+
suggestedTitles.push(`${title} : Guide Ultime 2026`);
|
|
7648
|
+
suggestedTitles.push(`Les 5 Meilleurs ${title} (Comparatif & Avis)`);
|
|
7649
|
+
suggestedTitles.push(`${title} — Solution Rapide & Complète`);
|
|
7650
|
+
} else {
|
|
7651
|
+
suggestedTitles.push(`${title}: The Ultimate 2026 Guide`);
|
|
7652
|
+
suggestedTitles.push(`Top 5 Best ${title} (Full Review & Comparison)`);
|
|
7653
|
+
suggestedTitles.push(`${title} — Proven & Fast Method`);
|
|
7654
|
+
}
|
|
7655
|
+
return {
|
|
7656
|
+
score: Math.min(100, score),
|
|
7657
|
+
powerWordsDetected: Array.from(new Set(detectedPowerWords)),
|
|
7658
|
+
sentiment,
|
|
7659
|
+
hasNumber,
|
|
7660
|
+
hasYear,
|
|
7661
|
+
hasCuriosityTrigger: hasCuriosity,
|
|
7662
|
+
hasUrgencyTrigger: hasUrgency,
|
|
7663
|
+
hasAuthorityTrigger: hasAuthority,
|
|
7664
|
+
recommendations,
|
|
7665
|
+
suggestedTitles
|
|
7666
|
+
};
|
|
7667
|
+
}
|
|
7668
|
+
static enrichProgrammaticTitle(service, locationOrCompetitor, type = "geo", lang = "fr") {
|
|
7669
|
+
const year = "2026";
|
|
7670
|
+
if (lang === "fr") {
|
|
7671
|
+
if (type === "geo") {
|
|
7672
|
+
return `Meilleur ${service} à ${locationOrCompetitor} : Guide Complet ${year}`;
|
|
7673
|
+
} else if (type === "vs") {
|
|
7674
|
+
return `${service} vs ${locationOrCompetitor} : Le Comparatif Ultime & Avis`;
|
|
7675
|
+
} else {
|
|
7676
|
+
return `Top 5 Alternatives à ${locationOrCompetitor} : Comparatif ${year}`;
|
|
7677
|
+
}
|
|
7678
|
+
} else if (lang === "en") {
|
|
7679
|
+
if (type === "geo") {
|
|
7680
|
+
return `Best ${service} in ${locationOrCompetitor}: Ultimate ${year} Guide`;
|
|
7681
|
+
} else if (type === "vs") {
|
|
7682
|
+
return `${service} vs ${locationOrCompetitor}: Definitive Comparison`;
|
|
7683
|
+
} else {
|
|
7684
|
+
return `Top 5 Alternatives to ${locationOrCompetitor} (${year} Review)`;
|
|
7685
|
+
}
|
|
7686
|
+
} else if (lang === "es") {
|
|
7687
|
+
if (type === "geo") {
|
|
7688
|
+
return `Mejor ${service} en ${locationOrCompetitor}: Guía Completa ${year}`;
|
|
7689
|
+
} else {
|
|
7690
|
+
return `${service} vs ${locationOrCompetitor}: Comparativa Definitiva`;
|
|
7691
|
+
}
|
|
7692
|
+
} else if (lang === "de") {
|
|
7693
|
+
return `Beste ${service} in ${locationOrCompetitor}: Kompletter Leitfaden ${year}`;
|
|
7694
|
+
} else {
|
|
7695
|
+
return `${service} in ${locationOrCompetitor} (${year})`;
|
|
7696
|
+
}
|
|
7697
|
+
}
|
|
7698
|
+
}
|
|
7349
7699
|
// src/index.ts
|
|
7350
7700
|
function createLynxSeoEngine(config) {
|
|
7351
7701
|
return new LynxSeoEngine(config);
|