
Security News
TeamPCP Is Systematically Targeting Security Tools Across the OSS Ecosystem
TeamPCP is targeting security tools across the OSS ecosystem, turning scanners and CI pipelines into infostealers to access enterprise secrets.
@power-seo/content-analysis
Advanced tools
Yoast-style SEO content analysis engine with scoring, checks, and React components
Keyword-focused content analysis with real-time scoring, readability checks, and actionable feedback — like Yoast SEO, but as a standalone TypeScript library that works anywhere.
@power-seo/content-analysis gives you a complete Yoast-style SEO scoring pipeline for any text content. Feed it a page's title, meta description, body HTML, focus keyphrase, images, and links — get back structured good / improvement / error results for every SEO factor. Run it server-side in a CMS, client-side in a React editor, or inside a CI content quality gate. All checks are individually configurable and tree-shakeable.
Zero runtime dependencies — only
@power-seo/coreas a peer.
apps/docs/src/content/docs/packages/content-analysis.mdxREADME.mdCONTRIBUTING.md<title> tagdisabledChecks confignpm install @power-seo/content-analysis
yarn add @power-seo/content-analysis
pnpm add @power-seo/content-analysis
import { analyzeContent } from '@power-seo/content-analysis';
const result = await analyzeContent({
keyphrase: 'react seo',
title: 'How to Add SEO to React Apps',
metaDescription:
'A complete guide to adding SEO meta tags, Open Graph, and structured data in React.',
bodyHtml: '<h1>React SEO Guide</h1><p>Search engine optimization for React...</p>',
images: [{ src: '/hero.jpg', alt: 'React SEO diagram' }],
links: {
internal: ['https://example.com/blog'],
external: ['https://developers.google.com/search'],
},
});
console.log(result.score); // e.g. 82
console.log(result.results); // array of { id, status, message }
analyzeContent() runs all 13 built-in checks and returns an aggregated score (0–100) along with per-check results.
import { analyzeContent } from '@power-seo/content-analysis';
const output = await analyzeContent({
keyphrase: 'next.js seo',
title: 'Next.js SEO Best Practices',
metaDescription:
'Learn how to optimize your Next.js app for search engines with meta tags and structured data.',
bodyHtml: htmlString,
wordCount: 1250,
images: imageList,
links: { internal: internalLinks, external: externalLinks },
});
// output.score → number 0–100
// output.results → AnalysisResult[]
// output.status → 'good' | 'improvement' | 'error'
Each check is exported as a standalone function — useful when you want to run only a subset of the analysis.
import {
checkTitle,
checkMetaDescription,
checkKeyphraseUsage,
checkHeadings,
checkWordCount,
checkImages,
checkLinks,
} from '@power-seo/content-analysis';
const titleResult = checkTitle({ keyphrase: 'react seo', title: 'React SEO Guide' });
// { id: 'title-keyphrase', status: 'good', message: 'Focus keyphrase found in title.' }
const wc = checkWordCount({ wordCount: 250 });
// { id: 'word-count', status: 'improvement', message: 'Word count is below 300 words.' }
Pass config.disabledChecks to skip checks that don't apply to your content type (e.g. skip image checks on text-only pages):
import { analyzeContent } from '@power-seo/content-analysis';
const output = await analyzeContent(input, {
disabledChecks: ['image-alt', 'image-keyphrase', 'external-links'],
});
Integrate live scoring into a content editor — re-run analysis on every keystroke or debounced change:
import { useState, useEffect } from 'react';
import { analyzeContent } from '@power-seo/content-analysis';
import type { ContentAnalysisOutput } from '@power-seo/content-analysis';
function SeoScorePanel({ content }: { content: EditorContent }) {
const [analysis, setAnalysis] = useState<ContentAnalysisOutput | null>(null);
useEffect(() => {
analyzeContent({
keyphrase: content.keyphrase,
title: content.title,
metaDescription: content.description,
bodyHtml: content.html,
}).then(setAnalysis);
}, [content]);
if (!analysis) return null;
return (
<div>
<p>SEO Score: {analysis.score}/100</p>
{analysis.results.map((r) => (
<div key={r.id} className={`check-${r.status}`}>
{r.message}
</div>
))}
</div>
);
}
analyzeContent()function analyzeContent(
input: ContentAnalysisInput,
config?: AnalysisConfig,
): Promise<ContentAnalysisOutput>;
ContentAnalysisInput| Prop | Type | Description |
|---|---|---|
keyphrase | string | Focus keyphrase to analyze against |
title | string | Page <title> content |
metaDescription | string | Meta description content |
bodyHtml | string | Full body HTML string |
wordCount | number | Pre-computed word count (optional; auto-detected from bodyHtml if omitted) |
images | Array<{src: string; alt?: string}> | Images found on the page |
links | {internal: string[]; external: string[]} | Internal and external link URLs |
ContentAnalysisOutput| Field | Type | Description |
|---|---|---|
score | number | Aggregate score 0–100 |
status | AnalysisStatus | 'good' (≥70) | 'improvement' (≥40) | 'error' (<40) |
results | AnalysisResult[] | Per-check results |
AnalysisResult| Field | Type | Description |
|---|---|---|
id | CheckId | Unique check identifier |
status | AnalysisStatus | 'good' | 'improvement' | 'error' |
message | string | Human-readable feedback |
| Function | Checks For |
|---|---|
checkTitle(input) | Title presence and keyphrase inclusion |
checkMetaDescription(input) | Description presence, length, keyphrase |
checkKeyphraseUsage(input) | Density (0.5–3%) and distribution |
checkHeadings(input) | H1 existence and keyphrase in headings |
checkWordCount(input) | Minimum 300-word threshold |
checkImages(input) | Alt text presence and keyphrase in alt |
checkLinks(input) | Internal and external link presence |
| Type | Description |
|---|---|
CheckId | Union of all 13 built-in check IDs |
AnalysisConfig | { disabledChecks?: CheckId[] } |
AnalysisStatus | 'good' | 'improvement' | 'error' |
ContentAnalysisInput | Input shape for analyzeContent() |
ContentAnalysisOutput | Output shape from analyzeContent() |
All 17 packages are independently installable — use only what you need.
| Package | Install | Description |
|---|---|---|
@power-seo/core | npm i @power-seo/core | Framework-agnostic utilities, types, validators, and constants |
@power-seo/react | npm i @power-seo/react | React SEO components — meta, Open Graph, Twitter Card, breadcrumbs |
@power-seo/meta | npm i @power-seo/meta | SSR meta helpers for Next.js App Router, Remix v2, and generic SSR |
@power-seo/schema | npm i @power-seo/schema | Type-safe JSON-LD structured data — 20 builders + 18 React components |
@power-seo/content-analysis | npm i @power-seo/content-analysis | Yoast-style SEO content scoring engine with React components |
@power-seo/readability | npm i @power-seo/readability | Readability scoring — Flesch-Kincaid, Gunning Fog, Coleman-Liau, ARI |
@power-seo/preview | npm i @power-seo/preview | SERP, Open Graph, and Twitter/X Card preview generators |
@power-seo/sitemap | npm i @power-seo/sitemap | XML sitemap generation, streaming, index splitting, and validation |
@power-seo/redirects | npm i @power-seo/redirects | Redirect engine with Next.js, Remix, and Express adapters |
@power-seo/links | npm i @power-seo/links | Link graph analysis — orphan detection, suggestions, equity scoring |
@power-seo/audit | npm i @power-seo/audit | Full SEO audit engine — meta, content, structure, performance rules |
@power-seo/images | npm i @power-seo/images | Image SEO — alt text, lazy loading, format analysis, image sitemaps |
@power-seo/ai | npm i @power-seo/ai | LLM-agnostic AI prompt templates and parsers for SEO tasks |
@power-seo/analytics | npm i @power-seo/analytics | Merge GSC + audit data, trend analysis, ranking insights, dashboard |
@power-seo/search-console | npm i @power-seo/search-console | Google Search Console API — OAuth2, service account, URL inspection |
@power-seo/integrations | npm i @power-seo/integrations | Semrush and Ahrefs API clients with rate limiting and pagination |
@power-seo/tracking | npm i @power-seo/tracking | GA4, Clarity, PostHog, Plausible, Fathom — scripts + consent management |
CyberCraft Bangladesh is a Bangladesh-based enterprise-grade software engineering company specializing in ERP system development, AI-powered SaaS and business applications, full-stack SEO services, custom website development, and scalable eCommerce platforms. We design and develop intelligent, automation-driven SaaS and enterprise solutions that help startups, SMEs, NGOs, educational institutes, and large organizations streamline operations, enhance digital visibility, and accelerate growth through modern cloud-native technologies.
| Website | ccbd.dev |
| GitHub | github.com/cybercraftbd |
| npm Organization | npmjs.com/org/power-seo |
| info@ccbd.dev |
© 2026 CyberCraft Bangladesh · Released under the MIT License
FAQs
Yoast-style SEO content analysis engine with scoring, checks, and React components
The npm package @power-seo/content-analysis receives a total of 6 weekly downloads. As such, @power-seo/content-analysis popularity was classified as not popular.
We found that @power-seo/content-analysis demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
TeamPCP is targeting security tools across the OSS ecosystem, turning scanners and CI pipelines into infostealers to access enterprise secrets.

Security News
TypeScript 6.0 introduces new standard APIs, modern default settings, and deprecations as it prepares projects for the upcoming TypeScript 7.0 release.

Security News
/Research
Newly published Trivy Docker images (0.69.4, 0.69.5, and 0.69.6) were found to contain infostealer IOCs and were pushed to Docker Hub without corresponding GitHub releases.