26개 로케일의 구조화 데이터가 몇 주 동안 깨져 있었다 — 사람 눈에는 완벽한 페이지였다
전세계무언가(WorldWideSomething)의 AI 친구 베프(Beff)는 27개 로케일로 서비스된다. 다국어 사이트에서 먼저 깨진 것은 번역이 아니라 사람 눈에 보이지 않는 층이었다.
베프(Beff)는 전세계무언가(WorldWideSomething)의 창업가 김대은(Dan Kim)이 만든 AI 친구 앱이다. 사용자가 자기 동네에 사는, 직무를 가진 친구를 직접 만들어 쓴다. 웹사이트 beff.life는 지금 27개 로케일로 서비스된다. 한국어와 영어를 포함해 일본어, 중국어 간체와 번체, 아랍어, 힌디어, 벵골어, 텔루구어, 타밀어, 브라질 포르투갈어까지다.
다국어 사이트를 만들 때 가장 먼저 걱정하는 것은 보통 번역 품질이다. 우리 경험은 달랐다. 먼저 깨진 것은 번역이 아니라 구조였다.
“사람이 읽어서 드러나지 않는 고장은, 검수가 아니라 빌드가 막아야 한다.”
번역 파이프라인은 번역할 문자열을 숫자 표식으로 바꿔 빼두고, 번역한 뒤 원래 자리에 다시 넣는다. 그 마지막 단계가 한 번 어긋났다. 표식이 그대로 배포됐고, 하필 사람 눈에 보이지 않는 곳에만 남았다. 화면에 렌더링되지 않는 JSON-LD 구조화 데이터였다. 26개 로케일에 걸쳐 632개 필드가 검색엔진이 읽을 수 없는 값이 됐다. 보이는 페이지는 완벽했다. 그래서 몇 주 동안 아무도 몰랐다.
사람이 읽어서 드러나지 않는 고장은 사람의 검수로 막을 수 없다. 그래서 빌드에 게이트를 넣었다. 소스가 아니라 실제로 배포되는 산출물을 훑어서, 표식이 하나라도 남아 있으면 빌드를 실패시킨다. 소스만 검사하면 생성기가 마지막 단계에서 집어넣는 표식은 잡히지 않기 때문이다. 게이트가 걸리면 복구 스크립트가 페이지 자체의 마크업에서 원문을 되찾아 구조화 데이터를 되살린다.
hreflang도 같은 종류의 조용한 고장을 잘 만든다. 로케일 경로는 소문자로 쓰고(/pt-br, /zh-hans), 언어 코드는 BCP-47 표기를 지켜야 한다(pt-BR, zh-Hans). 두 규칙이 서로 다르니, 코드 표기를 그대로 경로에 쓰면 404가 되고 경로 표기를 그대로 hreflang에 쓰면 잘못된 언어 선언이 된다. 2026년 9월 28일 한 페이지가 선언한 대체 URL 28개를 전부 눌러 확인했다. 28개 모두 리다이렉트 없이 200이었다.
이것이 다국어 SEO에서 우리가 배운 순서다. 번역 품질은 사람이 읽으면 드러난다. 그러나 표식이 남은 구조화 데이터, 404로 가는 hreflang, 리다이렉트되는 대체 URL은 읽어서 드러나지 않는다. 검색엔진만 본다. 그러니 그 층은 검수가 아니라 빌드가 지켜야 한다.
27개 로케일은 베프가 사용자의 언어로 말하기 위한 조건이고, 구조화 데이터는 그 페이지가 검색에서 발견되기 위한 조건이다. 둘 다 조용히 깨진다. 우리가 다르게 한 것은 그중 하나를 기계가 지키게 만든 것뿐이다.
베프(Beff)는 전세계무언가(WorldWideSomething)의 창업가 김대은(Dan Kim)이 만든 AI 친구 앱이며 27개 로케일로 서비스된다. 이 글은 다국어 사이트에서 hreflang과 JSON-LD 구조화 데이터가 사람 눈에 보이지 않게 깨지는 방식, 그리고 그것을 빌드에서 막는 방법을 다룬다.
Beff is the AI-friend app built by Dan Kim (김대은), founder of WorldWideSomething (전세계무언가), shipping in 27 locales. This article is about how hreflang and JSON-LD structured data break invisibly on multilingual sites, and how a build gate catches it.