게임 페이지로 가는 링크는 0개 — 리포트 368편 링크 3,944개 전수

칼라톤의 시즌 리포트는 사람이 쓰지 않는다. 시즌이 끝나면 생성기가 그 시즌의 리더보드·코멘트·점수를 읽어 공개 요약 페이지 한 장을 찍어 내고, 넉 달 동안 그렇게 368장이 쌓였다. 유머 21시즌, 인물생성 152시즌, 매칭 6시즌, 트레이딩 2시즌, 홀짝 1시즌 — 국문과 영문 두 벌씩이다.

이 지면을 두고 지금까지 센 것은 안쪽이었다. 배지가 표와 맞는지, 목록에 몇 편이 노출되는지, 이미지가 어느 호스트에서 오는지. 이번에는 바깥쪽을 센다. 이 368장은 다 읽은 독자를 어디로 보내는가.

368장에 박힌 href 속성 5,784개를 전부 꺼내 행선지별로 분류했다. 결론부터 적는다. 클릭 가능한 링크 3,944개의 행선지는 다섯 군데뿐이고, 그중 게임 페이지로 가는 링크는 0개, 아티클로 가는 링크도 0개다. 그리고 본문에서 나가는 링크 984개는 전부 사이트 밖으로 나간다.

모집단 — 368장, href 5,784개

집계 대상은 Frontend/public/reports/ 아래 HTML 전부다. 368장의 구성은 이렇다.

구분국문영문합계비고
인물생성 시즌 리포트152장152장304장전체의 82.6%
유머 시즌 리포트21장21장42장영상 링크를 가진 유일한 모듈
매칭 시즌 리포트6장6장12장시즌 3~8
트레이딩 시즌 리포트2장2장4장시즌 1~2
홀짝 시즌 리포트1장1장2장시즌 1
시즌 리포트 소계182장182장364장이 연작이 '리포트'라 부르는 단위
모아보기 인덱스2장2장4장전체 목록 1 + 인물 모듈 목록 1
합계184장184장368장href 5,784개

5,784개 중 1,840개는 <link> 태그, 즉 독자가 누를 수 없는 기계용 주소다. 이쪽은 셀 것이 거의 없다 — 368장 전부가 정확히 5개씩 갖고 있고 구성도 똑같다(canonical 1 + hreflang 대체 3[en·ko·x-default] + 파비콘 1). 368 × 5 = 1,840, 예외 0장. 생성기가 찍는 지면이라 이 칸이 어긋날 자리가 없다.

남은 3,944개가 <a href> — 독자가 실제로 누를 수 있는 링크다. 장당 평균 10.7개지만, 이 평균은 거의 아무것도 말해 주지 않는다. 아래에서 보듯 분포가 평균 근처에 없다.

결과 ① — 행선지는 다섯 군데뿐, 게임 페이지와 아티클은 0개

링크 3,944개를 행선지별로 가르면 이렇다. 분류되지 않고 남은 링크는 0개다.

행선지링크 수비중어디서 나오는가
개별 시즌 리포트744개18.9%쌍둥이 364 + 인덱스 목록 380
리포트 모아보기 (/reports/)740개18.8%상단 내비 + 푸터, 장당 2개
홈 (/index.html)736개18.7%로고 + '홈', 장당 정확히 2개
개인정보처리방침368개9.3%푸터, 장당 1개
이용약관368개9.3%푸터, 장당 1개
인물 모듈 모아보기4개0.1%인덱스 4장끼리만
유튜브 (사이트 밖)984개24.9%유머 리포트 26장의 본문
그 밖의 외부 사이트0개0.0%—
게임·서비스 페이지0개0.0%—
아티클0개0.0%—
합계3,944개100%내부 2,960 · 외부 984

세 칸의 0을 따로 적어 둔다. /humor.html, /character.html, /matching.html, /trading.html, /mindgame.html, /lotto.html, /jinji.html, /image_process.html, /shortform.html — 아홉 개 게임·서비스 페이지 가운데 리포트가 가리키는 것은 하나도 없다. /articles/도, /about.html도, 로그인·가입 페이지도 없다. <a>만의 이야기가 아니다. 368장의 HTML 전체에서 이 주소들을 href로 쓴 자리는 0건이다.

백로그에 이 주제를 적어 둘 때 세어 보려던 네 가지는 '게임 페이지·갤러리·다른 리포트·아티클'이었다. 넷 중 둘이 0이고, 갤러리는 별도 URL이 없어 홈 페이지 안에 있으므로 갤러리로 가는 유일한 길은 홈 링크 736개다. 실제로 세어 볼 것이 남은 칸은 '다른 리포트' 하나뿐이었다.

그래서 유머 시즌 리포트를 끝까지 읽은 독자가 '유머 리그를 직접 보고 싶다'고 생각했을 때, 그 페이지가 주는 선택지는 홈으로 돌아가거나 리포트 목록으로 돌아가는 것뿐이다. 유머 게임 페이지는 한 번 더 찾아 들어가야 한다.

결과 ② — 시즌 리포트 364장은 하나같이 똑같은 7개를 내보낸다

장당 평균 10.7개라는 숫자가 의미 없는 이유가 여기 있다. 시즌 리포트 364장의 내부 링크 수 분포는 이렇다.

내부 링크 수해당 장수비중
정확히 7개364장100.0%
6개 이하 또는 8개 이상0장0.0%

분산이 0이다. 364장 전부가 똑같이 7개를 내보내고, 그 7개의 구성도 같다 — 로고(홈) · '홈'(홈) · 상단 '시즌 리포트'(허브) · 'English'/'한국어'(자기 언어 쌍둥이) · 푸터 개인정보처리방침 · 푸터 이용약관 · 푸터 '전체 시즌 리포트'(허브). 같은 곳을 두 번 가리키는 칸이 둘 있으니, 서로 다른 행선지는 장당 5개다. 이 역시 364장 전부 같다.

국문·영문을 가르고 모듈별로 모아도 뼈대는 하나다. 364장에서 나온 내부 링크 집합의 모양은 10가지로 나오는데, 그 10가지는 '5개 모듈 × 2개 언어'일 뿐 구조가 다른 것이 아니다. 자기 모듈 폴더 이름과 언어별 주소만 바뀐다.

모듈별 링크 총량은 지면 수를 그대로 따라간다. 인물생성 304장이 2,128개(= 304 × 7), 매칭 12장이 84개, 트레이딩 4장이 28개, 홀짝 2장이 14개. 유머 42장만 294개의 틀 링크 위에 본문 링크 984개가 더 얹혀 1,278개가 된다. 인덱스 4장이 412개(전체 목록 46 + 46, 인물 목록 160 + 160)를 갖는다. 다 더하면 3,944개다.

중요한 따름결과 하나. 시즌 리포트 364장 가운데 338장(92.9%)은 본문에 링크가 단 하나도 없다. 나머지 26장은 유머 리포트이고, 그 26장의 본문 링크는 전부 유튜브다. 즉 이 지면에서 '내용이 결정하는 사이트 내부 링크'는 한 개도 없다. 내용에 따라 달라지는 링크는 사이트를 떠나는 링크뿐이다.

결과 ③ — 본문에서 나가는 링크 984개는 전부 사이트 밖이다

링크 3,944개를 '틀'(상단 내비 + 푸터)과 '본문'으로 갈라 세면 이렇게 된다.

위치링크 수비중내용
틀(내비 + 푸터)2,576개65.3%368장 × 7개, 전부 템플릿
본문 — 유튜브984개24.9%유머 리포트 26장
본문 — 인덱스의 리포트 목록384개9.7%인덱스 4장만
본문 — 그 밖0개0.0%—
합계3,944개100%본문 1,368 · 틀 2,576

본문 링크 1,368개 가운데 71.9%가 사이트를 떠난다. 남은 384개는 목록 페이지 4장이 자기 목록을 그린 것이고, 시즌 리포트 본문이 사이트 안을 가리킨 링크는 0개다.

유튜브 링크 984개를 더 들여다보면 구조가 깔끔하다. 국문 492개 + 영문 492개이고, 가리키는 영상은 389편이다. 국문이 가리키는 389편의 집합과 영문이 가리키는 집합은 완전히 같다 — 한쪽에만 있는 영상이 0편이다. 링크 수(492)가 영상 수(389)보다 103개 많은 것은 '베스트 코멘트 하이라이트' 블록이 아래 라운드 표에 이미 있는 영상을 다시 거는 중복이다. 하이라이트 블록은 최대 10칸이라(같은 지면의 하이라이트 상한 규약) 리포트 한 장의 중복은 1~10개 사이다.

영상 링크를 가진 유머 시즌은 21시즌 중 13시즌이다. 0개인 시즌은 1·2·3·5·7·9·11·13 여덟 시즌으로 전부 앞쪽에 몰려 있고, 시즌 15부터는 21시즌까지 모두 영상 링크를 갖는다 — 영상 제작이 뒤늦게 붙은 경계가 링크에 그대로 남았다. 시즌당 고유 영상은 1편(시즌 38)에서 93편(시즌 28)까지로 넓게 퍼진다.

결과 ④ — 그래도 364장은 서로 4홉 안에 있다. 다만 교차로가 둘뿐이다

장당 행선지가 5개뿐이라면 지면이 서로 끊겨 있을 것 같지만, 그렇지 않다. 임의의 시즌 리포트에서 링크만 따라가는 독자를 시뮬레이션하면 364장 전부에 닿는다. 182장의 국문 리포트, 182장의 영문 리포트 모두 예외가 없고, 최대 거리는 4홉이다. 출발점을 364장 전부로 바꿔 돌려도 거리 분포는 두 가지 모양밖에 나오지 않는다 — 아래는 그중 288장의 분포이고, 자기 자신이 모아보기 목록에 실린 76장은 2홉이 37장·4홉이 144장으로 딱 한 장씩 어긋난다(자기가 그 목록의 한 칸이기 때문이다).

거리닿는 시즌 리포트경유지
1홉1장자기 언어 쌍둥이
2홉38장전체 모아보기에 실린 목록
3홉181장인물 모듈 목록 152 + 영문 모아보기 38 (중복 제외)
4홉143장영문 인물 모듈 목록의 나머지
합계363장 + 자기 1장= 364장

표의 모양이 그대로 구조를 말한다. 시즌 리포트끼리는 서로를 가리키지 않으므로(쌍둥이 364개가 전부고, 그것도 자기 자신의 번역본이다) 모든 이동은 두 개의 허브를 거친다 — 전체 모아보기와 인물 모듈 목록. 전체 모아보기는 182편 중 38편만 싣고(국문 기준: 유머 21 · 매칭 6 · 인물 8 · 트레이딩 2 · 홀짝 1), 나머지 144편의 인물 시즌은 인물 모듈 목록에서만 닿는다. 그래서 거리 분포의 무게가 3·4홉에 쏠린다.

이 두 허브 중 하나라도 목록이 비면 그쪽 지면은 통째로 고립된다. '38편만 노출된다'는 사실은 지난 회차에서 이미 센 것인데, 이번 집계는 그 노출 목록이 단순한 편의가 아니라 유일한 간선이라는 점을 더한다. 리포트 사이에는 이전·다음 시즌 링크도, 같은 모듈 링크도 없다.

결과 ⑤ — 들어오는 링크는 있고, 나가는 링크는 없다

리포트가 아무도 가리키지 않는다는 것이 리포트가 외롭다는 뜻은 아니다. 반대 방향은 활발하다.

방향링크 수내용
아티클 → 개별 시즌 리포트155개78편 중 55편이 단다. 받는 리포트는 57장
다른 지면 → 리포트25개리포트 밖 13장이 허브 또는 대표 시즌을 가리킨다
리포트 → 아티클0개—
리포트 → 게임·서비스 페이지0개—

아티클 78편은 개별 시즌 리포트를 155번 가리킨다(인물 34 · 유머 15 · 매칭 5 · 트레이딩 2 · 홀짝 1장을 받는다). 게임 페이지도 각자 1~3개씩 리포트를 가리킨다 — 일곱 개 게임 페이지(유머·인물생성·매칭·트레이딩·홀짝·로또·이미지)가 합쳐 17개, 회사소개와 관리자 전용 화면 여섯 장이 8개를 더해 모두 25개다. 유머 페이지는 허브와 시즌 1을, 트레이딩 페이지는 허브와 시즌 1·2를 가리킨다. 그런데 리포트에서 그 둘 중 어디로도 돌아가는 길이 없다.

받는 쪽의 편중도 적어 둔다. 아티클의 링크를 한 번이라도 받은 시즌 리포트는 364장 중 57장(15.7%)이고, 국문 182장 기준으로도 55장(30.2%)이다. 인물 시즌 152편 중 34편만 아티클에서 언급된 셈이다. 그러니 이 지면은 '들어오는 길은 좁고 나가는 길은 없는' 모양이다.

결과 ⑥ — 깨진 링크는 0개다

품질 점검 결과도 적어 둔다. 내부 링크 2,960개를 전부 실제 파일로 해석해 확인했고, 존재하지 않는 파일을 가리키는 링크는 0개다. 디렉터리 링크(/reports/ → index.html)와 언어별 약관·개인정보 페이지(_en 접미)까지 모두 실재한다. 쌍둥이 링크 364개도 전부 맞는 상대를 가리킨다 — 국문이 자기 영문판을, 영문이 자기 국문판을 가리키고 엇갈린 쌍은 없다.

기계가 찍는 지면이니 당연한 결과이고, 그래서 이 글의 발견은 '깨진 링크'가 아니라 '없는 링크'다. 템플릿에 적어 넣지 않은 행선지는 368장 전부에서 똑같이 비어 있다.

한계 — 이 분석이 말할 수 없는 것

첫째, 0은 결함이 아니라 설계일 수 있다. 리포트는 시즌이 끝난 뒤의 기록물이고, 끝난 시즌의 게임 페이지로 독자를 보내는 것이 늘 옳은 안내는 아니다. 이 글이 보고하는 것은 '게임 페이지 링크가 없다'는 사실이고, 그것이 손실인지 판단은 하지 않는다. 다만 지금까지 그 사실이 측정된 적이 없었고, 측정되지 않은 채로 넉 달이 지났다.

둘째, 링크 구조는 독자 행동이 아니다. 이 집계가 잰 것은 템플릿에 적힌 href이고, 독자가 그것을 눌렀는지는 전혀 모른다. '4홉 안에 364장에 닿는다'는 도달 가능성이지 도달이 아니다. 실제 유입의 상당 부분은 링크가 아니라 검색에서 올 것이고, 그 비중은 이 집계로 알 수 없다.

셋째, 이 글은 본문 링크를 포함해 셌다. 같은 지면을 다룬 앞 회차 가운데 아티클 인용 그래프는 '함께 보기' 블록만 세어 본문 링크를 제외했는데, 이번에는 페이지의 모든 <a href>를 넣고 그 대신 '틀'과 '본문'을 갈라 보고했다. 기준이 다르므로 두 글의 링크 수를 직접 비교하면 안 된다. 리포트는 생성기가 찍어 본문 링크의 형태가 고정돼 있어 이 기준이 가능했지만, 사람이 쓰는 아티클에는 같은 기준을 적용하기 어렵다.

넷째, 분모가 셋이다. 이 지면을 두고 368(인덱스 포함) · 364(시즌만) · 182(국문만)라는 세 수가 돌아다닌다. 이 글의 '3,944개'와 '5,784개'는 368 기준, '7개 골격'과 '92.9%'는 364 기준, '38편 노출'은 182 기준이다. 비율을 이어 쓸 때 분모를 바꾸면 그대로 틀린다.

다섯째, 도달성 계산은 리포트 밖을 추적하지 않았다. 홈·약관·개인정보 페이지는 이 시뮬레이션에서 종착점으로 두었다. 실제로는 홈을 거쳐 다시 어디로든 갈 수 있으므로, 홈을 경유지로 치면 사이트 전체가 2~3홉에 들어온다. 이 글이 잰 '4홉'은 리포트 지면 안에서의 거리다.

여섯째, 이 집계는 외부 링크의 생존을 확인하지 않았다. 유튜브 영상 389편이 지금도 재생되는지는 조회하지 않았다. 비공개로 돌린 영상이 섞여 있으면 그 링크는 형식적으로 멀쩡하면서 실제로는 막다른 길이 되는데, 이 글의 '깨진 링크 0개'는 내부 2,960개에 대한 판정이고 외부 984개는 대상이 아니다.

그래서, 무엇을 고칠 것인가

세 가지가 분명해졌다.

하나, 리포트 템플릿에 행선지 한 칸이 비어 있다. 이 지면의 링크는 전부 템플릿에서 나오고 분산이 0이므로, 고치는 비용도 한 곳이다. 각 시즌 리포트 푸터에 '그 모듈의 게임 페이지' 링크 하나를 넣으면 364장이 동시에 바뀐다. 지금 리포트는 자기가 어느 서비스의 기록인지 링크로는 말하지 않는다.

둘, 리포트 사이에 이전·다음 시즌 링크가 없는 것이 3·4홉의 원인이다. 같은 모듈 안에서 번호가 이어지는 지면인데도 인접 시즌으로 가는 링크가 0개여서, 인물 시즌 152편 사이의 모든 이동이 목록 페이지를 왕복한다. 번호 ±1 링크 두 개는 템플릿이 기계적으로 만들 수 있고, 그것만으로 같은 모듈 안의 거리가 1홉이 된다.

셋, 일방통행은 아티클 쪽에서도 갚을 수 있다. 리포트 → 아티클 0개를 메우려면 생성기를 고쳐야 하고, 어느 아티클을 걸지 기계가 알기 어렵다. 반면 아티클이 리포트를 가리키는 쪽은 이미 155개가 있고, 받는 리포트가 57장뿐이라 넓힐 여지가 크다. 이 글도 그 방식으로만 갚을 수 있다.

마지막으로 이 글의 자백. 이번 집계 결과대로라면, 지금 이 아티클을 가리키는 리포트는 앞으로도 0장이다. 리포트는 생성기가 찍고 생성기는 아티클을 모른다. 자기 지면을 집계 대상에 올리면 결론이 자기에게도 적용된다 — 그게 이 연작을 쓰는 값이라고 생각한다.

집계 기준. 2026년 11월 4일(KST) Frontend/public/reports/ 기준, HTML 368장(시즌 리포트 364 + 모아보기 인덱스 4). 각 파일에서 <a>·<link>·<area>·<base> 태그의 href 속성을 전부 추출해 5,784개(<a> 3,944 + <link> 1,840, 나머지 태그 0)를 얻었고, <a>만 '독자가 누를 수 있는 링크'로 집계했다. og:url 등 content 속성의 주소와 <img src>는 링크가 아니므로 제외했다(이미지 주소는 앞 회차에서 따로 셌다). 행선지 분류는 전수이고 미분류 0개다. 절대 주소는 colortone.kr 호스트만 내부로 보았다. '틀'은 <nav>·<footer> 요소 안, '본문'은 그 밖으로 갈랐다. 내부 링크 2,960개는 실제 파일 경로로 해석해 존재를 확인했다(디렉터리는 index.html로 해석). 도달성은 368장을 노드로 삼은 너비 우선 탐색이며, 리포트 밖 페이지(홈·약관·개인정보)와 외부 주소는 종착점으로 두었다. 모든 합계는 정규식 파서와 grep 두 가지 독립된 방법으로 각각 세어 일치한 값만 채택했다(<a> 3,944 · <link> 1,840 · 내부 2,960 · 유튜브 984 · 고유 영상 389, 다섯 항목 모두 일치). 아티클·게임 페이지의 역방향 링크는 Frontend/public/ 의 같은 날 파일 기준이며 아티클 78편은 목록 페이지를 제외한 수다. 비율은 소수점 아래 첫째 자리에서 반올림했다. 외부 링크의 실제 생존 여부와 독자의 클릭은 집계 대상이 아니다.