Self-hosted SEO auditing that crawls your entire website and surfaces critical issues — broken links, duplicate meta tags, redirect loops, and more — before they hurt your rankings.
SEOnaut is an open-source SEO auditing tool built in Go that performs deep website crawls and produces structured reports organized by severity. Rather than requiring you to trust a third-party service with your site’s full URL map, SEOnaut runs entirely on your own infrastructure, giving you complete control over crawl scope, frequency, and data retention.
The tool checks dozens of SEO signals across every page it discovers: broken links (4xx/5xx status codes), canonical tag correctness, meta title and description completeness and duplication, proper heading hierarchy, hreflang implementation, image alt attributes, page indexability flags, mobile viewport configuration, HTTPS security, and more. Issues are grouped into critical, high, and low severity tiers so you can prioritize fixes by actual impact.
SEOnaut ships with a web-based dashboard powered by Apache ECharts that visualizes crawl results interactively. A pub-sub architecture streams real-time crawl progress to the browser over WebSockets, and completed crawls can be exported for offline analysis. The project also supports WACZ web archive creation and replay, letting you preserve snapshots of the crawled state for historical comparison.
Deployment is straightforward via Docker Compose: a single YAML file brings up the Go application alongside a MySQL 8 database, with environment variables for all configuration overrides. A hosted version is available at seonaut.org for teams that want the same capabilities without managing their own infrastructure.
Architecture SEOnaut follows a clean layered architecture that separates concerns at each tier: an HTTP presentation layer in routes, a services layer containing all business logic, a repository layer for database access, and a dedicated crawler package that operates independently of the web layer. A pub-sub broker decouples the crawler from the dashboard, allowing real-time progress events to flow to WebSocket subscribers without creating direct coupling between the crawl engine and the HTTP handlers. The container pattern is used for dependency injection, wiring all services together at startup with explicit initialization order rather than global state or reflection-based injection. This makes the dependency graph transparent and testable.
Tech Stack The backend is written in Go with standard library HTTP routing augmented by Gorilla sessions and securecookie for authentication state. MySQL 8 serves as the primary data store accessed via raw SQL through the go-sql-driver, with golang-migrate handling schema versioning. The crawler uses antchfx/htmlquery for XPath-based HTML parsing, with dedicated packages for robots.txt checking, sitemap parsing, and URL deduplication via in-memory storage maps. The frontend is minimal: custom CSS with vanilla JavaScript, using Apache ECharts for interactive chart rendering and Gorilla WebSocket for live crawl streaming. Deployment targets Docker with official Compose files providing the full application stack.
Code Quality The codebase maintains strong quality signals throughout. There are approximately 38 test files covering crawler queue logic, robots.txt parsing, URL storage, individual issue reporters, HTML parser behavior, service-level integration, and renderer output — providing broad unit test coverage of the most critical paths. Error handling is explicit and propagated via standard Go error returns rather than swallowed. Interface-based abstractions are used throughout — the repository layer uses interfaces typed per service rather than concrete structs, making both testing and future storage backend swaps straightforward. The project includes a GitHub Actions CI workflow running tests on each push, a Makefile for build automation, and a Go Report Card badge indicating conformance with standard Go tooling.
What Makes It Unique SEOnaut’s most distinctive technical contribution is its dual issue reporter architecture: page-level reporters run during the crawl itself and analyze each page in isolation, while multi-page reporters run as SQL queries over the completed crawl dataset to detect cross-page issues like duplicate meta titles, orphaned pages, and broken hreflang cross-references. This separation means single-page issues are caught with zero additional storage overhead, while cross-site patterns are detected efficiently via set operations in the database. The WACZ web archive integration — allowing crawled states to be preserved and replayed — is also unusual for an open-source SEO tool and provides capabilities typically found only in enterprise crawlers.
SEOnaut is released under the MIT License, which is one of the most permissive open-source licenses available. This means you can use it commercially, modify the source code, distribute it, and incorporate it into proprietary workflows without any copyleft obligations. There are no restrictions on what you build with it or how many sites you audit. The only requirement is that the original copyright notice and license text be included in any redistributed copies of the software itself.
Running SEOnaut yourself requires a persistent host capable of running Docker — a VPS, a dedicated server, or a container platform such as Kubernetes or Fly.io all work. The application needs MySQL 8 as a companion service, which the official Docker Compose configuration provisions automatically. Operationally, you are responsible for keeping the database backed up, rotating the application when new versions are released, and managing disk space as crawl history accumulates. Crawls of large sites (the default limit is 20,000 pages per crawl) can be memory- and CPU-intensive during the crawl window, so sizing the host appropriately for your largest project matters.
Compared to managed SEO SaaS platforms like Ahrefs or SEMrush, self-hosting SEOnaut means you forgo cloud-scale link databases, keyword research tools, competitor analysis, rank tracking, and managed uptime. There is no official support tier, no SLA, and no automatic cloud backup — these are entirely your responsibility. The seonaut.org hosted version offers the same crawling capabilities without infrastructure management for teams that want the tool’s feature set without the operational overhead.
No Code Platforms · AI Development · Developer Tools
Visual LLM workflow platform with RAG pipelines, agent capabilities, and model management for building production AI applications.
Developer Tools · Game Development · Design Tools
Free, MIT-licensed 2D and 3D game engine with one-click multi-platform export and no royalties.
Developer Tools · Databases · Search
The open-source Postgres development platform that replaces Firebase with authentication, real-time APIs, edge functions, storage, and vector embeddings — all built on PostgreSQL.