IT 시행착오·

robots.txt와 sitemap.xml 올바르게 쓰는 법

정적 블로그에서 robots.txt와 sitemap을 Minimal하게 유지하는 방법과, 파일이 200인데도 본문 HTML이 막히던 사례입니다.

robots.txt 차단 통계 2026 — 사이트맵·로봇 가이드 (cc by-sa 4.0, wikimedia-commons)

robots.txt와 sitemap은 순위를 바로 올려 주지 않습니다. 다만 “어디를 봐도 되는지”, “어떤 URL이 있는지”를 크롤러에게 알려 주는 기본 안내판입니다. 서민혁닷컴은 Astro @astrojs/sitemap으로 빌드 시 사이트맵을 만들고, public/robots.txt는 아주 짧게 둡니다.

지금 쓰는 robots.txt

User-agent: *
Allow: /

Sitemap: https://seominhyuk.com/sitemap-index.xml

이것만으로도 블로그 초기에는 충분합니다. /posts/를 Disallow로 막는 실수만 하지 않으면 됩니다. robots.txt는 보안 도구가 아닙니다. 관리자 URL이나 토큰을 적는 용도가 아닙니다.

ads.txt는 광고 쪽 파일이라 robots와 별개지만, 같은 public 폴더에 둡니다. 검수 전에 AdsBot으로 ads.txt와 홈 HTML을 둘 다 치는 게 좋습니다.

sitemap은 인덱스가 생기기 쉽다

Astro sitemap을 켜면 sitemap-index.xml이 진입점이고, 실제 URL 목록은 sitemap-0.xml 같은 파일로 갈라질 수 있습니다. Search Console에는 인덱스 URL을 제출하면 됩니다. 예전에 /sitemap.xml만 가정하고 404를 보면, 빌드 산출물 이름을 다시 확인하세요.

사이트맵에 넣지 않는 것: 검색 결과, 태그 조합으로 무한히 늘어나는 페이지, 프리뷰 URL. 공개할 글·소개·약관 정도만 넣습니다.

“파일은 200인데 글은 403”이 가능했다

이상하게도 AdsBot으로 치면:

  • /robots.txt → 200
  • /ads.txt → 200
  • / , /sitemap-index.xml → 403 Challenge

처럼 텍스트 파일만 통과하는 경우가 있었습니다. robots와 sitemap 내용이 잘못돼서가 아니라, Cloudflare가 HTML(과 일부 XML) 앞에 Managed Challenge를 붙인 탓입니다. 파일 문법을 고치기 전에 curl로 응답 본문 앞자리를 보세요. Just a moment...면 SEO 파일이 아니라 보안 설정 문제입니다. 대응은 Bot Fight 글에 있습니다.

운영할 때

글 슬러그를 바꾸면 사이트맵의 새 URL과 旧 URL 리다이렉트를 같이 봅니다. canonical이 옛 경로를 가리키면 색인이 꼬입니다.

로컬에서 빌드한 뒤 dist/robots.txt, dist/sitemap-*.xml이 있는지 확인합니다. public/에만 두고 빌드 설정이 빠져 배포본에 없으면 Search Console만 이상해집니다.

색인 요청 흐름은 Search Console 색인 요청에 이어서 보면 됩니다. robots·sitemap은 “안내판”이고, 안내판이 가리키는 문이 잠겨 있으면(챌린지) 안내를 고쳐도 방문자는 못 들어갑니다.