
robots.txt 생성기: 내 사이트에 맞는 파일을 2분 안에 만들기
📷 Prateek Katyal / Pexelsrobots.txt 생성기: 내 사이트에 맞는 파일을 2분 안에 만들기
robots.txt의 실제 역할, 개발자들이 자주 저지르는 실수, 그리고 웹사이트에 맞는 올바른 파일을 생성하는 방법을 알아봅니다.
robots.txt는 한 번 만들고 나면 잊혀지는 파일 중 하나입니다. 소규모 콘텐츠 사이트라면 대부분 괜찮습니다. 하지만 관리자 패널, 노출된 스테이징 경로, 내부 검색 결과 페이지, 또는 중복 콘텐츠가 있는 사이트에서 잘못 설정된(또는 없는) robots.txt는 수개월 동안 조용히 SEO 문제를 일으킬 수 있습니다.
이 가이드에서는 robots.txt가 실제로 무엇을 하는지, 무엇을 하지 않는지(흔한 오해의 원인), 그리고 일반적인 웹사이트 유형에 맞는 올바른 파일 작성법을 다룹니다. 구문을 외우지 않고도 robots.txt 생성기를 사용하면 쉽게 만들 수 있습니다.
robots.txt가 실제로 하는 일
robots.txt는 도메인 루트에 배치하는 일반 텍스트 파일로, 웹 크롤러에게 크롤링해야 할 URL과 그렇지 않은 URL을 알려줍니다. 핵심 단어는 "크롤링"이지 "색인"이 아닙니다.
파일은 https://yourdomain.com/robots.txt에 위치합니다. Googlebot, Bingbot, 또는 다른 크롤러가 사이트를 방문할 때 가장 먼저 하는 일이 이 파일을 가져오는 것입니다. 파일 내용을 바탕으로 어떤 URL을 따라갈지 결정합니다.
최소한의 robots.txt는 다음과 같습니다:
User-agent: *
Allow: /
이것은 모든 크롤러가 모든 것을 크롤링할 수 있음을 의미합니다. robots.txt가 없는 것과 기능적으로 동일합니다.
제한적인 파일은 다음과 같습니다:
User-agent: *
Disallow: /admin/
Disallow: /internal/
Disallow: /api/
모든 지시문은 하나 이상의 User-agent 그룹에 적용되는 Disallow 또는 Allow 줄입니다.
크롤링 vs. 색인 구분 (이것이 중요합니다)
많은 개발자들이 robots.txt에서 URL을 차단하면 Google 검색 결과에서 제거된다고 생각합니다. 그렇지 않으며, 이는 실제 문제를 야기합니다.
URL을 차단했을 때 실제로 일어나는 일:
- Googlebot이 해당 URL 크롤링을 중단합니다. 해당 페이지의 링크를 따라가지 않고 콘텐츠를 읽지 않습니다.
- 하지만 다른 색인된 페이지에서 차단된 URL로 링크하고 있다면 Google은 URL이 존재한다는 것을 여전히 발견할 수 있습니다.
- Google은 "이 페이지에 대한 정보가 없습니다"와 같은 일반적인 설명과 함께 해당 URL을 검색 결과에 표시할 수 있습니다.
따라서 검색 결과에서 완전히 제외하고 싶은 페이지가 있다면 Disallow만으로는 충분하지 않습니다. noindex 지시문이 필요합니다. 하지만 문제가 있습니다. 페이지가 크롤링에서 차단되면 Googlebot이 noindex 태그를 읽어 적용할 수 없습니다.
이것은 답답한 상황을 만듭니다. noindex를 사용하려면 페이지가 크롤링되도록 허용해야 합니다.
기본 원칙:
- SEO에 중요하지 않은 페이지(스테이징 경로, 내부 API, 중복 필터 페이지)에서 크롤러가 크롤 예산을 낭비하지 않도록 robots.txt
Disallow를 사용합니다. - 특정 페이지가 검색 결과에 나타나지 않도록 하려면
noindex메타 태그를 사용합니다. - 정말 민감한 페이지(관리자 패널, 비공개 콘텐츠)에는 robots.txt가 아닌 실제 인증을 사용합니다.
User-Agent: 특정 봇 타겟팅
User-agent 필드를 사용하면 모든 크롤러 또는 특정 크롤러를 타겟팅할 수 있습니다.
User-agent: *
별표는 "특별히 지정되지 않은 모든 크롤러"를 의미합니다. 대부분의 robots.txt 파일은 일반 규칙에 이것을 사용합니다.
특정 봇도 타겟팅할 수 있습니다:
User-agent: Googlebot
Disallow: /no-google/
User-agent: Bingbot
Disallow: /no-bing/
User-agent: *
Disallow: /admin/
규칙은 각 user-agent 그룹별로 적용됩니다. Googlebot은 Googlebot 블록을 따릅니다. 일치하는 블록이 없으면 * 블록으로 대체됩니다.
특별히 관리하고 싶을 수 있는 크롤러들:
Googlebot— Google의 메인 웹 크롤러Googlebot-Image— Google의 이미지 전용 크롤러Bingbot— Microsoft BingGPTBot— OpenAI의 학습 크롤러 (콘텐츠 사이트의 최신 관심사)anthropic-ai— Anthropic의 학습 크롤러AhrefsBot,SemrushBot,MJ12bot— SEO 및 분석 도구
AI 학습 크롤러를 특별히 차단하려면:
User-agent: GPTBot
Disallow: /
User-agent: anthropic-ai
Disallow: /
User-agent: *
Allow: /
이는 점점 일반화되고 있습니다. 실제로 사이트에 중요한지는 별개의 문제이지만 구문은 올바릅니다.
일반적인 Disallow 패턴
일반적인 상황에 맞는 올바른 패턴들입니다:
전체 디렉토리 차단
User-agent: *
Disallow: /admin/
후행 슬래시가 중요합니다. /admin/은 /admin/settings, /admin/users 등을 차단합니다. 슬래시 없이 /admin을 사용하면 /administrator나 /admin-login이라는 페이지도 차단할 수 있습니다. 아마 원하는 결과가 아닐 것입니다.
특정 파일 차단
User-agent: *
Disallow: /private-page.html
URL 쿼리 파라미터 차단 (필터 페이지)
이커머스 사이트에서는 종종 많은 필터 조합으로 동일한 제품에 접근할 수 있습니다: /products?color=red&size=L&sort=price. 이는 중복 콘텐츠를 만듭니다. 차단하세요:
User-agent: *
Disallow: /*?
이것은 쿼리 문자열이 있는 모든 URL을 차단합니다. 주의하세요. 중요한 페이지가 쿼리 문자열을 사용한다면(일부 SPA에서 그렇습니다) 해당 페이지도 차단됩니다. 더 타겟팅된 방법:
User-agent: *
Disallow: /products/*?
이것은 /products/ 아래의 쿼리 문자열 URL만 차단합니다.
차단된 디렉토리 내 특정 경로 허용
때로는 디렉토리의 대부분을 차단하되 하나의 경로는 허용하고 싶을 수 있습니다:
User-agent: *
Disallow: /account/
Allow: /account/signup
user-agent 블록 내에서 순서가 중요합니다. 대부분의 크롤러는 가장 구체적으로 일치하는 규칙을 적용합니다.
Sitemap 지시문
robots.txt에 사이트맵 URL을 포함해야 합니다:
User-agent: *
Disallow: /admin/
Sitemap: https://yourdomain.com/sitemap.xml
Sitemap 지시문은 끝에, 모든 user-agent 블록 외부에 위치합니다. 이것은 단순한 형식이 아닙니다. Google은 이것을 사용하여 중요한 페이지의 크롤링을 찾고 우선순위를 정합니다.
이미지나 비디오 사이트맵이 있는 대형 사이트에서 여러 사이트맵을 가지고 있다면:
Sitemap: https://yourdomain.com/sitemap.xml
Sitemap: https://yourdomain.com/sitemap-images.xml
Google Search Console에서 사이트맵을 직접 제출하는 것이 좋지만 robots.txt에 포함하면 파일을 읽는 모든 크롤러가 자동으로 발견하게 됩니다.
Crawl-Delay: 주의해서 사용
일부 크롤러는 Crawl-delay 지시문을 지원합니다:
User-agent: *
Crawl-delay: 10
이것은 봇에게 요청 사이에 10초를 기다리라고 알려줍니다. 원래 크롤러가 소형 서버에 과부하를 주는 것을 방지하기 위해 사용되었습니다.
문제는 Googlebot이 이것을 무시한다는 것입니다. Google은 Crawl-delay를 지원하지 않는다고 명시적으로 밝혔습니다. Googlebot의 크롤링 속도를 줄이려면 Google Search Console의 크롤링 속도 설정에서 해야 합니다.
Bingbot과 같은 다른 봇은 Crawl-delay를 지원하므로 완전히 쓸모없는 것은 아닙니다. 하지만 Google에는 no-op입니다. 속도 제한에 의존하지 마세요.
SEO를 해치는 일반적인 실수
CSS 및 JavaScript 파일 차단
이것은 한때 일반적인 조언이었습니다. "대역폭을 절약하기 위해 봇이 스크립트와 스타일시트를 크롤링하지 못하게 막아라." 이것은 좋지 않은 관행입니다. Google은 페이지를 제대로 평가하기 위해 렌더링이 필요하고 렌더링에는 CSS와 JavaScript가 필요합니다. 이것들을 차단하면:
# 이렇게 하지 마세요
User-agent: *
Disallow: /wp-content/
Disallow: /assets/
Disallow: /*.css$
Disallow: /*.js$
Google이 페이지가 실제로 어떻게 보이는지 볼 수 없어 순위에 영향을 줄 수 있습니다. 크롤러가 정적 자산에 접근하도록 허용하세요.
스테이징 및 개발 환경 무시
스테이징 환경이 staging.yourdomain.com 또는 yourdomain.com/staging/에서 접근 가능하다면 다음 중 하나를 확인하세요:
- 인증 뒤에 숨겨져 있거나 (권장)
- robots.txt에서 차단되어 있거나
Google이 색인한 스테이징 콘텐츠는 중복 콘텐츠 문제를 만듭니다. 빠르게 움직이는 사이트에서 흔히 발생하는 실수입니다.
민감한 콘텐츠 보호에 robots.txt 사용
이것은 반복할 가치가 있습니다. robots.txt는 접근 제어가 아닙니다. 파일은 공개적으로 읽을 수 있습니다. 누구든지 yourdomain.com/robots.txt를 방문해서 숨기려 한 경로를 정확히 볼 수 있습니다. 만약 그 경로들이 흥미롭다면 사람들은 직접 방문할 것입니다. 실제로 민감한 것에는 서버 사이드 인증을 사용하세요.
실수로 사이트맵 차단
# 이것은 실수로 사이트맵을 차단합니다
User-agent: *
Disallow: /
Allow: /public/
Sitemap: https://yourdomain.com/sitemap.xml
이 예에서 /sitemap.xml은 Allow: /public/ 예외와 일치하지 않아 Disallow: /에 의해 차단됩니다. 파일의 sitemap 지시문이 사이트맵 URL을 자동으로 차단 해제하지 않습니다. Allow: /sitemap.xml을 명시적으로 추가해야 합니다.
잘못된 위치
robots.txt는 도메인 루트에 있어야 합니다. yourdomain.com/robots.txt는 작동합니다. yourdomain.com/blog/robots.txt는 아무것도 하지 않습니다. 크롤러는 그곳을 보지 않습니다.
또한 yourdomain.com의 robots.txt는 subdomain.yourdomain.com에 영향을 미치지 않습니다. 각 서브도메인에서 크롤링을 제어하려면 자체 robots.txt가 필요합니다.
일반적인 사이트 유형별 robots.txt 예시
표준 콘텐츠 또는 마케팅 사이트
User-agent: *
Allow: /
Sitemap: https://yourdomain.com/sitemap.xml
숨길 것이 없고 중복 콘텐츠 문제가 없다면 간단하게 유지하세요.
WordPress 사이트
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Sitemap: https://yourdomain.com/sitemap.xml
Allow: /wp-admin/admin-ajax.php가 중요합니다. 일부 테마와 플러그인은 Googlebot이 올바른 렌더링을 위해 접근해야 하는 프론트엔드 기능에 이 엔드포인트를 사용합니다.
필터 페이지가 있는 이커머스 사이트
User-agent: *
Disallow: /cart/
Disallow: /checkout/
Disallow: /account/
Disallow: /search?
Disallow: /products/*?sort=
Disallow: /products/*?page=
Sitemap: https://yourdomain.com/sitemap.xml
장바구니와 결제 페이지는 색인되어서는 안 됩니다. 계정 페이지는 사용자별 콘텐츠입니다. 필터/정렬 URL 조합은 중복 콘텐츠를 만듭니다.
API 라우트가 있는 Next.js 또는 SPA
User-agent: *
Disallow: /api/
Disallow: /_next/
Allow: /_next/static/
Allow: /_next/image
Sitemap: https://yourdomain.com/sitemap.xml
API 라우트를 차단합니다. Next.js 내부 경로를 차단하되 렌더러가 필요로 하는 정적 자산과 이미지 최적화 엔드포인트는 제외합니다.
robots.txt 테스트
파일이 올바르다고 가정하지 말고 확인하세요.
Google Search Console에는 robots.txt 테스터가 있습니다(설정 > robots.txt). URL 경로를 입력하면 현재 robots.txt를 기반으로 Googlebot이 허용되는지 차단되는지 알려줍니다. 또한 Google이 파일을 마지막으로 가져온 내용도 보여줍니다.
Search Console의 URL 검사 도구를 사용하면 개별 URL을 확인하고 Google이 접근 및 렌더링할 수 있는지 볼 수 있습니다.
다양한 SEO 스위트의 robots.txt 검사기 같은 서드파티 도구도 구문을 검증하고 여러 user-agent를 테스트할 수 있습니다. SEO 메타 생성기와 OG 이미지 생성기는 사이트의 전체 SEO 설정 작업 시 유용한 동반자입니다.
robots.txt를 변경한 후 URL 검사 도구를 사용하여 Google이 다시 가져오도록 요청할 수 있습니다. 변경 사항은 보통 며칠 내에 전파됩니다.
robots.txt 생성하기
robots.txt를 손으로 작성하는 것은 복잡하지 않지만 구문을 약간 틀리기 쉽습니다. 슬래시 누락, 잘못된 위치의 지시문, 생각한 것과 다른 user-agent 블록 등이 있을 수 있습니다.
robots.txt 생성기를 사용하면 구성할 봇을 선택하고, 차단할 경로를 지정하고, 사이트맵 URL을 추가하여 깔끔하고 유효한 결과물을 얻을 수 있습니다. 구문을 찾아보는 것보다 빠르고 중요한 페이지의 크롤링 범위를 잃게 하는 오타 가능성을 줄여줍니다.
생성 후 웹 서버의 루트에 파일을 배치하고 yourdomain.com/robots.txt에서 접근 가능한지 확인하세요. 대부분의 프레임워크에서:
- Next.js:
public/robots.txt를 추가하거나 App Router의robots.ts라우트 사용 - Gatsby:
static/robots.txt에 배치 - Hugo:
static/robots.txt에 배치 - 일반 HTML 사이트: 웹 서버가 서비스하는 루트 디렉토리에 배치
Next.js App Router 사용자는 프로그래밍 방식으로도 생성할 수 있습니다:
// app/robots.ts
import { MetadataRoute } from 'next'
export default function robots(): MetadataRoute.Robots {
return {
rules: {
userAgent: '*',
allow: '/',
disallow: ['/admin/', '/api/'],
},
sitemap: 'https://yourdomain.com/sitemap.xml',
}
}
이 방법은 규칙이 환경 변수에 따라 달라질 수 있는 사이트(예: 스테이징에서 모든 크롤러 차단)에 더 적합합니다.
robots.txt는 간단하지만 그 주변의 오해들, 특히 크롤링 vs. 색인 구분은 실제로 때로는 디버깅하기 어려운 SEO 문제를 일으킵니다. 파일을 한 번 올바르게 설정하고, Search Console에서 테스트하면 진짜로 잊어버릴 수 있습니다.