다양한 언어를 쓰는 사람들에게 웹사이트가 더 유용하도록, 그리고 검색 엔진과 AI 시스템이 더 쉽게 찾고 이해하도록 웹사이트를 현지화했습니다. 목표는 SEO와 GEO를 통한 발견 가능성 향상이며, 더 높은 순위나 인용을 약속하는 것은 아닙니다.
현지화한 이유
사람들은 자신의 언어로 검색하고 질문합니다. 그 언어로 명확하고 관련성 높은 페이지를 제공하면 검색 엔진은 보여 줄 만한 콘텐츠가 늘어나고, 생성형 AI 시스템은 질문에 답할 때 더 나은 맥락을 얻습니다. 현지화는 영어 검색에만 갇히지 않고 적합한 독자가 제 작업을 찾도록 돕습니다.
진행 방법
현지화를 단순한 번역 작업이 아니라 사이트 구조의 일부로 다뤘습니다. 아래 예시는 Next.js에서 사용하는 설정을 단순화한 발췌입니다.
1. 언어마다 예측 가능한 URL 부여하기
영어는 기본 언어로 루트에 유지됩니다. 다른 언어에는 접두사가 붙어 같은 페이지가 각 로캘에서 안정적인 URL을 갖습니다. 지원하는 로캘을 하나의 목록으로 관리하면 라우팅과 언어 링크가 같은 기준을 공유하게 됩니다.
export const locales = ['en', 'de', 'es', 'fr', 'ja', 'pt'] as const;
export type Locale = (typeof locales)[number];
export const defaultLocale: Locale = 'en';
export function localizedPath(locale: Locale, pathname = '') {
const path = pathname === '/' ? '' : pathname;
return locale === defaultLocale ? path || '/' : `/${locale}${path}`;
}2. 번역된 콘텐츠를 딕셔너리에 보관하기
각 로캘에는 페이지 제목, 설명, 내비게이션, 글 본문을 담은 자체 딕셔너리가 있습니다. 컴포넌트는 사용자에게 보이는 텍스트를 직접 넣지 않고 활성 딕셔너리에서 읽어 오므로, 번역된 페이지도 같은 레이아웃을 유지합니다.
// src/locales/de.ts
pageTitles: {
'blog/how-and-why-i-localized-my-website':
'Warum und wie ich meine Website lokalisiert habe',
}
// In the page component
const title = t.pageTitles[articleKey];3. 크롤러에 각 버전 알려 주기
각 현지화 페이지에는 고유한 canonical URL을 설정하고, hreflang 대체 링크로 동일한 언어별 URL을 나열합니다. 이 경로들은 사이트맵에도 포함합니다. 이렇게 하면 번역본 간의 관계가 명확해지지만, 순위나 AI 인용을 보장하지는 않습니다.
const pathname = `/${articleKey}`;
const url = localizedUrl(locale, pathname);
return {
alternates: {
canonical: url,
languages: getLanguageAlternates(pathname),
},
};이 패턴은 블로그 글 외에도 적용됩니다. 현지화된 내비게이션과 페이지 문구는 방문자에게 유용한 경험을 주고, 일관된 URL과 메타데이터는 각 버전을 더 쉽게 식별하게 합니다. 번역을 정확하고 유용하게 유지하는 일은 여전히 제 몫입니다. 기술적 SEO는 발견에 도움이 되지만 좋은 콘텐츠를 대신할 수는 없습니다.