같은 사유로 세 번 떨어졌습니다. 세 번째에야 진단이 아니라 조치 수단이 틀렸다는 걸 알았습니다. 남 얘기가 아니라 이 사이트 얘기라 그대로 적습니다.
1차 — 원인은 명확했다
랜딩 전체에 비밀번호 게이트가 걸려 있었습니다. 심사 크롤러가 본 화면은 비밀번호 입력창 하나였고, 그 위에 광고 스크립트가 얹혀 있었습니다. "게시자 콘텐츠가 없는 화면에 광고"라는 지적은 정확했습니다. 게이트를 걷어내니 이 항목은 사라졌습니다.
2차 — 분량을 바이트로 쟀다
남은 지적은 "가치가 별로 없는 콘텐츠" 하나였습니다. 서비스 소개 페이지가 충분히 두껍다고 판단하고 재심사를 냈는데, 그 판단의 근거가 HTML 응답 크기 19,750바이트를 글자 수로 읽은 것이었습니다. 태그와 인라인 스타일을 걷어내고 실제 텍스트만 세어 보니 페이지당 중앙값 590자였습니다. 반박 근거를 갖췄다고 믿고 낸 재심사가, 실은 아무것도 해소하지 못한 상태였습니다.
분량을 잴 때는 태그를 제거한 뒤 세야 합니다. 한 줄이면 됩니다.
html.replace(/<script[\s\S]*?<\/script>/gi, " ")
.replace(/<[^>]+>/g, " ")
.replace(/\s+/g, " ")
.trim().length
3차 — 이번엔 수단을 착각했다
2차 탈락 뒤 얇은 페이지를 실측해 골라냈습니다. 블로그 글 79편(본문 1,200자 미만)과 서비스 소개 16개(579~1,203자). 여기까지는 맞았습니다. 문제는 조치 방법이었습니다. 이 95개에 <meta name="robots" content="noindex">를 달고, sitemap에서 빼고, "평가받는 면에서 제외했다"고 기록했습니다.
그리고 또 떨어졌습니다. 사유는 2차와 글자 하나 다르지 않았습니다.
noindex가 하는 일은 하나뿐입니다. 구글 검색 결과에 이 URL을 넣지 말라는 요청입니다. 그게 전부입니다. 페이지는 그대로 있고, 링크도 그대로 살아 있고, 열면 그대로 열립니다. 실제로 확인해 보니 목록 페이지에는 167편 전부가 링크돼 있었고, 랜딩에는 서비스 26개가 전부 링크돼 있었습니다. 심사 크롤러와 사람 심사자는 그 링크를 따라 들어갈 뿐, 그 페이지가 검색 색인 대상인지 아닌지를 알 이유가 없습니다.
정리하면 이렇습니다.
- noindex — 검색 결과에서 뺀다. 사이트에는 남는다.
- sitemap에서 제외 — 색인해 달라고 제출하지 않는다. 사이트에는 남는다.
- 링크 제거 — 사람이 발견하기 어려워진다. URL을 알면 여전히 열린다.
- 생성하지 않음(404) — 그제서야 없는 것이다.
심사자가 클릭할 수 있는 페이지 193개 중 95개가 얇았습니다. 절반입니다. 그 절반을 "치웠다"고 믿고 두 번 재심사를 냈습니다.
바꾼 것
얇으면 아예 만들지 않도록 파이프라인을 고쳤습니다. 이제 이 사이트에는 sitemap에 없는데 존재하는 페이지가 없습니다.
사이트에 존재하는 페이지 == sitemap 목록 == 심사받는 면
세 값이 어긋나는 순간 같은 실수가 되풀이되므로, 코드 주석에 이 불변식을 못박아 두었습니다. 원문은 집필 도구 쪽에 그대로 있고 영상 파이프라인도 계속 쓰므로, 잃은 것은 없습니다.
남는 교훈
세 번의 실패가 각각 다른 층위였습니다. 1차는 사실을 몰랐고(게이트가 걸려 있다), 2차는 측정이 틀렸고(바이트를 글자로 읽음), 3차는 수단이 틀렸습니다(noindex를 제거로 믿음). 진단이 맞았다고 조치가 맞는 것은 아닙니다.
그리고 매번, 확인하는 데 든 시간은 5분이 안 됐습니다. 태그를 걷고 글자를 세는 데 한 줄, 목록 페이지에 링크가 몇 개 걸려 있는지 세는 데 한 줄. 믿고 넘어간 대가가 각각 2주였습니다.