웹사이트를 오픈하고 검색엔진에 노출되지 않거나, 반대로 관리자 페이지나 비공개 데이터가 구글 검색 결과에 그대로 노출되는 황당한 상황을 경험해봤을까? 다만 대부분의 개발자들은 robots.txt 파일의 작성 규칙과 문법을 정확히 모른 채 인터넷에서 가져온 설정값을 그대로 복사해 서버 루트에 붙여넣곤 한다. 이번에는 robots.txt가 정확히 무엇인지, 왜 필요한지, 그리고 검색 노출 차단 및 최적화를 위해 어떻게 작성해야 하는지 완벽하게 정리해서 소개하겠다.
robots.txt는 웹사이트의 최상위 루트 디렉토리(예: https://example.com/robots.txt)에 위치하는 텍스트 파일이다. 구글의 Googlebot, 네이버의 Yeti, 빙의 Bingbot 등 웹 크롤러(Spider)가 사이트에 방문했을 때 가장 먼저 이 파일을 읽어 어떤 페이지를 수집(Crawling)해도 되는지, 어떤 페이지를 수집하면 안 되는지 판단한다.
다만 많은 개발자들이 오해하는 부분이 있다. robots.txt는 크롤러에게 '규약(Protocol)'을 제시하는 것일 뿐, 법적인 강제 권한이나 절대적인 보안 벽이 아니다. 선량한 검색엔진 검색 로봇은 이 규칙을 준수하지만, 악성 스크랩 보트나 무단 수집기는 이를 무시하고 접속할 수 있다.
robots.txt에서 사용하는 주요 지시어의 역할은 다음과 같다.
| 지시어 (Directive) | 설명 | 사용 예시 |
|---|---|---|
| User-agent | 규칙을 적용할 검색엔진 크롤러 지정 (*는 전체) | User-agent: Googlebot |
| Disallow | 크롤링을 금지할 디렉토리 또는 파일 경로 | Disallow: /admin/ |
| Allow | Disallow 범위 내에서 예외적으로 허용할 경로 | Allow: /admin/open/ |
| Sitemap | 사이트맵(Sitemap.xml) 파일의 전체 URL 위치 | Sitemap: https://example.com/sitemap.xml |
| Crawl-delay | 크롤러의 연속 요청 간격(초 단위) 설정 | Crawl-delay: 5 |
robots.txt는 단순한 텍스트 파일이지만 경로 하나, 슬래시(/) 하나 잘못 넣는 것으로 사이트 전체가 검색엔진에서 완전히 사라질 수 있다. 각 디렉토리 지정 방식에 따른 차이를 정확히 이해하고 작성해야 한다.
- Disallow: /admin : admin으로 시작하는 모든 경로 차단 (/admin, /admin.php, /administrator 등)
- Disallow: /admin/ : /admin/ 하위 디렉토리 및 파일만 차단 (/admin.php는 접근 허용)
- Disallow: / : 사이트 전체의 모든 페이지 수집 차단
- Disallow: : 수집 차단 해제 (모든 수집 허용)
실무에서 자주 발생하는 실수 사례와 이를 보완한 올바른 설정 예제를 확인해보자.
✗ 잘못된 코드 (개발/테스트용 설정을 배포하여 전체 노출이 차단됨)
# 모든 로봇의 전체 사이트 크롤링을 차단
User-agent: *
Disallow: /✓ 올바른 코드 (일반 페이지 수집 허용 + 관리자 및 시스템 경로 차단 + 사이트맵 명시)
User-agent: *
Disallow: /admin/
Disallow: /api/
Disallow: /tmp/
Allow: /api/v1/public/
Sitemap: https://example.com/sitemap.xml결과: 주요 검색엔진 로봇이 사이트 내 일반 문서와 게시글은 정상 수집하되, /admin/, /api/ 등 내부 처리용 디렉토리 및 임시 파일 디렉토리 수집은 안전하게 건너뛰게 된다.
✗ 잘못된 코드 (모든 검색엔진 차단 후 특정 로봇만 허용하려다 다른 정상 로봇까지 차단)
User-agent: Googlebot
Disallow:
User-agent: *
Disallow: /✓ 올바른 코드 (특정 악성/불필요한 스크랩 로봇만 차단하고 주요 로봇에는 차등 허용)
# 무분별한 수집을 일삼는 특정 검색로봇 차단
User-agent: BadBot
Disallow: /
# 일반 모든 로봇 규칙
User-agent: *
Disallow: /admin/
Disallow: /member/
Sitemap: https://example.com/sitemap.xml결과: 지정한 BadBot의 접근은 거부되고 구글, 네이버 등 정식 크롤러는 지정한 비공개 디렉토리를 제외한 전 영역을 원활하게 수집할 수 있다.
robots.txt를 운영할 때 반드시 점검해야 하는 실무 주의사항이다.
Disallow: /private-data/ 와 같이 작성하면 크롤러는 수집을 안 할지 몰라도, 해당 파일의 내용이 외부 인터넷에 평문으로 공개되어 있다. 누구나 example.com/robots.txt에 접근하면 '아, 이 사이트는 /private-data/ 경로에 중요한 게 있구나'라고 바로 알 수 있다. 비밀글이나 비공개 페이지는 반드시 세션 인증 및 접근 권한 제어로 막아야 한다.
robots.txt의 Disallow는 크롤러가 해당 페이지의 HTML을 읽으러 들어오는 것 자체를 막는다. 반면, 이미 다른 사이트에서 해당 URL의 링크가 걸려 있다면 구글은 본물 내용을 읽지 않은 채 URL만 검색 결과에 노출시킬 수 있다. 페이지를 검색 결과에서 완전히 제거하고 싶다면 robots.txt로 막는 대신, 페이지 HTML 상단에 <meta name="robots" content="noindex"> 태그를 삽입하고 크롤러가 들어와서 이 태그를 읽을 수 있도록 robots.txt Disallow를 해제해야 한다.
robots.txt 작성은 웹사이트 검색엔진 최적화(SEO)의 시작이자 수집 효율을 결정짓는 핵심 요소다. 단순한 파일 하나라고 방치했다가 의도치 않게 사이트 전체의 색인이 삭제되는 불상사가 발생할 수 있다. 구글 서치콘솔이나 네이버 서치어드바이저에서 제공하는 'robots.txt 검증 도구'를 활용하여 작성한 규칙에 오류가 없는지 주기적으로 테스트해보자. 올바른 크롤링 규칙 설정이라는 작은 습관이 모여서 검색 노출 극대화라는 큰 효과를 만든다는 점을 잊지 말자. 이 글의 실전 코드를 참고해 지금 바로 보유한 사이트의 robots.txt 파일 상태를 점검해 보면, 안정적이고 효율적인 검색 색인 결과를 얻을 수 있을 것이다.