OpenSEO:开源 Semrush/Ahrefs 替代方案的数据源、自托管与 MCP Agent 集成实战【免费下载链接】open-seoOpen source alternative to Semrush and Ahrefs项目地址: https://gitcode.com/GitHub_Trending/op/open-seoOpenSEO 是一个定位为开源版 Semrush/Ahrefs的按量付费 SEO 工具套件,本文以仓库根目录 README.md 为主线,系统拆解它的六大 SEO 工作流、MCP 服务器与 Agent Skills 机制,并完整覆盖 Docker 与 Cloudflare 两条自托管路径的环境变量、部署命令与验证步骤,配合 compose.yaml、package.json 等仓库文件给出源码级佐证,读完即可独立完成部署、接入 AI Agent 并理解其成本模型。项目定位:为什么选 OpenSEOREADME 对项目的核心主张可以概括为四点:MCP 与 AI Skills 优先:OpenSEO 暴露一个 MCP 服务器,让 Claude Code、OpenClaw、Hermes 等任意 Agent 直接消费你的 SEO 数据;现代、简洁的 UI:以聚焦的工作流取代臃肿复杂的 SEO 套件;无订阅制:自带 DataForSEO API Key,只为实际消耗付费;可 Fork 改造:直接把仓库克隆下来改造成自己的定制工具。托管版本在 openseo.so 提供免费试用,托管订阅价格为 $10/月,用于支持项目维护。从 package.json 看,当前仓库版本为0.1.6,声明packageManager: pnpm10.30.1,主应用基于 TanStack Start、React 19、Vite 7 构建,部署目标为 Cloudflare Workers(wrangler、cloudflare/vite-plugin均在依赖中)。六大核心 SEO 工作流及其仓库映射README 列出的 Main SEO Workflows 与仓库中的功能目录一一对应,这也是理解整个代码库结构的地图:工作流客户端功能目录服务端函数Keyword researchsrc/client/features/keywordssrc/serverFunctions/keywords.tsRank trackingsrc/client/features/rank-trackingsrc/serverFunctions/rank-tracking.tsCompetitor Insightssrc/client/features/domainsrc/serverFunctions/domain.tsBacklinkssrc/client/features/backlinkssrc/serverFunctions/backlinks.tsSite Auditssrc/client/features/auditsrc/serverFunctions/audit.tsAI Visibilitysrc/client/features/ai-searchsrc/serverFunctions/ai-search.ts除界面外,同一批能力也以 MCP 工具形式暴露:从源码结构看,src/server/mcp/tools 下共有 37 个工具文件,覆盖关键词研究、排名追踪、外链、域名分析、站点审计、Search Console、GA4 与本地 SEO 等领域,说明UI 与 Agent 共用同一套数据层确实是这个项目的一等设计目标。MCP 服务器与 Agent SkillsOpenSEO 的 MCP 服务器在 src/server/mcp/server.ts 中统一注册工具。从该文件的导入清单可以直接读出工具面:项目与上下文:whoami、list_projects、create_project、get_project_context/update_project_context;关键词研究:research_keywords、get_keyword_metrics、get_ranked_keywords、get_serp_results、save_keywords、list_saved_keywords;排名追踪:create_rank_tracker、run_rank_tracker、get_rank_tracker、add_rank_tracking_keywords、remove_rank_tracking_keywords、estimate_rank_tracker_cost;域名与外链:get_domain_overview、get_domain_keyword_suggestions、get_backlinks_overview、get_backlinks_profile;站点审计:run_site_audit、get_audit_issues、get_audit_pages、get_audit_status;GSC / GA4:get_search_console_performance、inspect_urls以及一组get_google_analytics_*工具;本地 SEO:search_local_businesses、get_local_serp_results、get_google_business_questions、get_local_rank_grid等。Agent Skills则是可复用的工作流剧本,通过 MCP 指导 Agent 完成具体 SEO 任务。仓库内置 9 个 skill,位于 plugins/openseo/skills:seo-project-setup、keyword-research、keyword-clustering、competitor-analysis、competitive-landscape、link-prospecting、local-seo、seo-audit、seo-coach。以 plugins/openseo/skills/keyword-research/SKILL.md 为例,一个典型 skill 的写法说明了这套机制的工作方式:先调get_project_context把研究锚定在项目的业务概况与当前目标上,缺失时做最小补充并写回;花钱前检查研究日志——同一研究 30 天内跑过就直接复用,避免重复付费;依次调用research_keywords(每次 1-5 个种子词,默认取 150 条结果)、get_keyword_metrics(一次为最多 700 个词补充搜索量/KD/意图/CPC)、get_serp_results(歧义词才查 SERP);按匹配度、意图清晰度、难度、SERP 可竞争性而非纯搜索量排序,经用户确认后才调save_keywords保存并附标签。skill 文件采用 YAML frontmatter(namedescription) Markdown 正文的格式,用户也可以照此格式自建 skill,把 OpenSEO 定制成自己的工作流。MCP 接入文档见 web/content/docs/mcp.md。自托管路径一:Docker(最简路径)面向个人本地使用,官方推荐 Docker 方式,详见 docs/SELF_HOSTING_DOCKER.md。前提:Docker Desktop(或 Docker Engine Compose)、一个 DataForSEO API Key。快速开始:cp .env.example .env # 在 .env 中填入 DATAFORSEO_API_KEY(获取方式见 docs/DATAFORSEO_API_KEY.md) docker compose up -d打开http://localhost:PORT(默认3001)。首次启动会构建应用,耗时约 1-2 分钟,可用docker compose logs -f跟踪进度。安全模型(重要):Docker 模式下 compose 固定注入AUTH_MODElocal_noauth,即不做任何鉴权,应用内注入本地管理员用户adminlocalhost。这一事实可以直接在 compose.yaml 中看到——AUTH_MODElocal_noauth是显式写死在environment里的,同时ports只绑定127.0.0.1:${PORT:-3001}:${PORT:-3001},把容器流量限制在本地回环地址。因此官方强调:只应把它放在自己的鉴权反代、隧道或私有网络之后;需要公网主机名时追加ALLOWED_HOST:ALLOWED_HOSTyourdomain.com docker compose up -d环境变量全集(.env.example 提供了带注释的模板):变量默认值说明DATAFORSEO_API_KEY必填DataForSEO 的 Base64 凭据,SEO 数据的唯一来源PORT3001应用端口,且仅绑定 127.0.0.1ALLOWED_HOST空反代场景下允许的单主机名(Vite preview 校验用)AUTH_MODE由 compose 固定为local_noauth见上文安全模型OPEN_SEO_IMAGEghcr.io/every-app/open-seo:latest镜像 tag 覆盖,用于锁定版本OPENROUTER_API_KEY空(可选)启用 SAM 等 AI 功能所需OPENSEO_TELEMETRY_DISABLED/DO_NOT_TRACK空置1可关闭匿名遥测GOOGLE_CLIENT_ID/GOOGLE_CLIENT_SECRET/BETTER_AUTH_SECRET空(可选)Google Search Console 集成所需一个值得注意的 compose 细节:compose.yaml 除了显式environment列表,还通过env_file: .env把.env中所有值转发进容器,注释里明确说明这是为了避免OPENROUTER_API_KEY这类未显式列出的变量静默丢失。数据则通过卷open_seo_data:/app/.wrangler持久化本地 Wrangler 状态。遥测开关:OpenSEO 收集匿名心跳遥测(安装 ID、聚合计数、安装后前 2 小时每 5 分钟一次、之后至多每日一次),不收集 URL、关键词、提示词、邮箱或 IP 位置。关闭方式:在.env设OPENSEO_TELEMETRY_DISABLED1(或DO_NOT_TRACK1),然后docker compose up -d --force-recreate open-seo。版本锁定与本地构建:# 锁定镜像 tag OPEN_SEO_IMAGEghcr.io/every-app/open-seo:v1.2.3 docker compose up -d # 测试本地代码改动:自行构建镜像 docker build -f Dockerfile.selfhost -t open-seo:local . OPEN_SEO_IMAGEopen-seo:local docker compose up -d常用运维命令:docker compose up -d open-seo # 修改 env 后重启服务 docker compose pull docker compose up -d # 拉取最新发布镜像并重启 docker compose down # 停止 docker compose config # 确认 Compose 实际使用的环境变量健康检查与排障:启动自检信息出现在构建前(docker compose logs);运行后/api/health报告配置与数据库状态,docker compose ps报告容器健康。修改.env后必须docker compose up -d --force-recreate open-seo让容器重建以重新应用环境变量。自托管路径二:Cloudflare(团队/互联网暴露推荐)README 对需要多设备或团队访问的互联网暴露场景推荐 Cloudflare(免费套餐即可),详见 docs/SELF_HOSTING_CLOUDFLARE.md。一条pnpm deploy:selfhost命令完成全部供给,包括 Cloudflare Access 登录门。前提:Node 22.6(用corepack enable装好 pnpm)、已启用 R2 的 Cloudflare 账号(激活 R2 需要绑定支付方式,即使免费额度内)、DataForSEO 账号。部署五步:# 1) 克隆仓库(若希望持有自己的仓库,先 Fork 再克隆) git clone 你的 fork 地址或上游 open-seo 仓库 cd open-seo corepack enable pnpm install # 2) 登录 Cloudflare(一次) pnpm alchemy login # Customize OAuth scopes? 选 yes 并启用 access:write pnpm alchemy cloudflare bootstrap # 部署 alchemy 的 state-store Worker # 3) 创建 .env.selfhost cp .env.selfhost.example .env.selfhost # 填入 ACCESS_ALLOWED_EMAILS 等必需值 # 4) 部署 pnpm deploy:selfhost --yes # 5) 验证:打开部署结束打印的 Worker URL,用 Cloudflare Access 登录对照 package.json 中deploy:selfhost脚本可以看到这条命令的真实构成:node scripts/selfhost-deploy-preflight.mjs vite build --mode selfhost tsc --noEmit pnpm alchemy deploy --env-file .env.selfhost --stage selfhost。部署过程会供给 D1 数据库、KV 命名空间、R2 桶,应用数据库迁移,部署 Worker,并创建 Cloudflare Access 应用(恰好放行ACCESS_ALLOWED_EMAILS中列出的邮箱)。若想自己管理 Access 应用,则在.env.selfhost设置TEAM_DOMAIN与POLICY_AUD,部署即不再创建 Access 资源。更新与团队接入:git pull # 有 fork 时:git fetch upstream git merge upstream/main pnpm install pnpm deploy:selfhost --yes给队友开权限就是把其邮箱加入ACCESS_ALLOWED_EMAILS再重新部署(注意:对该 Access 策略的面板改动会在下次部署时被覆盖)。所有通过 Cloudflare Access 的用户共享同一个 workspace、看到相同的项目。排障与拆除:https://your-worker-hostname/api/health报告运行时配置与数据库状态;服务器错误看 Worker Logs 或pnpm exec wrangler tail;登录失败优先核对ACCESS_ALLOWED_EMAILS。整体拆除:pnpm alchemy destroy --env-file .env.selfhost --stage selfhost该命令会删除 Worker 及带 stage 后缀的 D1/KV/R2 资源(含数据)与 Access 应用。MCP 客户端连接与遥测的运维细节见 docs/SELF_HOSTING_CLOUDFLARE_OPERATIONS.md。数据源:DataForSEO API Key 与成本模型OpenSEO 本身不持有 SEO 数据,所有 SERP、关键词量、外链等数据都经由第三方 DataForSEO:在 DataForSEO 的 API Access 页面(无账号需先注册)点击 Send by email 获取凭据;复制其中标注Base64的长凭据——即email:password的 Base64 编码值。本地可用printf %s YOUR_LOGIN:YOUR_PASSWORD | base64自行生成验证;按部署路径设置DATAFORSEO_API_KEY:部署路径配置位置Docker 自托管.env(见 docs/SELF_HOSTING_DOCKER.md)Cloudflare 自托管.env.selfhost(见 docs/SELF_HOSTING_CLOUDFLARE.md);旧版按钮/Wrangler 部署则在 Worker 的Settings-Variables Secrets中设为 secret本地开发.env.local(见 docs/LOCAL_DEVELOPMENT.md)[package.json](https://link.gitcode.com/i/8916290c81c01dd2ee7f3ef2da2742b3)的cloudflare.bindings.DATAFORSEO_API_KEY描述也印证了这一格式:Base64 编码的login:password。成本模型:新 DataForSEO 账号附赠 $1 测试额度,最低充值 $50。自托管时你直接向 DataForSEO 付费,成本略低于官网估算——README 给出的解释是:托管服务通过在每一次 DataForSEO 请求上加收 28% 来盈利,自托管则省掉这部分。这也是按量付费、无订阅主张的具体含义:不用不花钱,用多少付多少。本地开发面向贡献者,完整说明见 docs/LOCAL_DEVELOPMENT.md:前提:Node.js 20、Corepack(Node 25 需单独安装)、DataForSEO 账号凭据。# 激活 package.json 声明的精确 pnpm 版本 corepack enable pnpm install --frozen-lockfile # 每个全新的本地库执行一次 pnpm run db:migrate:local注意用pnpm --version核对版本与packageManager字段一致,旧的全局 pnpm 会因 lockfile 不兼容而报错。然后:cp .env.example .env.local # 2) DATAFORSEO_API_KEY 填 base64 的 login:password # 3) 正常本地开发设 AUTH_MODElocal_noauth启动有两种方式:pnpm run dev # 直接起 Vite dev server # 推荐:通过 portless 运行,并把日志固定写入 .logs/dev-server.log,便于 coding agent 调试 pnpm dev:agentsdev:agents默认跑在http://open-seo.localhost:1355;在 git worktree 中时,host 会带上分支名前缀(如http://feature-name.open-seo.localhost:1355),天然支持多分支并行。数据库:默认后端是 D1(SQLite);本地迁移pnpm run db:migrate:local,生成迁移pnpm run db:generate(会同时生成 D1 与 Postgres 两套,见 drizzle.config.ts 与 drizzle-pg.config.ts 对应 drizzle 和 drizzle-pg 两个迁移目录)。需要 Postgres 后端(官方描述为出 D1 容量后的可选后端)见 docs/LOCAL_POSTGRES.md。三种鉴权模式(.env.example 与 LOCAL_DEVELOPMENT.md 均给出说明):AUTH_MODE行为cloudflare_access(默认)校验 Cloudflare Access JWT(cf-access-jwt-assertion),需TEAM_DOMAINPOLICY_AUDlocal_noauth本地可信模式,不做鉴权检查,注入adminlocalhosthostedBetter Auth 邮箱/密码模式,另需BETTER_AUTH_SECRET、BETTER_AUTH_URL及 Better Auth schema 生成dev 脚本不设置AUTH_MODE,所以改.env.local即可切换模式做测试。质量保障:仓库用 vitest 跑单测(pnpm test,配置见 vitest.config.ts),Playwright 跑 E2E(见 e2e 下域名总览、关键词研究等规格),ci:check脚本串联了 prettier 检查、knip 死代码检测、两轮tsc --noEmit、oxlint 以及 skill 同步校验,自托管部署前还有selfhost-deploy-preflight.mjs预检——这些在 package.json 的 scripts 中都可查证。参与贡献README 将提清晰的 issue列为首选贡献方式,详细说明在 docs/CONTRIBUTING.md,并提供了辅助 skill:npx skills add every-app/open-seo --skill simple-issue-description社区方面,项目提供 Discord 群组用于讨论,更新则通过 X(bensenescu)与官网邮件列表发布;版本发布记录沉淀在仓库 release-notes 目录(当前覆盖到 v0.1.6)。如果你想深入某个模块,建议从本文表格中的功能目录与 src/server/mcp/server.ts 入手,前者是 UI 与数据的入口,后者是全部 Agent 可用工具的一览表。【免费下载链接】open-seoOpen source alternative to Semrush and Ahrefs项目地址: https://gitcode.com/GitHub_Trending/op/open-seo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考