indexflow-seo
A blazing-fast, zero-dependency Technical SEO Quality Gate & GEO (Generative Engine Optimization) Auditor written in pure Rust.
Key Features
- 🛡️ Technical SEO Gatekeeper: Pre-flight validation for HTTP status codes, Canonical declaration equivalence,
noindex/nofollowrobots directives,<title>tags, and<h1>headings. - 🤖 GEO & AI Bot Auditing: Audits crawler exclusion directives for
GPTBot/ChatGPT-User,PerplexityBot,ClaudeBot/anthropic-ai, andGoogle-Extended— including per-botX-Robots-Tagheaders andnone/noai. - 📑 Schema.org Structured Data: Extracts
application/ld+jsonblocks, expands@graphand top-level arrays, and maps@type(string or array). - 🌐 Social & Multilingual Metadata: Parses OpenGraph, Twitter Card tags, and
link rel="alternate" hreflangarrays. - ⚡ Pure In-Memory Evaluation: Char-boundary-safe HTML scanner (CJK / emoji never panic). Quote-aware tags, unquoted attributes, multiline meta, HTML comments and
<script>/<style>skipped for visible tags. - 🚀 Optional Non-Redirecting Prober: Lightweight async HTTP client that treats 3xx redirects as actionable gate issues, with a 5 MiB body cap.
Installation
Add this to your Cargo.toml:
[]
= "0.1.2"
Feature Flags
probe(default): Enables the async HTTPSeoProbeClientviareqwest(with pure Rustls TLS).
Quick Start
1. Pure In-Memory HTML Evaluation (Zero-I/O)
use evaluate_html;
2. Async HTTP Quality Prober (with probe feature)
use SeoProbeClient;
use Duration;
async
🛡️ Gate Rules & Criteria
indexflow-seo enforces the following pre-flight checks before approving a URL for search engine submission:
- HTTP Status: Must strictly return
200 OK. - Robots Directives: Neither
<meta name="robots" content="noindex">(ornone) norX-Robots-Tag: noindexmay be present. - Canonical Normalization: Declared
<link rel="canonical">must match the page URL. Handles relative and protocol-relative paths,./..segments, default ports 80/443, trailing slashes, scheme/host case, query-parameter order, and percent-encoding. Path case is preserved (case-sensitive). - Title Tag: Must contain a valid, non-empty
<title>element.
Changelog
0.1.2
- Char-boundary-safe HTML scanner: CJK / emoji, quote-aware
>, unquoted URL attributes, multiline meta, comments and raw<script>/<style>skipped for visible tags. - JSON-LD expands
@graph, top-level arrays, and array-typed@type; CDATA wrappers tolerated. - Single-pass entity decode (HTML named Latin-1 +
&#N;/&#xN;); no double-decode of&lt;. - Canonical matching: sorted query params,
../per RFC 3986, protocol-relative URLs,%7E≡~. - GEO: AI-bot aliases,
none/noai, per-botX-Robots-Tag; probe body capped at 5 MiB.
License
Dual-licensed under either of: