중요한 이유
문화별 URL은 사용자와 크롤러가 올바른 페이지를 선택하도록 돕습니다
쿠키는 요청 후 언어를 변경할 수 있습니다.
URL은 공유, 크롤링, 인덱싱, 캐싱 및 감사가 가능합니다.
문화별 경로는 공개 기사, 제품 페이지, 문서 및 도구에 적합합니다.
목차
핵심 개념
언어, 지역, 경로 및 콘텐츠 버전을 분리하세요
라우팅 코드를 작성하기 전에 이 용어들을 분리해 두세요.
읽기 쉬운 텍스트에는 언어를 사용하세요.
영어, 독일어, 프랑스어가 언어 선택 예시입니다.
지역은 현지 의도를 위해 사용하세요.
en-us와 en-gb는 맞춤법, 예시, 제안이 다를 수 있습니다.
발견을 위해 경로를 사용하세요.
/de-de/blazor/ 같은 경로는 모두에게 안정적인 주소를 제공합니다.
의도가 다를 때는 콘텐츠를 사용하세요.
법적 고지, 가격 또는 예제가 다를 경우 별도의 버전을 작성하세요.
SEO 신호
문화별 경로를 Canonical URL 및 hreflang 규칙과 연결하세요
URL은 하나의 신호일 뿐입니다. 메타데이터가 일치해야 합니다.
Canonical URL
각 현지화된 페이지가 자체 선호 URL을 가리키도록 하세요.
hreflang
실제 언어 또는 지역 버전마다 hreflang으로 연결하세요.
x-default
중립 선택기 또는 전역 대체용으로 x-default를 사용하세요.
BreadcrumbList
스키마가 보이는 경로 계층과 일치하도록 빵 부스러기를 문화 인식 상태로 유지하세요.
관련 참고 자료
메타데이터와 스키마는 동일한 내용을 전달해야 합니다
메타데이터 및 구조화된 데이터를 추가할 때 이 가이드를 사용하세요.
구현
경로 규칙을 작은 단위로 구축하세요
하나의 서비스, 하나의 리디렉션, 하나의 경로 패턴으로 시작하세요.
문화 서비스 계약
지원되는 문화 및 URL 구문 분석을 중앙 집중화하세요.
public sealed class CultureRouteService
{
private static readonly string[] SupportedCultures = ["en-us", "en-gb", "de-de"];
public string ResolveCulture(string? routeCulture)
{
if (SupportedCultures.Contains(routeCulture, StringComparer.OrdinalIgnoreCase))
{
return routeCulture!.ToLowerInvariant();
}
return "en-us";
}
}문화 리디렉션 엔드포인트
쿠키를 설정한 후 문화 경로로 돌아갑니다.
[Route("culture")]
public sealed class CultureController : Controller
{
[HttpGet("set")]
public IActionResult Set(string culture, string returnUrl)
{
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)));
return LocalRedirect(returnUrl);
}
}프로그램 설정
컨트롤러 경로를 매핑하기 전에 로컬라이제이션을 등록하세요.
builder.Services.AddLocalization();
builder.Services.AddScoped<CultureRouteService>();
app.UseRequestLocalization(options =>
{
options.SetDefaultCulture("en-us");
options.AddSupportedCultures("en-us", "en-gb", "de-de");
options.AddSupportedUICultures("en-us", "en-gb", "de-de");
});
app.MapControllers();페이지 경로
모든 공개 경로에 문화 세그먼트를 포함하세요.
@page "/{Culture}/pricing/"
<a href="@BuildCultureLink(PageLinks.Blazor)">
Blazor guides
</a>경로 현실
Blazor는 콘텐츠를 현지화할 수 있지만 경로 템플릿은 현지화하지 않습니다
문화 세그먼트는 변경되지만 슬러그는 안정적으로 유지됩니다. 번역된 슬러그는 자체 라우팅 계층이 필요합니다.
Razor @page 경로는 리터럴 템플릿을 사용합니다. 현지화는 페이지 텍스트만 번역합니다. PageLinks와 @page 문자열은 코드 소유 상태를 유지합니다.
/de-de/seo-friendly-culture-links-in-blazor/
문화만 변경됩니다.
/de-de/seo-freundliche-culture-links-in-blazor/
번역된 슬러그는 슬러그 테이블이 필요합니다. 이들은 또한 리디렉션, canonical, 사이트맵 및 hreflang이 필요합니다.
BuildCultureLink(PageLinks.Blazor)
BuildCultureLink는 슬러그가 아닌 문화를 변경합니다.
일반적인 실수
대부분의 문화 URL 버그는 라우팅 불일치입니다
경로 템플릿은 거의 어려운 부분이 아닙니다.
언어 변경 후 모든 신호를 일치시키세요.
유효한 문화를 영원히 리디렉션하지 마세요.
문화를 한 번 정규화한 후 경로가 이미 일치하면 중지하세요.
기본 문화를 늦게 추측하지 마세요.
라우팅, 메타데이터, 사이트맵, 대체 로직에 하나의 기본 문화를 사용하세요.
두 페이지가 동일한 문화 슬러그를 소유하지 않도록 하세요.
중앙 페이지 링크는 우발적인 경로 충돌을 검토하기 쉽게 만듭니다.
클라이언트 전용 상태에서 언어 경로를 숨기지 마세요.
크롤러와 사용자는 Blazor가 인터랙티브해지기 전에 실제 href 값을 필요로 합니다.
- 지원하는 각 문화마다 최소 하나의 URL을 열어 두세요.
- 렌더링된 소스에서 canonical 및 hreflang 태그를 확인하세요.
- FAQ 스키마가 보이는 질문과 답변과 일치하는지 확인하세요.
- 지원하지 않는 문화가 루프에 빠지지 않도록 리디렉션을 크롤링하세요.
- 번역된 제목, 설명, H1 텍스트 및 키워드를 검토하세요.
자주 묻는 질문
문화별 URL이 쿠키보다 SEO에 더 좋나요?
예. 문화별 URL은 크롤링 가능하고 공유 가능한 페이지를 만듭니다.
언어와 지역의 차이는 무엇인가요?
언어는 텍스트를 제어하고, 지역은 현지 예시와 제안을 제어합니다.
문화별 경로를 사용할 때도 hreflang이 필요한가요?
예. 문화별 경로는 URL을 명확하게 만들고 hreflang은 이를 연결합니다.
현지화된 페이지에서 canonical은 무엇을 가리켜야 하나요?
보통 canonical은 동일한 현지화된 페이지를 가리킵니다.
리디렉션 루프를 어떻게 피하나요?
지원하지 않는 문화는 한 번 리디렉션한 후 중지하세요.