Cloudflare Bot Fight가 AdsBot을 막던 날
seominhyuk.com은 workers.dev와 달리 Managed Challenge만 보이던 문제. Bot Fight Mode를 끄고 AdsBot 200을 확인하기까지의 기록입니다.
서민혁닷컴
여기는 템플릿만 쌓아 둔 사이트가 아닙니다. Cloudflare Bot Fight에 AdsBot이 막히던 날, Workers trailing slash 때문에 404가 나던 날, Search Console 색인이 안 되던 날 — 그 자리에서 원인을 찾고 고친 과정을 글로 남깁니다. 뉴스·시세·경기 요약은 올리지 않습니다.
운영자는 개인입니다. 문의는seomh81@gmail.com로 받습니다. 소개·개인정보처리방침·이용약관을 공개하고, 사이트 운영비는 Google AdSense 등 광고로 충당할 수 있습니다. 광고를 눌러 달라는 요청은 하지 않습니다.
배포·봇·SEO·캐시에서 실제로 실패한 뒤 복구한 글입니다. 심사·방문자가 사이트의 성격을 파악하기 좋은 출발점입니다.
seominhyuk.com은 workers.dev와 달리 Managed Challenge만 보이던 문제. Bot Fight Mode를 끄고 AdsBot 200을 확인하기까지의 기록입니다.
새 글을 올린 뒤 Search Console URL 검사로 색인을 요청하는 실제 순서와, Cloudflare 챌린지 때문에 검수가 막혔던 사례를 정리합니다.
Workers Static Assets의 기본 캐시 동작을 확인하고, content-hashed 빌드 산출물에 Cache-Control: immutable을 적용해 TTFB를 줄인 과정. _headers 설정 전후 실측과 server-first 전략의 트레이드오프를 정리한다.
Astro 정적 블로그를 Cloudflare Workers로 올렸는데 /posts/slug는 열리는데 /posts/slug/가 404, 또는 그 반대였다. wrangler.jsonc의 html_handling 기본값과 Astro의 trailingSlash 설정이 충돌한 디버깅 과정을 재현한다.
Astro 정적 사이트에 Pagefind 풀텍스트 검색을 통합하고 Cloudflare Workers로 서빙할 때 마주친 빌드 훅, trailing slash 충돌, init() API 실수와 해결법을 내부 실측으로 정리합니다.
Astro 정적 블로그를 wrangler assets로 Workers에 올리는 실제 설정과, workers.dev는 되는데 커스텀 도메인만 막히던 경험을 정리합니다.
apex와 www를 Cloudflare Workers에 붙일 때 DNS, 프록시, HTTPS, canonical을 실제로 맞춘 순서입니다.
Notion·메모에 키를 모아 두다 생긴 실수와, Git·배포 환경에서 비밀값을 나누는 현실적인 방법을 정리합니다.
Antigravity·Codex를 저사양 환경에서 돌리려 OCI 무료 ARM 인스턴스와 MCP VM을 붙이다가 막힌 과정을, 공개 가능한 교훈만 남깁니다.
PR만 만들고 Actions가 돌지 않던 상황. npm run build와 wrangler deploy로 Cloudflare Workers 자산 배포까지 끝낸 운영 기록입니다.
정적 블로그에서 robots.txt와 sitemap을 Minimal하게 유지하는 방법과, 파일이 200인데도 본문 HTML이 막히던 사례입니다.
블로그, 앱, 관리자, API를 서브도메인으로 분리할 때의 장점과 DNS, 쿠키, 인증, SEO, 배포 운영 주의점을 설명합니다.
Threads의 0→1 압축 학습 프롬프트 7단계를 시드로, Cloudflare Workers·AdsBot·Search Console처럼 처음 붙이던 스택을 실제로 어떻게 빠르게 익혔는지 재구성한 시행착오 기록입니다.
Cloud Agent가 포스트를 추가한 뒤 로컬에서 카테고리·slug를 확인할 때, 포그라운드 dev 대신 background 모드와 status/logs/stop으로 검증 루프를 짧게 만든 실측입니다.
Pagefind 327페이지·6.31만 단어 기준선에서 카테고리 7편을 한 커밋에 올릴 때, Actions 성공만으로 끝내지 않고 gh CLI와 slug curl로 배포 완료를 정의한 운영 메모.
포스트 320편 기준 astro build 2.16초·Pagefind 1.08초였다. 9월 2일 cron이 카테고리 7편을 한 커밋에 올릴 때 페이지·단어 수와 Actions 15분 여유를 레포에서 다시 잰 실측 메모.
글쓰기 기준 C.11대로 Openverse와 Wikimedia Commons API를 병행 호출해 heroImage 후보를 고르는 절차. mature=false, 라이선스 필터, 100% 적합도 탈락 사례까지 이번 7편 배치에서 재현한 기록.
포스트가 255편에서 305편으로 늘었을 때 npm run build·Pagefind 인덱싱 시간이 어떻게 변했는지, deploy.yml timeout-minutes: 15와의 여유를 레포에서 재현해 봅니다.
추천에 없는 나머지 IT 시행착오 기록입니다.
Threads의 0→1 압축 학습 프롬프트 7단계를 시드로, Cloudflare Workers·AdsBot·Search Console처럼 처음 붙이던 스택을 실제로 어떻게 빠르게 익혔는지 재구성한 시행착오 기록입니다.
Cloud Agent가 포스트를 추가한 뒤 로컬에서 카테고리·slug를 확인할 때, 포그라운드 dev 대신 background 모드와 status/logs/stop으로 검증 루프를 짧게 만든 실측입니다.
Pagefind 327페이지·6.31만 단어 기준선에서 카테고리 7편을 한 커밋에 올릴 때, Actions 성공만으로 끝내지 않고 gh CLI와 slug curl로 배포 완료를 정의한 운영 메모.
포스트 320편 기준 astro build 2.16초·Pagefind 1.08초였다. 9월 2일 cron이 카테고리 7편을 한 커밋에 올릴 때 페이지·단어 수와 Actions 15분 여유를 레포에서 다시 잰 실측 메모.
글쓰기 기준 C.11대로 Openverse와 Wikimedia Commons API를 병행 호출해 heroImage 후보를 고르는 절차. mature=false, 라이선스 필터, 100% 적합도 탈락 사례까지 이번 7편 배치에서 재현한 기록.
포스트가 255편에서 305편으로 늘었을 때 npm run build·Pagefind 인덱싱 시간이 어떻게 변했는지, deploy.yml timeout-minutes: 15와의 여유를 레포에서 재현해 봅니다.
GitHub Actions의 cancel-in-progress가 연속 main push에서 중간 배포를 취소한다. 자정 cron이 카테고리 7편을 개별 push하지 않고 한 번에 올리는 운영 이유를 레포 실측으로 정리합니다.
main push만으로는 글이 살아 있다고 단정할 수 없다. GitHub Actions 성공 뒤 신규 slug별 HTTP 상태를 실측해 배포 완료를 정의한 운영 메모입니다.
Notion 리서치와 GitHub Actions 7편 배포 경험을 겹쳐 본다. PR 처리량 2배·리뷰어 부하 2배 데이터와, 에이전트가 main push 전에 통과해야 할 검증 게이트.
cron이 main 직접 push를 요구하는데 에이전트 VM은 cursor/bc-* 브랜치에만 남는 경우. deploy.yml 트리거와 git checkout main 실측으로 배포 간극을 다시 확인합니다.
Workers Builds 0건 상태에서 cron은 글만 main에 올리고 사이트는 그대로였다. deploy.yml과 wrangler-action@v3를 연결한 뒤 push→build→deploy 한 줄기를 레포 실측으로 정리합니다.
NanoNets Graft의 blast 명령으로 워킹트리 diff가 닿는 심볼·파일 범위를 PR 코멘트 형식으로 받아 보는 실측. ask·grep 다음 단계로 넣은 변경 전 검증 루프.