단 하나의 명령어로 320개의 SEO 페이지를 생성했습니다. 전체 스택과 문제점 분석
요약
본 글은 단 하나의 명령어로 320개의 SEO 페이지를 생성하고 배포한 과정을 설명합니다. 제품 데이터(products.json)와 API 호출을 통해 정적 HTML 페이지를 대량으로 만들고, Cloudflare Pages 및 IndexNow 프로토콜을 활용하여 검색 엔진에 빠르게 노출시키는 기술적인 방법을 다룹니다.
핵심 포인트
- 대규모 SEO는 JSON-LD 스키마 마크업(Product, FAQPage 등)이 필수입니다.
- Cloudflare Pages 사용 시 URL 구조를 표준화하기 위해 \_redirects 파일을 사용하는 것이 중요합니다.
- IndexNow 프로토콜은 검색 엔진에 URL을 가장 빠르게 알리는 효과적인 방법입니다.
3일 전, 저는 10일 만에 35개의 MCP 서버를 배포하는 글을 올렸습니다. 어느 정도 관심을 받았지만, 솔직히 말하자면 얻은 것은 수익 0원, 사용자 0명, 그리고 완벽하게 구성된 서버 35개였습니다. 설정(Configuration)이 곧 배포(Distribution)는 아닙니다.
이것이 후속 내용입니다. 3일이 지난 지금, 실제로 바뀐 내용은 다음과 같습니다.
가장 중요한 숫자
220개에서 320개의 SEO 페이지로 늘었습니다.
수동으로 작성한 것이 아닙니다. 단 하나의 명령어로 생성했습니다.
해당 명령어는 products.json (320개 제품)을 읽고, 각 제품에 대해 제가 만든 HS Codes API를 호출하며, HTML 템플릿을 채운 후, 출력 디렉터리에 320개의 정적 페이지를 작성합니다. 또한 sitemap.xml, llms.txt, 그리고 카탈로그 인덱스도 생성합니다.
그 다음 두 개의 명령어를 더 실행했습니다: Cloudflare Pages에 배포하고, 모든 URL을 IndexNow로 제출했습니다.
총 세 가지 명령어. 320개의 페이지가 라이브 상태입니다. Google, Bing, Yandex, Seznam에 총 325개의 URL이 제출되었습니다.
대규모 SEO를 통해 제가 배운 점
- Schema.org는 선택 사항이 아닙니다.
모든 페이지에는 네 개의 JSON-LD 블록이 있습니다: Product (HS 코드를 SKU로 사용), BreadcrumbList, SearchAction을 포함한 WebSite, 그리고 각 페이지당 세 가지 실제 질문으로 구성된 FAQPage입니다.
이것이 왜 중요할까요? Google의 리치 결과(rich results)가 브레드크럼, 제품 정보, FAQ 스니펫을 보여주기 때문입니다. 이는 검색 결과에서 무료로 얻는 공간과 같습니다. search.google.com/test/rich-results에서 어떤 페이지든 검증해 볼 수 있습니다. 제 페이지들은 깨끗하게 통과합니다.
- Cloudflare Pages는 기본적으로 깔끔한 URL을 만듭니다.
저는 테스트하기 전까지 이것을 몰랐습니다. /pages/terms.html 을 요청하면 /pages/terms 로 308 리디렉션이 반환됩니다. /pages/terms 를 요청하면 200 OK가 반환됩니다.
이는 사이트맵이나 내부 링크에서 절대 .html로 연결해서는 안 된다는 의미입니다. Google은 리디렉션을 사소한 신호로 취급하지만, 매번 이동할 때마다 아주 작은 링크 권위(link equity)를 잃게 됩니다.
해결책은 하나의 파일, 즉 루트에 있는 _redirects 파일과 한 줄의 내용뿐입니다. 그게 전부입니다. 이제 모든 .html 요청은 표준적인 깔끔한 URL로 308 리디렉션을 받습니다.
- IndexNow는 검색 엔진에 알리는 가장 빠른 방법입니다.
Google에는 Search Console이 있고, Bing에는 IndexNow가 있습니다.
IndexNow는 URL을 Bing, Yandex, Seznam, Naver에 직접 전송할 수 있게 해주는 오픈 프로토콜입니다. 크롤링 대기열도 없고 사이트맵 처리까지 기다릴 필요가 없습니다.
어제 325개의 URL을 제출했습니다. 오늘 Bing에서 해당 사이트를 site: 검색 결과로 보여줍니다.
무엇이 잘못되었는지 (솔직히 말하자면)
Product Hunt에 실패했습니다.
저는 10월 1일에 HS Codes Classifier를 출시했습니다. 업보트가 1개였습니다. 피처링되지 못했습니다. 이 출시는 사실상 눈에 띄지 않았습니다.
왜일까요? Product Hunt는 기존의 잠재 고객, 타이밍, 그리고 '헌터(hunter)' 관계에 보상을 주기 때문입니다. 저는 세 가지 중 어느 것도 없었습니다.
저는 재출시하지 않을 것입니다. 대신, 사전에 존재하는 잠재 고객이 필요하지 않은 채널, 즉 검색 엔진, 유기적 배포, 그리고 이 게시물과 같은 기술 콘텐츠에 집중할 생각입니다.
Suby 카드는 우크라이나에서 차단되었습니다.
저는 Suby(우크라이나 암호화폐 결제 제공업체)를 설정하여 $9.99/월 Pro 티어에 USDC를 받도록 했습니다. 암호화폐 체크아웃은 작동합니다. 하지만 카드 결제가 우크라이나 계정에서는 차단됩니다. Suby는 지원되는 관할권의 사업자 법인(business entity)을 요구합니다.
해결책: 저는 더 많은 국가를 지원하는 Merchant of Record인 AgentaOS를 검토하고 있습니다. 해당 인증은 아직 진행 중입니다.
AgentaOS 인증이 거부되었습니다.
그들은 세 가지 것을 요청했습니다. 자체 도메인의 브랜드 지원 이메일, 실제 제품 증명(live product proof), 그리고 고객이 Pro API 키를 받는 방식에 대한 증거입니다. 공정한 피드백이라고 생각합니다. 이번 주에 도메인을 구매하고 이 세 가지를 모두 수정할 예정입니다.
실제로 작동하는 것들
인프라스트럭처가 드디어 제대로 돌아갑니다.
사흘 전만 해도 제 대시보드는 비어 있었습니다. 오늘: 24시간 동안 1,459개의 API 호출, OpenAI로의 215개 LLM 호출, 모든 워커에서 오류 0건. Sentry가 사용자가 보기 전에 오류를 포착합니다. UptimeRobot이 4개의 엔드포인트를 모니터링하며 100% 가동 시간을 유지합니다. Ops Bot은 키예프 시간으로 오전 9시에 일일 요약본을 보냅니다.
Git 백업도 처음으로 성공했습니다.
이번 주까지 저의 전체 hs-seo 프로젝트는 단 하나의 노트북에 의존하고 있었습니다. 만약 드라이브가 고장 나면 모든 것을 잃을 위험이 있었죠. 이제는 세 개의 비공개 GitHub 리포지토리(repo)가 생겼습니다: hs-seo, ops-bot, call-counter. 모든 코드 변경 사항은 커밋됩니다. 320개의 HTML 파일이 담긴 출력 디렉터리는 products.json과 generator.js를 통해 재생성할 수 있습니다.
Google Sheets 애드온(Add-on)을 검토 요청했습니다.
저는 Apps Script 함수로 =HSCODE("laptop computer")를 만들었습니다. 이 함수는 어떤 셀에든 8471.30이라는 값을 반환합니다. 그런 다음 GCP 프로젝트를 생성하고, OAuth 동의 화면(consent screen)을 설정하고, Workspace Marketplace SDK를 활성화한 뒤 검토 요청했습니다.
상태: 검토 중입니다. 승인되면 이것이 배포 채널이 됩니다. 30억 명의 Google Sheets 사용자가 이를 설치할 수 있습니다.
불편한 진실
설정(Configuration)은 아직 배포가 아닙니다.
저는 320개의 페이지를 가지고 있지만, Google은 그중 단 하나도 색인하지 않았습니다. Bing은 몇 개만 색인했습니다. Yandex는 아직 아무것도 없습니다.
이것은 정상입니다. Google의 크롤링 대기열(crawl queue)은 새로운 사이트를 천천히 처리합니다. 경험에 비추어 볼 때: 첫 페이지는 12주, 대부분의 페이지는 34주, 첫 유기적 노출(organic impressions)은 23개월, 첫 유기적 트래픽은 46개월이 걸립니다.
인프라스트럭처는 준비되었습니다. 이제 기다림의 시간입니다.
한편, 저는 게으름하게 기다리지 않고 있습니다. 이번 주에는 Revenue Bot(새로운 결제 건마다 Telegram 알림), PostHog(랜딩 페이지부터 결제까지 퍼널 분석), Langfuse(프롬프트, 응답, 비용, 지연 시간을 포함한 LLM 관찰 가능성)를 구축했습니다.
제가 과거의 저에게 해주고 싶은 말
인프라스트럭처가 아니라 배포부터 시작하세요.
저는 35개의 MCP 서버를 만드는 데 10일을 보냈습니다. 만약 제가 서버 하나를 만드는 데 2일, 마케팅하는 데 8일을 사용했다면, 아마 지금쯤 10명의 유료 사용자(paying users)가 있었을 겁니다.
인프라스트럭처는 함정입니다. 생산적인 것처럼 느껴지지만 그렇지 않습니다.
허가를 필요로 하지 않는 채널에서 배포하세요.
Product Hunt에는 사냥꾼이 필요하고, Reddit에는 카르마(karma)가 필요하며, HN에는 운이 필요합니다. 하지만 검색 엔진은 아무것도 필요하지 않습니다. 게시만 하면 색인됩니다. 충분한 페이지와 시간이 주어지면 유기적 트래픽은 복리처럼 쌓입니다.
모든 페이지는 질문에 답해야 합니다.
"HS code for laptop"는 질문입니다. 제 페이지는 실제 HS 코드, 신뢰도 점수, 그리고 추론 단락을 통해 2초 만에 답변합니다. 이것이 전체 가치 제안(value proposition)입니다. 마케팅은 필요 없습니다.
중요한 지표는 매일 보는 지표가 아닙니다.
매일의 API 호출로는 월세를 낼 수 없습니다. 월간 반복 매출(Monthly Recurring Revenue, MRR)이 가능합니다. 저는 이걸 자꾸 잊어버립니다.
다음 단계는 무엇인가?
즉시: 도메인을 구매하고 Email Routing과 AgentaOS를 활성화합니다. 브랜드 이메일로 AgentaOS 검증을 재제출합니다. URL Inspection을 통해 Google이 처음 50개 페이지를 색인하도록 합니다.
이번 주: PostHog, Langfuse, Revenue Bot. Google Sheets Add-on 승인(바라건대). 첫 Dev.to 백링크 체인 구축.
이번 달: 500개 이상의 SEO 페이지. Google에서 발생하는 실제 유기 트래픽. 첫 $9.99 결제.
첫 결제가 들어오거나, 기다림이 너무 길어져서 제가 어쨌든 써야 할 때 다음 업데이트를 작성할 것입니다.
직접 사용해 보세요
Google Sheets: 새 시트를 열고, 확장 프로그램(Extensions) > Apps Script로 이동하여 GitHub에서 코드를 붙여넣으세요. 그런 다음 아무 셀에나 `=HSCODE(
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기