robots.txt 파일은 웹사이트의 루트 디렉터리에 위치한 텍스트 파일로, 검색 엔진 크롤러(로봇)에게 어떤 페이지나 파일을 크롤링할 수 있는지 또는 크롤링해서는 안 되는지에 대한 지침을 제공합니다. 이 파일은 "로봇 배제 표준" (Robots Exclusion Protocol)의 일부로, 웹사이트의 크롤링 정책을 정의합니다.
robots.txt 파일의 주요 개념
- 위치: robots.txt 파일은 웹사이트의 루트 디렉터리에 위치해야 합니다. 예를 들어, http://www.example.com/robots.txt 와 같이 접근할 수 있어야 합니다. (app 폴더가 아닌 public 폴더 등) ex. public/robots.txt
- 구조: robots.txt 파일은 여러 개의 규칙 블록으로 구성될 수 있으며, 각 블록은 특정 검색 엔진 크롤러에 적용됩니다. 각 블록은 User-agent와 Disallow 또는 Allow 지시문으로 구성됩니다.
- User-agent: 이 지시문은 특정 크롤러를 지정합니다. 예를 들어, User-agent: *는 모든 크롤러를 의미합니다. (네이버는 yeti, 다른 곳은 어떤 이름들이 있지만 다 허용합니다)
- Disallow: 이 지시문은 크롤러가 접근하지 못하도록 하는 경로를 지정합니다. 예를 들어, Disallow: /private/는 /private/ 디렉터리 아래의 모든 페이지를 크롤링하지 않도록 합니다.
- Allow: 이 지시문은 Disallow 규칙이 적용된 디렉터리 내에서 특정 파일이나 디렉터리에 대한 접근을 허용합니다. 예를 들어, Disallow: /private/와 함께 Allow: /private/public.html을 사용하면 /private/ 디렉터리 내의 다른 파일은 크롤링하지 않으면서 public.html 파일은 크롤링하도록 할 수 있습니다.
- Sitemap: 이 지시문은 크롤러에게 사이트맵 파일의 위치를 알려줍니다. 예를 들어, Sitemap: http://www.example.com/sitemap.xml과 같이 사용합니다.
주의사항
만일, 언어셋를 다르게 하는 글로벌 서비스를 하고 계시고, "사이트도메인/kr/home" 이런 식의 '/kr', '/en' 등과 같은 것이 path 이전에 붙는 형식의 url 구조화를 사용하고 계시다면, robots.txt, sitemap.xml 파일 제작에 유의하셔야 합니다.
따로 Disallow를 적어주지 않는다면 디폴트로 Allow 입니다
Allow 는 굳이 써주지 않아도 된다는 의미입니다.
(하지만 저는 sitemap.xml 을 생성할 때에 어떤 페이지를 제공해야 할 지 빠르게 파악하기 위해 검색에 특히나 노출시키고 싶은 것들은 Allow로 적어두었습니다 - 다시 말씀드리지만 Allow 를 굳이 써서 얻는 효과 자체는 없습니다)
만약 Disallow: about 을 했다면
- http://도메인/about 만을 허가하지 않는다는 의미고
- http://도메인/kr/about 은 허가한다는 의미가 됩니다.
=> '/kr', '/en' 등 프리픽스를 붙이신다면, Disallow: '/about' 이라고 해야합니다
그렇다면 Disallow 를 해야 할 페이지들에는 어떤 것들이 있을까요?
- 회원의 관련 페이지들 -> 개인적인 정보를 입력하는 페이지가 구글링 검색 결과에 노출될 이유는 없겠죠
- 결제 진행 관련 페이지들 -> 상품 상세 페이지는 당연히 노출되어야 하지만, 카드 정보를 넣거나, 주문 상세 정보 내역 등을 보일 필요는 전혀 없죠
- 관리자 페이지
sitemap.xml 파일은 웹사이트의 페이지 목록을 포함한 XML 파일로, 검색 엔진이 사이트의 모든 페이지를 더 효율적으로 찾고 인덱싱할 수 있도록 도와줍니다. 이 파일은 특히 대규모 사이트, 새로 추가된 페이지, 또는 복잡한 내부 구조를 가진 사이트에 유용합니다.
주요 개념
- 위치: sitemap.xml 파일은 일반적으로 웹사이트의 루트 디렉터리에 위치하며, "http://www.example.com/sitemap.xml" 과 같은 URL로 접근할 수 있습니다. robots.txt 와 같은 위치에 있으면 됩니다
- 구조: sitemap.xml 파일은 XML 형식으로 작성되며, 각 URL을 <url> 태그로 감싸고, 그 안에 여러 메타데이터 태그를 포함할 수 있습니다.
sitemap.xml 예시
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.example.com/</loc>
<lastmod>2023-06-12</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://www.example.com/about</loc>
<lastmod>2023-06-10</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
주요 태그
- <urlset>: sitemap.xml 파일의 루트 요소로, 하나 이상의 <url> 요소를 포함합니다.
- <url>: 각각의 URL 정보를 포함하는 요소입니다.
- <loc>: 페이지의 URL을 지정합니다.
- <lastmod>: 페이지의 마지막 수정 날짜를 지정합니다. 이 날짜는 검색 엔진이 페이지가 변경되었는지 여부를 판단하는 데 도움을 줍니다.
- <changefreq>: 페이지의 변경 빈도를 나타냅니다. 예: daily, weekly, monthly.
- <priority>: 페이지의 우선순위를 나타내며, 값은 0.0에서 1.0 사이입니다. 이 값은 검색 엔진에게 해당 페이지의 상대적 중요성을 알립니다.
주요 기능
- 크롤링 효율성 향상: 검색 엔진이 사이트의 모든 페이지를 쉽게 발견하고 크롤링할 수 있도록 합니다.
- 인덱싱 개선: 새로운 페이지나 업데이트된 페이지를 더 빨리 인덱싱할 수 있도록 도와줍니다.
- 사이트 구조 이해: 복잡한 사이트 구조를 검색 엔진에게 명확하게 전달할 수 있습니다.
- 멀티미디어 및 뉴스 콘텐츠 지원: 이미지, 비디오, 뉴스 기사 등의 콘텐츠에 대한 정보를 포함할 수 있습니다.
제출 방법
- 검색 콘솔 사용: 구글 검색 콘솔, 빙 웹마스터 도구 등에서 사이트맵을 제출할 수 있습니다.
- robots.txt 파일에 지정: robots.txt 파일에 Sitemap 지시문을 추가하여 검색 엔진 크롤러에게 사이트맵 위치를 알릴 수 있습니다.
- robotx.txt 파일을 다시 열어 가장 하단부에
Sitemap: "https://www.사용하시는주소.com/sitemap.xml" 을 추가합니다
- robotx.txt 파일을 다시 열어 가장 하단부에
- sitemap.xml 파일을 통해 검색 엔진이 웹사이트의 구조를 더 잘 이해하고, 중요한 페이지를 빠르게 찾고 인덱싱할 수 있게 도와줍니다. 이는 특히 웹사이트의 SEO(검색 엔진 최적화)에 긍정적인 영향을 미칩니다.
자 전부 만들었으니 제출을 해볼까요
Google Search Console 에 접속해서 왼쪽 상단 햄버거 버튼 눌러서 사이드바 표출 - 색인생성 - Sitemaps - 새 사이트맵 추가
https://www.사용하시는주소.com/sitemap.xml 하시면 됩니다 형식이 xml 이 아니시면 변경하시면 되십니다. robots.txt 는 구글 봇이 나중에 긁어갑니다. 시간이 걸릴 수 있으니 지켜봐야죠
Naver Search Advisor 에 접속해서 로그인 후, 우측 상단 웹마스터 도구 - 사이트 관리 - 사이트 등록
사이트 등록이 왼료되면 사이트 목록에서 해당 사이트 클릭 - 요청 - 사이트맵 제출 - https://www.사용하시는주소.com/sitemap.xml
검증 - robots.txt 정보에 robots.txt 파일의 내용을 복사 붙여넣기 하여 수집요청을 넣습니다
여기까지가 기본적인 robotx.txt, sitemap.xml 파일을 제작하는 방법입니다.
여기서부터는 sitemap.xml 파일을 코드로 생성하는 방법에 대한 포스팅입니다. DB 를 돌면서 여러 url 을 sitemap 에 적어야 할 경우에만 필요한 작업이니, 해당 부분이 필요한 분이 아니시라면 이 전가지의 포스팅만 참고하시면 충분하실 것 같습니다!!
여기서 sitemap.xml 을 코드를 돌려 자동으로 작성하는 방법을 한가지만 더 말씀드리고 가겠습니다
시작하기 이전 미리 말씀드리겠습니다. 왜 자동화를 하지 않느냐에 대한 것은, 서버에서 작업을 돌려야만 할 만큼 새로운 포스팅이 자주 발생하지 않는다는 것이 첫번째 이유고, 그 다음은 제가 운영하는 사이트의 규모 자체가 자동화를 요할 만큼의 규모가 아닙니다. 자동화를 해서 서버에서 sitemap.xml 을 지속적으로 변경해야 하시는 분들은 task 파일을 따로 만들어 돌리셔야 할 것 같습니다.
rails 를 기반으로 작성을 할 것입니다. 각각의 기술에 해당하는 라이브러리나 코드는 사용하시는 프레임워크나 언어에 따라 같은 기능을 하는 기술들로 사용하시면 됩니다. 저런 방식으로 하면 되겠다는 것만 확인해주세요~
- sitemap_generator gem 을 설치한다
- https://github.com/kjvarga/sitemap_generator#rails
- Gemfile 에 gem 'sitemap_generator' 추가
- bundle install
- Rakefile 을 엽니다
- require 'rake'
- require 'sitemap_generator/tasks'
- config 폴더에 sitemap.rb 파일을 생성
require 'rubygems'
require 'sitemap_generator'
require File.expand_path('../config/environment', __dir__) # Rails 환경 로드 - 이 부분이 있어야 Model 로 가져올 수 있음
SitemapGenerator::Sitemap.default_host = 'https://www.사용하시는주소.com/'
SitemapGenerator::Sitemap.compress = false
SitemapGenerator::Sitemap.create do
locales = ['en', 'kr']
locales.each do |locale|
add "/#{locale}/home", changefreq: 'monthly', lastmod: Time.now, priority: 0.6
add "/#{locale}/about", changefreq: 'monthly', lastmod: Time.now, priority: 0.6
add "/#{locale}/interview/info", changefreq: 'monthly', lastmod: Time.now, priority: 0.6
add "/#{locale}/coupons", changefreq: 'monthly', lastmod: Time.now, priority: 0.6
add "/#{locale}/qna", changefreq: 'monthly', lastmod: Time.now, priority: 0.6
add "/#{locale}/post/post-list-main", changefreq: 'weekly', lastmod: Time.now, priority: 0.6
# Post 모델에서 visible필드의 값이 0인 항목만 진행
Post.where('visible = 0').each do |sc|
add "/#{locale}/class/detail/#{sc.id}", changefreq: 'weekly', lastmod: Time.now, priority: 0.5
end
end
end
저는 현재 사이트를 en, kr 버전으로 구분을 하시에 둔 코드입니다. 그렇지 않으신 분들은 locale 부분을 제외하시면 됩니다
그리고, 작성한 포스트 중에서 저는 기간이 지난 것은 visible 을 -1 로 변경해두기 때문에, visible 이 0 인 것들만 검색에 더 잘 뜨도록 설정하였습니다!!
'테크 세미나 > 개발 Nous' 카테고리의 다른 글
mysql2 설치시 library 'zstd' not found 문제 (0) | 2024.07.15 |
---|---|
gitlab 에서 한 작업들을 github 으로 가져오기 (gitlab 잔디 옮겨심기) (2) | 2024.06.14 |
ruby on rails 언어별 url 설정 방법 (0) | 2024.05.29 |
드래그 가능한 테이블 만들기 (0) | 2024.03.22 |
깃허브 꾸미기 Readme 꾸미기 (0) | 2024.03.20 |