SEO 실무 이슈 - 크롤링 트래픽을 조절하며, 색인을 높이는 방법
Robots.txt를 통해 봇 접근을 허용한 직후에는 증가하는 크롤링 봇 접근 트래픽으로 서버가 몸살을 앓을 수 있다. 이에 적절하게 대처하지 않으면 관리하시는 유관부서에게 상당한 압박과 원망을 듣게 된다. 오늘의 실무 이슈는 바로 이런 상황에 대한 해결책을 다루려고 한다. 간략한 상황은 아래와 같다.
# 이슈 상황
- SEO를 위해 robots.txt를 allow를 했더니, 봇트래픽이 너무 많아 부담되기 시작함
- 트래픽 부하에 대해 네트워크/서버 관련 부서의 원성이 들려옴
- 정규 콘텐츠 수가 수백만 건이며, 이에 대한 색인도 포기할 순 없음
크롤링의 '고도화' 혹은'효율성 제고'라는 접근을 실제로 이루어낸다면 가능하다. 많은 크롤링 트래픽들이 실제로 색인(indexing)되지 않는 페이지들을 크롤링되는 데 사용되고 있다. 불필요한 페이지를 크롤링하지 않게 하여, 실제 색인할 페이지만 색인되도록 조절한다면, 봇트래픽은 감소시키면서, 적절한 색인율을 가져 올 순 있다. 당장 봇 트래픽 감소가 급하신 분들을 위해, 이번 글에는 방법을 먼저 소개드린다.
트래픽 조절하는 방법을 적용하기 전에 site에서 '검색에 불 필요한' Page, URL들을 먼저 선별하는 것이 필요하다. 이를 위해서 가장 편리한 방법은 site IA 구조를 파악하는 것이다. 보통은 웹서비스 기획 업무를 담당하시는 쪽에서 가지고 있는 경우가 많다. IA 구조라는 용어가 처음이신 분은 다른 UX기획자분의 글을 살펴보시면 좋을 것 같다. (비전공자를 위한 UX 디자인- 10. 정보구조 https://brunch.co.kr/@ssin23/71)
가장 간단히 말한다면, IA설계 자료는 "콘텐츠로써 검색에 노출될 부분"을 분류하는 데 도움이 된다. 위의 IA 구조도에서 '고객지원', '마이페이지', '회원' 같은 depth를 Disallow 처리하는 방식을 추천드린다. 로그인이 필요한 페이지들은 회원들을 위한 서비스이다. 이 페이지들은 구글 봇이 원활한 색인이 어렵고, 비회원인 봇은 로그인 페이지로 리다이렉션 되며, 불필요한 수집 리소스만 낭비시킨다.
고객지원 같은 경우, 공개된 FAQ 이외에는 역시 회원기반으로 검색 노출에 의미가 없다. 또한 FAQ라도 해당 콘텐츠를 굳이 외부 포털에서 검색해서 들어오게끔 해야 할 이유는 없을 것으로 보인다. 고객 지원 대표 페이지 1가를 제외하고 모두 disallow 처리를 하는 것이 바람직하다. 폴더 전체를 수집 거부하는 것은 아래와 같은 방식을 사용하면 된다.
Disallow : /example-subfolder/
이 구문은 URL 문자열 www.example.com/example-subfolder/ 가 포함된 페이지를 크롤링하지 않도록 Google 크롤러 (사용자 에이전트 이름 Googlebot)만 지시합니다.
관련 가이드: https://developers.google.com/search/reference/robots_txt#url-matching-based-on-path-values
실제 페이지에는 데이터 수집하기 위해 매개변수를 사용하거나, 내부 수집 시스템을 호출하기 위한 페이지들이 존재한다. 일전에도 예시를 들었지만, 아래와 같은 URL을 통해 이를 확인할 수 있다. 개발팀에게 문의하여, 오직 이벤트 로깅만을 위해 존재하는 페이지들의 subfolder를 알아보고 이를 Disallow 처리할 필요성이 있다. 방법은 위에 언급한 example-subfolder와 같다.
특정 파라미터가 붙은 경우를 모두 Disallow 처리하는 것도 가능하다. 다만 정말 급할 때만 써는 것이 좋다. 첫 번째는 단지 아래의 경우처럼, 중요한 제품 페이지가 해당 파라미터가 붙었다는 이유로 dlsallow 처리될 수 있고, 다른 allow 조건과 충돌하는 경우가 발생할 수 있다. 이는 내부 링크 빌딩을 구축하는데 악영향을 줄 수 있다. 반드시, 최악의 경우에 사용하시는 것을 당부드린다.
proNo (제품번호)는 7267787703으로 같다. 그러나 dispno(디스플레이 번호), smidl(알 수 없음), pisl(알 수 없음) 등은 다른 URL 요소(매개변수)가 있다. 이러한 매개변수 자체가 문제는 아니다. 분석을 위해서 필요할 수 있고, 때론 특정한 기능을 구현하기 위해 필요할 수 있다.
smidl, pisl와 같은 매개변수들을 Robots.txt에서 Disallow 처리하는 방식은 아래와 같다.
Disallow : *?*smidl=*
이 구문은 URL 문자열에 '?' 이후에 'smidl='라는 문자열이 존재하는 모든 경우를 해당합니다
관련 가이드: https://developers.google.com/search/reference/robots_txt#url-matching-based-on-path-values
사실 매개변수에 대해서 가장 먼저 권장하고 싶은 방식은 search Cosole 매개변수 제어 기능이다. 다만 Diallow에 관한 내용을 쭉 설명하다 보니, 먼저 정리했었다. 아래 URL에 접속하시면, 우리 Site의 매개변수들에 대해 구글 봇의 색인 유무를 제어할 수 있다.
URL 매개변수 도구 : https://www.google.com/webmasters/tools/crawl-url-parameters
위는 URL 매개변수 도구 페이지이다. '매개변수 추가' 버튼을 눌러 매개변수를 추가할 수 있다. 해당 버튼을 누르면 아래와 같은 레이어 팝업이 나온다. 제외하려는 매개변수를 입력한 후에, "이 매개변수가 사용자에게 표시되는 페이지 콘텐츠를 변경하나요?"라는 질문에 대한 답을 선택해야 한다. 어느 쪽을 선택하든 제외처리를 할 수 있으나, 약간의 차이가 있다.
첫 번째, "아니오"를 선택하는 경우는 페이지 콘텐츠 구성에 무관한 파라미터인 경우 사용한다. 예를 들면 Sessionid, UserName, Referer, utm 등 데이터 분석을 위한 logging 용 파라미터들이 이에 해당한다. 이러한 파라미터들이 추가되는 경우, 구글 봇은 대표 URL만 크롤링하게 된다. 대표 URL 구글 봇이 직접 판단하거나, 아니면 Canonical 태그에 있는 URL이 선택된다.
두 번째 "예", 선택하는 경우는 페이지를 변경하는 값 중에서 크롤링 안 할 페이지를 선택해야 하는 경우다. 보통 리스트나 검색 결과 페이지에서 리스트의 값을 소팅하는 파라미터들에 적용 가능하다.
이 기능을 사용할 때 알아두셔야 하는 개념이 있다.
모든 매개변수 입력 : 발견한 URL의 모든 매개변수 정책을 확인하므로, 1개라도 누락되면 큰 효과가 없다.
'GoogleBot이 결정' 적극 사용 : 잘 모르는 매개변수는 'GoogleBot이 결정'을 선택하는 것이 좋다
'모든 URL' 사용 자제 : 콘텐츠를 구분하는 idx값으로 쓰이는 매개변수 이외에는 사용 자제
가이드 정독 후 사용 : https://support.google.com/webmasters/answer/6080548?visit_id=637423094150131461-3561055142&rd=1
1) Meta Tag
Robots meta 태그에서 가장 많이 쓰이는 방식은 아래 세 가지 일 것이다. 색인하는 페이지라도, 불필요한 링크들이 너무 많은 페이지의 경우 nofollow를 고려해야 한다. 특히 해당 페이지에 게재된 링크들이, 대표 URL로 색인되지 않거나, 1~4번까지의 경우에 해당하여, 어차피 수집 제외하여야 한다면 과감히 nofollow를 처리해야 한다.
<meta name="robots" content="noindex"> - 이 페이지를 색인하지 않는다.
<meta name="robots" content="nofollow"> - 이 페이지의 링크들을 수집하지 않는다
<meta name="robots" content="noindex, nofollow"> - 색인도 링크 수집도 하지 않는다.
2) A Tag
a 태그의 rel 속성에도 nofollow를 처리할 수 있다. 1) 번 meta가 일괄적인 적용인데 비해, rel속성을 사용하는 것은 한 딴 한 땀 장인정신이 필요하다. 처리하는 자세한 방식은 가이드를 첨부한다.
https://developers.google.com/search/docs/advanced/appearance/qualify-outbound-links?hl=ko
3) nofollow가 필요한 콘텐츠의 예시
meta든 a태그 rel 속성이든 어떤 링크를 제외하는 게 색인율에 영향을 주지 않으며 봇 트래픽을 줄일 수 있는지 판단하는 것이 중요하다. 개인적으로는 아래와 같은 순서로 생각해보면 좋을 것 같다. 순위를 선정하는 기준은 링크를 수집하여 얻을 수 있는 이점을 고려했다. 대표 URL을 바로 수집하지 않는 경우는 1순위로 제외하는 것이 좋으며, 내부 광고와 과련 List나 검색 결과는 2순위 제외처리를 권장한다. 자연스러운 내부 링크 빌딩 구조에 영향을 줄 수 있는 추천 제품/콘텐츠 링크는 최후에 진행하는 것이 좋다.
1순위 제외 :
페이지 매김 링크, 콘텐츠의 정식 뷰가 아닌 뷰 링크 (팝업 버전 등), 로그인 필요 콘텐츠 링크
리다이렉션 링크, 게이트 페이지를 거치는 링크(내부 클릭이벤트, 아웃바운드 클릭수 체크 등),
공유하기 링크(a태그인 경우), 정렬을 바꾸는 링크(#플레그먼트 사용 시), 미수집 대상 페이지 링크
모든 외부 호스트 아웃바운드 링크, 광고 링크
2순위 제외 : 관련 리스트 페이지 링크, 연관 검색 결과 링크, 내부 광고 제품 콘텐츠 링크(고정적이므로)
3순위 제뢰 : 관련 상품/콘텐츠 더보기 링크, (최후 수단)
대부분의 site는 이미지는 별도 호스트에 업로드한다. image.example.com 형태가 일반적이다. (아니어도 크게 상관없다). image.example.com/robots.txt를 확인해볼 필요가 있다. 해당 호스트에 robots.txt가 없거나 그냥 allow:*이라면 몇몇 가지 부분에 대해서 조사하여 적절하게 disallow를 처리해야 한다. 처리방법은 위에서 기술한 방법과 같다. (서브 폴더를 입력하거나, disallow : *. gif)
물론 이 경우, 구글 봇이 콘텐츠를 읽는데 다소 지장이 갈 수 있다. 그래서 메인 제품/콘텐츠 이미지와 페이지의 주요 BG 이미지들을 제외한 나머지 이미지들에 대해서 색인 제외를 진행해야 한다. 고려할 만한 이미지는 아래와 같다.
내부 광고 배너, 한시적인 콘텐츠(이벤트) 이미지, 통 이미지(제품 페이지가 아닌 경우)
베리에이션 된 제품 썸네일(단, 구조화된 데이터나 정규 리스트에 노출되지 않는 이미지)
콘텐츠 이해에 크게 영향이 없는 이미지 (하단 예시)
cf. 7번은 장기적으로 유지하는 것을 권하지는 않는다. 신규 콘텐츠의 색인이 어느 정도 완료되고, 봇 트래픽이 안정화되면 다시 열어주는 것이 좋다.
라스트 오브 라스트, 최종병기와도 같은 방법이다. 특정한 횟수 이하로 봇의 접근 속도를 조절하는 방식이다. 이는 단독적으로 사용하기보다는 네트워크/서버 개발자와 논의하는 것을 추천드린다. 이때 봇 접근 속도를 최고속도로 하여도 권장 설정보다 봇 접근이 빠르지 않다. 처음 조절하실 때는 "높음"로 조절한 후 2~3일 단위로 트래픽 부하를 개발 측과 함께 확인하면서, 단계적으로 낮춰가는 것이 좋다
도구 URL : https://www.google.com/webmasters/tools/settings
8번이 최후 작업인 이유는 앞선 다른 작업과 달리 이 작업은 우리 site의 크롤링 예산(하루에 일어나는 트래픽 봇의 접근 수) 최대치 자체를 낮춘다. 처음부터 8번을 적용해버리면 간단하지만, SEO 담당자의 목적은 봇 트래픽을 낮추는 데 있는 것이 아니다. 정해진 크롤링 예산을 효율적으로 쓰며 색인율을 높이는 것이 더 우선의 목적이다.
SEO에서 색인 관리는 "allow : *"를 적용하는데 그치는 경우가 많다. 디테일하게 봇 트래픽을 관리하는 것
8가지 방법의 적용 정도와 접근 수위를 조절하면서, 조금씩 봇이 접근 가능한 콘텐츠는 늘려가는 것이 좋다. 특히 6,7,8 번은 내부 링크 빌딩에 영향을 주므로 추후에는 다시 봇의 접근 경로와 속도를 높이는 것이 필요하다. (내부 링크 빌딩이 중요한 이유 : 나중에 쓰면 링크 걸겠습니다)