@lynxflow/seo-engine 2.3.0 → 2.5.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/README.md +1 -1
- package/dist/competitor-gap-blueprint.d.ts +34 -0
- package/dist/engagement-hook-analyzer.d.ts +50 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +668 -0
- package/dist/index.mjs +668 -0
- package/dist/keyword-density-guard.d.ts +28 -0
- package/dist/search-intent-classifier.d.ts +28 -0
- package/dist/seo-opportunity-prioritizer.d.ts +37 -0
- package/dist/trust-signals-extractor.d.ts +28 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ High-Performance Universal Programmatic SEO & Structured Data Engine for Modern
|
|
|
4
4
|
|
|
5
5
|
[](https://www.typescriptlang.org/)
|
|
6
6
|
[](LICENSE)
|
|
7
|
-
[](https://www.npmjs.com/package/@lynxflow/seo-engine)
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🥊 Competitor Gap Blueprint & "Beat Them" Content Architect
|
|
3
|
+
* Ported & optimized from Python competitor_gap_analyzer.py.
|
|
4
|
+
* Identifies thin sections, unsupported claims, missing perspectives, and outdated information in competitor content.
|
|
5
|
+
*/
|
|
6
|
+
export type ContentGapType = "thin_section" | "unsupported_claim" | "missing_perspective" | "outdated_info" | "structural_gap";
|
|
7
|
+
export interface CompetitorContentGap {
|
|
8
|
+
gapType: ContentGapType;
|
|
9
|
+
description: string;
|
|
10
|
+
locationHeading: string;
|
|
11
|
+
competitorUrl: string;
|
|
12
|
+
priority: "high" | "medium" | "low";
|
|
13
|
+
counterOpportunity: string;
|
|
14
|
+
}
|
|
15
|
+
export interface CompetitorArticleInput {
|
|
16
|
+
url: string;
|
|
17
|
+
title: string;
|
|
18
|
+
wordCount: number;
|
|
19
|
+
headings: string[];
|
|
20
|
+
contentSnippet?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface BeatThemBlueprint {
|
|
23
|
+
mustFillGaps: CompetitorContentGap[];
|
|
24
|
+
expectedCommonHeadings: string[];
|
|
25
|
+
differentiationAngles: string[];
|
|
26
|
+
outdatedToUpdate: string[];
|
|
27
|
+
winningOutlineRecommendation: string[];
|
|
28
|
+
}
|
|
29
|
+
export declare class CompetitorGapBlueprintEngine {
|
|
30
|
+
/**
|
|
31
|
+
* Analyzes competitors and builds an actionable "Beat Them" blueprint.
|
|
32
|
+
*/
|
|
33
|
+
static buildBlueprint(targetTopic: string, userWordCount: number, competitors: CompetitorArticleInput[]): BeatThemBlueprint;
|
|
34
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🪝 Engagement Hook & Viral Reading Rhythm Analyzer
|
|
3
|
+
* Ported & optimized from Python engagement_analyzer.py.
|
|
4
|
+
* Evaluates the 4 viral reading criteria: Hook quality, sentence length variety, contextual CTA distribution, and paragraph breathability.
|
|
5
|
+
*/
|
|
6
|
+
export interface HookEvaluation {
|
|
7
|
+
openingSentence: string;
|
|
8
|
+
isStrongHook: boolean;
|
|
9
|
+
hookType: "question" | "statistic" | "quote" | "thought_experiment" | "concrete_story" | "generic_bad_opener";
|
|
10
|
+
feedback: string;
|
|
11
|
+
suggestedHookUpgrade?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface RhythmEvaluation {
|
|
14
|
+
sentenceCount: number;
|
|
15
|
+
averageWords: number;
|
|
16
|
+
standardDeviation: number;
|
|
17
|
+
hasVariedRhythm: boolean;
|
|
18
|
+
score: number;
|
|
19
|
+
}
|
|
20
|
+
export interface CtaDistributionEvaluation {
|
|
21
|
+
totalCtasDetected: number;
|
|
22
|
+
isDistributedAcrossArticle: boolean;
|
|
23
|
+
hasAboveTheFoldCta: boolean;
|
|
24
|
+
hasMidArticleCta: boolean;
|
|
25
|
+
hasBottomCta: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface ParagraphDensityEvaluation {
|
|
28
|
+
totalParagraphs: number;
|
|
29
|
+
longParagraphsCount: number;
|
|
30
|
+
isMobileBreathable: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface ArticleEngagementReport {
|
|
33
|
+
engagementScore: number;
|
|
34
|
+
allPassed: boolean;
|
|
35
|
+
passedCount: number;
|
|
36
|
+
hook: HookEvaluation;
|
|
37
|
+
rhythm: RhythmEvaluation;
|
|
38
|
+
ctas: CtaDistributionEvaluation;
|
|
39
|
+
paragraphs: ParagraphDensityEvaluation;
|
|
40
|
+
actionableFixes: string[];
|
|
41
|
+
}
|
|
42
|
+
export declare class EngagementHookAnalyzer {
|
|
43
|
+
private static readonly GENERIC_BAD_OPENERS;
|
|
44
|
+
private static readonly GOOD_HOOK_STARTERS;
|
|
45
|
+
private static readonly CTA_REGEX;
|
|
46
|
+
/**
|
|
47
|
+
* Analyzes an article's engagement mechanics.
|
|
48
|
+
*/
|
|
49
|
+
static analyze(content: string): ArticleEngagementReport;
|
|
50
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -119,6 +119,12 @@ import { SerpLengthComparator } from "./serp-length-comparator";
|
|
|
119
119
|
import { PassiveVoiceComplexityAnalyzer } from "./passive-voice-complexity";
|
|
120
120
|
import { AboveFoldCroAuditor } from "./above-fold-cro-auditor";
|
|
121
121
|
import { ContextTemplatesGenerator } from "./context-templates-generator";
|
|
122
|
+
import { SearchIntentClassifier } from "./search-intent-classifier";
|
|
123
|
+
import { SeoOpportunityPrioritizer } from "./seo-opportunity-prioritizer";
|
|
124
|
+
import { TrustSignalsExtractor } from "./trust-signals-extractor";
|
|
125
|
+
import { CompetitorGapBlueprintEngine } from "./competitor-gap-blueprint";
|
|
126
|
+
import { EngagementHookAnalyzer } from "./engagement-hook-analyzer";
|
|
127
|
+
import { KeywordDensityGuard } from "./keyword-density-guard";
|
|
122
128
|
export declare function createLynxSeoEngine(config: EngineConfig): LynxSeoEngine;
|
|
123
129
|
export declare const LynxSeo: {
|
|
124
130
|
createEngine: typeof createLynxSeoEngine;
|
|
@@ -135,6 +141,12 @@ export declare const LynxSeo: {
|
|
|
135
141
|
readabilityComplexity: typeof PassiveVoiceComplexityAnalyzer;
|
|
136
142
|
aboveFoldCro: typeof AboveFoldCroAuditor;
|
|
137
143
|
contextTemplates: typeof ContextTemplatesGenerator;
|
|
144
|
+
searchIntent: typeof SearchIntentClassifier;
|
|
145
|
+
opportunityPrioritizer: typeof SeoOpportunityPrioritizer;
|
|
146
|
+
trustSignals: typeof TrustSignalsExtractor;
|
|
147
|
+
competitorGap: typeof CompetitorGapBlueprintEngine;
|
|
148
|
+
engagementHook: typeof EngagementHookAnalyzer;
|
|
149
|
+
keywordDensity: typeof KeywordDensityGuard;
|
|
138
150
|
inspectMeta: typeof SiteAuditor.inspectMeta;
|
|
139
151
|
crawlDomain: typeof DeepCrawlerAuditor.crawlAndAuditDomain;
|
|
140
152
|
inspectHtmlSnapshot: typeof DeepCrawlerAuditor.inspectHtmlSnapshot;
|
|
@@ -176,6 +188,12 @@ export declare const LynxSeo: {
|
|
|
176
188
|
marketingSkills: typeof MarketingSkillsEngine;
|
|
177
189
|
regenerationTracker: typeof PageRegenerationTracker;
|
|
178
190
|
};
|
|
191
|
+
export * from "./competitor-gap-blueprint";
|
|
192
|
+
export * from "./engagement-hook-analyzer";
|
|
193
|
+
export * from "./keyword-density-guard";
|
|
194
|
+
export * from "./search-intent-classifier";
|
|
195
|
+
export * from "./seo-opportunity-prioritizer";
|
|
196
|
+
export * from "./trust-signals-extractor";
|
|
179
197
|
export * from "./humanity-ai-scrubber";
|
|
180
198
|
export * from "./serp-length-comparator";
|
|
181
199
|
export * from "./passive-voice-complexity";
|