Blazorのローカリゼーション
BlazorでSEOに強いカルチャーURLを構築する
/en-us/page-name/ のルートを使って直接アクセスします。
目標は単なる翻訳テキストではなく、安定したURLシステムです。
重要な理由
カルチャーURLはユーザーとクローラーが適切なページを選ぶのに役立ちます
リクエスト後にクッキーで言語を変更できます。
URLは共有、クロール、インデックス、キャッシュ、監査が可能です。
カルチャールートは公開記事、製品ページ、ドキュメント、ツールに適しています。
目次
基本概念
言語、地域、ルート、コンテンツバージョンを分離する
ルーティングコードを書く前にこれらの用語を分けておきましょう。
読みやすいテキストには言語を使います。
英語、ドイツ語、フランス語が言語の選択肢です。
地域はローカルな意図に使います。
en-us と en-gb ではスペル、例、オファーが異なる場合があります。
発見のためにルートを使います。
/de-de/blazor/ のようなルートは誰にとっても安定したアドレスを提供します。
意図が異なる場合はコンテンツを使用してください。
法的注意事項、価格、または例が異なる場合は別バージョンを作成してください。
SEOシグナル
カルチャールートをCanonical URLとhreflangルールに連携させる
URLは一つのシグナルに過ぎません。メタデータも一致させる必要があります。
Canonical URL
各ローカライズページをそれぞれの優先URLに向けてください。
hreflang
実際の言語または地域ごとのバージョンをすべてhreflangでリンクしてください。
x-default
中立的なセレクターやグローバルフォールバックにはx-defaultを使用してください。
BreadcrumbList
パンくずリストは文化に対応させ、スキーマが表示されるルート階層と一致するようにしてください。
関連リファレンス
メタデータとスキーマは同じ内容を伝えなければなりません
メタデータと構造化データを追加する際は、これらのガイドを参照してください。
実装
ルートルールを小さな単位で構築する
まずは1つのサービス、1つのリダイレクト、1つのルートパターンから始めましょう。
カルチャーサービス契約
サポートされているカルチャーと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(PageRegistryKey.Blazor)">
Blazor guides
</a>ルートの現実
Blazorはコンテンツをローカライズできますが、ルートテンプレートはできません
カルチャーセグメントは変わり、スラッグは安定しています。 翻訳されたスラッグには独自のルーティング層が必要です。
Razorの@pageルートはリテラルテンプレートを使用します。 ローカリゼーションはページテキストのみを翻訳します。 PageRegistryと@page文字列はコード管理のままです。
/de-de/seo-friendly-culture-links-in-blazor/
カルチャーだけが変わります。
/de-de/seo-freundliche-culture-links-in-blazor/
翻訳されたスラッグにはスラッグテーブルが必要です。 それらにはリダイレクト、canonical、サイトマップ、hreflangも必要です。
BuildCultureLink(PageRegistryKey.Blazor)
BuildCultureLinkはカルチャーを変えますが、スラッグは変えません。
よくある間違い
ほとんどのカルチャーURLのバグはルーティングの不一致です
ルートテンプレートはめったに難しい部分ではありません。
言語変更後はすべてのシグナルを整合させてください。
有効なカルチャーを永遠にリダイレクトしないでください。
カルチャーを一度正規化し、ルートが既に一致している場合は停止してください。
遅い段階でデフォルトカルチャーを推測しないでください。
ルーティング、メタデータ、サイトマップ、およびフォールバックロジックには1つのデフォルトカルチャーを使用してください。
同じカルチャースラッグを2つのページに所有させないでください。
中央のページリンクは偶発的なルート衝突のレビューを容易にします。
クライアント専用の状態で言語ルートを隠さないでください。
クローラーとユーザーはBlazorがインタラクティブになる前に実際のhref値を必要とします。
- サポートされている各カルチャーに対して少なくとも1つのURLを開いてください。
- レンダリングされたソースでcanonicalおよびhreflangタグを確認してください。
- FAQスキーマが表示される質問と回答に一致していることを確認してください。
- サポートされていないカルチャーがループしないようにリダイレクトをクロールしてください。
- 翻訳されたタイトル、説明、H1テキスト、キーワードを確認してください。
よくある質問
SEOにおいて、カルチャーURLはクッキーより優れていますか?
はい。カルチャーURLはクロール可能で共有しやすいページを作成します。
言語と言語圏の違いは何ですか?
言語はテキストを制御し、言語圏は地域の例やオファーを制御します。
カルチャールートを使う場合でもhreflangは必要ですか?
はい。カルチャールートはURLを明確にし、hreflangはそれらを関連付けます。
ローカライズされたページのcanonicalは何を指すべきですか?
通常、canonicalは同じローカライズされたページを指します。
リダイレクトループを避けるには?
サポートされていないカルチャーは一度リダイレクトし、その後停止します。