Deploy OpenSEO Site Audit

Open-source SEO site audits on your own server

Deploy OpenSEO Site Audit

Just deployed

/app/.wrangler

Just deployed

Deploy and Host self hosted OpenSEO Site Audit (Open-Source SEO Tool) on Railway

Deploys OpenSEO, the open-source SEO tool, as a private app behind a Caddy login gateway. Crawl your own site for status codes, redirects, titles and broken links. Built for site owners who want audits without a desktop crawler licence.

About Hosting OpenSEO Site Audit open-source software on Railway (self hosted OpenSEO site audit template)

Your crawl data stays on your own volume here. Audit results, projects and agent state live in the SQLite database on that volume, not in a vendor account.

Railway handles the parts you would otherwise babysit: TLS, the public domain, health checks and restarts. The image builds at boot, so the first deploy takes about two minutes before the gateway lets you in.

Why Deploy OpenSEO Site Audit, the Screaming Frog alternative on Railway (Railway Free Trial)

Screaming Frog is a desktop crawler with a free page cap and a licence once you outgrow it. OpenSEO runs the crawl on your own Railway service instead, so audits fire from any machine and results sit in your volume, not a laptop. The $5 trial covers a first look before you commit.

Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying OpenSEO Site Audit on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.

Railway vs Other Hosting Providers and VPS for OpenSEO Site Audit self hosting

Railway ships the image, gateway login and volume; a VPS leaves the proxy and TLS to you.

ProviderWhat You Get with RailwayWhat You Get with the Other Provider
DigitalOceanTemplate deploy, volume for SQLite, login and TLS includedA Droplet where you install Docker, write compose, add a proxy and certificates
AWSSame template, generated password, private app portECS or EC2 where you design networking, storage and TLS first
HetznerManaged deploy on the same image, no server adminRaw compute, but firewall, proxy and backups are yours

Either way the crawl runs locally; the difference is who carries the setup.

Common Use Cases for hosted OpenSEO Site Audit

  • Pre-launch check: crawl a staging or new domain before DNS points at it. Missing titles, duplicate meta descriptions and 4xx responses show up while they are still cheap to fix.
  • Broken links and redirect chains: crawl a site that has grown for years and get the 404s and multi-hop redirects to collapse.
  • Client report: run the audit from your own instance and share the findings without a desktop crawler licence or an SEO suite seat.
  • Re-running after fixes: crawl again once the redirect map ships. The issue list before and after is what proves the work landed.
  • Pages that need JavaScript: with rendering off, client-rendered pages come back thin. That gap is itself a finding: fix the markup or add a renderer key.

Dependencies for OpenSEO Site Audit Docker hosted on Railway

This template runs two services. The Gateway (caddy:2.11.7-alpine) is the only public service, on port 8080 with /healthz and basic auth from OPENSEO_PASSWORD; its Caddy config comes from CADDYFILE_B64.

Deployment Dependencies for Managed OpenSEO Site Audit Service (SEO Tools)

On OpenSEO set AUTH_MODE=local_noauth, CLOUDFLARE_INCLUDE_PROCESS_ENV=true, PORT=3001, ALLOWED_HOST=.railway.app, BETTER_AUTH_SECRET and VITE_SHOW_DEVTOOLS=false; DATAFORSEO_API_KEY is optional. CONTEXT_API_KEY is optional: without it, Render JavaScript stays disabled on Docker installs.

Implementation Details for OpenSEO Site Audit (Using OpenSEO official docker image)

The image has no start command: it builds at boot for about 1-2 minutes, peaks near 4 GB, then idles around 0.7 GB. A redeploy means about 2 minutes of downtime while the new container builds. Fetched documents cap at 1 MiB.

How does OpenSEO Site Audit compare against other SEO site audit tools

The four below are desktop crawlers or suite features. OpenSEO runs the crawl as one workflow inside a small self-hosted app.

OpenSEO vs Screaming Frog (Screaming Frog Alternative)

  • Where OpenSEO wins: No desktop install, and an agent can start the crawl over MCP.
  • Depth: Screaming Frog reads structured data, hreflang and duplicate content that OpenSEO skips.
  • JS rendering: Screaming Frog renders in the app; OpenSEO needs CONTEXT_API_KEY, off here.
  • Licence: Free tier caps pages and the full crawler is paid; OpenSEO is MIT.

OpenSEO vs Ahrefs Site Audit (Ahrefs Alternative)

  • Where OpenSEO wins: Crawl data stays on your SQLite volume, with no suite subscription.
  • Scale: Ahrefs crawls big sites in the cloud with no sizing from you, backed by its link index.
  • History: Ahrefs keeps crawl trends; OpenSEO v0.1.x makes you re-run and compare yourself.

OpenSEO vs Semrush Site Audit (Semrush Alternative)

  • Where OpenSEO wins: No seat count or monthly plan, and the audit sits beside keyword and rank tools.
  • Breadth: Semrush is a closed suite with its own databases, so it answers questions OpenSEO can't.
  • Checks: Semrush ships far more explained checks; OpenSEO's issue list is smaller.

OpenSEO vs Sitebulb (Sitebulb Alternative)

  • Where OpenSEO wins: Server-side, no desktop install, and MCP agent access comes built in.
  • Reports: Sitebulb's visual reports and hint explanations are better for client handoffs.
  • Rendering: Sitebulb handles JS and large crawls on desktop and cloud; OpenSEO needs a renderer key.

How to use OpenSEO Site Audit (the OSS open-source SEO tool)?

  1. Open your Railway gateway domain, sign in as admin with OPENSEO_PASSWORD from the Gateway service variables.
  2. Add your site as a project.
  3. Open Site Audit and start a crawl with Render JavaScript off. It stays off on Docker installs unless CONTEXT_API_KEY is set, and the form shows it disabled otherwise.
  4. Wait for the crawl. Blocked pages and 429 rate_limited responses show up as their own statuses rather than silent gaps.
  5. Review issues by type: status codes, redirect chains, titles, meta descriptions, headings, links. Results land in the SQLite database on the volume.
  6. Fix what it reports, then re-run the audit to confirm the change.

DATAFORSEO_API_KEY only feeds keyword, rank and backlink data, not the crawl.

How to self host OpenSEO Site Audit on other VPS Services (OpenSEO self hosting guide)

Any Docker host works. Upstream covers this in SELF_HOSTING_DOCKER.md.

Clone the Repository

git clone https://github.com/every-app/open-seo
cd open-seo

Install Dependencies

Node 22 and Docker. The app builds at boot, so give the first run about 4 GB of memory before it settles.

Configure Environment Variables

cp .env.example .env

Set DATAFORSEO_API_KEY (base64 of login:API password), ALLOWED_HOST=your-domain and PORT=3001. Leave Render JavaScript off unless you have CONTEXT_API_KEY.

Start the OpenSEO Site Audit Application

docker compose up -d

Open http://your-domain:3001, add your site as a project and run the audit. Docker mode runs with app auth disabled, so put it behind your own auth proxy or tunnel and set ALLOWED_HOST to the real hostname, otherwise you get Blocked request.

Railway handles the basic auth gateway, the volume and the restarts for you.

Official Pricing of OpenSEO Site Audit (OpenSEO pricing)

OpenSEO is MIT licensed and free to self host here. There's no subscription, per-seat fee or desktop crawler licence. You pay Railway, roughly $5-15 a month at light use, plus DataForSEO per request. The hosted openseo.so plan is $10 a month and adds 28% to each DataForSEO call.

OpenSEO Site Audit cloud vs self hosted comparison (Pricing, features, costs, and more)

The hosted openseo.so charges a monthly fee plus a DataForSEO markup. Self hosting keeps the site audit in your Railway project, and you pay Railway plus your own DataForSEO usage.

Monthly cost of self hosting OpenSEO Site Audit on Railway

Expect about $5-15/mo at light use for OpenSEO and the Caddy gateway, plus DataForSEO usage for keyword, rank and backlink data. Audits use OpenSEO's fetcher, so a crawl does not bill DataForSEO. The $5 trial covers first runs.

System Requirements for Hosting OpenSEO Site Audit on a VPS

Budget around 4 GB of RAM for the first boot, when the image builds the app with Node 22 and workerd. It then idles near 0.7 GB, and the gateway uses a few MB.

Frequently Asked Questions (FAQs)

Does running a site audit spend DataForSEO credits?

No. The crawler fetches pages itself, so the audit doesn't bill DataForSEO. Keyword, rank and backlink data do use your own key.

Why do some crawled pages show as blocked?

Pages behind bot challenges come back blocked, and 429 responses are marked rate_limited with a shared backoff. That's the site's edge, not a broken install.

Can OpenSEO render JavaScript during an audit?

Only with a renderer configured. Docker installs have no browser, so Render JavaScript stays disabled unless CONTEXT_API_KEY is set. Leave it off here.

How many pages can one audit crawl?

There's no fixed page cap in the docs, but fetched documents are capped at 1 MiB. Keep the starting scope small, check the crawl time, then widen it.

Where are audit results stored?

In the SQLite database on the /app/.wrangler volume, so results survive restarts. A redeploy means about two minutes of downtime while the new container builds.

Can my AI agent start and read audits?

Yes if your version exposes MCP tools. Point it at https://your-domain/mcp with basic auth for admin and your OPENSEO_PASSWORD, and it can run audits and pull findings.


Template Content

More templates in this category

View Template
NEW
Typesense Multilingual
Locale-aware multilingual search with Typesense

onepush
0
View Template
Formbricks | Open-Source Typeform & Qualtrics Alternative
Surveys, NPS and in-app feedback on your own Postgres, Hub and Cube

Two Workspaces
2
View Template
Typesense PHP
official PHP client against Railway

onepush
0