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.
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. Stay free if you like.
The hosted free plan monitors one site. The CLI, the MCP server and the self-hosted web app are free and open source. Paid plans for more sites and bigger crawls are coming soon.
Free
Available nowHosted monitoring for one site.
- 1 monitored site
- Up to 500 pages per crawl
- A scheduled crawl every week
- 1 manual crawl a week
- 30 days of history
- Email alerts
- 100 API calls a day
Pro and Agency
Coming soonFor agencies and growing teams.
- More monitored sites
- Larger and longer crawls
- Daily scheduled crawls
- Slack, Discord and webhook alerts
- A year of history
- Higher API limits
Self-hosted
Open sourceThe full web app on your own servers.
- Unlimited sites
- Up to 100,000 pages per crawl
- A scheduled crawl every day
- Unlimited manual crawls
- 365 days of history
- Email, Slack, Discord and webhook alerts
- No API call limit
- Your data stays on your servers
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. Paid plans for more sites and bigger crawls are coming soon.
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.