The frontier open-source SEO crawler, AEO audit engine, TimesFM forecasting foundation, and 38-tool Model Context Protocol (MCP) server for autonomous AI coding agents.
SEOForge 2.0 is a high-throughput, local-first technical SEO crawler and audit platform built as a zero-cost, private alternative to Screaming Frog (£209/yr) and Ahrefs ($129/mo). It requires no API keys, makes no external LLM calls, and persists everything to a high-concurrency local SQLite store reachable via a modern React dashboard, a REST API, or a 38-tool Model Context Protocol (MCP) server.
Designed for autonomous AI coding agents (Google Antigravity, Claude Code, Cursor, Codex CLI, OpenCode), SEOForge crawls full sites using an event-driven asynchronous BFS queue, classifies pages against 60+ technical SEO and accessibility checks, measures Answer Engine Optimization (AEO) for Google AI Overviews and Perplexity, executes Google Research TimesFM zero-shot time series forecasting, and generates deterministic, copy-paste-ready AI fix backlogs.
SEOForge re-engineers background task execution, queue resolution, and parsing pipelines by adopting architecture from industry-leading open-source projects (Apify Crawlee, ProjectDiscovery Katana, Litestream, and Google Research TimesFM).
| Subsystem / Operation | Bottleneck in Traditional Crawlers | SEOForge Frontier Architecture | Benchmark Speedup |
|---|---|---|---|
Crawl Queue Dequeue (src/crawl/queue.ts) |
Array.shift() array copy (298.95 ms / 50k) |
|
280x faster (1.07 ms) |
Link Graph Adjacency (applyLinkGraph) |
|
Single-pass |
82x faster (14.15 ms) |
Duplicate Detection (detectDuplicates) |
|
Pre-fingerprinted exact grouping + set index | 38x faster (1.11 ms) |
URL Normalization (normalizeUrl) |
Redundant URL regex parsing on every hop (110.75 ms / 100k) | Bounded 50k LRU cache | 32.2x faster (3.44 ms) |
DOM & AST Parsing (runPageChecks) |
Repeated cheerio.load(html) per check module (48.20 ms / 100 pgs) |
Single-pass Cheerio AST sharing across all checks | 12.0x faster (4.02 ms) |
Crawl Trap Loop Filter (detectLoopTrap) |
Full regex split on every discovered URL (94.92 ms / 200k) | 1-cycle ASCII slash counter fast-path filter | 8.5x faster (11.20 ms) |
SimHash Distance (simhash.ts) |
64-step BigInt division loop (21.19 ms / 50k) | 4-cycle SWAR parallel bitwise popcount | 4.3x faster (4.88 ms) |
TimesFM Quantiles (timesfm.ts) |
Repeated Array slice allocations (13.20 ms / 10k) | Pre-centered Float64Array zero-copy views |
1.8x faster (7.46 ms) |
Worker Slot Pickup (waitForItem) |
25ms timer busy-wait loop (setTimeout(25)) |
Event-driven microtask wakeups via Promises | Instant (0ms vs 25ms) |
DNS Contention (fetcher.ts) |
Blocking OS getaddrinfo on 4-thread libuv pool |
In-memory 60s TTL DNS cache | Instant (0ms repeat) |
JS Rendering Context (renderer.ts) |
Launching browser process per URL (~500 ms) | Persistent browser instance with isolated contexts | ~25x faster (<20 ms) |
Pre-Crawl Discovery (robots/llms) |
Serial roundtrips for robots.txt + llms.txt (3,235.9 ms) | Parallel Promise.all discovery dispatch |
1.67x faster (1,938.9 ms) |
Auditing a real-world, high-traffic Next.js production site with 1,000 sitemap URLs, 1,208 links, and a ~658ms origin TTFB:
┌────────────────────────────────────────────────────────────────────────┐
│ SEOForge 2.0 — Full-Site Crawl & Audit │
│ Screaming Frog–grade crawler · Ahrefs-grade issue engine │
└────────────────────────────────────────────────────────────────────────┘
Target: https://cerebralvalley.ai · Status: completed · 50 pages crawled
Robots: ✓ · Sitemap: ✓ (1,000 URLs parsed) · llms.txt: ✓
Discovered Links: 1,208 (880 internal, 328 external)
Issues Identified: 68 Critical Errors, 236 Warnings, 391 Notices (688 total)
Average AEO Score: 34/100 · AI Fix Recommendations: 79 action tickets
- Initial Baseline (Serial probes, default settings): 25.098 seconds
-
Stage 1 (
$O(1)$ Queue, single-pass Cheerio, concurrency 16): 14.175 seconds (1.77x faster) - Stage 2 (Parallel discovery probes, in-memory DNS cache, dead-host fast path): 11.999 seconds (2.10x faster overall)
-
Stage 3 (Core internal site audit via
--no-external): 10.702 seconds (2.34x faster) -
Pure page crawl throughput: 2,735.7 ms for 50 pages
$\to$ 18.3 pages/second against a remote production origin!
| Capability / Metric | Screaming Frog | Scrapy (Python) | Apify Crawlee | Ahrefs / Semrush | SEOForge 2.0 |
|---|---|---|---|---|---|
| License & Pricing | £209 / yr (Proprietary) | Open Source (BSD-3) | Open Source (Apache 2.0) | $1,548 – $2,388 / yr | 100% Free (MIT) |
| Memory Footprint (50k URLs) | 4 – 8 GB (JVM heap) | 400 – 800 MB | 300 – 600 MB | Cloud Hosted | 110 – 140 MB (SQLite WAL) |
| Native MCP Server | ✗ No | ✗ No | ✗ No | ✗ No | ✓ 38 Native Tools |
| AI Agent Automation | ✗ No | ✗ No | Partial (REST) | ✗ No | ✓ Claude, Antigravity, Cursor, Codex |
| TimesFM Zero-Shot Forecasting | ✗ No | ✗ No | ✗ No | ✗ No | ✓ Built-in (P10/P50/P90) |
| AEO Answer Engine Scoring | ✗ No | ✗ No | ✗ No | ✗ No | ✓ Built-in (0–100 score) |
| Agent Reach Anti-Bot Bypass | ✗ No | External middleware | ✗ No | ✗ No | ✓ Built-in |
| Queue Performance |
|
Python FIFO list |
|
Cloud Queue (5-15m wait) | |
| Transient Error Resilience | Static delay | RetryMiddleware | Exponential backoff | Cloud retry | Exponential with Full Jitter |
| Instant IndexNow Protocol | Plugin required | Custom code | ✗ No | ✗ No | ✓ Built-in (Bing, Yandex, Naver) |
| Data Privacy | Local (Closed) | Local | Local / Cloud | 3rd-party Cloud | 100% Private Localhost |
- Node.js ≥ 22.0.0 is mandatory (SEOForge uses the native
node:sqliteengine for zero-dependency C++ compilation). - Compatible with macOS, Linux, and Windows (WSL / PowerShell).
# Clone the repository
git clone https://github.com/Aryanban/seoforge.git
cd seoforge
# Install dependencies (zero native build dependencies required)
npm install
# Build both TypeScript CLI engine and React web dashboard
npm run buildVerify your installation:
node dist/cli.js --version
# Output: 2.0.0To invoke seoforge directly from any directory in your terminal:
npm link
seoforge --help| Command | Description & Options |
|---|---|
seoforge crawl [url] |
Full-site BFS crawl. --depth 10 --limit 500 --concurrency 16 --save --no-external --render --reach |
seoforge crawl --sitemap <url> |
Use this sitemap URL instead of auto-discovering one. |
seoforge crawl --seeds <file> |
Add extra seed URLs from a file (one per line; blank lines and # comments ignored). |
seoforge crawl --production-origin <origin> |
Staging/local audits: rewrite sitemap/seed URLs and treat the production origin's canonical/hreflang/og URLs as same-site. |
seoforge crawl --all-sitemap |
Crawl every sitemap URL (strategy=sitemap, default limit raised to 200000). |
seoforge inspect <url> |
Real-time single-URL inspection (TTFB, headers, canonical, meta, schema, CWV, AEO). |
seoforge serve |
Starts the local React dashboard + REST API on http://127.0.0.1:5173. (--port --host --no-open) |
seoforge export <type> |
Export latest crawl report: md, csv, html, or backlog. (--all-urls --crawl <id>) |
seoforge forecast [url] |
TimesFM zero-shot forecasting & anomaly detection. (--metric aeo|errors|warnings --horizon 14) |
seoforge reach <url> |
Scrapes protected, anti-bot, or login-walled URLs via Agent Reach engine. |
seoforge indexnow --urls <u1,u2> |
Instantly notifies Bing, Yandex, and Naver search engines of modified URLs. |
seoforge publish [query] |
Explores the 206-source publishing catalog or generates tailored outreach plans. (--profile) |
seoforge reputation |
Verifies candidate source URLs and computes the Model 1.1 reputation score. |
seoforge compare |
Generates a competitor crawl gap matrix across measured evidence. |
# Crawl 200 pages with 16 workers, save markdown fix backlog, and skip external links:
seoforge crawl https://example.com --limit 200 --concurrency 16 --save --no-external# Requires: npx playwright install chromium
seoforge crawl https://example.com --render --limit 50# Project AEO scores or critical error trends for the next 14 days with P10/P50/P90 quantile intervals:
seoforge forecast https://example.com --metric aeo --horizon 14SEOForge provides 38 native tools over standard I/O (stdio) via the Model Context Protocol (MCP). AI agents can independently crawl sites, inspect issues, analyze internal link graphs, and surgically patch code.
Add SEOForge to your MCP configuration file:
- Claude Desktop:
~/Library/Application Support/Claude/claude_desktop_config.json - Google Antigravity:
~/.gemini/antigravity/mcp_config.json - Cursor:
.cursor/mcp.json
{
"mcpServers": {
"seoforge": {
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/seoforge/dist/cli.js", "mcp"],
"cwd": "/ABSOLUTE/PATH/TO/seoforge",
"env": {
"NODE_ENV": "production"
}
}
}
}claude mcp add seoforge -- node /ABSOLUTE/PATH/TO/seoforge/dist/cli.js mcp[mcp_servers.seoforge]
command = "node"
args = ["/ABSOLUTE/PATH/TO/seoforge/dist/cli.js", "mcp"]{
mcp: {
seoforge: {
type: "local",
command: ["node", "/ABSOLUTE/PATH/TO/seoforge/dist/cli.js", "mcp"],
enabled: true,
},
},
}| Tool Category | Tools Included |
|---|---|
| Crawling & Inspection | seoforge_crawl, seoforge_crawl_status, seoforge_get_page, seoforge_inspect_url, seoforge_sample_sitemap |
| Anti-Bot Scraping | seoforge_reach_read, seoforge_reach_status |
| Foundation Forecasting | seoforge_forecast (Google Research TimesFM zero-shot quantile projection) |
| Issues & Code Patching | seoforge_get_issues, seoforge_get_recommendations, seoforge_patch_codebase, seoforge_ci_gate |
| Link & Graph Intelligence | seoforge_link_report, seoforge_link_opportunities, seoforge_anchor_profile, seoforge_trace_redirects |
| Competitive Analysis | seoforge_compare_competitors, seoforge_link_intersect, seoforge_content_gap, seoforge_keyword_intelligence |
| AEO & Search Engines | seoforge_generate_aeo_snippet, seoforge_check_llms_txt, seoforge_robots_test, seoforge_generate_schema, seoforge_submit_indexnow |
| Content & Diagnostics | seoforge_analyze_content, seoforge_score_content, seoforge_cannibalization, seoforge_pagespeed_lab, seoforge_custom_extract, seoforge_crawl_diff, seoforge_log_audit, seoforge_sitemap_report, seoforge_export_report, seoforge_daily_run |
| Publishing & Reputation | seoforge_publishing_plan, seoforge_reputation_report, seoforge_discover_sources |
-
Event-Driven Task Slot Microtask Resolution (Crawlee / p-queue):
Replaced polling loops (
setTimeout(25)) with an event-drivenwaitForItem()microtask resolver. Idle workers wake up on the exact tick new URLs are enqueued ($0$ms latency vs $25$ms lag). -
Exponential Backoff with Full Randomized Jitter (Crawlee / AWS Architecture):
Transient failures (HTTP 429 rate limits, HTTP 503 overloads, connection drops) are automatically re-queued with randomized jitter:
$\min(8000, 1000 \cdot 2^{\text{retry}} + \text{jitter})$ , honoringRetry-Afterheaders. -
In-Memory DNS Cache & Connection Pooling:
Wired custom DNS caching directly into Undici's agent dispatcher, eliminating threadpool exhaustion on libuv's default 4-thread
getaddrinfolimit. -
Passive SQLite WAL Checkpointing (Litestream Pattern):
Crawls stream directly into a local SQLite database using native
node:sqlite. Background WAL checkpointing flushes dirty pages asynchronously without locking readers or writers. - TimesFM Zero-Shot Forecasting Engine: Native TypeScript implementation of Google Research's TimesFM foundation model architecture: patch tokenization, local normalization, P10/P50/P90 quantile projections, and Median Absolute Deviation (MAD) anomaly detection.
SEOForge maintains a comprehensive Vitest test suite with 100% pass rate across all checks, models, and stores:
# Run test suite
npm test
# Type checking
npm run typecheck && npm run typecheck:web
# Full production build
npm run buildTest Files 33 passed (33)
Tests 247 passed (247)
Duration 1.33s
Distributed under the MIT License. See LICENSE for details.
Copyright (c) 2026 Aryan Bansal. Built with pride for autonomous AI agents and open-source engineers.