# AI 검색최적화 robots.txt, 이렇게 수정했습니다 — 그리고 댓글 하나로 다시 뒤집혔습니다

- 작성자: [새우](https://community.clauders.ai/member/imported-member-vqryGgbb4C)
- 공간: [콘텐츠 / 마케팅](https://community.clauders.ai/content)
- 게시: 2026-08-05
- 연재: [사이트의 AI 검색 노출 전략](https://community.clauders.ai/series/geo-search-visibility) 2/2편
- 태그: #GEO노출전략
- 주소: https://community.clauders.ai/content/post/ai-%EA%B2%80%EC%83%89%EC%B5%9C%EC%A0%81%ED%99%94-robots-txt-%EC%9D%B4%EB%A0%87%EA%B2%8C-%EC%88%98%EC%A0%95%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EB%8C%93%EA%B8%80-%ED%95%98%EB%82%98%EB%A1%9C-%EB%8B%A4%EC%8B%9C-%EB%92%A4%EC%A7%91%ED%98%94%EC%8A%B5%EB%8B%88%EB%8B%A4-daf52e2a-cb65-80f0-a43d-8bd59b0a8258

---

제주에서 스쿠버다이빙 체험과 자격증 교육을 운영하는 지인의 홈페이지를 제가 직접 구축했습니다. Astro로 만들었고 한국어·영어·일본어·중국어 4개 언어를 운영합니다.

목표는 처음부터 명확했습니다. **광고비를 쓰는 대신 AI가 먼저 추천하는 홈페이지를 만드는 것.** 요즘 손님들은 네이버보다 ChatGPT에 먼저 물어봅니다. "제주 스쿠버다이빙 어디가 좋아?"라는 질문에 지인의 상호가 나오게 하는 게 설계 목표였습니다.

그런데 아무리 좋은 콘텐츠를 써도 크롤러가 못 들어오면 전부 무효입니다.

그 허가증이 robots.txt입니다. 이미 한 번 작성해서 올려둔 상태였지만 이게 최적인지 확신이 없어서, Claude에 검증을 맡겼습니다.

**그리고 이 글을 처음 올린 뒤, 댓글 하나 때문에 확정했던 파일을 40줄에서 3줄로 다시 줄였습니다.** 그 과정까지 전부 담았습니다.

### 라운드 1 — Claude(웹)에서 현재 파일 분석 요청

기존 robots.txt 전문을 그대로 붙여넣고 물었습니다.

```
아래 robots.txt를 분석해줘. 더 개선해야 하는 거 없어?

# jejuscubadiving.com — AI 검색 가시성 확보 정책
# 리트리벌·검색 봇: 전면 허용 (AI 답변 인용 = 예약 유입 경로)

User-agent: OAI-SearchBot
Allow: /

User-agent: ChatGPT-User
Allow: /

User-agent: Claude-SearchBot
Allow: /

... (봇별로 개별 그룹 10개) ...

User-agent: *
Allow: /

Sitemap: https://jejuscubadiving.com/sitemap-index.xml
```

가장 뼈아팠던 지적은 이거였습니다.

> **"robots.txt는 그룹을 상속하지 않습니다."**

크롤러는 자기 이름이 적힌 그룹 하나만 읽고 나머지는 전부 무시합니다. 지금은 `User-agent: *`가 전체 허용이라 문제가 안 보이지만, 나중에 특정 경로를 막겠다고 `*` 그룹에 `Disallow`를 추가하면 **개별 그룹이 있는 AI 봇 10종은 그 규칙을 전혀 적용받지 않습니다.**

**이 지적은 나중에 아주 중요한 복선이 됩니다.** 일단 넘어가겠습니다.

또 하나. **국내 크롤러가 통째로 빠져 있었습니다.** 네이버는 `Yeti`, 다음은 `Daumoa`입니다. 제주 로컬 비즈니스인데 이걸 명시하지 않은 건 명백한 누락이었습니다.

### 라운드 2 — 프레임워크를 밝히자 답이 뒤집혔습니다

라운드 1의 개선안에는 `/wp-admin/`, `admin-ajax.php`, `/?s=` 같은 경로가 잔뜩 들어 있었습니다. 전부 WordPress 전제였습니다. 그래서 정정했습니다.

```
이 사이트는 Astro 프레임워크로 제작되었어.
https://jejuscubadiving.com/sitemap-index.xml 은 맞아
```

답이 상당 부분 뒤집혔습니다.

- **제외할 게 거의 없다.** Astro는 정적 빌드라 `/wp-admin/` 같은 경로가 존재하지 않습니다
- `/_astro/`**는 절대 막으면 안 된다.** 번들된 CSS/JS가 여기 있어서 차단하면 렌더링 평가에서 손해를 봅니다
- `sitemap-index.xml`**은 정확하다.** `@astrojs/sitemap`의 기본 출력물이 이 이름입니다
- **Astro는 오히려 GEO에 유리하다.** AI 크롤러 대부분은 JavaScript를 실행하지 않는데, Astro는 빌드 시점에 완성된 HTML을 내보내므로 크롤러가 본문 전체를 그대로 받습니다

**교훈: 환경 정보를 먼저 주지 않으면 AI는 가장 흔한 케이스(WordPress)를 가정합니다.** 이건 AI 잘못이 아니라 제 정보 제공 부족이었습니다.

### 라운드 3 — 코드베이스로 교차검증

채팅으로 받은 진단을 그대로 실행하지 않고, **코드베이스 전체에 접근할 수 있는 Claude Code에 그 진단을 통째로 넣어 검증**시켰습니다.

결과적으로 몇 가지 지적이 걸러졌습니다. 채팅 쪽은 제가 붙여넣은 파일만 보고 판단할 수밖에 없는데, 실제 코드에는 이미 해결된 부분이 있었던 겁니다. **파일 조각만 보고 내린 진단과, 렌더링된 결과물과 소스를 다 본 진단은 다릅니다.**

robots.txt 관련 지적은 이 검증을 통과했습니다. 그래서 확정했습니다.

### 1차 확정본 (40줄)

```
# jejuscubadiving.com · AI 검색 가시성 확보 정책
# Astro 정적 빌드 / 최종 수정: 2026-08-06
# 정책: 로컬 비즈니스 = 인용 1건이 예약 1건. 검색·실시간·학습 전면 허용.
#
# 주의 1: /_astro/ 는 CSS·JS 번들 경로이므로 절대 차단하지 말 것.
#
# 주의 2: 크롤러는 "가장 구체적으로 일치하는 그룹 하나"만 적용하고 나머지는 무시한다.
#   아래에 이름이 적힌 봇은 User-agent: * 그룹을 절대 읽지 않는다.
#   따라서 나중에 무언가를 차단해야 하면 * 에만 넣어서는 안 되고,
#   차단이 필요한 모든 그룹에 같은 Disallow 를 반복해서 넣어야 한다.
#
# 주의 3: noindex 페이지(/404/, /*/thanks/, /authors/)를 여기서 Disallow 하지 말 것.
#   크롤을 막으면 구글이 noindex 메타를 읽지 못해 URL만 검색결과에 남는다.

# ===== AI 검색·리트리벌 =====
User-agent: OAI-SearchBot
User-agent: ChatGPT-User
User-agent: Claude-SearchBot
User-agent: Claude-User
User-agent: PerplexityBot
User-agent: Perplexity-User
User-agent: DuckAssistBot
Allow: /

# ===== AI 학습 =====
User-agent: GPTBot
User-agent: ClaudeBot
User-agent: CCBot
User-agent: Google-Extended
User-agent: Applebot-Extended
User-agent: meta-externalagent
Allow: /

# ===== 일반 검색엔진 (국내 포털 포함) =====
User-agent: Googlebot
User-agent: Bingbot
User-agent: Applebot
User-agent: Yeti
User-agent: Daumoa
Allow: /

# ===== 기본: 전체 허용 =====
User-agent: *
Disallow:

Sitemap: https://jejuscubadiving.com/sitemap-index.xml
```

여기까지가 처음 이 글을 올렸을 때의 결론이었습니다.

### 배운 점 & 꿀팁

**1. AI에게 물을 때 환경 정보를 먼저 주세요.** "Astro입니다" 한 줄을 라운드 2에서야 말했더니 답이 절반쯤 뒤집혔습니다. 프레임워크, 호스팅, CMS, 언어 구성. 이 네 가지를 첫 질문에 넣으세요.

**2. 파일 조각만 보여주면 진단도 조각납니다.** 채팅에 파일 하나를 붙여넣으면 AI는 그 파일만 보고 판단합니다. 코드베이스 전체를 볼 수 있는 도구로 한 번 더 검증하세요.

**3. 기존 구조를 개선할 때 "이 구조가 필요한가"를 먼저 물으세요.** 이게 이번 최대 교훈입니다. 저도 Claude도 처음부터 **"개별 나열 구조를 어떻게 개선할까"**만 생각했습니다. 봇을 추가하고, 그룹을 통합하고, 주석을 다듬었습니다. **그런데 그 구조 자체가 필요 없었습니다.** 물음이 잘못되면 답이 아무리 정교해도 소용없습니다.

**4. robots.txt는 보안 수단이 아닙니다.** 차단은 WAF와 인증의 몫입니다. `Disallow`는 착한 봇에게만 통하고, 나쁜 봇에게는 오히려 지도를 그려줍니다.

**5. 국내 크롤러를 잊지 마세요.** GEO 자료가 대부분 해외 기준이라 `Yeti`, `Daumoa`가 빠지기 쉽습니다. 전부 허용이면 `*`로 커버되지만, **정책을 나눌 때는 반드시 명시**해야 합니다.

**6. 실시간 요청 봇을 챙기세요.** `ChatGPT-User`, `Claude-User`, `Perplexity-User`. 손님이 우리 링크를 AI에 직접 던지는 순간 = 구매 직전입니다.

**7. 커뮤니티에 공개하는 것 자체가 검증 단계입니다.** Claude 3라운드, Claude Code 교차검증까지 거쳐 "확정"이라고 올린 파일이 **댓글 한 줄에 무너졌습니다.** AI를 몇 번 돌려도 안 나오던 질문이 사람 한 명에게서 나왔습니다. 체크님께 감사드립니다.

### 시행착오

- 첫 질문에 환경 정보를 안 넣어서 WordPress 기준 답변을 받고 라운드 하나를 날렸습니다
- **불필요한 구조를 정성껏 최적화했습니다.** 봇 25개를 분류하고 주석까지 달았는데, 그 구조 자체가 필요 없었습니다
- **제가 만든 위험을 설명하는 주석을 붙였습니다.** 주석 2번이 그것입니다. 경고문이 필요하다는 건 설계가 잘못됐다는 신호였는데 못 알아챘습니다
- robots.txt로 봇 공격을 막을 수 있다고 막연히 생각했습니다. 그런 기능은 원래 없습니다

### 도움이 필요한 부분

- **AI 인용 여부 자체를 추적하는 방법**이 고민입니다. 클릭이 없어도 답변에 언급되면 브랜드 효과가 있는데 GA로는 안 잡힙니다. 다른 분들은 어떻게 추적하시나요?
- **학습봇 허용 여부**를 어떻게 판단하셨는지 의견 듣고 싶습니다. 저는 노출 우선으로 전부 허용했는데 반대 관점도 궁금합니다

### 앞으로의 계획

1. **코스 페이지 구조화 데이터** — 가격·소요시간·최소 연령·포함 내역. AI가 "제주 체험다이빙 얼마야?"에 답할 때 인용할 건더기가 여기서 나옵니다. **robots.txt보다 이게 훨씬 중요합니다**
2. **코스 페이지 **`lastmod`** 추가** — 단, 빌드 날짜를 자동으로 찍으면 안 됩니다. 매 배포마다 오늘 날짜가 들어가면 구글이 이 사이트의 lastmod 전체를 불신합니다. 실제로 바뀔 때만 사람이 갱신하는 별도 필드로 분리
3. **hreflang 상호 참조 검증** — 각 언어 버전이 서로를 정확히 가리키는지
4. **월 1회 인용 모니터링** — 한/영/일/중 질문 세트를 매달 동일하게 던져 상호 노출 여부 기록

robots.txt는 30분이면 끝나고 0원인데, 안 하면 그 뒤의 모든 작업이 0점이 되는 파일입니다. 그런데 정작 대부분의 사이트가 한 번도 안 열어봅니다.

**그리고 이번에 배운 건, 잘 만드는 것보다 "이게 필요한가"를 먼저 묻는 게 중요하다는 겁니다.** 저는 40줄을 정성껏 만들고 나서야 3줄이면 됐다는 걸 알았습니다.

혹시 아직 확인 안 해보셨다면, 지금 새 탭 열고 `본인도메인.com/robots.txt` 한 번만 확인해 보세요. 30초면 됩니다 🙌

**퍼널해커 장원근**
