본문 바로가기
테크 세미나/개발 Nous

개발자가 할 수 있는 간단한 SEO 설정 - robots.txt, sitemap

by Junmannn 2024. 6. 12.
반응형

 

robots.txt 파일은 웹사이트의 루트 디렉터리에 위치한 텍스트 파일로, 검색 엔진 크롤러(로봇)에게 어떤 페이지나 파일을 크롤링할 수 있는지 또는 크롤링해서는 안 되는지에 대한 지침을 제공합니다. 이 파일은 "로봇 배제 표준" (Robots Exclusion Protocol)의 일부로, 웹사이트의 크롤링 정책을 정의합니다.

 

robots.txt 파일의 주요 개념

  1. 위치: robots.txt 파일은 웹사이트의 루트 디렉터리에 위치해야 합니다. 예를 들어, http://www.example.com/robots.txt 와 같이 접근할 수 있어야 합니다. (app 폴더가 아닌 public 폴더 등) ex. public/robots.txt
  2. 구조: robots.txt 파일은 여러 개의 규칙 블록으로 구성될 수 있으며, 각 블록은 특정 검색 엔진 크롤러에 적용됩니다. 각 블록은 User-agent와 Disallow 또는 Allow 지시문으로 구성됩니다.
  3. User-agent: 이 지시문은 특정 크롤러를 지정합니다. 예를 들어, User-agent: *는 모든 크롤러를 의미합니다. (네이버는 yeti, 다른 곳은 어떤 이름들이 있지만 다 허용합니다)
  4. Disallow: 이 지시문은 크롤러가 접근하지 못하도록 하는 경로를 지정합니다. 예를 들어, Disallow: /private/는 /private/ 디렉터리 아래의 모든 페이지를 크롤링하지 않도록 합니다.
  5. Allow: 이 지시문은 Disallow 규칙이 적용된 디렉터리 내에서 특정 파일이나 디렉터리에 대한 접근을 허용합니다. 예를 들어, Disallow: /private/와 함께 Allow: /private/public.html을 사용하면 /private/ 디렉터리 내의 다른 파일은 크롤링하지 않으면서 public.html 파일은 크롤링하도록 할 수 있습니다.
  6. 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 를 해야 할 페이지들에는 어떤 것들이 있을까요?

  1. 회원의 관련 페이지들 -> 개인적인 정보를 입력하는 페이지가 구글링 검색 결과에 노출될 이유는 없겠죠
  2. 결제 진행 관련 페이지들 -> 상품 상세 페이지는 당연히 노출되어야 하지만, 카드 정보를 넣거나, 주문 상세 정보 내역 등을 보일 필요는 전혀 없죠
  3. 관리자 페이지

 

sitemap.xml 파일은 웹사이트의 페이지 목록을 포함한 XML 파일로, 검색 엔진이 사이트의 모든 페이지를 더 효율적으로 찾고 인덱싱할 수 있도록 도와줍니다. 이 파일은 특히 대규모 사이트, 새로 추가된 페이지, 또는 복잡한 내부 구조를 가진 사이트에 유용합니다.

주요 개념

  1. 위치: sitemap.xml 파일은 일반적으로 웹사이트의 루트 디렉터리에 위치하며, "http://www.example.com/sitemap.xml" 과 같은 URL로 접근할 수 있습니다. robots.txt 와 같은 위치에 있으면 됩니다
  2. 구조: 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>

주요 태그

  1. <urlset>: sitemap.xml 파일의 루트 요소로, 하나 이상의 <url> 요소를 포함합니다.
  2. <url>: 각각의 URL 정보를 포함하는 요소입니다.
  3. <loc>: 페이지의 URL을 지정합니다.
  4. <lastmod>: 페이지의 마지막 수정 날짜를 지정합니다. 이 날짜는 검색 엔진이 페이지가 변경되었는지 여부를 판단하는 데 도움을 줍니다.
  5. <changefreq>: 페이지의 변경 빈도를 나타냅니다. 예: daily, weekly, monthly.
  6. <priority>: 페이지의 우선순위를 나타내며, 값은 0.0에서 1.0 사이입니다. 이 값은 검색 엔진에게 해당 페이지의 상대적 중요성을 알립니다.

주요 기능

  1. 크롤링 효율성 향상: 검색 엔진이 사이트의 모든 페이지를 쉽게 발견하고 크롤링할 수 있도록 합니다.
  2. 인덱싱 개선: 새로운 페이지나 업데이트된 페이지를 더 빨리 인덱싱할 수 있도록 도와줍니다.
  3. 사이트 구조 이해: 복잡한 사이트 구조를 검색 엔진에게 명확하게 전달할 수 있습니다.
  4. 멀티미디어 및 뉴스 콘텐츠 지원: 이미지, 비디오, 뉴스 기사 등의 콘텐츠에 대한 정보를 포함할 수 있습니다.

제출 방법

  • 검색 콘솔 사용: 구글 검색 콘솔, 빙 웹마스터 도구 등에서 사이트맵을 제출할 수 있습니다.
  • robots.txt 파일에 지정: robots.txt 파일에 Sitemap 지시문을 추가하여 검색 엔진 크롤러에게 사이트맵 위치를 알릴 수 있습니다.
    • robotx.txt 파일을 다시 열어 가장 하단부에
      Sitemap: "https://www.사용하시는주소.com/sitemap.xml" 을 추가합니다
  • sitemap.xml 파일을 통해 검색 엔진이 웹사이트의 구조를 더 잘 이해하고, 중요한 페이지를 빠르게 찾고 인덱싱할 수 있게 도와줍니다. 이는 특히 웹사이트의 SEO(검색 엔진 최적화)에 긍정적인 영향을 미칩니다.

 

자 전부 만들었으니 제출을 해볼까요

 

      1. Google : https://search.google.com/search-console/about
      2.  Naver : https://searchadvisor.naver.com/

 

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 을 설치한다
  • 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 인 것들만 검색에 더 잘 뜨도록 설정하였습니다!!

반응형