Lightning Blog
Blazor記事イメージ画像

【Blazor】 ページごとにカスタムヘッダーを追加する方法

更新日:2024/06/18
この記事では、Blazor Server(.NET6以降)を使って、ページごとに<head>タグ内に要素を追加する方法について解説します。

    目次

  • HeadContentコンポーネントの導入確認
  • HeadContentコンポーネントの使い方
  • まとめ

HeadContentコンポーネントの導入確認

セクション画像

ページごとに<head>タグへ要素を追加するには、 HeadContentコンポーネントを使用する必要があります。 HeadContentコンポーネントが導入されているかを確認するために、_Layout.cshtmlを見てみましょう。


@using Microsoft.AspNetCore.Components.Web
@namespace Blazor_HeadOutlet.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <base href="~/" />
    <link rel="stylesheet" href="css/bootstrap/bootstrap.min.css" />
    <link href="css/site.css" rel="stylesheet" />
    <link href="Blazor_HeadOutlet.styles.css" rel="stylesheet" />
    <component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />
</head>
<body>
    @RenderBody()

    <div id="blazor-error-ui">
        <environment include="Staging,Production">
            An error has occurred. This application may no longer respond until reloaded.
        </environment>
        <environment include="Development">
            An unhandled exception has occurred. See browser dev tools for details.
        </environment>
        <a href="" class="reload">Reload</a>
        <a class="dismiss">🗙</a>
    </div>

    <script src="_framework/blazor.server.js"></script>
</body>
</html>

14行目に<component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />という記述があります。 この部分がHeadContentコンポーネントの導入箇所です。

この導入箇所がアプリ実行した場合に、各ページで指定した要素に置き換わります。

.NET6以降のBlazor Serverプロジェクトでは、14行目のコードは、デフォルトで記載されています。 記載がない場合はコードを適宜追加してください。


HeadContentコンポーネントの使い方

セクション画像

以下は今回のサンプルコードになります。既存のPages/Index.razorのコードに追記しています。


@page "/"

<PageTitle>PageTitleテスト</PageTitle>

<HeadContent>
    @* HeadContentによって、追加された要素 *@
    <meta name="description" content="HeadContentで追加された要素" />
</HeadContent>

<h1>Hello, world!</h1>

Welcome to your new app.

<SurveyPrompt Title="How is Blazor working for you?" />

ページごとに<head>タグに追加する場合は、HeadContentコンポーネント内に記載しています(13行目)。 このタグの中に書いた内容が、そのまま<head>タグ内へ出力されます。

ページごとに<title>タグを追加したい場合は、PageTitleコンポーネントを指定します(3行目)。 PageTitleコンポーネントは、HeadContentコンポーネントが使用できる場合のみ利用できます。 <title>タグを追加すると、ブラウザに表示されるタブに記載されているタイトルを変更することができます。

ページタイトル

実際に実行してみると、前セクションで説明したPages/_Layout.cshtml<component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />が、 Pages/Index.razorHeadContentPageTitleで記載した内容に置換されていることが確認できます。

開発ツールを使って、赤枠部分が追加されていることを確認してみてください。

動作確認

まとめ

セクション画像
ページごとに<head>タグ内に要素を追加する方法について解説しました。 ページごとにタイトルを変えたい場合やSEO対策にタグを埋め込みたい場合などに使用できますので、 機会があれば、使ってみてください。
ブログ内の記事で書かれているサンプルコードは、GitHubから確認する事ができます。 是非参考にしてみてください。

この本では、Blazorの基本から高度なテクニックまで、実際のプロジェクトに役立つ知識を網羅しています。 初心者から経験者まで、Blazorを扱うすべての開発者にとっての必読書です。 この記事の執筆者も参考にした「Blazor入門」で、あなたのBlazorスキルを飛躍的に向上させませんか?

合わせて読みたい

カード画像
ホットリロードの使い方

Blazorのホットリロード機能を活用すると、ソースコードの変更をブラウザへ自動的に反映することができ、開発の生産性が大幅に向上します。通常のデバッグでは繁重なビルドプロセスが必要だが、ホットリロードを使えば短時間で変更を確認できる。この記事では、Blazorのカウンターページを例に、コード変更後のホットリロードの手順と効果を実際に示しています。

更新日:2023/07/19

An error has occurred. This application may no longer respond until reloaded. Reload 🗙