npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

seo-checker-pro

v1.0.0

Published

A professional website SEO analyzer and audit tool supporting CLI, HTML/PDF/JSON exports, bulk analysis, comparison mode, and more.

Readme

seo-checker-pro

🚀 seo-checker-pro is a professional, production-ready website SEO auditor and analysis tool for Node.js. It allows developers to crawl websites, calculate overall SEO scores, inspect security certificates, test page performance speed, analyze readability scores, check for broken links, and generate premium PDF, HTML, and JSON reports.

Available as both a JavaScript API and a CLI Tool!


🌟 Key Features

  • Core SEO Analysis: Checks Page Title, Meta Description, Meta Keywords, Canonical URL alignment, Robots Meta, Open Graph (OG), Twitter Cards, JSON-LD Structured Data, and mobile-friendly viewport tags.
  • Content Audit: Estimates word counts, paragraph statistics, heading structure consistency (H1-H6, checking for missing or duplicate H1 tags), keyword density, and calculates Flesch Reading Ease scores.
  • Image SEO: Counts images, flags missing alt attributes, checks for modern optimized formats (WebP, AVIF, SVG), checks for responsive attributes (srcset), checks lazy-loading, and generates an Image SEO subscore.
  • Hyperlink Auditor: Counts internal/external URLs, identifies nofollow rel targets, and verifies link health by performing asynchronous HTTP status requests (with smart HEAD/GET fallbacks).
  • Performance Metrics: Measures page load speed, checks HTML file sizes, counts CSS/JS external files and inline tags, identifies render-blocking resources, and warns of CLS (layout shift) risks.
  • Security Assessment: Verifies HTTPS protocol, retrieves TLS/SSL peer certificate expiration details and authority issuers using Node's native tls layer, and checks for critical response security headers (HSTS, CSP, X-Frame-Options, etc.).
  • Robust Export System: Exports audits into clean, structured raw JSON files, premium responsive HTML report pages, or multi-page PDF documents.
  • Advanced Capabilities:
    • Bulk Mode: Audit hundreds of URLs in parallel with controlled concurrency.
    • Comparison Mode: Compare two websites side-by-side to highlight who scores higher, loads faster, and has better optimizations.
    • Robots.txt & Sitemap Integration: Analyzes rules and detects sitemaps automatically.

📦 Installation

Install globally to use the CLI tool anywhere:

npm install -g seo-checker-pro

Or install locally as a dependency in your Node project:

npm install seo-checker-pro

💻 CLI Usage

You can run the auditor instantly using npx without installation:

npx seo-checker-pro https://example.com

Options & Flags

| Flag | Description | Example | | :--- | :--- | :--- | | -c, --compare | Compares two URLs side-by-side | npx seo-checker-pro https://a.com https://b.com -c | | -b, --bulk <file> | Runs bulk audit from a text file (one URL per line) | npx seo-checker-pro --bulk urls.txt | | --json [path] | Exports report as JSON (defaults to seo-report.json) | npx seo-checker-pro https://example.com --json | | --html [path] | Exports report as a styled HTML page (defaults to seo-report.html) | npx seo-checker-pro https://example.com --html | | --pdf [path] | Exports report as a PDF document (defaults to seo-report.pdf) | npx seo-checker-pro https://example.com --pdf | | --no-broken | Skips broken link status verification (faster runs) | npx seo-checker-pro https://example.com --no-broken | | --concurrency <num> | Max parallel requests during bulk operations (default: 3) | npx seo-checker-pro --bulk urls.txt --concurrency 5 |


🛠️ JavaScript API

1. Analyze a Single Website

const { analyzeSEO, exportToHtml, exportToPdf } = require("seo-checker-pro");

async function runAudit() {
  try {
    const report = await analyzeSEO("https://example.com", {
      checkBrokenLinks: true,      // Set to false to bypass pinging links
      maxLinksToCheck: 20,         // Limits tested hyperlinks to avoid timeouts
      timeout: 8000,               // Connection timeout in ms
      headers: {
        "Custom-Header": "audit-client"
      }
    });

    console.log("Overall Score:", report.overallScore);
    console.log("Strengths:", report.strengths);
    console.log("Issues:", report.issues);

    // Export reports to disk
    exportToHtml(report, "./reports/audit.html");
    await exportToPdf(report, "./reports/audit.pdf");

  } catch (error) {
    console.error("Audit failed:", error.message);
  }
}

runAudit();

2. Website Comparison

Compare two websites side-by-side to review their metrics:

const { compareWebsites } = require("seo-checker-pro");

async function runComparison() {
  const comparison = await compareWebsites("https://site-a.com", "https://site-b.com");
  console.log("Comparison Results:", comparison.comparison);
}

runComparison();

3. Bulk Analysis

const { bulkAnalyze } = require("seo-checker-pro");

async function runBulk() {
  const urls = [
    "https://example.com",
    "https://google.com",
    "https://github.com"
  ];
  
  const results = await bulkAnalyze(urls, { concurrency: 2 });
  results.forEach(res => {
    if (res.success) {
      console.log(`${res.url} scored ${res.report.overallScore}/100`);
    } else {
      console.log(`Failed ${res.url}: ${res.error}`);
    }
  });
}

runBulk();

📊 Report Structures

JSON Output Scheme

The returned SeoReport object contains granular metrics grouped by categories:

{
  "url": "https://example.com/",
  "timestamp": "2026-06-26T18:00:00.000Z",
  "overallScore": 92,
  "categories": {
    "coreSeo": {
      "score": 95,
      "details": {
        "title": { "exists": true, "text": "Example Domain", "length": 14, "status": "success", "message": "Title tag is present..." }
        // ...metaDescription, canonical, openGraph, structuredData, mobileFriendly
      }
    },
    "content": { "score": 90, "details": { "wordCount": 350, "readability": { "score": 72, "level": "Standard" } } },
    "images": { "score": 85, "details": { "total": 12, "missingAltCount": 1 } },
    "links": { "score": 95, "details": { "totalLinks": 25, "brokenCount": 0 } },
    "security": { "score": 100, "details": { "isHttps": true, "ssl": { "isValid": true } } },
    "performance": { "score": 88, "details": { "loadTimeMs": 450, "htmlSize": { "kb": 32 } } }
  },
  "advanced": {
    "robotsTxt": { "exists": true, "sitemaps": ["https://example.com/sitemap.xml"] },
    "sitemap": { "exists": true, "url": "https://example.com/sitemap.xml" }
  },
  "strengths": [ ... ],
  "issues": [ ... ],
  "recommendations": [ ... ]
}

🤝 Contribution Guidelines

We welcome community pull requests! To contribute:

  1. Fork the repository.
  2. Install dependencies: npm install
  3. Implement features/fixes. Add unit tests under /tests.
  4. Run tests to ensure everything is functional:
    npm run test
  5. Open a Pull Request with details about your change.

📜 License

This project is licensed under the MIT License. Check the LICENSE file for more information.