Know the moment your SEO breaks.
CodoSEO crawls your site, runs 44 SEO checks, scores it from 0 to 100 and shows exactly what changed since the last crawl. You hear about a broken page the day it ships, not when rankings drop.
5,000 pages crawled so far, free audits included
Audit from a browser, a terminal or a chat.
The same crawler and the same 44 checks power the web app, the CLI, the MCP server and the REST API. A finding means the same thing wherever you see it.
Monitor the sites you care about
Scheduled crawls, a URL explorer, change tracking and alerts. Use the hosted app or run it on your own servers.
codoseo.com
CLI
One binary for audits and CI
Crawl a site, inspect a page, follow a redirect chain or compare two audits. No account and no API key.
codoseo crawl <URL>
MCP server
Give your AI agent an SEO crawler
Claude, Cursor and other MCP clients can audit a site, list the pages behind an issue and compare crawls.
codoseo mcp
REST API
Your audits as JSON
Read health scores, failing pages and changes for your monitored sites, or queue a crawl, with one API key.
GET /api/v1/sites
Everything you need to keep a site healthy.
Crawl, score, compare and alert. CodoSEO finds what broke, names the pages behind it and tells you when it happened.
44 SEO checks
Status codes, indexability, titles and descriptions, content, links, HTTPS, sitemaps, Open Graph and structured data.
Health score from 0 to 100
Each check is weighted by severity and by how many pages it affects, so one number tells you where a site stands.
Change tracking
Every crawl is compared with the one before: new and fixed issues, status codes, titles and redirect chains that changed.
Scheduled crawls
Crawl every week or every day. The hosted app runs them for you, so nothing has to stay switched on.
Alerts where you work
Get told about regressions by email, Slack, Discord or webhook, the same day the broken change goes live.
URL explorer
Filter every crawled URL by status, indexability, content type or check. See a SERP preview, inlinks and headers.
CI gates
--fail-on critical fails the build when a deploy breaks SEO. Works in GitHub Actions, GitLab CI or any shell.
Polite by default
Obeys robots.txt and Crawl-delay, backs off on 429 and 503, and identifies itself as CodoSEObot.
Self-host in three commands
The web app needs only Postgres: no Redis and no outside requests. Your crawl data stays on your servers.
44 checks after every crawl.
Each check passes or fails and names the pages behind it. Results roll up into a health score from 0 to 100, weighted by severity and by how many pages are affected.
Response
6 checks- 4xx and 5xx errors
- Fetch failures
- Redirect loops
- Redirect chains
Indexability
6 checks- robots.txt blocking the site
- Pages blocked by robots.txt
- Canonical to non-200
- Noindex and missing canonicals
On-page
12 checks- Missing or duplicate titles
- Missing or duplicate descriptions
- Missing H1s
- Length violations
Content
3 checks- Duplicate content
- Thin pages under 200 words
- Missing image alt text
Links
6 checks- Broken links
- Orphan pages
- Links to redirects
- Deep pages
Technical
3 checks- HTTP instead of HTTPS
- Mixed content
- Slow responses
Sitemap
5 checks- Sitemap pages not 200
- Sitemap pages that are noindex
- Pages missing from the sitemap
Social
1 check- Missing Open Graph title or image
Schema
2 checks- Invalid JSON-LD
- hreflang missing self-reference
Point it at a URL. Read what's broken.
One command crawls the site, runs every check and prints a report. Output is a table, JSON, Markdown or CSV, so you can read it, pipe it into jq or save it as a file.
Preflight … ok Crawling ━━━━━━━━━━━━━━━━━━━━ 142 pages 28s # CodoSEO report for https://example.com/ - Health score: 84 / 100 - Checks: 37 of 44 checks passed ## Critical (1) | Check | Slug | Affected | Examples | | Page returns a 4xx error | http_4xx | 1 page | /old-page | ## Warning (2) | Page links to a broken URL | links_to_broken | 1 page | /contact | | Meta description is missing | description_missing | 6 pages | /blog/… | ## Summary - Pages: 142 (138 indexable) - Status: 2xx 138 · 3xx 3 · 4xx 1 · 5xx 0 - Avg response: 210 ms
codoseo check <URL>codoseo robots <URL>codoseo redirects <URL>codoseo diff before.json after.json
Crawl again tomorrow and see the diff.
Every crawl is compared with the last one. In the web app it happens on its own; on the command line, codoseo diff compares any two saved audits. New issues, resolved issues, score changes, status changes, title changes and redirect regressions.
Fail the build before rankings drop.
CodoSEO is one static binary with no browser and no config file, so it drops into any pipeline. --fail-on critical exits with code 1 when the threshold is reached.
critical or warning findings, for crawls and for diffs.- name: SEO audit run: | cargo install codoseo codoseo crawl ${{ env.SITE_URL }} \ --format json -o audit.json \ --fail-on critical # later: compare against the last release - name: SEO diff run: codoseo diff before.json audit.json --fail-on critical
# run it on your machine, no account claude mcp add codoseo -- npx -y codoseo mcp # or connect the hosted server claude mcp add --transport http codoseo \ https://codoseo.com/mcp > Audit example.com and list the pages with broken links.
Ask your agent to audit the site.
CodoSEO ships an MCP server, so Claude, Cursor or any MCP client can crawl a site, pull the pages behind an issue, check a redirect chain and compare two audits from a single prompt.
codoseo mcp runs over stdio on your machine and can reach staging and internal hosts.codoseo.com/mcp with an API key to ask about the sites you monitor.Start free. Pay when you need more.
The hosted free plan monitors one site. Lite and Pro add sites, daily crawls up to 10,000 pages per site, and alerts in Slack, Discord or a webhook. The CLI, the MCP server and the self-hosted web app are free and open source.
Free
HostedWeekly monitoring for one site.
- 1 monitored site
- Up to 500 pages per crawl
- Crawls of up to 10 minutes
- A scheduled crawl every week
- 1 manual crawl a week
- 30 days of history
- Email alerts
- 100 API calls a day
- 3 AI incident rechecks a day
Lite
HostedDaily monitoring for a handful of sites.
- 5 monitored sites
- Up to 5,000 pages per crawl
- Crawls of up to 1 hour
- A scheduled crawl every day
- 5 manual crawls a day
- A year of history
- Email, Slack, Discord and webhook alerts
- 1,000 API calls a day
- 20 AI incident rechecks a day
Pro
HostedMore sites, bigger crawls, no manual crawl cap.
- 10 monitored sites
- Up to 10,000 pages per crawl
- Crawls of up to 2 hours
- A scheduled crawl every day
- Unlimited manual crawls, 1 running per site
- A year of history
- Email, Slack, Discord and webhook alerts
- 5,000 API calls a day
- 60 AI incident rechecks a day
Enterprise
CustomNeed more than Pro? Tell us about your sites.
- More sites than Pro
- Larger or longer crawls
- Terms that fit your team
Hosted or self-hosted?
Self-hosting is the same app with every feature, free under AGPL-3.0, with no plan caps and your data on your machines. You pay for the server and run it yourself.
Hosted
Lite $9 · Pro $19The crawler, alerts, backups and upgrades are run for you. Your time: none.
Self-hosted
Software $0A server for 5 sites × 5,000 pages costs $4.54 to $12 a month, and for 10 sites × 10,000 pages $4.54 to $24, plus backups. Your time: about an hour a month.
| Provider | Lite size (2 GB+) | Pro size (4 GB+) |
|---|---|---|
| Hetzner1EU only, plus IPv4; often out of stock (the regular CPX22 is $22.99) | $6.49CX23: 2 vCPU, 4 GB, 40 GB | $6.49CX23: 2 vCPU, 4 GB, 40 GB |
| OVHcloud2paid 12 months upfront; daily backup included | $4.54VPS-1: 2 vCPU, 4 GB, 40 GB | $4.54VPS-1: 2 vCPU, 4 GB, 40 GB |
| Vultr3 | $10Regular 2 GB: 1 vCPU, 2 GB, 55 GB | $20Regular 4 GB: 2 vCPU, 4 GB, 80 GB |
| DigitalOcean4 | $12Basic 2 GB: 1 vCPU, 2 GB, 50 GB | $24Basic 4 GB: 2 vCPU, 4 GB, 80 GB |
| Akamai (Linode)5 | $12Linode 2 GB: 1 vCPU, 2 GB, 50 GB | $24Linode 4 GB: 2 vCPU, 4 GB, 80 GB |
- Backups
- 20% on top of the server at DigitalOcean and Vultr, $2.50 to $5 a month at Akamai, a daily copy included at OVHcloud. Or pg_dump to storage you already have.4,6,7
- Bandwidth
- $0. Crawling is mostly inbound traffic, and every plan above includes 2 TB or more a month.
- Domain and TLS
- $0 on a subdomain you already own, or $10.46 a year for a new .com at Cloudflare's at-cost price. TLS certificates are free from Let's Encrypt.8,9
- Alert email
- $0 on a free tier, for example Resend's 3,000 emails a month (100 a day).10
- Your time
- Our estimate: 2 to 3 hours to set up (server, Docker, DNS, TLS, SMTP), then about 1 hour a month for image and OS updates, a backup check and watching health and disk.
The honest version: a small VPS undercuts Lite and Pro on price. What hosted buys is the setup and the hour a month, with the managed crawler, alerts and backups included. Self-host guide.
- Hetzner, price adjustment of 15 June 2026, as of 2026-10
- OVHcloud VPS, as of 2026-10
- Vultr pricing, as of 2026-10
- DigitalOcean Droplet pricing, as of 2026-10
- Akamai (Linode) shared CPU pricing, as of 2026-10
- Vultr automatic backups, as of 2026-10
- Akamai (Linode) backups pricing, as of 2026-10
- Cloudflare Registrar prices (cfdomainpricing.com), as of 2026-10
- Let's Encrypt, as of 2026-10
- Resend pricing, as of 2026-10
Want to try it first? Run a one-off audit of up to 100 pages from the box at the top, no signup needed. The CLI is free and has no page cap of its own.
Up and running in minutes.
Guides for every way to run CodoSEO, from a first crawl to a self-hosted install. The docs live with the code on GitHub.
Install the CLI your way
Prebuilt binaries for Linux, macOS and Windows are on the releases page, each with a checksum. Every crate is on crates.io, so you can embed the crawler or the checks in your own project.
# Homebrew (macOS, Linux) brew install safrowlabs/codoseo/codoseo # npm npx codoseo --help # Cargo (Rust 1.88+) cargo install codoseo # Docker docker run --rm ghcr.io/safrowlabs/codoseo crawl https://example.com
Questions, answered.
Something else on your mind? Open an issue on GitHub and we'll get back to you.
Is CodoSEO free?
Yes. The CLI, the MCP server and the self-hosted web app are free and open source under AGPL-3.0. The hosted app has a free plan for one site; Lite ($9 a month) and Pro ($19 a month) add more sites and bigger, daily crawls.
Do I need an account?
Not for the CLI or the local MCP server, and not for a one-off audit of up to 100 pages in the hosted app. A free account lets you monitor a site on a schedule and get alerts.
How do I install the CLI?
Run brew install safrowlabs/codoseo/codoseo, npx codoseo, or cargo install codoseo (Rust 1.88 or newer). Prebuilt binaries for Linux, macOS and Windows are on the GitHub releases page, and a Docker image is at ghcr.io/safrowlabs/codoseo.
What does CodoSEO check?
44 checks across 9 categories: response codes and redirects, indexability (noindex, canonicals, robots.txt), on-page (titles, meta descriptions, H1s), content (thin and duplicate pages, image alt text), links (broken links, orphan pages, click depth), technical (HTTPS, mixed content, slow responses), sitemaps, Open Graph and structured data (JSON-LD, hreflang).
Will crawling slow down my site?
CodoSEO is built to be polite. It obeys robots.txt and Crawl-delay, slows down on its own when a server answers 429 or 503, and identifies itself as CodoSEObot so you can spot it in your logs.
Does it work with AI assistants?
Yes. CodoSEO includes an MCP server. Run codoseo mcp on your machine, or connect the hosted server at https://codoseo.com/mcp, and Claude, Cursor or any MCP client can run audits and read the results.
Can I self-host the web app?
Yes. Docker Compose brings it up in three commands and it needs nothing but Postgres. The self-hosting guide covers email, sign-in, reverse proxies, upgrades and backups.