📦 구글은 나를 모른다

블로그를 시작할 때 흔히 착각하는 것이 있다. 구글 검색에 내 글이 알아서 잘 노출될 것이라는 것. 혹은 Google Analytics로 유입된 것을 확인하거나, 댓글이 달리고나면 내 글이 잘 검색되고 있을거라는 기대를 한다. 실제로 글을 작성하고 며칠이 지나면 구글 검색결과에 노출이 되긴한다. (혹은 페이지 구조에 따라 아예 안 될 수도 있다.)

글을 올리고 ‘언제쯤부터 내 글이 검색될 수 있을지’ 기다리는 대신 구글 검색 결과에 더 효과적으로 노출하는 방법을 소개하려고한다. 바로 Google Search Console에 사이트를 등록하고, 색인을 제출하는 것.


🤔 Google Search Console?

Google Search Console에 사이트색인을 등록하는 이유는 단순히 검색결과에 더 잘 나타나기 위해서다. 물론 굳이 콘솔에 사이트색인을 등록하지 않더라도 언젠가는 구글이 내 페이지를 크롤링해서 검색결과에 노출하긴 하지만, 구글이 수동으로 사이트를 찾는 데엔 시간이 걸리기도하고, 특히 커스텀 블로그나 GitHub Pages 기반의 블로그는 내부 링크 구조가 약하면 크롤링이 잘 되지 않는 경우도 많기 때문에 직접 등록해주는 것이 좋다. 또한 Google Search Console의 부가적인 기능으로 페이지 상태를 실시간으로 확인할 수 있고, 어떤 페이지가 검색 유입이 많은지, 어떤 쿼리로 유입되는지 분석이 가능하므로 SEO 개선 힌트도 얻을 수 있다.


🏃 적용 방법

Github Pages로 호스팅되는 Jekyll 기반의 페이지를 기준으로 설명한다.

1. 사이트맵 파일 생성

Jekyll에서는 jekyll-sitemap 플러그인을 사용하면 사이트맵 파일인 sitemap.xml이 자동 생성된다.

_config.ymlurl을 명시해주고, 플러그인을 추가해주자.

url: "https://blog.cowkite.com" # 블로그 주소
plugins:
- jekyll-sitemap

이제 배포하고 나면 ‘{블로그주소}/sitemap.xml’에서 전체 포스트 목록을 구글봇이 볼 수 있게 된다. 내 설정 파일을 예시로 들면, ‘https://blog.cowkite.com/sitemap.xml’ 주소에 생성되는 것이다. 사이트색인은 새 글을 발행하거나 _config.yml 파일이 수정될 때마다 자동으로 크롤링된다.

2. Google Search Console 등록

Google Search Console에 접속한 뒤, 속성(Property)을 추가해준다. 그러면 구글이 자동으로 소유권을 확인하고 등록한다.

도메인 방식은 DNS 설정이 필요하므로, URL 접두어 방식으로 등록하는 것을 추천한다.
도메인 방식은 DNS 설정이 필요하므로, URL 접두어 방식으로 등록하는 것을 추천한다.

만약 소유권 확인이 안 된다면 안내에 따라 수동으로 소유권을 등록하는 방법도 있다. includes/head.html에 소유권을 확인하기 위한 코드를 삽입하면 된다.

<!-- Google Search Console -->
<meta name="google-site-verification" content="xxxxx" />

3. sitemap 제출하기

직접 제출하지 않아도 시간이 지나면 수동으로 크롤링하는 듯 하지만, 좌측 메뉴에서 Sitemaps 메뉴에 진입하여 직접 제출할 수 있다. 수동으로 sitemap.xml 파일을 생성해서 지정할 것이 아니라면, 최초 1회 제출을 통해 구글봇이 주기적으로 갱신되는 것을 크롤링한다. 제출하면 색인 대기열에 들어가고 몇 시간~며칠 사이에 검색 노출이 시작된다.

sitemap.xml 파일 주소를 입력 후 '제출' 버튼을 클릭한다.
sitemap.xml 파일 주소를 입력 후 '제출' 버튼을 클릭한다.

4. 페이지 색인 생성 요청하기

좌측 메뉴에서 ‘URL 검사’를 클릭하여 메뉴에 진입해서, 발행된 글의 주소를 입력한다. 안내 메시지가 ‘URL이 Google에 등록되어 있지 않음‘이든, ‘URL이 Google에 등록되어 있음‘이든 ‘색인 생성 요청’ 버튼을 클릭하면 된다. 이 또한 직접 제출하지 않아도 시간이 지나면 수동으로 크롤링 되지만, 반영하는데 시간이 소요되므로 글을 발행하거나 수정할 때마다 수동으로 요청하면 좋다.

'색인 생성 요청' 버튼 클릭하기
'색인 생성 요청' 버튼 클릭하기

🧘 마치며

Google Search Console은 구글 검색엔진에 효과적으로 대응하는 방법이 맞다. 그러나 브라우저가 구글만 있는 것은 아니기 때문에, 궁극적으로는 SEO까지 잘 대응해야한다. 사이트 색인을 등록하는 것이 내 블로그를 ‘인지’하게 하는거라면, SEO 대응은 내 글을 ‘노출’하게 하는 것이다. 다음 편인 검색엔진 최적화 (SEO 대응) 글까지 참고해주면 좋다. 👉 검색엔진이 좋아하는 블로그는 따로 있다

검색엔진이 좋아하는 블로그는 따로 있다
검색엔진이 좋아하는 블로그는 따로 있다

보너스) 🚨 트러블 슈팅

1. 색인이 안 되는 흔한 원인들

색인 생성 및 제출, 검토 과정에서 아래 오류가 발생할 수 있다.

Search Console에서 “URL 없음” 오류

블로그 주소와 다른 속성을 등록한 경우 발생한다. 나의 경우에는 https로 시작하는 주소를 입력해야하는데, http로 시작하는 속성을 생성해서 지속적으로 해당 오류가 발생했다. 뒤늦게 발견하고 https로 시작하는 속성을 새로 등록하고 해결되었다.

sitemap.xml이 생성되지 않음

jekyll-sitemap 플러그인을 누락했거나, _config.yml 파일에 url 속성이 설정되어있지 않을 경우 발생한다. _config.yml 파일을 다시 확인해준다.

새 글이 sitemap에 없는 경우

일단 단순히 내 브라우저에 파일이 캐싱되어있는지 먼저 확인해봐야한다. 브라우저의 시크릿모드로 확인하거나, 터미널에 curl {블로그주소}/sitemap.xml 명령어를 통해 확인할 수 있다.

% curl https://blog.cowkite.com/sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://blog.cowkite.com/blog/2003062358/</loc>
</url>
...

여전히 새 글이 sitemap에 노출되지 않는다면, GitHub Pages가 아직 빌드가 안 된 경우이므로 다시 빌드를 하면 된다. Action을 제어하는 경우가 아니라면, empty commit을 하거나 _config.yml 설정을 바꿔주는 것으로 충분하다.

% git commit --allow-empty -m "Trigger rebuild"
% git push

2. Search Console에서 페이지 색인 과정 중 발생하는 오류들

사용자가 선택한 표준이 없는 중복 페이지

같은 내용을 다른 URL로 향유할 경우에 발생한다. 예를 들면 아래 같은 경우에서 구글이 어떤 URL을 대표로 삼을지 몰라 발생하는 오류다.

- https://blog.cowkite.com/page1
- https://blog.cowkite.com/page1?utm_source=naver

나의 경우에는 위 경우가 아님에도 불구하고, 각기 다른 다양한 게시물들에서 중복 페이지 오류가 발생하긴 했다. 어쨌든 해결법은 _layouts/default.html 혹은 _includes/head.htmlcanonical 태그를 추가함으로써 이 URL이 진짜 주소임을 알릴 수 있다.

<link rel="canonical" href="https://blog.cowkite.com/blog/2504202248/">

리디렉션이 포함된 페이지

말 그대로 페이지가 리디렉션돼서 색인할 수 없다는 뜻인데, 나의 경우엔 내가 페이지 속성을 실수로 https가 아닌 http로 등록한데서 발생한 휴먼 에러긴하다. 이처럼 실제로 리다이렉션을 한 경우가 아니라면 보통은 httphttps, wwwnon-www, 커스텀 도메인 변경 등이 원인이 된다. 커스텀 도메인을 사용하는 경우, 최종 주소 (리디렉션 된 주소) 를 등록해야 한다. 예를 들면 ‘https://cowkite.github.io’가 아닌 ‘https://blog.cowkite.com’로 등록이 되어야한다.

찾을 수 없음 (404)

사이트맵에는 있지만, 해당 글을 찾을 수 없는 경우에 발생한다. 대표적으로 기존에 게시했던 글을 삭제하는 경우다. 혹은 퍼머링크가 바뀌었을 가능성도 있다. Jekyll에서 퍼머링크는 기본적으로 날짜 기반이므로, YYYY/MM/DD/slug 구조를 확인해야한다.

발견됨 - 현재 색인이 생성되지 않음

콘텐츠 양이 너무 적거나, 내부/외부 링크가 거의 없거나, robots.txt가 막고 있거나, 구글이 “중복 컨텐츠일 수도”라고 생각한 경우 해당 오류를 발생시킨다. 위에서 설명한대로 글 작성 후에 Search Console에서 직접 색인 생성을 요청하면 된다.

크롤링됨 - 현재 색인이 생성되지 않음

위 오류와 거의 흡사한데, 너무 비슷한 내용만 반복된 페이지이거나, sitemap에 너무 늦게 반영된 경우 발생할 수 있다. 혹은 블로그 코드에 <meta name="robots" content="noindex">가 설정되어있을 수도 있다. 이럴 경우 _layouts 또는 _includes/head.html에서 meta robots 태그를 확인해보고, 만약 없다면 추가해준다.

<meta name="robots" content="index, follow">

그리고 sitemap.xml이 최신인지 확인하여 위에 설명한대로 empty commit을 통해 강제로 sitemap 갱신할 수 있다. 만약 모든 것이 정상인데 발생하는 오류라면, 마찬가지로 해당 글들을 수동으로 페이지 색인 생성하도록 요청한다.