본문으로 건너뛰기
유환호 연락하기

홈 / 기록

공고는 안 겹치는데 글이 겹쳐서 색인이 안 됐다

한눈에 답변

'서울 뷰티 체험단' 페이지는 실제 공고가 218건이나 있고 사이트맵에도 있었지만 1000위까지 전혀 색인되지 않았다. 원인을 끝까지 추적해 보니 공고 카드를 뺀 나머지 산문이 250개 페이지에서 100% 동일했다 — 지역·분야명과 건수만 바뀌는 한 문장짜리 템플릿이었다. 그 페이지 집합의 실데이터에서 유형 구성·경쟁률 중앙값·구군 분포를 뽑아 매일 달라지는 직답 문단을 만들어 넣자 색인이 풀렸다.

무엇이 이상했나

‘서울 뷰티 체험단’ 페이지는 조건을 다 갖추고 있었다. 실제 공고가 218건 있었고, 사이트맵에도 등록돼 있었고, 다른 지역 페이지와 공고가 겹치지도 않았다. 그런데도 검색 결과 1000위 안쪽 어디에도 나타나지 않았다 — 색인 자체가 안 되는 상태였다.

원인을 어떻게 찾았나

공고 데이터는 겹치지 않는데 페이지의 글이 겹치고 있었다. 카드 목록을 걷어내고 남는 산문(설명 문장)을 확인해 보니, 지역명과 분야명과 건수 숫자만 바뀌고 나머지 문장 구조는 250개 페이지에서 완전히 동일했다. 검색엔진 입장에서는 이 250개 페이지가 사실상 같은 문서의 변형으로 보였을 것이다.

무엇으로 고쳤나

각 페이지가 실제로 갖고 있는 공고 집합에서 통계를 직접 뽑아 문단을 생성하는 방식으로 바꿨다. 유형 구성, 마감 3일 이내 비율, 경쟁률 중앙값, 구군별 분포, 출처 분포 같은 수치를 그 페이지의 데이터에서 계산해 직답 문단으로 넣었다. 서울 뷰티는 218건, 제주 여행은 9건처럼 페이지마다 숫자 자체가 다르고, 게다가 공고가 바뀌면 매일 값도 바뀐다 — 템플릿 문장으로는 절대 나올 수 없는 종류의 고유성이다.

설계에서 지킨 원칙

숫자만 넣기로 했다. 지역에 대한 해설을 문장으로 붙이면 그 해설 자체가 다시 템플릿이 되어 같은 문제가 반복되기 때문이다. 표본이 5건 미만이면 경쟁률을 아예 말하지 않기로 했고, 표본이 전체보다 작은 경우에는 건수 대신 비율로 말하면서 그 사실을 표기하기로 했다. 요약 문장은 화면의 필터 토글과 무관하게 그 페이지가 원래 답해야 하는 범위로 고정해서, 인용된 문장과 실제 내용이 어긋나지 않게 했다.

이 과정에서 잡은 부수적인 실수

1 미만 경쟁률을 “신청자가 적은 편”이라고 서술했더니 그 표현 자체가 수십 페이지에 똑같이 박혀 새로운 중복을 만들 뻔했다. 충족률을 항상 숫자(%)로 노출하는 방식으로 바꿔 해결했다. 반올림하면 0%가 되어 버리는 유형(“기자단 0%“)은 의미 없는 노이즈라 표시에서 제외했다.