상황

개발자용 도구 사이트를 6개 호스트로 나눠 운영하고 있다. 페이지는 53개. 그중 구글에 색인된 것이 4개다.

나머지 50개는 Search Console에서 크롤링됨 - 현재 색인이 생성되지 않음 상태다. 구글이 찾았고, 읽었고, 색인하지 않기로 했다는 뜻이다.

기술적 결함부터 의심하는 게 순서라 전부 확인했다. 결과는 전부 음성이었다. 대표로 한 페이지의 URL 검사 결과를 그대로 옮긴다.

상태             크롤링됨 - 현재 색인이 생성되지 않음
최근 크롤링       2026-09-29
크롤링 허용       예
페이지 가져오기    성공
색인 생성 허용     예
Google 선택 표준   검사된 URL

막는 것이 하나도 없다. robots.txt도 Allow: /이고, X-Robots-Tag 헤더도 없고, canonical은 자기 자신을 가리키며 구글도 그걸 그대로 채택했다. 수동 조치도 보안 문제도 없다. 그런데 색인을 안 한다.

이건 버그가 아니라 가치 판단이다. 그래서 두 가지를 차례로 시험했다.

1. 포맷을 바꾸면 되는가 — 판정 규칙을 먼저 적고 돌렸다

첫 가설은 “페이지들이 한 틀에서 찍혀 나온 것처럼 보인다"였다. 실제로 43개 페이지 중 34개가 FAQ 5개 · 출처 3개 · 답변 110~130단어로 같은 모양이었다.

여기서 중요하게 생각한 건 실험을 돌리기 전에 판정 규칙을 적어두는 것이었다. 결과를 보고 나서 해석을 고르면 어떤 결과든 자기 편으로 읽게 된다.

호스트당 1개씩 5개만 골라 틀을 각기 다르게 깼다. 전부 한꺼번에 고치면 그 자체가 또 대량 작업이라 같은 신호를 반복하게 된다.

페이지개편 방향FAQ
A언어 비교표를 논지로 앞세움0개
B선택 표를 맨 위로2개
C실행 로그를 뼈대로3개
D계산을 먼저 실행해 보여줌4개
E짧은 질문 다수7개

미리 적어둔 규칙은 이랬다.

  • 5개가 색인되고 손대지 않은 페이지들은 안 됨 → 구조가 원인. 나머지도 같은 방식으로 고친다
  • 5개도 색인 안 됨 → 사이트 단위 판정. 개별 페이지 수정으로는 안 풀린다
  • 일부만 → 호스트별 차이를 본다

개편 후 색인을 재요청하고 24일을 기다렸다.

결과: 5개 중 0개

색인된 페이지 목록을 다시 뽑았더니 4개였고, 개편한 5개는 하나도 없었다. 살아남은 4개는 전부 개편 전부터 색인돼 있던 오래된 페이지였다.

두 번째 가지다. FAQ 개수를 0·2·3·4·7로 흩고, 도입부 구조를 다섯 가지로 바꾸고, 템플릿 냄새를 지운 것이 색인에 아무 영향을 주지 않았다.

규칙을 먼저 적어둔 덕에 이 결과를 두고 다툴 여지가 없었다. 그게 이 실험에서 제일 잘한 일이라고 생각한다.

2. 그러면 외부 링크인가 — 재기 전에 자를 먼저 확인했다

남은 설명은 사이트 단위 신호였고, 가장 그럴듯한 건 외부에서 이 사이트를 가리키는 것이 거의 없다는 것이었다. Search Console의 외부 링크 리포트는 0개를 가리키고 있었다.

그래서 백링크를 만들러 가기로 했는데, 그 전에 한 번 크게 틀린 적이 있다. “그런 데는 다 nofollow라 의미 없다"고 확인도 안 하고 네 번 썼고, 틀렸다.

rel 속성은 페이지를 받아서 grep 한 번이면 끝나는 확인이다. 그래서 후보 채널을 전부 받아서 봤다.

확인 방법

1curl -sL -A "<브라우저 UA>" "<채널 URL>" \
2  | grep -oE '<a [^>]*href="[^"]*<내도메인>[^"]*"[^>]*>'

npm이나 Edge 애드온처럼 클라이언트 렌더링이거나 봇을 막는 곳은 curl이 403이나 빈 HTML을 주므로 브라우저로 직접 봐야 한다.

결과표

채널실제 마크업판정
dev.to 글 본문rel="noopener noreferrer"dofollow
dev.to 프로필 websiterel="noopener me"dofollow
Google Sitesrel 속성 없음dofollow
Chrome 웹스토어 Website 필드rel="ugc nofollow"링크 가치 없음
Firefox 애드온(AMO)rel="nofollow" + 아웃고잉 리다이렉트 래퍼이중 차단
Edge 애드온서버 HTML에 외부 링크 자체가 없음—
npm Homepage · Repositoryrel="noopener noreferrer nofollow"링크 가치 없음
npm README 본문rel="nofollow"링크 가치 없음
GitHub READMErel="nofollow"링크 가치 없음
GitHub 저장소 website 필드rel="nofollow"링크 가치 없음
Product Hunt 제품 링크rel="noreferrer noopener ugc"링크 가치 없음

AMO는 특히 철저하다. rel="nofollow"를 붙이는 데서 그치지 않고 모든 외부 링크를 prod.outgoing.prod.webservices.mozgcp.net/v1/<해시>/<인코딩된 URL> 형태의 리다이렉트로 감싼다. 한 페이지에서 14번 나왔다.

이게 뒤집은 것

나는 크롬 웹스토어를 “이 실험에서 유일하게 증명된 채널"이라고 문서에 적어뒀었다. 확장을 올리면 리스팅에 사이트 링크가 실재하는 걸 눈으로 확인했기 때문이다.

그런데 그 링크가 ugc nofollow였다. 권위는 한 톨도 안 넘어온다. 유입과 “실재하는 제품을 내는 곳"이라는 정당성은 진짜지만, 그건 다른 이야기다.

반대로 dev.to는 글 본문과 프로필 양쪽 다 nofollow도 ugc도 없었다. 도메인 권위가 높은 곳 중에 우리가 접근할 수 있는 유일하게 확인된 dofollow였다. 그런데 내 계획표에는 dev.to 글이 한 편만 잡혀 있었다. 우선순위가 거꾸로였다.

배운 것

첫째, 판정 규칙은 실험 전에 적는다. 적어두지 않았다면 “5개 중 0개"를 “아직 시간이 안 지났다"로 읽었을 것이다. 실제로 그러고 싶었다.

둘째, 확인 비용이 1분인 것을 추측하지 않는다. rel 속성이 그랬다. 나는 추측 위에 기각 판정을 쌓았고, 그 판정으로 멀쩡한 채널을 하나 버릴 뻔했다.

셋째, “증명된 채널"이라는 말을 쓸 때 무엇이 증명됐는지 따진다. 링크가 존재한다는 것과 링크가 전달된다는 것은 다른 명제다. 나는 앞의 것을 확인하고 뒤의 것을 믿었다.

지금 상태

솔직하게 적으면, 아직 아무것도 해결되지 않았다.

외부 링크   0
색인        4 / 53
미색인      50  (유효성 검사 실패)

외부 링크가 0에서 움직이는지, 움직일 때 색인이 따라 오는지가 다음 4주의 질문이다. 움직이지 않으면 “외부 참조가 색인 배분량을 정한다"는 내 모델이 틀린 것이고, 그때는 설명이 하나밖에 안 남는다 — 같은 목적을 두고 경쟁하는 페이지가 너무 많다는 것.

어느 쪽이든 4주 뒤에 답이 나온다. 그때 다시 적겠다.

측정 대상이 된 사이트는 withuse.io 다. 위에서 URL 검사 결과를 그대로 옮긴 페이지는 cron 표현식 가이드 이고, 지금도 크롤링됨 - 현재 색인이 생성되지 않음 상태다.