당신의 블로그나 쇼핑몰, 사내 위키에서 AI 가 매일 글을 쓰고 태그도 붙인다. 처음 몇 주는 괜찮다. 그런데 몇 달 뒤 태그 목록을 열어 보면 「강남역 맛집」「○○ 무선이어폰」「2026년 3월 전세」처럼 글 1편에만 붙은 태그가 수십, 수백 개다. 태그마다 페이지가 생기니 사이트에는 글 하나짜리 목록 페이지가 계속 늘고, 검색 엔진은 이를 얇은 콘텐츠(thin content)로 보고 색인하지 않거나 사이트 전체의 품질 신호를 깎는다. 급한 불로 태그 페이지에 noindex 를 거는 경우가 많다.
왜 AI 가 붙인 태그는 시간이 갈수록 흩어지나
생성 모델에게 이름 짓기를 열어 두면, 어휘는 글 수에 비례해 늘어난다. 모델은 글마다 그 글을 가장 잘 설명하는 말을 고르는데, 한 편을 가장 잘 설명하는 말은 대개 그 글의 고유명사(지명·상품명·날짜)다. 고유명사는 다음 글과 겹치지 않는다. 그래서 글이 늘수록 태그 페이지도 거의 1:1 로 늘고, 각 페이지는 글 1편짜리로 남는다.
개념 태그는 반대로 움직인다. 「전세」「이직」「무선 이어폰」 같은 개념어는 글이 쌓일수록 한 태그에 여러 편이 모여 페이지가 두꺼워진다. 같은 "태그"라도 개념 태그는 시간이 뭉치게 하고, 고유명사 태그는 시간이 악화시킨다.
태그만의 일이 아니다. 카테고리, 감정 라벨, 문의 유형, 상품 분류처럼 모델이 "이름"을 고르는 칸이면 어디든 같다. 열린 어휘는 데이터가 쌓일수록 꼬리가 길어진다.

noindex 를 걸면 해결되지 않나
noindex 는 증상만 가린다. 검색 엔진이 색인하지 않게 막는 것일 뿐, 얇은 페이지는 계속 만들어지고 사이트 안의 링크·사이트맵·크롤링 예산은 그 페이지들에 계속 쓰인다. 무엇보다 사람에게도 쓸모없는 페이지라는 사실은 그대로다. 처방은 페이지를 그리는 쪽이 아니라 태그를 만드는 쪽에 둔다.
어휘는 어떻게 닫나
- 개념어 고정 목록을 만든다. 지금 쌓인 태그 중 글이 3편 이상 붙은 것, 그리고 사이트의 주제를 덮는 개념어 몇십 개면 시작으로 충분하다.
- 프롬프트에 목록을 주고 그 안에서만 고르게 한다. "어울리는 태그를 붙여라"가 아니라 "아래 목록에서 1~3개를 골라라".
- 목록을 벗어난 값은 코드가 처리한다. 미리 정한 치환표(「강남 맛집」→「맛집」, 「에어팟」→「무선 이어폰」)로 바꾸고, 치환표에도 없으면 버린다. 글을 다시 쓰게 하지 않는다.
- 버려진 값을 센다. 같은 말이 자주 버려지면 그건 목록이 모자란 것이다. 사람이 보고 목록이나 치환표에 넣는다.
- 이미 쌓인 얇은 태그를 정리한다. 치환표로 기존 글의 태그를 다시 매기고, 사라지는 태그 페이지는 가장 가까운 개념 태그로 영구 리다이렉트(301/308)하거나 404 로 둔다.
왜 벗어난 태그 때문에 글을 다시 쓰게 하면 안 되나
형식 위반마다 모델에게 통째로 다시 쓰게 하는 검사는, 고친 칸보다 더 많은 칸을 망가뜨린다. 모델은 다시 쓸 때 문제없던 다른 칸(본문, 요약)까지 바꾸고, 그 칸이 또 다른 규칙에 걸린다. 걸리는 비율이 높으면 지연이 쌓이고, 끝내 빈 칸이 저장된다. 태그처럼 코드가 확실하게 고칠 수 있는 칸은 코드가 고친다. 다시 쓰기는 코드로 못 고치는 것에만 쓰고, 그때도 어느 칸이 왜 걸렸는지 적어 그 칸만 다시 받는다.
에이전트나 생성 파이프라인 지침에 넣을 문장:
태그(분류·라벨)는 아래 목록에서만 1~3개 고른다. 목록에 없는 말을 새로 만들지 않는다.
[목록]
목록 밖의 값이 나오면 코드가 치환표로 바꾸고, 치환표에도 없으면 버린다. 이 때문에 글을 다시 생성하지 않는다.
버려진 값은 기록하고, 주마다 자주 버려진 말을 사람이 검토해 목록에 넣을지 정한다.
확인 목록:
- 태그별 글 수 분포를 뽑아 본다. 글 1편짜리 태그 비율이 시간이 갈수록 오르면 어휘가 열려 있다
- 1편짜리 태그 중 고유명사(지명·상품명·날짜) 비율을 본다
- 생성 프롬프트에 고정 목록이 있는가, 목록 밖 값을 코드가 처리하는가
- 형식 위반 때 재생성 비율을 잰다. 20% 를 넘으면 그 규칙은 코드 정규화로 옮기거나 느슨하게 한다
우리가 겪은 일
- AI 가 매일 쓰는 정보 블로그에서 얇은 태그 페이지 86개가 쌓였다. 태그 대부분이 지명·상품명이라 글 1편짜리였고, 글이 늘수록 같이 늘었다. noindex 대신 생성 쪽에 개념어 고정 목록을 주고, 목록 밖 태그는 코드에서 치환·제거하게 바꿨다.
- 다른 서비스에서는 구조화 출력의 문장 길이 규칙(40자)을 어기면 통째로 다시 쓰게 했다. 다시 쓸 때 멀쩡하던 칸까지 바뀌어 또 걸리고, 결국 칸이 비어 저장됐다. 걸린 비율이 20% 를 넘었고 다시 쓸 때마다 턴당 약 1초가 늘었다(응답 로그로 쟀다). 규칙 상한을 80자로 느슨하게 하고, 다시 쓸 때는 걸린 칸만 받게 바꿨다.