블로그 › IT
구글 색인 생성 안됨, 알고보니 hreflang 슬래시 하나가 원인이었다

이 블로그는 한국어·일본어·영어 세 언어로 운영하고 있다. 그래서 글을 하나 올리면 세 개의 URL이 생기는데(예: /ko/글제목/, /ja/글제목/, /en/글제목/), 이 셋이 서로 “같은 글의 다른 언어판”이라는 걸 구글에 알려주는 태그가 따로 있다. 이걸 hreflang이라고 부른다.
구글은 내 사이트를 “검색 결과에 올려도 되는 페이지”로 판단하면 색인(index)에 넣는다. 색인에 안 들어가면 아무리 글을 써도 검색으로는 절대 안 들어온다. 그래서 Search Console(구글이 내 사이트를 어떻게 보고 있는지 확인하는 도구)을 가끔 열어보는데, 며칠 전에 들어갔더니 “실패함” 딱지가 붙은 항목이 44개나 떠 있었다.
카테고리가 다섯 개로 나뉘어 있었는데, 이름만 봐서는 뭐가 진짜 문제인지 하나도 감이 안 왔다.
- 적절한 표준 태그가 포함된 대체 페이지 — 20개
- 리디렉션이 포함된 페이지 — 13개
- 사용자가 선택한 표준이 없는 중복 페이지 — 5개
- 크롤링됨 - 현재 색인이 생성되지 않음 — 4개
- 중복 페이지, Google에서 사용자와 다른 표준을 선택함 — 2개
44개. 처음엔 사이트가 통째로 문제 있는 줄 알았다.
근데 하나씩 URL을 까보니까 얘기가 달랐다. “적절한 표준 태그가 포함된 대체 페이지”랑 “리디렉션이 포함된 페이지”는 대부분 www.가 붙었거나 http://로 시작하는 주소들이었다. 이런 건 원래 진짜 주소(https://glitch-apple.com/...)로 자동으로 넘어가게(리다이렉트) 해뒀고, 그 진짜 주소만 색인되면 그걸로 정상이다. 구글이 “실패”라고 써놔서 놀랐을 뿐이지, 33개(20+13)는 그냥 원래 정상 동작이었던 거다.
진짜 문제는 나머지 중에 섞여 있었다. “사용자가 선택한 표준이 없는 중복 페이지” 목록에 이런 주소가 있었다.
https://glitch-apple.com/ko//
https://glitch-apple.com/ja//
슬래시가 두 개다. 이런 주소를 만든 적이 없는데 구글이 대체 어디서 찾아낸 건지 한참 봤다.
답은 사이트 자체의 <head> 안에 있었다. 홈 화면 소스를 열어보니:
<link rel="alternate" hreflang="ja" href="https://glitch-apple.com/ja//">
<link rel="alternate" hreflang="en" href="https://glitch-apple.com/en//">
내가 직접 “일본어판은 여기 있다”고 알려주는 태그 안에 슬래시가 두 번 들어가 있었다. 구글은 이 태그를 그대로 믿고 따라갔다가, 존재하지도 않는 이중슬래시 주소를 “발견”하고, 어디로 리다이렉트되는지도 확인하고, 결국 “표준이 불분명한 중복 페이지”로 분류해버린 거다. 내가 만든 태그가 구글을 이상한 데로 데려간 셈이다.

원인은 코드 한 줄이었다.
url: `/${l}/${suffix}/`,
경로 뒤에 뭐가 붙는 페이지(/ja/blog/ 같은)는 멀쩡한데, 홈 화면처럼 뒤에 아무것도 안 붙는 페이지는 이 suffix 자리가 빈 문자열이 되면서 /ja/ + “ + /가 이어져 /ja//가 됐다. 딱 한/일/영 홈 화면 세 개만 여기 걸려 있었다.
url: suffix ? `/${l}/${suffix}/` : `/${l}/`,
빈 문자열일 땐 그냥 슬래시 하나만 붙이게 바꿨다. 그게 끝이었다.

배포하고 다시 소스를 열어보니 hreflang 값이 전부 정상으로 나왔다. 이제 구글이 다시 크롤링하면 저 이중슬래시 주소들도 알아서 정리될 거다.
이번에 느낀 건, “실패함”이라는 말을 곧이곧대로 믿으면 안 된다는 거였다. 44개 중에 진짜 내가 고쳐야 했던 건 두어 개뿐이었고, 나머지는 원래 정상이거나 코드랑 상관없는 문제(새로 산 도메인이라 구글이 아직 신뢰를 덜 쌓은 것)였다. 다 똑같이 “실패” 딱지 붙여놓으니까, 직접 하나하나 열어보기 전까진 뭐가 진짜인지 구분할 방법이 없었다.
댓글