Google Sitemap은 웹마스터 또한 서치엔진에게 너무나 유용한 툴이다. 최근 Google과 Yahoo와 같은 서치엔진은 자신들의 인덱싱 알고리즘에 전적으로 의존하여 크롤링하고 인덱싱하기엔 너무나 광대한 정보가 이미 넘쳐나고 있다는 것을 인지하면서 웹마스터들이 직접 정확한 사이트 구조를 등록할 수 있는 툴을 제공하기 시작했다. 예전에는 오픈 디렉토리 프로젝트, 홈페이지 등록, 그리고 페이지 링크등을 통해 서치엔진이 웹페이지 수집을 하였지만 이제는 웹마스터가 직접 자신의 사이트에 대한 정확한 정보와 페이지 위치등 자세한 내역을 서치엔진에게 알려줄 수 있으며 서치엔진은 이를 토대로 수집 할 웹페이지들을 빠르고 쉽게 파악할 수 있게 된다. 내 경험상 실제로 사이트맵을 등록시키면 빠르면 하루 늦어도 3~4일 안에 서치엔진의 크롤링이 이루어진 것을 확인할 수가 있었다. 이것은 자신이 설정한 값과 서치엔진의 스케줄에 의해 결정 된다. 사이트맵과 서치엔진의 page rank와는 관계가 없다. 수집 된 페이지라도 서치엔진에 수집된 다른 페이지와의 상대적인 rank에 의해 검색 결과가 보여지기 때문에 높은 순위을 보장할 수는 없는 것이다.
Sitemap 만들기에 대해 알아보기 전에 한가지 문제점을 얘기하고자 한다. 바로 최근 널리 사용되는 블로그 게시물들의 중복성이다. 블로그 특성상 하나의 게시물에 대한 여러가지 접근경로를 가지고 있을 수 있다. 예를 들어 "Sitemap 만들기"란 글에 대해 다음과 같은 경로를 가지고 있을 수 있다.
- http://blog.com/blog/23
- http://blog.com/blog/?id=2
- http://blog.com/category/web/sitemap-만들기
- http://blog.com/archive/2006/10/sitemap-만들기
- http://blog.com/tag/sitemap/sitemap-만들기
블로그 종류에 따라 이러한 중복성은 훨씬 더 심각 할 수 있다. 이렇게 중복된 내용이 모두 서치엔진에 수집되면 하나의 게시물에 해당하는 검색결과에 모든 접근경로가 보여진다. 마치 도배를 한듯한... 이는 웹 검색을 하는 사용자 입장에서 보면 분명히 만족할 만한 검색 결과가 아닐 것이다. 또한 자신의 블로그의 쓸데없는 중복된 내용으로 다른 좋은 콘텐츠를 가지고 있는 자신 또는 다른 사이트의 페이지들의 rank를 뒤로 밀어내는 악영향을 미칠 수도 있다. 따라서 정확하면서도 간결한 Sitemap을 제공하는 것이 웹마스터의 의무가 아닌가 싶어서 이렇게 소개해 본다.
Google & Yahoo Sitemap 만들기 전에
Yahoo 서치엔진에는 일반 RSS/ATOM feed도 등록이 가능하지만 일부 Sitemap Protocol에서 정의하는 정보가 빠져있으며 또한 일정한 최근게시물에 대한 것이기 때문에 서치엔진이 사이트의 모든 정보를 알 수 없게 된다. 이러한 이유에서 Google은 XML형식의 Sitemap Protocol을 사용하기를 권장한다. Google이 권장하는 사이트맵 프로토콜을 사용한 사이트맵은 Google에 최적화 되어 있을 뿐 아니라 Yahoo Explorer 서비스의 사이트맵 등록에 사용할 수도 있기 때문에 Google이 제공하는 방법대로 작성해 보기로 한다.
사이트맵 프로토콜을 준수한 XML형식의 사이트맵은 Google 홈페이지에서 제공하는 Sitemap 생성기 프로그램을 사용하여 쉽게 만들 수 있다. 이 Sitemap 생성기의 사용방법은 구글 홈페이지에 자세히 설명되어 있기 때문에 여기서는 생략하고 내가 작성한 예제를 위주로 소개해 본다. 그리고 위에서 설명한 태터툴즈 게시물의 여러 접근경로를 배제하고 사이트탭에 추가할 기본 URL들만 추출해서 URL 목록을 생성하는 UrlList 생성기를 만들어서 사용해 보았다.
- Google이 제공하는 Sitemap 생성기 다운로드 (윈도우용 zip, 리눅스용 tar.gz)
- 태터툴즈용 UrlList 생성기 다운로드 (my_config.xml 포함)
- my_config.xml (내가 만든 제대로 작동하는 예제)
스크립에 대해서 필독..
위에서 다운 받은 "Sitemap 생성기"의 압축파일을 푼다. 우리가 필요한 파일은 sitemap_gen.py와 스크립을 실행하기 위해 사용자가 작성할 환경설정 파일이다. 환경 설정 파일을 압축 푼 파일 중에 있는 example_config.xml 또는 위에서 다운 받을 수 있는 본인이 만든 my_config.xml을 사용해서 각 항목을 차례대로 자신의 웹사이트 환경에 맞게 수정해 주어 만들 수 있다. (여기서 설명하는 그대로 따라하기엔 본인이 만든 예제파일을 사용하는 것이 편리할 것이다.) 게시글 길이를 줄이기 위해 생략된 설명은 my_config.xml 파일에서 확인할 수 있으며 더욱 자세한 설명은 Google 사이트맵 생성 페이지를 참조한다.
Google & Yahoo Sitemap 만들기 (태터툴즈 + 일반 홈페이지)
Sitemap을 생성하기 위해 5가지 방법을 조합 할 수 있는데 나는 그 중 가장 많이 쓰일 수 있는 3가지 방법, "URL", "URL 목록(태터툴즈용)", 그리고 "디렉토리 경로"을 사용해서 사이트맵 생성하였다. 그리고 매일 자동으로 업데이트된 사이트맵은 그 결과를 Google에 HTTP 요청으로 알려주도록 한다.
먼저 my_config.xml 파일을 에디터로 열고 주석처리 된 설명을 참조하여 밑에 설명대로 수정 한다.
1. [섹션 1] 자신의 사이트 정보
파란색 부분만 수정하고 나머지는 그대로 둔다.
base_url="http://www.ibluemojo.com"
store_into="google_sitemap.xml"
verbose="1"
default_encoding="UTF-8">
2. [섹션 2] URL 직접 입력 사용 (홈 디렉토리에 있는 웹페이지)
만일 자신의 최상위 홈 디렉토리에 사이트맵에 추가시킬 단위별 웹페이지(예를 들어 일반 HTML 문서)가 존재 한다면 파란색 부분을 수정하고 필요에 따라 라인을 추가한다. 추가 할 페이지가 없거나 또는 홈 디렉토리에 태터툴즈가 설치되어 있으면 이 섹션을 삭제한다.
<url href="http://도메인.com/index.shtml" changefreq="daily" priority="0.5" />
<url href="http://도메인.com/quotes.php" />
3. [ 섹션 3] URL 목록 사용 (태터툴즈 블로그 게시물 용)
본인이 작성한 태터툴즈용 UrlList 생성기를 사용할 경우 수정하지 말고 그대로 둔다. 사용하지 않는다면 이 섹션을 삭제한다.
4. [ 섹션 4] 디렉토리 경로 사용
태터툴즈 외에 최상위 홈 디렉토리의 하위 디렉토리에 사이트맵에 추가시킬 웹페이지가 있을 경우 파란색 부분을 수정한다. 홈 디렉토리 바로 다음 레벨의 하위 디렉토리만 포함 시키면 자동으로 그 밑에 있는 디렉토리안에 파일들을 모두 검색한다. 추가할 디렉토리가 없을 경우 이 섹션을 삭제한다.
<directory path="/웹서버상의홈디렉토리절대경로/interests" url="http://도메인.com/interests/" />
<directory path="/웹서버상의홈디렉토리절대경로/example" url="http://도메인.com/example/" />
위에 있는 홈 디렉토리 절대경로는 자신의 웹서버 상에 자신의 홈페이지가 실제로 존재하는 디렉토리이다. 많은 웹 호스팅 서버들이 자신의 계정 홈 디렉토리인 /xxx/xxx/user_id/ 밑에 www, public_html, 또는 htdocs등의 웹페이지를 위한 하위 디렉토리를 갖고 있다는 점을 주의하고, telnet 접속을 하여 자신의 홈페이지가 실제로 있는 홈 디렉토리로 이동한 후 다음 명령어를 사용하여 절대경로를 알아 낸다.
/home/hosting_users/mojo/www
5. [ 섹션 5] 파일 필터링
웹페이지가 아닌 파일들은 필터링을 사용해 제외 시킨다. 특히 위의 [섹션 4]에 있는 디렉토리 경로 사용을 하면 하위 디렉토리의 모든 파일이 사이트맵에 추가됨으로 자신이 제외시키고 싶은 웹페이지나 웹페이지가 아닌 일반 파일들(예를 들어 jpg, gif등)은 필터링을 사용하는 것이 바람직하다. 파란색 부분만 수정 또는 (확장자)|(확장자)와 같은 형식으로 추가한다.
<filter action="drop" type="regexp" pattern="/\.[^/]*" />
<filter action="drop" type="regexp" pattern="^.+\.((jpg)|(gif)|(png)|(css)|(js)|(class)|(inc)|(db))$" />
6. 5번까지 my_config.xml 환경설정 파일 수정을 완료 했고 태터툴즈를 사용하지 않으면 3번에서 [섹션 3]을 삭제했는지 확인하고 7번에서 태터툴즈용 파일들을 제외하고 나머지 파일만 업로드 한 후 9번으로 건너 뛴다. 태터툴즈용 UrlList 생성을 원한다면 gen_urllist.php 파일을 에디터로 열고 파란색 부분만 자신의 정보로 수정한다. 태터툴즈를 설치할 때와 동일한 정보를 입력하면 된다.
// 데이터베이스 서버
$host = 'localhost';
// 데이터베이스 사용자 ID
$user = 'abc';
// 데이터베이스 비밀번호
$passwd = '123';
// 데이터베이스 이름
$db = 'abc';
// 태터툴즈 테이블 식별자
$tb_prefix = 'tt_';
// 태터툴즈 홈 URL
$tatter_home = "http://www.ibluemojo.com/blog/";
// Google 인덱싱을 위한 Permanent Link 옵션
// 0: 숫자사용 (예: http://ibluemojo.com/blog/123)
// 1: 문자사용 (예: http://ibluemojo.com/blog/entry/게시물-한글-제목)
// 2: 숫자, 문자 모두사용 (태터툴즈에서 두가지 모두 유효한 URL임)
$perm_link = 0;
////////////////////////// 수정 할 부분 끝 ///////////////////////////
위의 perm_link는 0으로 설정하는 것을 추천한다. 문자 URL는 사람이 알아보기는 쉬우나 나중에 게시물의 타이틀을 변경하면 검색결과에 나타나는 이전에 서치엔진에 indexing 되었던 문자 URL로는 접속하지 못하는 경우가 발생한다.
7. 모든 수정이 완료 됐으면 sitemap_gen.py, my_config.xml, 그리고 태터툴즈용 파일 gen_urllist.php, gen_urllist.py 파일을 자신의 웹사이트의 최상위 홈 디렉토리로 업로드 한 후 웹서버에 telnet 접속을 한다.
8. telnet 터미널에서 gen_urllist.py 프로그램을 다음 명령어 중 하이라이트 된 부분만 자신의 도메인으로 변경한 후 실행 시킨다. 밑에 명령어는 단지 gen_urllist.php를 브라우저에서 오픈하는 대신 HTTP를 통해 내부적으로 실행 시켜주는 작용을 한다. 별 의미 없는 귀찮은 작업 같이 보이지만 뒤에서 설명 할 cron job에 등록하기 위해 필요하다. 만일 cron job에 의한 자동으로 반복적인 Sitemap 업데이트 생성 및 Google에 보고하는 작업을 하지 않을 경우 밑에 명령어 대신 gen_urllist.php를 그냥 브라우저에서 열어도 된다.
UrlList for Google Sitemap successfully generated!
위와 같은 성공 메세지 대신 DB 에러 메세지가 뜬다면 자신의 데이터베이스 정보를 다시 확인한다.
9. 위에서 UrlList가 성공적으로 생성되면 sitemap_gen.py를 다음 명령어로 실행한다. 제일 뒤에 있는 "--testing"은 아직 테스트 하는 단계에 있는 사이트맵 생성 결과를 Google 서치엔진에 보고 하지 않는 다는 것이다.
Reading configuration file: my_config.xml
Opened URLLIST file: urllist.txt
Walking DIRECTORY "/home/hosting_users/mojo/www/memory/"
Walking DIRECTORY "/home/hosting_users/mojo/www/interests/"
Walking DIRECTORY "/home/hosting_users/mojo/www/example/"
Sorting and normalizing collected URLs.
Writing Sitemap file "google_sitemap.xml" with 290 URLs
Search engine notification is suppressed.
Count of file extensions on URLs:
122 (no extension)
2 .htm
97 .html
5 .pdf
22 .ps
3 .shtml
39 /
Number of errors: 0
Number of warnings: 0
10. 위와 같이 테스트에 성공하면 Google Sitemap 홈페이지 자신의 계정에서 홈페이지에 가서 http://자신의도메인/google_sitemap.xml 주소로 사이트맵을 등록시키면 된다.
11. 등록완료 후 9번과 같은 명령어 하지만 이번에는 "--testing" flag을 빼고 다시 실행한다.
12. 다시 Google Sitemap 홈페이지 자신의 계정으로 들어가면 밑에와 같이 Sitemap이 Google 서치엔진에 의해 다운로드된 사실을 확인할 수 있다. 어느정도 시간이 걸릴 수도 있으니 아직 대기중에 있으면 나중에 다시 확인해 본다.
스케줄에 따라 반복적으로 업데이트 된 사이트맵 생성 및 제출
1. Google은 사이트가 업데이트 되는 빈도에 따라 (최대 시간당 1회) 새로 업데이트 된 사이트맵을 생성하기를 권장한다. 유닉스 계열 서버를 사용한다면 cron job을 사용해서 쉽게 반복 작업을 스케줄링 할 수 있다.
2. 웹 호스팅 서버에 telnet 접속을 한 후 다음 명령어를 실행 한다.
3. vi, emacs과 같은 에디터가 열리면 밑에 명령어 중 cd ~/www 부분을 cd ~/자신의 홈페이지가 존재하는 홈 디렉토리로 하이라이트 된 부분을 자신의 홈페이지 주소로 수정하고 전체 명령어를 한 줄에 입력한 후 저장하고 나온다.
위 예제는 본인이 매일 새벽 1시 30분에 사이트맵 생성 스크립을 실행 하도록 설정해 놓은 것이다. crontab syntax는 다음과 같으니 자신이 설정하고 싶은 스케줄링 시간 부분을 수정한다. * 기호는 "모든 해당사항"을 뜻하는 wildcard 기호로 사용된다. 자세한 crontab syntax 에 대해서는 Google 검색을 해본다.
| | | | |
| | | | +--- 요일 (0-6)(Sunday=0)
| | | +----- 달 (1-12)
| | +------- 날짜 (1-31)
| +--------- 시간 (0-23)
+----------- 분 (0-59)
cron job에 의해 반복적으로 실행되는 스크립은 업데이트 된 사이트맵을 생성한 후 Google에 HTTP 요청을 하여 보고를 하기 때문에 Google 서치엔진은 매일 새로운 사이트맵을 다운로드 해간다. 이는 Google Sitemap 홈페이지 자신의 계정에서 언제 수집해 갔는지 확인 할 수 있다.
자신의 웹서버에서 cron을 사용할 수 없을때
- 웹호스팅 서버에서 사용자 계정별 cron 사용을 지원하지 않는 경우가 있다. 이런 경우 cron을 지원하는 다른 서버에서 자신의 웹호스팅 서버로 SSH 접속을 하여 정해진 명령어를 실행시키도록 하는 방법이 있다.
- 위 방법을 사용하기 위한 서버를 찾지 못할 경우 윈도우 환경에서 "예약된 작업"에 SSH 클라이언트를 등록해 자신의 웹호스팅 서버로 접속하여 명령어를 실행시키는 별도의 스크립을 사용할 수도 있다.
글이 너무 길어진 관계로 여기서는 생략하고 위 방법들에 관심 있으신 분은 질문해 주세요.




글 보관함


댓글을 달아 주세요
Kim hyung-joon님
안녕하세요?
매일 눈띵만하다 문의 사항이 있어 글을 남깁니다.
죄송합니다.
my_config.xml 파일 (섹션5) 파일 필터링에서 이미지를 사이트 맵에 추가하고자 파란색 부분(jpg,gif...만 수정했는데 아무 반응이 없습니다.
수정 내용은 이미지 파일 확장자명을 제거했습니다.
telnet 터미널에는 다음과 같이만 나옵니다.
.....................................
Search engine notification is suppressed.
Count of file extensions on URLs:
122 (no extension)
Number of errors: 0
Number of warnings: 0
............................................
그리고, 유닉스 계열 서버가 아니기 때문에 cron job 사용할수가 없습니다.
저는 카페 24웹호스팅을 받고있습니다.
Kim hyung-joon님이 SSH 클라이언트를 등록해 자신의 웹호스팅 서버로 접속하여 명령어를 실행시키는 별도의 스크립을 사용할 수도 있다고 하셨는데 설명부탁드리면 안될까요. 좀 어려우면 제가 따라 하기가 어렵습니다. 크게 신경 쓰지마세요.
블로그를 아직 리뉴얼 중이라 소개를 못했네요.
죄송합니다.
좋은 글 감사드리며, 행복하세요.
꾸벅
[섹션5]의 파일 필터링은 [섹션4]에서 디렉토리 경로를 사용하여 지정된 하위 디렉토리 안에 있는 모든 파일을 사이트맵에 추가할 경우 해당 됩니다. 이와 같은 환경이 맞다면 다시 한번 필터링 정규표현식에서 정확히 (jpg)|(gif)|(png)를 제거 했는지 확인 해보세요. 괄호와 | 부호도...
그런데 이미지를 따로 독립적으로 사이트맵에 추가 시킬 특별한 이유가 있는지요?
SSH 클라이언트를 사용하는 방법은 우선 사용하시는 SSH 클라이언트가 명령어모드에서 스크립 실행을 할 수 있는지 알아야 합니다. 예를 들어 "C:\Program Files\SecureCRT\SecureCRT.exe" /script "myConnect.vbs" 이런식으로 명령어줄에서 인수로서 스크립 파일을 받아들여서 실행이 가능한지 사용하시는 SSH 클라이언트 매뉴얼에서 확인해 보세요 (여기서 .vbs 파일이 자신의 서버에 접속, 사이트맵을 생성/제출하는 VB스크립입니다). 제가 사용하는 SecureCRT는 됩니다만 Putty등 다른 클라이언트에서는 확인해 보지 못했습니다. 만일 사용는 클라이언트가 이를 지원한다면 윈도우의 "예약된 작업" 기능을 사용하여 일정 시간에 자동 실행될 수 있도록 설정해 주면 됩니다.
단, 윈도우가 예약된 작업을 수행하기 위해서는 적어도 자신의 컴퓨터가 켜져 있어야 하겠지요.
복잡한 것을 원하지 않는다면 블로그에서 글 작성할 때마다 사이트맵 업데이트/제출을 해주는 플러그인을 찾아 보시는게 좋겠네요. 아니면 좀 귀찮지만 업데이트 될 때마다 수동으로 작업하시는게... ^^
만일 위 방법을 원하신다면 스크립과 함께 따로 포스팅해서 좀 더 자세히 알려 드리겠습니다.