seo.rank

How seo.rank works

seo.rank fetches the page you give it, once, the way a crawler would: plain HTML, no JavaScript run. It also reads /robots.txt, looks for your XML sitemap, and checks that http:// redirects to https://. Then it scores about 25 on-page checks, weighted by how much they matter to search engines, and lists the fixes in the order that moves the score most.

Everything runs in one small process on one box. There are no paid APIs behind it and no headless browser, which is why it can be free.

The free limit

10 audits per visitor per day, and the whole site does at most a few thousand a day so it can never run up a bill. Re-opening a result from the last hour is free: audits of the same URL are kept in memory for an hour. Over the limit, the page says so and the API answers 429 with Retry-After.

No limit at all if you run it yourself: bunx seorank audit --local example.com, or clone the repo.

Privacy

The crawler

Audits arrive with the user agent Mozilla/5.0 (compatible; seorank/0.1; +https://seo.rank.pit.world/about#bot). One audit is at most a handful of requests (the page, its redirects, robots.txt, a sitemap, the http check). It only fetches public addresses on ports 80 and 443, and it only fetches when a person or an agent asks it to.

API

GET https://seo.rank.pit.world/api/audit?url=example.com
GET https://seo.rank.pit.world/api/quota
GET https://seo.rank.pit.world/health

/api/audit returns the full audit: score, grade, checks[] (id, group, label, status, weight, message, fix), fixes[] in priority order, page (title, description, canonical, headings, images, links, Open Graph, JSON-LD types, hreflang), robotsTxt, sitemap and keywords, plus your quota. Headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. CORS is open; no key.

CLI and TUI

bun add -g seorank          # or: bunx seorank …
seorank audit example.com   # score, fixes, checks
seorank audit example.com --json
seorank audit example.com --local   # on your machine, no limit
seorank quota
seorank                     # interactive TUI

SEORANK_URL points the CLI, TUI and MCP server at another instance.

MCP server

claude mcp add seorank -- bunx seorank mcp
{ "mcpServers": { "seorank": { "command": "bunx", "args": ["seorank", "mcp"] } } }

Tools: audit (one URL; returns the score, prioritized fixes and every check) and quota. Set SEORANK_LOCAL=1 to run audits in-process instead of through seo.rank.

Source

MIT licensed: https://github.com/moshcoder/seo.rank. Bun, Hono, and Bun's built-in HTML parser.