codoseo-web 0.1.0-rc.1

The CodoSEO web app: axum routes, askama templates and htmx partials.
Documentation
{% extends "solo_base.html" %}
{% block title %}CodoSEO — Open-source SEO crawler and site monitor{% endblock %}
{% block head %}
<meta name="description" content="Know the moment your SEO breaks. Paste your URL for a free 100-page audit with a health score and your top issues, then monitor the site and get alerts when something important changes. Open source, built in Rust.">
<link rel="canonical" href="{{ base }}/">
<meta property="og:type" content="website">
<meta property="og:url" content="{{ base }}/">
<meta property="og:title" content="CodoSEO — Open-source SEO crawler and site monitor">
<meta property="og:description" content="Free 100-page SEO audit in about a minute. {{ checks }} checks, a 0–100 health score, and alerts when your SEO breaks.">
<meta property="og:site_name" content="CodoSEO">
<meta name="twitter:card" content="summary">
<link rel="stylesheet" href="{{ crate::assets::url("landing.css") }}">
{% if turnstile_site_key.is_some() %}<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>{% endif %}
<script type="application/ld+json">
{"@context":"https://schema.org","@graph":[
{"@type":"Organization","@id":"{{ base }}/#organization","name":"SafrowLabs","url":"{{ base }}","sameAs":["https://github.com/SafrowLabs"]},
{"@type":"SoftwareApplication","@id":"{{ base }}/#app","name":"CodoSEO","applicationCategory":"DeveloperApplication","operatingSystem":"Linux, macOS, Windows","url":"{{ base }}","license":"https://www.gnu.org/licenses/agpl-3.0.html","isAccessibleForFree":true,"offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"author":{"@id":"{{ base }}/#organization"}}
]}
</script>
{% endblock %}
{% block body %}
<header class="l-top l-wrap">
  <a class="brand" href="/" style="width:auto;padding:0;height:auto"><span class="owl"><i></i><i></i></span><span>CodoSEO</span></a>
  <nav class="l-nav">
    <a href="https://github.com/SafrowLabs/CodoSEO">GitHub</a>
    <a href="/bot">Bot</a>
    <a class="btn btn-sm" href="/login">Sign in</a>
  </nav>
</header>

<main>
  <section class="l-hero l-wrap">
    <p class="l-eyebrow">Open-source SEO crawler and monitor</p>
    <h1>Know the moment your <mark>SEO breaks.</mark></h1>
    <p class="l-lead">Paste your site's address. In about a minute you get a health score and your top issues, with no sign-up. Then let CodoSEO watch the site and tell you when something important changes.</p>
    <form class="l-form" method="post" action="/audit" hx-boost="false">
      <input class="input input-lg" name="url" type="text" inputmode="url" autocomplete="url" autocapitalize="off" spellcheck="false" placeholder="yoursite.com" value="{{ url }}" aria-label="Your site's address" aria-describedby="l-hint" required autofocus>
      {% if let Some(key) = turnstile_site_key %}<div class="cf-turnstile l-ts" data-sitekey="{{ key }}" data-theme="auto"></div>{% endif %}
      <button class="btn btn-primary btn-lg" type="submit">Audit my site</button>
    </form>
    {% if let Some(err) = error %}<p class="error-text" role="alert" style="margin-top:10px"><svg class="icon" style="width:14px;height:14px"><use href="#i-alert"/></svg>{{ err }}</p>{% endif %}
    <p class="l-hint" id="l-hint">Free · first 100 pages · no account needed</p>
  </section>

  <section class="l-wrap l-steps" aria-labelledby="how">
    <h2 id="how">How it works</h2>
    <ol>
      <li><b>1 · Paste your URL.</b><span>We crawl up to 100 pages politely, at 5 requests per second, as CodoSEObot.</span></li>
      <li><b>2 · See your score.</b><span>A 0–100 health score from {{ checks }} checks, and the issues that matter most.</span></li>
      <li><b>3 · Keep watching.</b><span>Give your email to unlock every URL per issue, a 500-page crawl and weekly monitoring with alerts.</span></li>
    </ol>
  </section>

  <section class="l-wrap l-cats" aria-labelledby="checks">
    <h2 id="checks">{{ checks }} checks after every crawl</h2>
    <ul>
      <li><b>Indexability</b><span>noindex, canonicals, robots.txt blocks</span></li>
      <li><b>Links and redirects</b><span>broken links, chains, loops</span></li>
      <li><b>On-page</b><span>titles, descriptions, headings</span></li>
      <li><b>Content</b><span>thin and duplicate pages</span></li>
      <li><b>Technical and sitemap</b><span>status codes, mixed content, sitemap health</span></li>
      <li><b>Social and schema</b><span>Open Graph, structured data</span></li>
    </ul>
  </section>

  <section class="l-wrap l-oss">
    <h2>Open source. Run it yourself.</h2>
    <p>CodoSEO is one Rust binary under AGPL-3.0: a CLI, an MCP server for your coding agent, and a self-hostable web app. The cloud runs the same code.</p>
    <p><code>cargo install codoseo</code></p>
  </section>
</main>

<footer class="l-wrap l-foot">
  <span>© SafrowLabs · AGPL-3.0</span>
  <span><a href="https://github.com/SafrowLabs/CodoSEO">GitHub</a> · <a href="/bot">About CodoSEObot</a> · <a href="/llms.txt">llms.txt</a></span>
</footer>
{% endblock %}