[TIL] SEO 개념 이해 및 Crawling과 Indexing 설정하기

seo young park·2022년 7월 27일
0

TIL

목록 보기
3/7
post-thumbnail

SEO란

SEO란, Search Engine Optimization의 줄임말로 사이트 내 콘텐츠 정보를 검색엔진이 잘 이해할 수 있도록 웹 페이지를 구성하는 작업이다. 여기서 검색엔진이란, 웹 상의 수많은 데이터들을 미리 수집하고 정리하여 유저가 관련 내용을 검색했을 때 찾을 수 있도록 해주는 DB 관리 시스템을 이야기하며 대표적인 예로 구글이 있다. 검색엔진은 웹 크롤러로 웹사이트 관련 데이터를 가져오는 ‘크롤링'과 크롤링을 통해 얻은 정보를 검색 색인에 저장하는 ‘인덱싱' 과정을 거치며 정보를 카테고리화한다. 그리고 자체 평가 알고리즘을 통해 노출 순서를 정하게 된다. 보통 유저가 검색엔진을 사용할 때, 첫 페이지만 보고 검색을 중단하는 경우가 92%라고 한다. 따라서 상위 노출 광고비를 아끼고 웹 사이트 트래픽을 증가시키기 위해서 SEO 작업이 필수적이라고 할 수 있다.

이미지 출처

테크니컬 SEO(Technical SEO)

보통 SEO 최적화 작업은 위 그림과 같이 3가지로 분류된다. 이 중에서 웹개발자가 주로 고려해야할 테크니컬 SEO란, 검색엔진 크롤러가 웹페이지를 잘 찾을 수 있도록 기술적 토대를 마련하는 작업이다.

도메인 관리

도메인 관리란 하나의 도메인을 여러 주소로 나누어 관리하는 방법을 말하는데, Subdomain방식과 Subfolder방식이 있다. Subdomain방식은 각각 독립된 도메인을 설정하여 관리하고, Subfolder방식은 하위 도메인으로 확장시켜 관리한다.

https://www.bloter.net/data/blt/image/2018/05/13/blt201805130002.png

'서브 도메인' 방식과 '서브 폴더' 방식의 차이

구글 엔진은 콘텐츠의 품질, 연결 링크의 품질, 페이지 방문 시간 등 다양한 요소를 고려하여 점수를 매기고, 점수가 높은 순서대로 검색 결과 상단에 노출시킨다. Subdomain 방식은 각각의 도메인 점수를 모두 관리해야하지만 Subfolder 방식은 최상위 도메인 하나만 관리하면 되기 때문에 더 효율적이다.

사이트맵 제출

사이트맵이란 크롤러가 웹사이트를 지능적으로 크롤링하는 것을 도와주며, 사이트 URL과 각 URL에 대한 추가 메타데이터(마지막 업데이트된 날짜, 변경 빈도, 사이트의 다른 url과 비교해 상대적 중요도)등을 나열한 XML파일이다. 매일 800억개의 웹페이지를 크롤링하는 크롤러에서 상위 랭킹은 고사하고 인덱싱되는 데만 3개월 걸릴 수 있기 때문에 루트 디렉토리에 필수적으로 사이트맵을 생성하는 것이 좋다.

크롤링에서 특정 페이지 제외

다른 페이지에 링크로 들어가 있으면 모두 크롤링 대상이다. 여기서 로그인 후 사용할 수 있는 페이지는 크롤링 대상이 아니지만, 게시물이나 댓글에 입력된 스팸 url이 크롤링된다면 seo에 악영향을 끼치게 된다. 따라서 meta태그로 noindex를 설정하여, 크롤러가 크롤링을 멈추고 다시 방문하지 않도록 만들어야한다.

<!-- 모든 크롤러 크롤링 차단 -->
<meta name="robots" content="noindex">

<!-- 구글봇 크롤링 차단 -->
<meta name="googlebot" content="noindex">

<!-- 유저가 만든 스팸 링크 크롤링 차단 -->
<a rel="nofollow" href="https://ad.com">초특가 할인 링크 눌러보기</a>

<!-- 사이트 내 광고 차단-->
<a rel="sponsored" href="https://sponsored.com">최저가 이벤트 링크</a>

Robot.txt

Robot.txt 파일은 루트 디렉토리에 위치하여 크롤러가 엑세스할 수 있는 URL과 엑세스할 수 없는 URL을 알려준다. 구글엔진의 경우, 중복 콘텐츠에 대한 패널티가 있기 때문에 적절한 선에서 정보 수집을 제어할 필요가 있다.

// 규칙이 적용되는 검색 엔진을 지정하며, '*'은 Adsbot 크롤러를 제외한 모든 크롤러를 의미
User-agent : * 어떤 검색엔진에 대한 규칙인지 선언

// 크롤링하지않도록 하는 루트 도메인 혹은 디렉토리
Disallow : 

// 크롤링할 수 있는 루트 도메인 혹은 디렉토리. 디폴트값은 모든 URL 허용상태다
Allow : 

//사이트 맵 위치
Sitemap : http://www.bbros.com/sitemap.xml

예를 들어 구글엔진만 허용하고 나머지 검색엔진은 차단하고 싶다면 다음과 같이 작성하면 된다.

User-agent : Googlebot
Disallow : 

User-agent : *
Disallow : /

meta tag

meta tag란, 웹페이지 정보를 명시할 때 사용하는 tag로 HTML 문서 내 head 태그 안에 위치한다. 웹페이지 내 컨텐츠에는 보이지 않지만 검색엔진에 의해 수집된다.

  • title: 웹페이지의 제목
<title>meta tag란 무엇일까?</title>
  • name:메타 정보 이름, content:메타 정보 내용
<meta
	name="description"
	content="meta tag의 종류로는 무엇이 있는지 알아보겠습니다."
/>
  • keyword: 웹 페이지를 설명하는 키워드 나열
<meta 
  name="keywords"
  content="SEO, GOOGLE, HTML"
/>
  • author: 웹 페이지의 작성자
<meta
  name="author"
  content="seo young"
 />
  • OG태그
    Open Graph 프로토콜에서 정의하는 meta 태그를 의미한다. SNS에서 링크를 공유할 때 미리보기로 표시할 내용을 지정할 수 있다.
//카카오톡
<meta property="og:title" content="콘텐츠 제목" /> 
<meta property="og:url" content="웹페이지 URL" />
<meta property="og:image" content="...jpg" />

//트위터
<meta name="twitter:title" content="SEO란 무엇일까?" /> 
<meta name="twitter:description" content="SEO에 대해 알아보아요." /> 
<meta name="twitter:image" content="...jpg" />

크롤링과 인덱싱

크롤러는 공개적으로 접근 가능한 웹페이지를 방문하며, 공개 페이지에 있는 링크를 따라간다. 그리고 페이지에서 찾은 정보와 콘텐츠를 검색 색인에 저장한다. 이 때, 페이지의 링크를 따라다니며 정보를 수집하는 것을 크롤링, 페이지에 찾은 정보를 분석해 색인하는 것을 인덱싱이라고 한다. obots.txt를 사용해 크롤링을 제어하거나, sitemap.xml을 통해 사이트 URL 정보나 업데이트 빈도 등을 크롤러에게 알려줄 수 있다.

robots.txt 크롤링 제어

이전 과제에서 robots.txt에 대해서 알아보았으므로, 경우의 수에 따라 크롤러 제어하는 방법을 알아보고자 한다.

  • 모든 문서 차단하는 경우
User-agent: *
Disallow: /
  • 모든 문서가 허용되는 경우
User-agent: *
Disallow:
  • 특정 폴더 차단하는 경우
User-agent: *
Disallow: /users/
Disallow: /adming/
  • 특정 엔진만 차단하는 경우
User-agent: Googlebot
Disallow: /
  • 특정 엔진만 허용하는 경우
User-agent: Google
Disallow:
User-agent: *
Disallow: /

sitemap 인덱싱 제어

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>http://www.bbros.com/foo.html</loc>

*마지막 업데이트 날짜
    <lastmod>2022-06-01</lastmod>
*업데이트 빈도
    <changefreq>monthly</changefreq>
*중요도
     <priority>0.8</priority>
  </url>
 <url>
    <loc>http://www.bbros.com/duu.html</loc>
  </url>
</urlset>

sitemap이란, 웹페이지를 나열하는 파일로 콘텐츠 구성을 다른 검색 엔진에 알릴 때 사용된다. 예를 들어 왼쪽사진과 같은 sitemap이 존재하는 경우, 크롤러는 첫 번째 주소부터 방문하기 시작한다. 방문한 웹 문서 속에 링크가 있다면 그 링크를 타고 들어가는 식으로 계속해서 웹 문서를 크롤링한다. 그렇게 모든 링크를 돌아 웹 문서 수집을 마쳤다면 크롤러는 업데이트된 내용을 체크하기 위해 다시 방문한다. 그리고 앞으로 재방문해야할 사이트, 크롤링할 횟수, 사이트마다 가져올 웹 문서 수를 정하게 된다. 이 때, 크롤러가 효율적으로 크롤링하는 것을 돕기위해 혹은 내가 중요하다고 생각하는 페이지와 파일을 크롤러에게 알리기 위해 sitemap에 웹페이지에 관한 정보를 담은 메타데이터를 첨부한다. 이 메타데이터에는 마지막으로 업데이트된 날짜, 페이지 변경 빈도, 사이트 내 다른 URL 대비 상대적 중요도 등을 포함한다.

캐노니얼 태그 사용 방법

https://www.bbros.com/page/1
http://www.bbros.com?page=1
https://www.bbros.com?page=1

다음과 같이 여러 URL로 접근할 수 있는 하나의 페이지가 있다고 가정해보자. 이런 상황에서 크롤러는 자기 마음대로 한 URL을 표준버전으로, 다른 URL들은 중복으로 간주하여 빈도를 줄여 크롤링 한다. 결국 내용이 업데이트되어도 인덱싱되기까지 오랜 시간이 걸릴 수 있고, 여러 페이지가 똑같은 내용을 갖고 있어 중요도가 분산되기 때문에 검색엔진의 패널티를 받을 수 있다. 따라서, 캐노니얼 태그(canonical tag)를 사용하여 중복되거나 유사한 url을 하나의 페이지로 통합 설정해야한다.

다음과 같이 head태그에 canonical 태그를 추가해 크롤러에게 대표 URL을 명시해준다. 이제 크롤러가 https://www.bbros.com?page=1 로 접속하더라도 위의 대표 URL하나로 인식하게 된다.

//http://www.bbros.com?page=1
<link rel="canonical" href="https://www.bbros.com/page/1" />

캐노니얼 태그 적용 시 주의 사항

  • 중복 페이지 내용 중 항상 정식 버전 페이지가 존재해야한다.
  • 기존 페이지 중 rel=canonical 대상 페이지가 있는지 확인한다.
  • rel=canonical 대상 페이지의 head 태그나 HTTP 헤더에 rel=canonical 가 포함되어있는지 확인한다.
  • rel=canonical 대상 페이지에 <meta name="robots" content="noindex"> 메타 태그가 포함되어있는지 획인한다.
  • 페이지에 하나의 rel=canonical 만 지정되어있는 지 확인한다.(2개 이상일 경우 페이지 자체를 검색엔진이 무시한다.)
  • 각 페이지별로 같은 내용을 담고있는지 확인한다.
  • 상대 경로가 아니라 http 프로토콜을 포함한 절대경로를 적용한다.

참고자료: https://www.google.com/intl/ko/search/howsearchworks/crawling-indexing
https://growthacking.kr/캐노니컬-태그-canonical-tag로-검색엔진-최적화하기

0개의 댓글