OpenSource-Hub

open-seo

애플리케이션

every-app/open-seo

Semrush와 Ahrefs를 대체하는 오픈 소스 SEO 도구.

개요

OpenSEO는 종량제 SEO 도구로, 키워드 리서치, 순위 추적, 백링크 분석, 사이트 감사 등의 기능을 제공하며 MCP를 통해 AI 에이전트와 연동됩니다. 셀프 호스팅을 지원하며, 데이터는 DataForSEO API에서 제공됩니다.

README 미리보기

# OpenSEO\n\n> Open source alternative to Semrush and Ahrefs\n\nOpenSEO is an SEO tool for _the people_. If tools like Semrush or Ahrefs are too expensive or bloated, OpenSEO is a pay-as-you-go alternative that you actually control.\n\n> All-in-one SEO tool for you and your AI agent.\n\nConnect with any agent like Claude Code, OpenClaw or Hermes. We have pre-built skills, but you can build your own to tailor OpenSEO to your needs.\n\n\n\n## Table of Contents\n\n- [Why use OpenSEO?](#why-use-openseo)\n- [Main SEO Workflows](#main-seo-workflows)\n- [OpenSEO MCP](#openseo-mcp)\n- [OpenSEO Agent Skills](#openseo-agent-skills)\n- [Roadmap](#roadmap)\n- [Community](#community)\n- [Pricing / Costs (Free + API costs)](#pricing--costs)\n- [DataForSEO API Key Setup](#dataforseo-api-key-setup)\n- [Google Search Console](#google-search-console)\n- [Self-hosting](#self-hosting)\n  - [Docker Self Hosting](#docker-self-hosting)\n  - [Cloudflare Self-Hosting](#cloudflare-self-hosting)\n- [Local Development](#local-development)\n- [Contributing](#contributing)\n- [SEO API Cost Reference](#seo-api-cost-reference)\n\n## Hosted Version\n\nIf you not interested in self hosting, or just want to support the project, we also have a hosted version:\n\n[openseo.so](https://openseo.so)\n\n## Why use OpenSEO?\n\n- Best in class MCP and AI Skills.\n- Modern, simple UI.\n  - Focused workflows instead of a bloated, complex SEO suite.\n- No subscriptions.\n  - Bring your own DataForSEO API key and pay only for what you use.\n- Fork and vibe code your own custom tool.\n\n## Main SEO Workflows\n\n- Keyword research\n  - Find topics worth targeting, estimate demand, and prioritize what to write next.\n- Rank tracking\n  - Monitor keyword positions across desktop and mobile over time, with SERP feature detection.\n- Domain insights\n  - Understand where your domain is gaining or losing visibility so you can focus on the pages that move revenue.\n- Backlinks\n  - See who links to your site, which pages

FAQ (5)

문제 해결
pnpm dev를 실행할 때 발생하는 SolidJS "No matching export ... for import 'use'" 오류는 어떻게 해결하나요?

이 문제는 @tanstack/react-devtools 0.10.12가 @tanstack/devtools-ui 0.7.1을 끌어오면서 발생하며, 이 패키지는 use를 내보내지 않는 SolidJS 1.9.11 서버 빌드에서 use를 임포트합니다. VITE_SHOW_DEVTOOLS=false로 설정해도 devtools가 src/routes/__root.tsx에서 정적으로 임포트되기 때문에 도움이 되지 않습니다.

우회 방법: @tanstack/react-devtools를 마지막 호환 버전으로 고정합니다:

"@tanstack/react-devtools": "0.10.8"

그런 다음 의존성을 업데이트합니다:

pnpm install --no-frozen-lockfile
pnpm dev

이렇게 하면 @tanstack/devtools-ui 0.6.0으로 해결되어 개발 서버를 시작할 수 있습니다. 더 깔끔한 영구적인 해결책은 커밋 db8bde17e245d01f9ca4ab06acaf37fe22aac361에서 구현된 것처럼 src/routes/__root.tsx에서 클라이언트 전용 동적 임포트로 devtools를 로드하는 것입니다.

원본 Issue #382
문제 해결
사이트 감사가 단어 수를 실제보다 적게 계산하고 minified HTML에서 thin-content 경고를 잘못 표시하는 이유는 무엇인가요?

이는 open-seo의 v0.1.16 이전 버전에 존재하는 버그입니다. 공백 없이 붙어 있는 블록 레벨 태그(예: <p>one</p><p>two</p>)가 하나로 연결된 텍스트(onetwo)로 파싱되어 단어 수가 실제보다 적게 계산되고 잘못된 thin-content 경고가 발생했습니다. 또한 <li>, <td>, <br> 요소에도 영향을 미쳤으며, 동등한 HTML에 대해 서로 다른 콘텐츠 해시를 생성했습니다. 해결 방법: open-seo를 v0.1.16 이상으로 업그레이드하세요(commit 756538cc5에서 수정됨). 업그레이드 후에는 압축된(minified) HTML과 포맷된 HTML이 동일한 단어 수와 콘텐츠 해시를 생성하며, Open<strong>SEO</strong>와 같은 인라인 마크업은 여전히 하나의 단어로 계산됩니다.

원본 Issue #400
문제 해결
이전 메시지를 읽으려고 위로 스크롤하는 동안 SAM 채팅이 맨 아래로 다시 스크롤되는 것을 막으려면 어떻게 해야 하나요?

이 문제는 messages가 업데이트될 때마다 채팅 스크롤 컨테이너가 하단에 고정되기 때문에 발생합니다. SAM의 스트리밍 응답 중에는 각 토큰마다 업데이트가 발생하므로 화면이 즉시 다시 아래로 당겨집니다. 해결 방법은 채팅 자동 스크롤 수정이 포함된 릴리스로 업데이트하는 것입니다. 코드 우회 방법으로는 SamConversation과 OnboardingChatConversation에서 사용자가 이미 하단 근처에 있을 때만 자동 스크롤하도록 하면 됩니다. 예: const nearBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 80; if (nearBottom) el.scrollTop = el.scrollHeight;. 메시지가 변경될 때마다 scrollTop = scrollHeight를 강제하지 마세요.

원본 Issue #160
문제 해결
왜 open-seo Docker 컨테이너는 재시작할 때마다 `vite build`를 실행하고 응답하는 데 90초가 걸리나요?

v0.1.0 셀프 호스트 이미지는 시작 명령에서 pnpm run build를 조건 없이 실행하여 서빙 전에 Vite 클라이언트/SSR 번들을 다시 빌드하고 tsc --noEmit을 실행합니다. 해결 방법은 PR #120이 포함된 이미지를 사용하는 것입니다. 시작 스크립트는 Vite에 인라인된 VITE_* 변수와 이미지 빌드 ID를 해시하여 빌드 출력을 영구 데이터 볼륨에 캐시하고, 둘 모두 변경되지 않은 경우 빌드를 건너뜁니다. 또한 런타임 tsc --noEmit 검사도 제거됩니다. 데이터 볼륨이 마운트된 상태를 유지한 채 docker compose pull && docker compose up -d로 업데이트하세요. 첫 시작 시에는 여전히 빌드가 수행될 수 있지만, 이후 재시작에서는 빌드를 건너뜁니다. 빌드에 영향을 주는 VITE_* 변수를 변경하거나 이미지를 업데이트하면 재빌드가 트리거됩니다. v0.1.0을 계속 사용해야 한다면 PR #120 기반 이미지를 빌드하거나 실행하세요. 이전 이미지에는 시작 빌드를 비활성화할 수 있는 내장 플래그가 없습니다.

원본 Issue #100
문제 해결
nextCheckAt이 과거에 멈춰 있고 lastSkipReason이 null일 때 예약된 순위 추적 검사가 실행되지 않는 이유는 무엇인가요?

이 문제는 예약된 순위 확인 cron이 nextCheckAt을 갱신하거나 실행 행을 생성하기 전에 실패할 때 발생합니다. 수동 확인은 다른 코드 경로를 사용하므로 여전히 성공할 수 있습니다. 호스티드 이슈는 스케줄러 커밋 f048dc3bd1c671e28aa4ceaaf22ca6663cdcb321 및 eec998a76233bb33e2dddbd921fc81da2eba1e0a를 배포하여 수정되었으며, 스케일링 관련 장애 이후 데이터베이스 용량도 증설되었습니다. 셀프 호스팅 인스턴스의 경우: 1) 해당 커밋이 포함된 릴리스로 업그레이드하세요. 2) cron 로그에서 [cron] Error processing config와 영향을 받는 config ID를 검색하세요. 예: grep '\[cron\] Error processing config' app.log | grep -E 'aea7a4ae-b6f3-4334-8196-eb9406d20dbf|845f59d5-c4cd-440f-953a-2be68374ca38'. 3) 데이터베이스 CPU, 연결, 지연 시간 및 리소스 고갈을 확인하고 필요한 경우 증설하세요. 4) 즉각적인 해결 방법으로 **Check rankings**를 수동으로 사용하세요. 이는 순위를 업데이트하지만 멈춘 스케줄을 복구하지는 않습니다. 5) 수정 사항을 배포한 후 nextCheckAt이 계속 멈춰 있는 config는 재큐에 넣거나 지원팀에 문의하세요.

원본 Issue #198