CodoSEO
Open sourceWritten in RustAGPL-3.0v0.0.1 on crates.io

Know the moment your SEO breaks.

An open-source SEO crawler and monitor in a single Rust binary. It runs 44 checks, scores your site from 0 to 100, diffs two audits and fails your CI build before rankings drop.

$cargo install codoseo
No account, no API keyRequires Rust 1.88+Binaries on GitHub releases
https://northwind-outdoor.com Crawling…
Crawled0
Queue0
URL/s0
Issues0
AddressStatusIndexabilityTime
The CLI

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.

codoseo crawl https://example.com --format md
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

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.

CriticalWarningNoticeFull check reference →

Crawl again tomorrow and see the diff.

Save each audit as JSON and compare any two. codoseo diff lists new issues, resolved issues, score changes, status changes, title changes and redirect regressions.

before.json → after.jsonScore 84 → 79
Became noindex /pricing
− meta robots: index, follow
+ meta robots: noindex
Status changed /journal/old-trail-guide
− 200 OK
+ 404 Not Found
Title changed /tents
− Tents & Shelters | Northwind Outdoor
+ Tents
Redirect chain grew /sale
− /sale → /deals
+ /sale → /deals → /offers → /

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.

Async and politeBuilt on Tokio. Respects robots.txt and Crawl-delay, and backs off on 429 and 503.
Exit codes for CIGate a deploy on critical or warning findings, for crawls and for diffs.
Plain outputTable, JSON, Markdown and CSV. Audit files are portable and diffable.
Embed the cratesCore, crawler, checks and diff are published separately for your own Rust projects.
.github/workflows/seo.yml
- 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
Roadmap

The CLI is the first piece.

The crawler, checks and diff engine are shipped. The hosted and assistant-facing parts are not, and the dates are not fixed. Watch the repo for releases.

In development

Web app

A dashboard for continuous monitoring. Add a URL and get your first report without touching a terminal.

  • Scheduled crawls with change detection between runs
  • Alerts to Slack, Discord, email and webhooks
  • Health score trend and issue history
  • Self-host with docker compose up, or use a hosted plan
Planned

MCP server

Ask Claude, Cursor or any MCP client to audit a page, check a canonical or diff two crawls from your editor.

  • Crawl and audit a site from a chat prompt
  • Natural-language questions about issues
  • Suggested fixes for failing checks
  • Shares the engine with the CLI and web app
Planned

GEO checks

Visibility for AI answer engines, next to the classic SEO checks.

  • AI crawler rules in robots.txt, per user agent
  • llms.txt and llms-full.txt validation
  • Key content present in the raw HTML
  • Alert when a deploy blocks an AI bot

Open source, scriptable, free to run.

How the CLI compares today. Web app and GEO rows are marked as soon because they are not shipped yet.

Competitor details are from their public product pages and may be out of date. Corrections welcome on GitHub.

Free and open source

Use it. Self-host it. Contribute to it.

Licensed under AGPL-3.0. The source is on GitHub and every crate is published to crates.io, so you can embed the crawler or the checks in your own project.

Run your first audit in a minute.