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. - 🔗 Cross-Layer Conflict Auditing: Detects fatal discrepancies between RFC 5988 HTTP
Link: <...>; rel="canonical"headers (often injected by CDN/Edge middleware) and HTML<link rel="canonical">body declarations. - 🔀 Strict Redirect Semantics: Surfaces unmasked first-hop redirect codes; flags
302/307temporary redirects that leak PageRank link equity, catches missingLocationheaders, and blocks redirect loops before wasting search engine crawl quota. - 🎥 VideoObject Semantic Integrity: Audits Schema.org
VideoObjectstructures to assertembedUrlandcontentUrldo not mistakenly self-reference the host HTML page — preventing Googlebot video transcoders from crashing with"Cannot process video". - 🤖 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 (including
og:videoandog:typeconsistency checks), Twitter Card tags, andlink 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.4"
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. 3xx redirects require validLocationheaders, must not self-loop, and are blocked from direct engine submission to avoid wasting quota. - Cross-Layer Canonical Equivalence: Declared HTTP
Link: <...>; rel="canonical"headers must match HTML Body<link rel="canonical">targets to prevent crawling deadlocks. - Robots Directives: Neither
<meta name="robots" content="noindex">(ornone) norX-Robots-Tag: noindexmay be present. - Canonical Normalization: Declared canonical URLs must match the page URL. Handles relative/protocol-relative paths,
./..segments, default ports (80/443), trailing slashes, scheme/host casing, query parameter ordering, and percent-encoding. - VideoObject Self-Loop Assertion: Schema.org
VideoObject.embedUrlandcontentUrlmust not resolve to the host HTML page URL. - Title Tag: Must contain a valid, non-empty
<title>element.
Changelog
0.1.4
- Architectural Refactor: Decoupled
evaluator.rsandextractor.rsinto single-responsibility functional modules (html_utils,content,schema,meta,headers,gate,warnings) without nested directory boilerplate. - Cross-Layer Conflict Audit: Added RFC 5988 HTTP
Linkheader parsing and cross-checked against HTML canonical/hreflang tags. - VideoObject Semantic Verification: Added deep
VideoObjectentity extraction with self-reference prevention (embedUrl/contentUrlvs host page) and media stream extension checks (.mp4,.m3u8, etc.). - Redirect Semantics Enforcement: Non-following HTTP probe now flags
302/307temporary redirects that leak PageRank link equity, catches missingLocationheaders, and blocks redirect loops. - Social Tag Consistency: Added
og:videoextraction and mismatch warnings whenog:typeis declared asvideo.*without accompanying media.
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: