New:Microsoft Teams Notifications Are Now Available in Socket.Learn more →
Get Started

@rankcli/cli

Package Overview
Dependencies
Maintainers
1
Versions
37
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@rankcli/cli

RankCLI - Ship code, get ranked. SEO meets CI/CD.

latest
npmnpm
Version
0.0.38
Version published
Maintainers
1
Created
Source

RankCLI

The only SEO tool with GEO (AI Search Optimization) and MCP for AI assistants.

Developer-first SEO. CLI-native. Optimizes for Google and ChatGPT, Perplexity, Claude.

Why RankCLI?

FeatureRankCLICompetitors
GEO (AI Search)✅ Check if GPTBot/ClaudeBot can crawl❌
MCP Server✅ AI assistants can run audits❌
Framework Fixes✅ 25+ frameworks❌
CLI/CI Native✅ Built for developers❌
PriceFrom $9/mo$99-500/mo

Installation

Standalone binary, no Node required:

brew install integrallis/tap/rankcli
# or on Windows:
scoop bucket add integrallis https://github.com/integrallis/scoop-bucket
scoop install rankcli

Or via npm (requires Node 20.19+ or 22.12+ - see Node versions):

npm install -g @rankcli/cli
# or
pnpm add -g @rankcli/cli

Verify:

rankcli --version

Quick Start

# Run an SEO audit
rankcli audit --url https://yoursite.com

# Login to unlock all features
rankcli login

# Full 280+ check audit
rankcli audit --url https://yoursite.com --max-pages 5

Core Features

🤖 GEO (Generative Engine Optimization)

Check if AI crawlers can access your site:

rankcli geo --url https://yoursite.com

Analyzes:

  • AI crawler access: GPTBot, ClaudeBot, PerplexityBot, Google-Extended
  • JS rendering: Can AI crawlers see your content?
  • LLM signals: Content structure, citations, FAQ extraction
  • robots.txt: Are you blocking AI search?

🔌 MCP Server (For AI Assistants)

Let Claude, Cursor, or any MCP-compatible AI run SEO audits for you. Free, local, no signup:

Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "rankcli": {
      "command": "npx",
      "args": ["@rankcli/mcp-server"]
    }
  }
}

Nothing is sent to RankCLI's servers — see @rankcli/mcp-server. A hosted endpoint (with your API key) is also available for teams that want dashboard sync.

Available tools:

  • seo_audit — Full 280+ check audit on any URL
  • seo_geo_check — AI search visibility analysis
  • seo_robots_check — AI crawler permissions in robots.txt
  • seo_compare — Compare SEO metrics between two URLs

Now just ask Claude: "Run an SEO audit on example.com" ✨

🔧 Framework-Specific Fixes

Auto-generate fixes for 25+ frameworks:

rankcli apply --url https://mysite.com

Supported frameworks:

  • JS/TS: React, Next.js (App/Pages), Vue, Nuxt, Angular, Svelte, SvelteKit, Astro, Remix, Gatsby, Solid.js, Qwik
  • Backend: Rails, Django, Laravel, Spring Boot, ASP.NET Core, Phoenix, Go (Gin/Echo/Fiber)
  • SSG: Hugo, Jekyll, Eleventy, Pelican
  • Hypermedia: HTMX, Hotwire/Turbo

📊 7 Deep Analyzers

AnalyzerWhat It Does
GEOAI crawler access, LLM signals, citation readiness
Core Web VitalsLCP, CLS, INP, TTFB estimation
Security HeadersHTTPS, HSTS, CSP (A+ to F grading)
Structured DataJSON-LD validation, rich results
ImagesAlt text, dimensions, modern formats
Internal LinksAnchor text, orphan detection
Mobile SEOViewport, touch targets, PWA

Commands

rankcli audit

Run comprehensive SEO audit (280+ checks).

rankcli audit [options]

Options:
  -u, --url <url>           URL to audit
  -o, --output <format>     Output: json, console (default: console)
  --max-pages <n>           Max pages to crawl (default: 5)
  --check-links             Check broken links
  --fail-on <level>         CI gate: exit 1 on any issue at/above error | warning | notice
  --min-score <n>           CI gate: exit 1 if the overall score is below n (0-100)
  --ai                      AI-powered analysis (your own key, or a local model)
  --ai-provider <p>         See "AI analysis" below (auto-detected if omitted)
  --ai-key <key>            Provider API key (or the provider's env var)
  --ai-model <model>        Override the provider's default model
  --ai-base-url <url>       Any OpenAI-compatible server (implies --ai-provider custom)

Exit codes

CodeMeaning
0Audit completed; no --fail-on / --min-score gate tripped
1A --fail-on or --min-score gate tripped
2Bad invocation: missing/invalid --url, invalid flag value
3No real audit: the site was unreachable, the URL answered 4xx/5xx, no page could be analyzed, or an internal error

The gates are opt-in: without them, a completed audit exits 0 however many issues it finds. An unreachable site or an error status always exits 3 - it scores 0, not a passing grade. With -o json, stdout is always one JSON document (on failure too) carrying exitCode and, when gates are set, a gate object with the reasons.

AI analysis (--ai)

AI analysis runs on your own provider - nothing goes through RankCLI.

On a Mac with Apple Intelligence, it's the default. On macOS 26 or later on Apple silicon with Apple Intelligence turned on, --ai uses Apple's on-device model: free, private, no key and no network round trip. The first run builds a small Swift helper with the Xcode command-line tools (a few seconds, cached in ~/Library/Caches/rankcli). The on-device model has a small context window, so it sees the 25 most severe issues. To use another provider, pass --ai-provider, or set it once with RANKCLI_AI_PROVIDER=openrouter (any provider id below).

Otherwise, with no --ai-provider, the first key found wins, in this order (OpenRouter first):

ProviderEnv varBase URLDefault model
openrouterOPENROUTER_API_KEYhttps://openrouter.ai/api/v1openrouter/free
groqGROQ_API_KEYhttps://api.groq.com/openai/v1llama-3.3-70b-versatile
geminiGEMINI_API_KEY / GOOGLE_API_KEYhttps://generativelanguage.googleapis.com/v1beta/openaigemini-3.7-flash
deepseekDEEPSEEK_API_KEYhttps://api.deepseek.comdeepseek-flash
cerebrasCEREBRAS_API_KEYhttps://api.cerebras.ai/v1gpt-oss-120b
mistralMISTRAL_API_KEYhttps://api.mistral.ai/v1mistral-small-latest
togetherTOGETHER_API_KEYhttps://api.together.xyz/v1openai/gpt-oss-120b
fireworksFIREWORKS_API_KEYhttps://api.fireworks.ai/inference/v1accounts/fireworks/models/gpt-oss-120b
anthropicANTHROPIC_API_KEYhttps://api.anthropic.com/v1claude-haiku-4-5-20251001
openaiOPENAI_API_KEYhttps://api.openai.com/v1gpt-5.6-luna

Local models, no key. If no key is set at all and Ollama is running, --ai uses it automatically (with a one-line notice) and picks its first installed model:

ollama pull qwen3:8b
rankcli audit --url https://yoursite.com --ai                      # finds Ollama on :11434
rankcli audit --url https://yoursite.com --ai --ai-provider ollama --ai-model qwen3:8b
ProviderDefault base URL
ollamahttp://localhost:11434/v1 (honours OLLAMA_HOST)
lmstudiohttp://localhost:1234/v1
llamacpphttp://localhost:8080/v1 (llama-server)
vllmhttp://localhost:8000/v1
customwhatever --ai-base-url says

Local providers need no key and no model name: without --ai-model the CLI asks the server (/api/tags for Ollama, /v1/models otherwise) and uses the first loaded model. Any other OpenAI-compatible server works too:

rankcli audit --url https://yoursite.com --ai --ai-base-url http://gpu-box:8080/v1 --ai-model my-model

Local and small models often ignore "JSON only" instructions, so the reply is parsed defensively (code fences, <think> blocks and surrounding prose are stripped). response_format: json_object is only sent to providers known to support it. An AI failure is reported but never changes the exit code.

rankcli apply

Generate and apply framework-specific fixes.

rankcli apply --url https://mysite.com --dry-run   # Preview
rankcli apply --url https://mysite.com --auto      # Auto-apply

rankcli keywords

AI-powered keyword research. --ai runs on the same provider as audit --ai (Apple Intelligence on a Mac that has it, else your key, else a local Ollama) and takes the same --ai-provider / --ai-key / --ai-model / --ai-base-url flags. Keyword clustering uses embeddings on OpenAI and term vectors everywhere else; local models judge 5 tool ideas instead of 15.

rankcli keywords --url https://mysite.com --ai
rankcli keywords --competitor -c 'competitor.com' -s 'target keyword'

rankcli content

Content analysis for readability and snippets.

rankcli content --url https://mysite.com/blog --keyword 'seo tips'

Authentication

# Interactive login
rankcli login

# API key (for CI/CD) - validates the key and resolves your plan; exits 1 if rejected
rankcli login --token rankcli_your_api_key

# Or just the environment variable - every command resolves the key's plan itself
export RANKCLI_API_KEY=rankcli_your_api_key
rankcli login   # optional: validates it and shows the plan

CI/CD Integration

GitHub Actions

name: SEO Audit
on: [push, pull_request]

jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-node@v4
        with:
          node-version: '22'
      - run: npm install -g @rankcli/cli
      # Fails the job on any error-severity issue or a score under 80.
      - run: rankcli audit --url "$SITE_URL" --fail-on error --min-score 80 -o json > "$RUNNER_TEMP/audit.json"
        env:
          SITE_URL: ${{ vars.SITE_URL }}
          RANKCLI_API_KEY: ${{ secrets.RANKCLI_API_KEY }}   # optional: dashboard sync + your plan's limits

rankcli setup --github-action --url https://yoursite.com [--sync] writes a scheduled workflow that files the report as an issue (and, with --sync and a RankCLI API key, opens auto-fix PRs - 3 a month on Free).

Environment Variables

VariableDescription
RANKCLI_API_KEYAPI key for authentication (plan resolved automatically)
RANKCLI_CONFIG_DIRStore login/config here instead of the per-user config dir
OPENROUTER_API_KEY, GROQ_API_KEY, GEMINI_API_KEY, DEEPSEEK_API_KEY, CEREBRAS_API_KEY, MISTRAL_API_KEY, TOGETHER_API_KEY, FIREWORKS_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEYAI analysis keys (see "AI analysis")
OLLAMA_HOSTWhere a local Ollama listens (default localhost:11434)

Node versions

The npm package needs Node 20.19+ or 22.12+ (any 23+ works). The CLI is a CommonJS bundle that require()s ESM-only dependencies (chalk, conf, inquirer, open), and those are the first releases that load ES modules through require() without a flag. Every Node line still in support (22, 24) qualifies. On an older Node, rankcli / npx @rankcli/cli stops with a message saying so instead of an ERR_REQUIRE_ESM stack trace. The Homebrew/Scoop binaries bundle their own Node and have no requirement.

Pricing

FeatureFreeSolo+ (from $9/mo)
SEO + GEO checksAll 280+All 280+
Local fixes (rankcli fix, 25+ frameworks)✅✅
Auto-fix PRs (GitHub App)3 a month✅
Hosted sites1, audited weekly3+, weekly or daily
Slack & Discord alerts-✅

See rankcli.dev/pricing.

License

MIT

Keywords

seo

FAQs

Package last updated on 27 Sep 2026

Related posts