Guide · SEO tools

How to Self-Host OpenSEO on Cloudflare

The complete guide, with the real problems I solved — including a silent bug on Google Search Console that looked like a token problem and wasn’t.

Frequently asked questions

Self-hosting FAQ

Do I need to enable the Google Search Console API?

Yes, always, regardless of how you configure the OAuth credentials. It’s step 2 in the Search Console section, and it’s the most common cause of connections that look successful but end up stuck on "Connection expired." Since version 0.1.13, OpenSEO tells you itself.

How do I update OpenSEO without losing data?

Back up the database first with wrangler d1 export, then pull the new code and redeploy: with Alchemy, pnpm deploy:selfhost --yes is enough; with a manual Wrangler install, pnpm run deploy, after setting your wrangler files aside. The full steps are in the Ongoing maintenance section.

Is Cloudflare Access required?

Yes, if you choose the Cloudflare route. The deploy creates it automatically and limits access to the emails in ACCESS_ALLOWED_EMAILS.

Can I skip all this complexity?

Yes: use Docker locally. You lose the ability to access it from any device, but you skip authentication, secrets, and OAuth almost entirely.

Where can I find more resources?

The official site is openseo.so, and the code and full documentation live in the every-app/open-seo repository on GitHub.

Next step

Need a hand with SEO or technical setup?

A free audit to work out where to start, no commitment.