📍목표
- robots.txt 파일에 대해 알아보기
📍왜 페이지 색인이 생성되지 않나요?
서브 블로그를 새로 만들고 구글 서치콘솔에 등록한 다음날, 페이지 색인이 만들어지지 않는다는 메일을 받았다
구글 서치콘솔에서 자세한 내용을 살펴보니, robots.txt에 의해 차단되었다는 메시지가 있었다 (나는 robots.txt를 만든 적이 없는데!!)
차단된 URL은 아래와 같음
살펴보니 /manage 는 관리자 페이지이고, /guestbook은 방명록 페이지이다. 그렇다면 구글 봇을 차단하는게 이해가 된다. 그런데 별도로 robots.txt를 만들지 않았는데?
찾아보니, 기본 적용되고 있는 robots.txt 파일은 다음과 같았다. 아마 티스토리에서 내부적으로 robots.txt 파일을 만들어 놓은 것 같다.
User-agent: *
Disallow: /guestbook
Disallow: /m/guestbook
Disallow: /manage
Disallow: /owner
Disallow: /admin
Disallow: /search
Disallow: /m/search
User-agent: bingbot
Crawl-delay: 20
위의 경로들에 대해서 모든 검색엔진의 크롤러가 컨텐츠를 수집하지 않게 하고 있다. 그리고 특히 MS의 Bing 검색엔진 크롤러인 Bingbot에 대해서는 크롤링 딜레이를 20초로 설정하고 있다. 이는 서버에 과도한 부하를 주지 않도록 하는 목적일 것이다.
이참에 robots.txt에 대해 자세히 알아보고 싶어서 구글 공식문서를 들여다 보았다.
📍robots.txt 소개
기본적인 역할
- 크롤러가 액세스할 수 있는 URL을 명시하여 크롤링 트래픽을 관리
- 일반 유저가 아닌 검색엔진에 의한 요청으로 사이트(즉, 서버)에 과도한 요청이 실행되는 것을 방지
- 웹페이지가 검색엔진(구글 등)에 표시되는 것을 방지하기 위한 목적이 아니다. 검색엔진에 표시되는 것을 막으려면 noindex 로 인덱스 생성을 차단해야 함 (또는 인증/인가 활용)
=> 이는 다른 사이트에서의 referral을 통해 인덱스가 생성될 수도 있기 때문(봇이 직접 사이트를 방문하지 않고도 인덱스가 만들어질 수 있음)
- 미디어 파일을 검색엔진 검색 결과에 표시되지 않게할 수도 있음(이미지, 동영상, 오디오 등을 스토리지에 보관하고 있을 때 유용할 듯 함)
=> 이래도 사이트에 직접 접속하면 미디어 파일이 로드됨
robots.txt 파일의 제한사항
- 규칙이 일부 검색엔진에서만 지원될 수 있음
=> robots.txt 파일의 지침을 준수하지 않는 크롤러도 있음
- 크롤러마다 구문을 다르게 해석할 수 있음
- 다른 페이지에서의 리퍼럴을 통해 인덱스가 생성될 수 있음
=> 구문을 잘 해석하지 못하면 크롤링 제한이 없는 것으로 인식
=> 이러한 제한사항들 때문에 noIndex meta 태그 혹은 인증/인가를 활용
📍robots.txt 파일을 만들고 제출하는 방법
- robots.txt 파일은 사이트 루트에 위치 (www.example.com/robots.txt)
=> 하위 디렉터리에 위치하면 전체 사이트에 적용 안됨
- 파일 예시
<!-- 크롤러 이름(구글: Googlebot) -->
User-agent: Googlebot
<!-- 블랙리스트(/nogooglebot 로 시작하는 URL 크롤링 불가) -->
Disallow: /nogooglebot/
<!-- 그 외 모든 크롤러는 /로 시작하는 URL 크롤링 가능 -->
User-agent: *
Allow: /
<!-- 사이트맵 파일 명시 -->
Sitemap: https://www.example.com/sitemap.xml
- 파일 이름은 무조건 robots.txt 이며, 사이트 당 1개만 존재 가능
- robots.txt 파일은 이 파일이 게시된 프로토콜(예 - https), 호스트(예 - example.com), 포트(예 - 80) 내의 경로에만 인정됨
=> 예) https://example.com/robots.txt 규칙이 적용 안되는 경로
- UTF-8로 인코딩된 텍스트 파일이어야 함
📍robots.txt 파일 규칙 예시
- 전체 웹사이트 크롤링 금지(하지만, 이름을 명시적으로 지정해야 하는 여러 AdsBot 크롤러에는 적용되지 않음)
User-agent: *
Disallow: /
- 디렉터리 및 디렉터리 컨텐츠의 크롤링 금지
User-agent: *
Disallow: /calendar/
Disallow: /junk/
Disallow: /books/fiction/contemporary/
- 크롤러(구글 뉴스봇) 하나에만 액세스 허용
User-agent: Googlebot-news
Allow: /
User-agent: *
Disallow: /
- 하나의 크롤러를 제외한 모든 크롤러에 액세스 허용
User-agent: Unnecessarybot
Disallow: /
User-agent: *
Allow: /
- 하위 디렉토리를 제외한 전체 사이트 크롤링 금지
User-agent: *
Disallow: /
<!-- /public 하위에만 접근 가능 -->
Allow: /public/
- 특정 형식 파일(.gif)의 크롤링 금지
User-agent: Googlebot
<!-- *: 0개 이상의 유효한 모든 문자(와일드 카드) -->
<!-- $: URL의 끝 -->
Disallow: /*.gif$
📍robots.txt 파일 요청 시 서버 응답의 HTTP 상태 코드에 따라 크롤러 반응
- 2xx(success): 크롤러가 서버에서 제공한 robots.txt 파일 처리
- 3xx(redirection): 리디렉션을 robots.txt 의 404로 인식 (리디렉션으로 규칙을 가져오지 못함)
- 4xx(client errors): 429를 제외한 모든 4xx 오류를 robots.txt 파일이 없는 것으로 처리
- 5xx(server errors): 5xx 및 429 서버 오류로 해석되면 크롤링 일시정지 후 크롤링 재시도됨 (서버 오류가 아닌 상태코드 받을 때까지)
=> 특히 503 오류로 인한 재시도 빈번하게 발생
=> 기본적으로 robots.txt 파일은 최대 24시간 동안 캐시되지만,
robots.txt 에 30일 넘게 연결 불가하면(503 에러 등으로 인해..),
마지막 캐시된 robots.txt 사본 활용(사본 활용 불가 시 크롤링 제한이 없다고 여김)
📍네이버, 구글의 robots.txt 는 어떻게 되어 있을까?
www.naver.com/robots.txt
User-agent: *
Disallow: /
Allow : /$
Allow : /.well-known/privacy-sandbox-attestations.json
- 루트를 제외한 모든 하위 페이지 URL은 크롤링을 금지하고, 서버에 저장된 특정 json파일에 명시된 URL만 크롤링하게 하고 있다
=> .well-known/ 은 웹 표준에서 정의된 특수 디렉토리로, 특정 목적을 위해 파일을 저장하는데 사용된다고 한다
구글은 너무 길어서 생략..
참고) 구글 검색센터
https://developers.google.com/search/docs/crawling-indexing/robots/intro?hl=ko