본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 17. 11:32

Python으로 무료 AI SEO 감사 도구를 만들었습니다 — CrawlIQ의 작동 방식

요약

Python의 aiohttp와 BeautifulSoup을 활용하여 구축한 AI 기반 SEO 감사 도구 'CrawlIQ'의 개발 과정과 기술적 원리를 설명합니다. 단순한 오류 탐지를 넘어 데이터 수집부터 지능적인 우선순위 선정까지의 메커니즘을 다룹니다.

핵심 포인트

  • aiohttp를 이용한 비동기 HTTP 요청으로 대규모 URL 데이터 수집 속도 최적화
  • BeautifulSoup을 활용한 HTML 파싱 및 데이터 구조화
  • 단순 이슈 나열이 아닌 맥락 기반의 지능적 우선순위 결정 방식
  • 실제 수정 가능한 메타 데이터 및 제목 태그 생성 기능

그리고 이를 구축하며 배운, 그 어떤 강의에서도 배울 수 없었던 기술적 SEO (Technical SEO)에 대한 것입니다.

창피한 고백부터 시작해 보겠습니다.

저는 클라이언트 사이트의 빨간색 오류 벽을 바라보며 Screaming Frog 앞에 앉아 있었고, 그중 절반이 왜 표시되었는지 진심으로 이해하지 못했습니다. H1 태그가 누락되었다는 것은 알고 있었습니다. canonical 태그가 무엇을 해야 하는지도 알고 있었습니다. 하지만 "이 태그가 잘못되었다"와 "이것이 당신의 트래픽이 죽어가는 이유이다" 사이의 연결 고리 — 그 간극은 저에게 매우 실재하는 문제였습니다.

그래서 저는 약간 집착하는 사람이라면 누구나 할 법한 일을 했습니다.

저는 처음부터 저만의 감사 도구를 직접 만들었습니다. Screaming Frog나 Ahrefs가 충분히 좋지 않아서가 아니었습니다. 웹사이트의 내부에서 실제로 어떤 일이 일어나고 있는지 진정으로 이해할 수 있는 유일한 방법은, 제가 직접 그 내부를 들여다보는 무언가를 만드는 것이었기 때문입니다.

그 도구가 바로 CrawlIQ입니다. 그리고 이것은 그것이 어떻게 작동하는지, 그리고 이를 구축하면서 이론으로만 접했을 때는 결코 배우지 못했던 기술적 SEO (Technical SEO)에 대해 무엇을 배웠는지에 대한 이야기입니다.

아무도 말하지 않는 문제

대부분의 SEO 감사 도구에는 이런 문제가 있습니다. 도구들은 무엇(what)이 잘못되었는지는 알려주지만, 당신의 특정 사이트에 왜 지금(why it matters right now) 그것이 중요한지는 알려주지 않습니다.

감사를 실행합니다. 47개의 이슈 목록을 받습니다. 메타 설명(Meta descriptions)이 너무 김. H2 누락. 중복된 제목(Duplicate titles). 좋습니다. 이제 어쩌라는 걸까요?

대부분의 도구는 모든 이슈를 동일한 긴급도로 취급합니다. 하지만 홈페이지의 H1 누락은 아무도 방문하지 않는 페이지네이션 아카이브 페이지의 H1 누락과는 다릅니다. 두 개의 제품 페이지에 걸친 중복 메타 설명은 홈페이지와 가장 트래픽이 높은 랜딩 페이지 간의 중복 메타와는 다릅니다.

우선순위가 중요합니다. 맥락이 중요합니다. 그리고 해결 방법은 훨씬 더 중요합니다.

저는 단순히 이슈를 찾아내는 것이 아니라, 이슈를 설명하고, 지능적으로 우선순위를 정하며, 정확히 무엇을 변경해야 하는지 알려주는 도구를 원했습니다. 일반적인 권장 사항이 아니라, 실제로 다시 작성된 제목 태그(title tag). 실제로 개선된 메타 설명(meta description). 바로 사용할 수 있는 상태 말입니다.

그것이 CrawlIQ가 하는 일입니다. 그리고 이것이 내부적으로 정확히 어떻게 작동하는지에 대한 내용입니다.

Layer 1 — 데이터 수집 (Data Collection) (aiohttp + BeautifulSoup)

모든 감사는 단순한 질문에서 시작됩니다: 이 페이지는 실제로 무엇을 포함하고 있는가?

50개, 100개, 500개의 URL에 걸쳐 대규모로 이 질문에 답하려면 속도가 필요합니다. HTTP 요청을 하나씩 보내고, 다음으로 넘어가기 전에 각 응답을 기다리는 방식은 영원히 걸릴 것입니다. 100페이지 규모의 사이트라면 5~10분 동안 기다려야 할 수도 있습니다. 아무도 그럴 시간이 없습니다.

여기서 aiohttp가 등장합니다.

aiohttp는 비동기 (async) HTTP 요청을 보냅니다. 즉, 다음 요청을 시작하기 전에 각 요청이 완료되기를 기다리지 않고 여러 URL에 동시에 요청을 보냅니다. 이는 다음 메시지를 보내기 전에 각 메시지에 대한 답장을 기다리는 대신, 20개의 WhatsApp 메시지를 한꺼번에 보내는 것과 같습니다. CrawlIQ는 이런 방식으로 분당 100개의 URL을 처리합니다.

각 URL로부터 가공되지 않은 HTML 응답이 돌아오면, BeautifulSoup가 바통을 이어받습니다. BeautifulSoup은 해당 가공되지 않은 HTML 문자열을 탐색 가능한 트리 (tree) 구조로 파싱합니다. 마치 텍스트 덩어리를 실제로 쿼리할 수 있는 구조화된 문서로 변환하는 것과 같습니다.

각 URL에 대해 CrawlIQ는 정확히 다음을 추출합니다:

{
  "url": "https://example.com/page",
  "title": "Page Title Here",
...

URL당 하나씩 생성된 이 구조화된 객체는 다음 레이어로 전달됩니다.

Layer 2 — 규칙 엔진 (Rule Engine) (issues.py + ai_analysis.py)

이 레이어는 사람들이 SEO 도구가 어떻게 작동하는지 생각할 때 대부분 건너뛰는 부분입니다. 사람들은 AI가 탐지를 수행한다고 가정합니다. 하지만 그렇지 않습니다 — 적어도 CrawlIQ에서는 말입니다.

탐지는 순수 Python으로 이루어집니다. 규칙 기반 (Rule-based)이며, 빠르고, 결정론적 (Deterministic)입니다.

추출된 모든 데이터 객체에 대해, 규칙 엔진은 일련의 임계값 체크 (threshold checks)를 실행합니다:

체크 항목규칙우선순위
제목 길이 (Title length)len(title) > 60 → "제목이 너무 김"낮음
...

우선순위 할당에는 Python의 집합 교집합 (set intersection)을 사용하는데, 그 단순함이 진정으로 우아합니다:

_HIGH   = {"Broken Page", "Missing Title", "Duplicate Title"}
_MEDIUM = {"Missing H1", "Missing Meta Description", "Duplicate Meta"}

...

감지된 문제 중 하나라도 HIGH 집합과 교차하면, 해당 페이지는 '높음(High)' 우선순위로 표시됩니다. 그다음은 '중간(Medium)'입니다. 그 외의 모든 것은 '낮음(Low)'입니다.

AI는 없습니다. 블랙박스(Black box)도 없습니다. 그저 Google의 품질 가이드라인이 실제로 중요하게 여기는 사항을 반영하는 규칙들뿐입니다.

이 레이어의 출력물은 URL당 우선순위가 지정된 문제 목록이며, 이는 최종 레이어로 전달됩니다.

레이어 3 — AI 수정안 생성 (Claude, Groq, Gemini, GPT-4o)

여기서부터 흥미로워집니다.

규칙 엔진은 '무엇이' 잘못되었는지 알고 있습니다. AI는 '어떻게 수정해야 하는지'를 압니다. 구체적으로, 이 페이지에 대해, 이 콘텐츠를 사용하여, 이 타겟 키워드에 맞춰서 말이죠.

레이어 2에서 생성된 문제 목록은 구조화된 프롬프트(Prompt)로 포맷팅됩니다:

"이 페이지에는 다음과 같은 SEO 문제가 있습니다: [목록].
현재 제목은 다음과 같습니다: [title].
현재 메타 설명(Meta description)은 다음과 같습니다: [meta].
...

해당 프롬프트는 사용자가 선택한 AI 제공업체인 Claude, Groq (Llama 3), Gemini 또는 GPT-4o로 전송됩니다. 응답은 즉시 사용할 수 있는 수정안이 포함된 구조화된 JSON 형식으로 돌아옵니다.

온도(Temperature) 설정은 0.15로 의도적으로 낮게 설정되었습니다. SEO 수정 권장 사항은 창의적이기보다 일관되고 정밀해야 합니다. 감사를 실행할 때마다 타이틀 태그(Title tag)의 말투가 매번 바뀌는 것을 원하지는 않을 것입니다.

전체 응답 파이프라인(Pipeline)은 다음과 같습니다:

URL 입력
    ↓
aiohttp → raw HTML
...

깔끔합니다. 추적 가능합니다. 모든 결정은 설명 가능합니다.

이것을 만들며 기술적 SEO(Technical SEO)에 대해 배운 점

솔직히 말하자면요? 제가 수강했던 그 어떤 강의보다 더 많은 것을 배웠습니다.

크롤링 가능성(Crawlability)은 이분법적이지 않습니다. 크롤러를 직접 작성하다 보면, "Google이 이 페이지를 크롤링할 수 있는가"라는 질문이 단순히 예/아니오로 답할 수 있는 문제가 아니라는 것을 매우 빠르게 깨닫게 됩니다. 그것은 스펙트럼(Spectrum)입니다. robots.txt에 의한 차단, noindex에 의한 차단, canonical 불일치에 의한 차단, 리다이렉트 체인(Redirect chains)에 의한 차단, 느린 응답 시간에 의한 차단 등. 각각은 서로 다른 해결책이 필요한 서로 다른 문제입니다.

메타 설명 (Meta descriptions)은 순위에 직접적인 영향을 미치지는 않지만, 그 외의 모든 것에 영향을 미칩니다. 저는 예전에 메타 설명을 순위 신호 (ranking signal)로 취급하곤 했습니다. 하지만 그렇지 않습니다. 수백 개의 페이지를 살펴보는데 46개의 페이지에서 동일한 160자짜리 상용구 (boilerplate)가 반복되는 것을 본다면, 왜 클릭률 (CTR)이 급락하는지 즉시 이해하게 될 것입니다. 중복된 메타 설명은 사용자들과 AI 엔진들에게 이 페이지들이 서로 대체 가능하다는 신호를 보냅니다. 하지만 실제로는 그렇지 않습니다.

우선순위는 기술적인 결정이 아니라 비즈니스 결정입니다. 규칙 엔진 (rule engine)은 기술적 우선순위를 할당합니다. 하지만 페이지네이션이 적용된 아카이브에서 누락된 H1 태그를 수정하는 것이, 트래픽이 가장 높은 두 페이지의 중복된 제목을 수정하는 것보다 더 중요한지 여부는 비즈니스적인 판단입니다. 도구는 데이터를 표면화할 뿐이며, 최종 결정은 SEO 전문가가 내립니다.

AI는 대체재가 아니라 하나의 계층 (layer)입니다. 제가 보는 가장 흔한 오해는 AI 기반 SEO 도구가 전통적인 도구보다 어떤 면에서 더 똑똑하다는 것입니다. 그들은 더 똑똑한 것이 아니라, 생성 (generation) 속도가 더 빠를 뿐입니다. 지능은 여전히 규칙, 구조, 그리고 프롬프트 (prompts)에 있습니다. LLM (Large Language Model)에 잘못된 데이터를 입력하면, 아름답게 작성된 잘못된 권장 사항을 얻게 될 뿐입니다.

직접 시도해 보세요

CrawlIQ는 무료이며, 오픈 소스(open source)이고, 회원 가입이 필요하지 않습니다.

👉 라이브 도구: bhavani5a8.github.io/crawliq.io

👉 GitHub: github.com/Bhavani5A8

어떤 URL이든 입력하면 최대 50개의 페이지를 크롤링하고, 50개 이상의 차원 (dimensions)에서 문제를 감지하며, 사용자가 선택한 Claude, Groq, Gemini 또는 OpenAI를 사용하여 AI 수정 권장 사항을 생성합니다.

신용카드도, 계정도 필요 없습니다. 그저 URL을 붙여넣고 당신의 사이트에서 실제로 어떤 일이 일어나고 있는지 확인하세요.

[

CrawlIQ audit results for mockers.in showing 51 pages crawled, 47 issues detected
]

CrawlIQ auditing mockers.in — 51개 페이지 크롤링됨, 47개 문제 감지됨, 건강 점수(health score) 8%. 홈페이지는 H1 누락, canonical 누락, 중복 메타 설명과 함께 중간(Medium) 우선순위로 표시됨.

이 내용이 유용했다면 댓글을 남겨주세요 — 저는 CrawlIQ를 적극적으로 개선하고 있으며, 여러분에게 어떤 기능이 가장 중요한지 꼭 듣고 싶습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0