이하 초록색은 구글 한국 블로그에 있던 내용인돼 2021.1.22 현재는 해당 블로그에서는 삭제되었으나 내용이 훌륭하여 공유합니다. 안녕하세요, 구글코리아 소프트웨어 엔지니어 이동휘 입니다.
오 늘은 많은 웹사이트 담당자분들이 robots.txt(로봇제어파일)을 작성하면서 걱정하시는 문제를 짚어보려고 합니다. 때때로 대형 웹사이트 담당자분들이 robots.txt의 규칙과 내용을 비교적 잘 이해하고 있으면서도, 검색로봇이 접근하지 말아야 할 디렉토리의 목록을 robots.txt 에 입력하는 것이 오히려 악의적인 해커들에게 힌트를 주는 것이 아닌지 걱정을 하시거든요.
[제가 직접(!) 그려본 침입개념도입니다]
예를 들어, robots.txt 파일에 검색로봇을 차단할 디렉토리를 다음과 같이 지정한다고 가정합니다. User-agent: * Disallow: /admin Disallow: /private_db
robots.txt 는 홈페이지처럼 공개되어 있는 파일이므로 악의적인 해커는 우선 robots.txt파일을 쭈욱 읽어본 다음 회심의 미소를 지으며 /admin이나 /private_db 폴더부터 우선 공격한다는 이야기지요. (로봇제어파일의 소개는 이전 포스트를 참고하세요.)
이에 대하여 완벽하지는 않지만 해결책을 알려드리겠습니다.
1. Disallow와 Allow 조합
자, 그럼 첫 번째 해결책부터 들어갑니다. 모든 파일을 Disallow한 다음 공개할 디렉토리만 선택적으로 Allow하는 방법입니다. 이 방법은 Allow로 지정해야할 디렉토리가 많지 않을 때 유용합니다. 예를 들면 다음과 같습니다.
모든 검색로봇에 대해서 해당 사이트의 모든 파일을 차단(두번째 행)한 후, /index.html 파일과 /public 디렉토리를 허용한다는 뜻입니다. /public 디렉토리라고 했지만 사실 정확히 얘기하면 /public으로 시작하는 어떤 URL 경로도 허용합니다. 예를 들어, /public_db, /public/list.html 또는 /public?q=hello 도 모두 허용됩니다.
** ‘Disallow : /’처럼 robots.txt를 작성하시면 모든 검색로봇의 검색을 차단합니다. 이것은 기본적으로 범하지 말아야 할 기초적인 내용이므로 유의하세요. Disallow : /’는 구글 크롤링봇들의 웹사이트 접속을 차단시켜 크롤링 오류를 발생시키므로 구글 광고 비승인되게 합니다.
2. 디렉토리명의 일부만 사용
두 번째로는 차단할 디렉토리명의 일부만을 사용하는 방법입니다. 위의 예에서도 보셨지만 Disallow나 Allow 항목의 디렉토리명은 사실은 URL경로의 앞쪽만 일치하면 적용됩니다. 예를 들면,
User-agent: * Disallow: /a Disallow: /p
이렇게만 적어도 /admin 디렉토리와 /private_db 디렉토리의 내용 모두 차단됩니다. 이때 주의할 것은, /public 디렉토리도 /p로 시작하므로 이럴 경우는 좀 더 자세히 적어주는 것이 좋습니다. 다음과 같이요.
Disallow: /pri
아니면, Allow: /public 을 따로 추가해주어도 되겠지요.
3. 파일 확장자로 차단
추가적으로 한가지 더 알려드리자면 파일의 확장자만을 기준으로 차단이나 허용이 가능합니다. 예를 들어, 우리 사이트의 모든 PHP프로그램은 검색로봇이 접근하지 않도록 하려면 다음과 같이 하면 됩니다.
User-agent: * Disallow: /*.php
/public/program.php, /filename.php?q=hello 등의 .php 확장자를 가진 페이지로의 접근이 차단됩니다. 와일드카드 문자 ‘*’는 그 자리에 아무 문자가 없을 수도 있고 임의의 어떤 문자열이 올 수도 있습니다.
자, 완벽하지는 않지만 그럴듯한 해결책이 되겠는지요? robots.txt의 규칙과 구글 검색로봇의 원리에 대해서 더 궁금하신 분은 이전 포스트들과 다음의 사이트를 참고하세요. Controlling Crawling and Indexing: http://code.google.com/web/controlcrawlindex (영어 문서입니다. 한국어 문서는 현재 작업 중에 있으니 조금만 기다려주세요~)
마 지막으로 꼭 말씀을 드려야 할 것이 있는 데, 해커를 얕잡아 보지 마십시오. 단지 robots.txt파일에 써 있는 내용을 통해 디렉토리명을 아는 정도로 위험해질 시스템이라면 robots.txt파일과 관계없이 이미 악의적 공격자의 먹이감이 될 수 있습니다. 컴퓨터 세계에서는 방어자보다 공격자가 훨씬 유리하며 보이지 않는 악의적 해커는 단순한 힌트 한 두개가 없다고 절대로 포기하지 않거든요.
즉, robots.txt는 정상적인 검색로봇과 웹마스터가 소통하는 창구일 뿐 개인정보 보호나 시스템 보안과는 연결고리가 크지 않습니다.
robots.txt 파일을 사용하여 사이트내에 사이트 맵 파일이 어디에 설치되어 있는지를 검색 엔진에 알게 할 수 있습니다. 검색 엔진이 사이트에 액세스하는 경우, robots.txt 파일이 존재하면 가장 먼저 robots.txt를 살펴봅니다. 이때 사이트 맵 장소가 기재되어 있으면 사이트 맵을 읽어들입니다.
웹 마스터 도구를 이용해 직접 Google에 사이트 맵을 보낼 수 있지만 검색 엔진은 Google뿐만이 아니기 때문에 robots.txt를 사용하여 사이트 맵의 위치를 알려주는 것이 중요합니다.
robots.txt에 사이트 맵의 위치를 알려주려면 다음과 같이 적어주세요. (파일 이름은 작성자 임의의 파일 이름을 지정하십시오).
Sitemap : http://www.example.com/sitmap.xml/
기술 위치(내용을 적은 위치)는 robots.txt 중이면 어디라도 상관 없습니다. 파일의 맨 위에 두어도 괜찮습니다.
반드시 폴더명 맨 끝에 /를 붙여야 한다. 붙이지 않으면 확장자가 없는 파일로 인식하기 때문에 제대로 작동하지 않습니다. 예를들면 아래와 같이 URL의 맨 끝에 꼭 /을 붙여주세요.
(예) 네이버 검색로봇만 접근 가능하게 설정. 네이버 검색로봇의 이름(User-Agent)은 Yeti 입니다.
User-agent: Yeti
Allow: /
(예) 모든 검색엔진의 로봇에 대하여 접근 가능하게 설정
User-agent: *
Allow: /
아래와 같이 설정하는 것이 너무도 당연한데 사이트들을 살펴보다 보면 User-agent: Yeti(네이버검색로봇만 접근허용합니다.) 로 해 놓은 경우도 있고, Disallow: /(검색엔진은 루트 디렉토리를 포함한 모든 디렉토리를 크롤링 색인하지 마세요)로 해놓은 경우도 있습니다. 국정원이 아닌이상 상업용 사이트에서 Disallow: 를 설정하는 것은 검색엔진최적화(SEO)에 측면에서는 상상할 수 없는 치명적은 실수입니다.
크롤러중 검색엔진bot으로는 2005년 이전에는 NaverBot을 대체한 네이버의 Yeti, 다음의 Daumoa bot이 보입니다.( udger.com 는 User Agents Analysis 사이트입니다. )
크롤러중 검색엔진bot들
모든 크롤러들에게 크롤링(색인)되게 한다는 것은 검색엔진최적화에서 매우 중요한 의미가 있습니다. http://user-agent-string.info/list-of-ua/bots 에는 셀 수 없이 많은 전세계 크롤러들이 있는데 이들이 모두 그러하지는 않지만 많은 크롤러들의 목적은 색인후 자사 사이트에 검색결과로 보여주는 경우가 많습니다. 이들 크롤러들은 평판이 높은 양질의 사이트들입니다.(네이버가 이들 크롤러들중 하나인 것을 감안하면 쉽게 이해가 되실 것입니다. 이들 크롤러들은 특정 국가의 검색포탈인 경우가 많습니다.) 이들 사이트에 자사/자신의 사이트가 노출된다는 것은 고품질 백링크를 얻는 것을 의미하므로 검색엔진최적화에 있어 매우 중요한 의미를 가집니다.
크롤러중 Marketing bot들
크롤러중 Marketing bot들로는 저에게는 친숙한 SEMrushBot, MOZ(DotBot 는 MOZ의 크롤러입니다.Rogerbot 은 Moz’s Campaign Crawler 입니다.), AhrefsBot 을 확인할 수 있었습니다. 자사/자신이 이용하는 마케팅 솔루션이 자주 크롤링을 하여 최신 데이터를 반영하는지 판단하고자 할때 여기서 확인해 보면 좋을 것 같습니다.
재미삼아 SEOkicks-Robot 를 알아보았습니다. SEOkicks-Robot 는 백링크 검사기입니다. 이것은 백링크는 구글애널리틱스로도 충분히 확인할 수 있으므로 특별한 필요하지는 않을 것 같습니다.
SEOkicks는 독일에 기반을 둔 백 링크 검사기입니다. 웹 사이트에 따르면 가장 자주 사용되는 백 링크 데이터베이스 중 하나입니다.
자체 크롤러를 사용하여 SEOkicks는 웹 사이트를 통해 제공되는 링크 데이터를 수집합니다.
robots.txt 파일을 파싱 할 때 발생하는 오류 목록입니다 .(List of errors when parsing the robots.txt file.)
오류(Error)
Yandex 확장(Yandex extension)
상세 설명( Description )
규칙이 / 또는 *로 시작하지 않습니다.
(Rule doesn’t start with / or *)
예(Yes)
규칙은 / 또는 * 문자로만 시작할 수 있습니다.(A rule can start only with the / or * character.)
여러 ‘User-agent : *’규칙이 발견됨
(Multiple ‘User-agent: *’ rules found)
아니요(No)
이 유형의 규칙은 하나만 허용됩니다.(Only one rule of this type is allowed.)
Robots.txt 파일 크기 제한 초과
(Robots.txt file size limit exceeded)
예(Yes)
파일의 규칙 수가 2048 개를 초과합니다.(The number of rules in the file exceeds 2048.)
규칙 앞에 사용자 에이전트 지시문이 없습니다.(No User-agent directive in front of rule.)
아니요(No)
규칙은 항상 User-agent 지시문을 따라야합니다. 아마도 파일에 User-agent 뒤에 빈 줄이있을 수 있습니다.(A rule should always follow the User-agent directive. Perhaps, the file contains an empty line after User-agent.)
규칙이 너무 깁니다.(Rule is too long)
예(Yes)
규칙이 길이 제한 (1024 자)을 초과합니다.(The rule exceeds the length limit (1024 characters).)
잘못된 Sitemap 파일 URL 형식
(Invalid Sitemap file URL format)
예(Yes)
사이트 맵 파일의 URL은 프로토콜을 포함, 전체에 지정해야합니다. 예 : https://www.example.com/sitemap.xml
(The Sitemap file URL should be specified in full, including the protocol. For example, https://www.example.com/sitemap.xml)
예 : 아래와 같이 지시문(Sitemap)을 잘못하여 2번 작성하는 경우에도 이 에러가 보여집니다.
Clean-param 지시문은 로봇이 무시하는 하나 이상의 매개 변수와 경로 접두사를 포함해야합니다. 매개 변수는 & 문자로 구분됩니다. 공백으로 경로 접두어와 구분됩니다.
( The Clean-param directive should contain one or more parameters ignored by the robot, and the path prefix. Parameters are separated with the & character. They are separated from the path prefix with a space. )
경고(Warnings)
robots.txt 파일을 파싱 할 때 발생하는 경고 목록입니다 .(List of warnings when parsing the robots.txt file.)
경고(Warning)
Yandex 확장(Yandex extension)
상세 설명(Description)
불법 문자가 사용되었을 가능성이 있습니다.(It’s possible that an illegal character was used)
예(Yes)
파일에 * 및 $ 이외의 특수 문자가 있습니다.(The file contains a special character other than * and $.)
알 수없는 지시문이 발견되었습니다.(Unknown directive found)
예(Yes)
파일에 robots.txt 사용 규칙에 설명되지 않은 지시문이 있습니다 . 이 지시문은 yandex 외에 다른 검색 엔진의 로봇에서 사용할 수 있습니다. robots.txt 사용 규칙 을 참조하시면 robots.txt 에서 사용할 수 있는 지시문과 어떤 경우에 사용하는지 자세히 알 수 있습니다.
(The file contains a directive that isn’t described in the rules for using robots.txt. This directive may be used by the robots of other search engines)
예 :
Sitemap: https://www.copy114.kr/sitemap.xml
와 같이 지시문을 작성해 주어야 하는데 아래와 같이 “Sitemap : “을 빼먹은 경우가 그 예입니다.
https://www.copy114.kr/sitemap.xml
구문 오류(Syntax error)
예(Yes)
문자열은 robots.txt 명령어 로 해석 될 수 없습니다.( The string cannot be interpreted as a robots.txt directive. )
알수없는 오류(Unknown error)
예(Yes)
파일을 분석하는 동안 알 수없는 오류가 발생했습니다. 지원 서비스에 문의하십시오.(An unknown error occurred while analyzing the file. Contact the support service.)
URL 유효성 검사 오류(URL validation errors)
Robots.txt 분석 도구 의 URL 유효성 검사 오류 목록입니다.(The list of the URL validation errors in the Robots.txt analysis tool.)
오류(Error)
상세 설명(Description)
구문 오류(Syntax error)
URL 구문 오류입니다.(URL syntax error.)
이 URL은 도메인에 속하지 않습니다.
(This URL does not belong to your domain)
지정된 URL이 파일이 구문 분석되는 사이트에 속하지 않습니다. 사이트 미러의 주소를 입력했거나 도메인 이름을 잘못 입력했을 수 있습니다.
(The specified URL does not belong to the site for which the file is parsed. Perhaps you entered the address of a site mirror or misspelled the domain name.)
검색 로봇이 한 페이지를로드 한 후 다른 페이지를로드하기 전에 대기하는 최소 간격 (초)을 지정합니다.
(Specifies the minimum interval (in seconds) for the search robot to wait after loading one page, before starting to load another.)
지시문 대신 Yandex.Webmaster 의 크롤링 속도 설정 을 사용하는 것이 좋습니다 .
(We recommend using the crawl speed setting in Yandex.Webmaster instead of the directive.)
크롤링 대기 시간을 설정하면 다운로드가 늘이 페이지들의 색인이 안되는 문제를 해결할 수 있습니다.
* 필수 지시문(명령문).
Disallow, Sitemap 및 Clean-param 지시문이 가장 자주 사용되고 필요합니다.
예를 들면 :
User-agent: * # specify the robots that the directives are set for
Disallow: /bin/ # prohibits links from the Shopping Cart.
Disallow: /search/ # prohibits page links of the search embedded on the site
Disallow: /admin/ # prohibits links from the admin panel
Sitemap: http://example.com/sitemap # specify the path to the site's sitemap file for the robot
Clean-param: ref /some_dir/get_book.pl
7. 기타
네이버의 robots.txt
네이버 웹마스터도구에서 [검증] -> [robots.txt] 에서 네이버가 robots.txt 를 잘 읽고 색인하는지 확인하세요.
네이버에 관해서는 사이트에 robots.txt 를 루트 디렉토리에 올려놓았다고 하여 robots.txt 가 잘 작동할 것이라고 안주하고 간과하지 말라는 것입니다. 꼭 robots.txt를 검증하는 것을 생략하지 말아주세요.
2021-01-22 기준 최근에 제가 운영하는 새로운 쇼핑몰 사이트의 모든 페이지들을 웹페이지 수집 요청을 하였는데, 색인이 안되는 문제를 해결하느냐고 고금 분투하던중 발견한 것인데 네이버가 robots.txt를 수집하지않아 빈칸으로 남아 있었습니다.
네이버 웹마스터 도구에 대한 보다 상세한 정보를 원하시는 분은 아래의 게시글을 참조하세요.
1 Comment
[…] /robots-txt-%ec%9e%91%ec%84%b1%ed%8c%81/ […]